From cf0d73b1ac2a575bf932ea4d7cbf217c6d7987d8 Mon Sep 17 00:00:00 2001 From: TrudeEH Date: Thu, 25 Apr 2024 13:34:18 +0100 Subject: [PATCH] Fix extensions --- .../.vscode-oss/extensions/extensions.json | 2 +- .../.github/FUNDING.yml | 12 + .../.vsixmanifest | 42 + .../LICENSE.txt | 21 + .../README.md | 114 + .../assets/example.png | Bin 0 -> 125386 bytes .../assets/icon.png | Bin 0 -> 11086 bytes .../build/web-extension.webpack.config.js | 59 + .../dist/web/extension.js | 1 + .../node_modules/@koa/router/LICENSE | 22 + .../node_modules/@koa/router/README.md | 55 + .../node_modules/@koa/router/history.md | 157 + .../node_modules/@koa/router/lib/API_tpl.hbs | 7 + .../node_modules/@koa/router/lib/layer.js | 238 + .../node_modules/@koa/router/lib/router.js | 753 + .../node_modules/@koa/router/package.json | 85 + .../@tootallnate/once/dist/index.js | 39 + .../@tootallnate/once/package.json | 79 + .../node_modules/@types/node/LICENSE | 21 + .../node_modules/@types/node/README.md | 16 + .../node_modules/@types/node/package.json | 203 + .../node_modules/@types/yauzl/LICENSE | 21 + .../node_modules/@types/yauzl/README.md | 16 + .../node_modules/@types/yauzl/package.json | 59 + .../@vscode/test-web/CHANGELOG.md | 7 + .../node_modules/@vscode/test-web/LICENSE | 21 + .../node_modules/@vscode/test-web/README.md | 90 + .../@vscode/test-web/out/index.js | 163 + .../@vscode/test-web/out/server/app.js | 36 + .../@vscode/test-web/out/server/download.js | 151 + .../@vscode/test-web/out/server/extensions.js | 45 + .../@vscode/test-web/out/server/main.js | 15 + .../@vscode/test-web/out/server/workbench.js | 138 + .../@vscode/test-web/package.json | 93 + .../@vscode/test-web/views/workbench.html | 57 + .../node_modules/accepts/HISTORY.md | 236 + .../node_modules/accepts/LICENSE | 23 + .../node_modules/accepts/README.md | 142 + .../node_modules/accepts/index.js | 238 + .../node_modules/accepts/package.json | 89 + .../node_modules/agent-base/README.md | 145 + .../node_modules/agent-base/dist/src/index.js | 203 + .../agent-base/dist/src/promisify.js | 18 + .../node_modules/agent-base/package.json | 98 + .../node_modules/any-promise/.jshintrc | 4 + .../node_modules/any-promise/.npmignore | 7 + .../node_modules/any-promise/LICENSE | 19 + .../node_modules/any-promise/README.md | 161 + .../any-promise/implementation.js | 1 + .../node_modules/any-promise/index.js | 1 + .../node_modules/any-promise/loader.js | 78 + .../node_modules/any-promise/optional.js | 6 + .../node_modules/any-promise/package.json | 75 + .../node_modules/any-promise/register-shim.js | 18 + .../node_modules/any-promise/register.js | 94 + .../any-promise/register/bluebird.js | 2 + .../any-promise/register/es6-promise.js | 2 + .../node_modules/any-promise/register/lie.js | 2 + .../register/native-promise-only.js | 2 + .../any-promise/register/pinkie.js | 2 + .../any-promise/register/promise.js | 2 + .../node_modules/any-promise/register/q.js | 2 + .../node_modules/any-promise/register/rsvp.js | 2 + .../node_modules/any-promise/register/vow.js | 2 + .../node_modules/any-promise/register/when.js | 2 + .../balanced-match/.github/FUNDING.yml | 2 + .../node_modules/balanced-match/LICENSE.md | 21 + .../node_modules/balanced-match/README.md | 97 + .../node_modules/balanced-match/index.js | 62 + .../node_modules/balanced-match/package.json | 79 + .../node_modules/base64-js/LICENSE | 21 + .../node_modules/base64-js/README.md | 34 + .../node_modules/base64-js/base64js.min.js | 1 + .../node_modules/base64-js/index.js | 150 + .../node_modules/base64-js/package.json | 78 + .../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 | 76 + .../node_modules/bl/.jshintrc | 59 + .../node_modules/bl/.travis.yml | 13 + .../node_modules/bl/LICENSE.md | 13 + .../node_modules/bl/README.md | 208 + .../node_modules/bl/bl.js | 290 + .../node_modules/bl/package.json | 66 + .../node_modules/bl/test/test.js | 718 + .../node_modules/brace-expansion/LICENSE | 21 + .../node_modules/brace-expansion/README.md | 129 + .../node_modules/brace-expansion/index.js | 201 + .../node_modules/brace-expansion/package.json | 79 + .../node_modules/buffer-alloc-unsafe/index.js | 17 + .../buffer-alloc-unsafe/package.json | 60 + .../buffer-alloc-unsafe/readme.md | 46 + .../node_modules/buffer-alloc/index.js | 32 + .../node_modules/buffer-alloc/package.json | 62 + .../node_modules/buffer-alloc/readme.md | 43 + .../node_modules/buffer-crc32/LICENSE | 19 + .../node_modules/buffer-crc32/README.md | 47 + .../node_modules/buffer-crc32/index.js | 111 + .../node_modules/buffer-crc32/package.json | 73 + .../node_modules/buffer-fill/index.js | 113 + .../node_modules/buffer-fill/package.json | 52 + .../node_modules/buffer-fill/readme.md | 54 + .../node_modules/buffer/AUTHORS.md | 70 + .../node_modules/buffer/LICENSE | 21 + .../node_modules/buffer/README.md | 410 + .../node_modules/buffer/index.js | 1817 ++ .../node_modules/buffer/package.json | 130 + .../cache-content-type/History.md | 15 + .../node_modules/cache-content-type/README.md | 17 + .../node_modules/cache-content-type/index.js | 15 + .../cache-content-type/package.json | 76 + .../node_modules/co/History.md | 172 + .../node_modules/co/LICENSE | 22 + .../node_modules/co/Readme.md | 212 + .../node_modules/co/index.js | 237 + .../node_modules/co/package.json | 69 + .../node_modules/commander/CHANGELOG.md | 361 + .../node_modules/commander/LICENSE | 22 + .../node_modules/commander/Readme.md | 791 + .../node_modules/commander/index.js | 1881 ++ .../node_modules/commander/package.json | 86 + .../node_modules/concat-map/.travis.yml | 4 + .../node_modules/concat-map/LICENSE | 18 + .../node_modules/concat-map/README.markdown | 62 + .../node_modules/concat-map/example/map.js | 6 + .../node_modules/concat-map/index.js | 13 + .../node_modules/concat-map/package.json | 91 + .../node_modules/concat-map/test/map.js | 39 + .../content-disposition/HISTORY.md | 55 + .../node_modules/content-disposition/LICENSE | 22 + .../content-disposition/README.md | 148 + .../node_modules/content-disposition/index.js | 458 + .../content-disposition/package.json | 82 + .../node_modules/content-type/HISTORY.md | 24 + .../node_modules/content-type/LICENSE | 22 + .../node_modules/content-type/README.md | 92 + .../node_modules/content-type/index.js | 222 + .../node_modules/content-type/package.json | 78 + .../node_modules/cookies/HISTORY.md | 121 + .../node_modules/cookies/LICENSE | 23 + .../node_modules/cookies/README.md | 145 + .../node_modules/cookies/index.js | 224 + .../cookies/node_modules/depd/History.md | 103 + .../cookies/node_modules/depd/LICENSE | 22 + .../cookies/node_modules/depd/Readme.md | 280 + .../cookies/node_modules/depd/index.js | 538 + .../node_modules/depd/lib/browser/index.js | 77 + .../cookies/node_modules/depd/package.json | 83 + .../node_modules/cookies/package.json | 80 + .../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 | 71 + .../node_modules/debug/LICENSE | 20 + .../node_modules/debug/README.md | 478 + .../node_modules/debug/package.json | 118 + .../node_modules/debug/src/browser.js | 269 + .../node_modules/debug/src/common.js | 274 + .../node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/node.js | 263 + .../node_modules/decompress-tar/index.js | 59 + .../node_modules/decompress-tar/license | 9 + .../node_modules/decompress-tar/package.json | 75 + .../node_modules/decompress-tar/readme.md | 44 + .../node_modules/decompress-tarbz2/index.js | 22 + .../node_modules/decompress-tarbz2/license | 9 + .../node_modules/file-type/index.js | 599 + .../node_modules/file-type/license | 9 + .../node_modules/file-type/package.json | 145 + .../node_modules/file-type/readme.md | 165 + .../decompress-tarbz2/package.json | 77 + .../node_modules/decompress-tarbz2/readme.md | 44 + .../node_modules/decompress-targz/index.js | 26 + .../node_modules/decompress-targz/license | 9 + .../decompress-targz/package.json | 75 + .../node_modules/decompress-targz/readme.md | 44 + .../node_modules/decompress-unzip/index.js | 86 + .../node_modules/decompress-unzip/license | 21 + .../node_modules/file-type/index.js | 452 + .../node_modules/file-type/license | 21 + .../node_modules/file-type/package.json | 138 + .../node_modules/file-type/readme.md | 149 + .../decompress-unzip/package.json | 76 + .../node_modules/decompress-unzip/readme.md | 42 + .../node_modules/decompress/index.js | 151 + .../node_modules/decompress/license | 9 + .../node_modules/decompress/package.json | 96 + .../node_modules/decompress/readme.md | 105 + .../node_modules/deep-equal/.travis.yml | 8 + .../node_modules/deep-equal/LICENSE | 18 + .../node_modules/deep-equal/example/cmp.js | 11 + .../node_modules/deep-equal/index.js | 94 + .../deep-equal/lib/is_arguments.js | 20 + .../node_modules/deep-equal/lib/keys.js | 9 + .../node_modules/deep-equal/package.json | 90 + .../node_modules/deep-equal/readme.markdown | 61 + .../node_modules/deep-equal/test/cmp.js | 95 + .../node_modules/delegates/.npmignore | 1 + .../node_modules/delegates/History.md | 22 + .../node_modules/delegates/License | 20 + .../node_modules/delegates/Makefile | 8 + .../node_modules/delegates/Readme.md | 94 + .../node_modules/delegates/index.js | 121 + .../node_modules/delegates/package.json | 51 + .../node_modules/delegates/test/index.js | 94 + .../node_modules/depd/History.md | 96 + .../node_modules/depd/LICENSE | 22 + .../node_modules/depd/Readme.md | 280 + .../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 | 80 + .../node_modules/destroy/LICENSE | 22 + .../node_modules/destroy/README.md | 60 + .../node_modules/destroy/index.js | 75 + .../node_modules/destroy/package.json | 74 + .../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 | 66 + .../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 | 78 + .../node_modules/end-of-stream/LICENSE | 21 + .../node_modules/end-of-stream/README.md | 54 + .../node_modules/end-of-stream/index.js | 94 + .../node_modules/end-of-stream/package.json | 69 + .../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 | 59 + .../node_modules/extract-zip/LICENSE | 23 + .../node_modules/extract-zip/cli.js | 19 + .../node_modules/extract-zip/index.js | 173 + .../node_modules/get-stream/buffer-stream.js | 52 + .../node_modules/get-stream/index.js | 60 + .../node_modules/get-stream/license | 9 + .../node_modules/get-stream/package.json | 85 + .../node_modules/get-stream/readme.md | 124 + .../node_modules/extract-zip/package.json | 120 + .../node_modules/extract-zip/readme.md | 57 + .../node_modules/fd-slicer/.npmignore | 2 + .../node_modules/fd-slicer/.travis.yml | 7 + .../node_modules/fd-slicer/CHANGELOG.md | 49 + .../node_modules/fd-slicer/LICENSE | 21 + .../node_modules/fd-slicer/README.md | 199 + .../node_modules/fd-slicer/index.js | 296 + .../node_modules/fd-slicer/package.json | 68 + .../node_modules/fd-slicer/test/test.js | 350 + .../node_modules/file-type/index.js | 559 + .../node_modules/file-type/license | 21 + .../node_modules/file-type/package.json | 145 + .../node_modules/file-type/readme.md | 156 + .../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 | 92 + .../node_modules/fs-constants/LICENSE | 21 + .../node_modules/fs-constants/README.md | 26 + .../node_modules/fs-constants/browser.js | 1 + .../node_modules/fs-constants/index.js | 1 + .../node_modules/fs-constants/package.json | 50 + .../node_modules/fs.realpath/LICENSE | 43 + .../node_modules/fs.realpath/README.md | 33 + .../node_modules/fs.realpath/index.js | 66 + .../node_modules/fs.realpath/old.js | 303 + .../node_modules/fs.realpath/package.json | 62 + .../node_modules/get-stream/buffer-stream.js | 54 + .../node_modules/get-stream/index.js | 59 + .../node_modules/get-stream/license | 21 + .../node_modules/get-stream/package.json | 84 + .../node_modules/get-stream/readme.md | 115 + .../node_modules/glob/LICENSE | 21 + .../node_modules/glob/README.md | 378 + .../node_modules/glob/common.js | 236 + .../node_modules/glob/glob.js | 787 + .../node_modules/glob/package.json | 91 + .../node_modules/glob/sync.js | 483 + .../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 | 429 + .../graceful-fs/legacy-streams.js | 118 + .../node_modules/graceful-fs/package.json | 88 + .../node_modules/graceful-fs/polyfills.js | 346 + .../node_modules/has-symbols/.eslintignore | 1 + .../node_modules/has-symbols/.eslintrc | 11 + .../has-symbols/.github/FUNDING.yml | 12 + .../node_modules/has-symbols/.nycrc | 13 + .../node_modules/has-symbols/CHANGELOG.md | 58 + .../node_modules/has-symbols/LICENSE | 21 + .../node_modules/has-symbols/README.md | 40 + .../node_modules/has-symbols/index.js | 13 + .../node_modules/has-symbols/package.json | 128 + .../node_modules/has-symbols/shams.js | 42 + .../node_modules/has-symbols/test/index.js | 22 + .../has-symbols/test/shams/core-js.js | 28 + .../test/shams/get-own-property-symbols.js | 28 + .../node_modules/has-symbols/test/tests.js | 56 + .../node_modules/has-tostringtag/.eslintrc | 11 + .../has-tostringtag/.github/FUNDING.yml | 12 + .../node_modules/has-tostringtag/CHANGELOG.md | 20 + .../node_modules/has-tostringtag/LICENSE | 21 + .../node_modules/has-tostringtag/README.md | 46 + .../node_modules/has-tostringtag/index.js | 7 + .../node_modules/has-tostringtag/package.json | 112 + .../node_modules/has-tostringtag/shams.js | 7 + .../has-tostringtag/test/index.js | 21 + .../has-tostringtag/test/shams/core-js.js | 28 + .../test/shams/get-own-property-symbols.js | 28 + .../has-tostringtag/test/tests.js | 14 + .../node_modules/http-assert/HISTORY.md | 79 + .../node_modules/http-assert/LICENSE | 22 + .../node_modules/http-assert/README.md | 116 + .../node_modules/http-assert/index.js | 41 + .../node_modules/http-assert/package.json | 76 + .../node_modules/http-errors/HISTORY.md | 160 + .../node_modules/http-errors/LICENSE | 23 + .../node_modules/http-errors/README.md | 171 + .../node_modules/http-errors/index.js | 299 + .../node_modules/http-errors/package.json | 97 + .../node_modules/http-proxy-agent/README.md | 74 + .../http-proxy-agent/dist/agent.js | 145 + .../http-proxy-agent/dist/index.js | 14 + .../http-proxy-agent/package.json | 91 + .../node_modules/https-proxy-agent/README.md | 137 + .../https-proxy-agent/dist/agent.js | 180 + .../https-proxy-agent/dist/index.js | 14 + .../dist/parse-proxy-response.js | 66 + .../https-proxy-agent/package.json | 91 + .../node_modules/ieee754/LICENSE | 11 + .../node_modules/ieee754/README.md | 51 + .../node_modules/ieee754/index.js | 85 + .../node_modules/ieee754/package.json | 87 + .../node_modules/inflight/LICENSE | 15 + .../node_modules/inflight/README.md | 37 + .../node_modules/inflight/inflight.js | 54 + .../node_modules/inflight/package.json | 61 + .../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 | 67 + .../is-generator-function/.eslintignore | 1 + .../is-generator-function/.eslintrc | 9 + .../node_modules/is-generator-function/.nvmrc | 1 + .../node_modules/is-generator-function/.nycrc | 9 + .../is-generator-function/CHANGELOG.md | 216 + .../is-generator-function/LICENSE | 20 + .../is-generator-function/README.md | 40 + .../is-generator-function/index.js | 38 + .../is-generator-function/package.json | 119 + .../is-generator-function/test/corejs.js | 5 + .../is-generator-function/test/index.js | 83 + .../is-generator-function/test/uglified.js | 8 + .../node_modules/is-natural-number/LICENSE | 20 + .../node_modules/is-natural-number/README.md | 76 + .../node_modules/is-natural-number/index.js | 31 + .../is-natural-number/index.jsnext.js | 29 + .../is-natural-number/package.json | 77 + .../node_modules/is-stream/index.js | 21 + .../node_modules/is-stream/license | 21 + .../node_modules/is-stream/package.json | 75 + .../node_modules/is-stream/readme.md | 42 + .../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 | 76 + .../node_modules/isarray/test.js | 20 + .../node_modules/jpeg-js/.travis.yml | 6 + .../node_modules/jpeg-js/CONTRIBUTING.md | 27 + .../node_modules/jpeg-js/LICENSE | 25 + .../node_modules/jpeg-js/README.md | 176 + .../node_modules/jpeg-js/index.js | 7 + .../node_modules/jpeg-js/lib/decoder.js | 1138 ++ .../node_modules/jpeg-js/lib/encoder.js | 799 + .../node_modules/jpeg-js/package.json | 64 + .../node_modules/keygrip/HISTORY.md | 25 + .../node_modules/keygrip/LICENSE | 21 + .../node_modules/keygrip/README.md | 103 + .../node_modules/keygrip/index.js | 51 + .../node_modules/keygrip/package.json | 63 + .../node_modules/koa-compose/History.md | 60 + .../node_modules/koa-compose/Readme.md | 40 + .../node_modules/koa-compose/index.js | 48 + .../node_modules/koa-compose/package.json | 67 + .../node_modules/koa-convert/.npmignore | 1 + .../node_modules/koa-convert/.travis.yml | 5 + .../node_modules/koa-convert/LICENSE | 22 + .../node_modules/koa-convert/README.md | 136 + .../node_modules/koa-convert/index.js | 60 + .../node_modules/koa-compose/History.md | 50 + .../node_modules/koa-compose/Readme.md | 40 + .../node_modules/koa-compose/index.js | 52 + .../node_modules/koa-compose/package.json | 71 + .../node_modules/koa-convert/package.json | 71 + .../node_modules/koa-convert/test.js | 254 + .../node_modules/koa-morgan/History.md | 5 + .../node_modules/koa-morgan/LICENSE | 22 + .../node_modules/koa-morgan/README.md | 65 + .../node_modules/koa-morgan/index.js | 38 + .../node_modules/koa-morgan/package.json | 77 + .../node_modules/koa-mount/History.md | 64 + .../node_modules/koa-mount/Readme.md | 127 + .../node_modules/koa-mount/index.js | 94 + .../node_modules/koa-mount/package.json | 76 + .../node_modules/koa-send/History.md | 133 + .../node_modules/koa-send/LICENSE | 22 + .../node_modules/koa-send/README.md | 109 + .../node_modules/koa-send/index.js | 188 + .../node_modules/koa-send/package.json | 86 + .../node_modules/koa-static/History.md | 124 + .../node_modules/koa-static/Readme.md | 86 + .../node_modules/koa-static/index.js | 73 + .../node_modules/debug/CHANGELOG.md | 395 + .../koa-static/node_modules/debug/LICENSE | 19 + .../koa-static/node_modules/debug/README.md | 437 + .../koa-static/node_modules/debug/node.js | 1 + .../node_modules/debug/package.json | 93 + .../node_modules/debug/src/browser.js | 180 + .../node_modules/debug/src/common.js | 249 + .../node_modules/debug/src/index.js | 12 + .../koa-static/node_modules/debug/src/node.js | 177 + .../node_modules/koa-static/package.json | 79 + .../node_modules/koa/History.md | 648 + .../node_modules/koa/LICENSE | 22 + .../node_modules/koa/Readme.md | 289 + .../node_modules/koa/dist/koa.mjs | 4 + .../node_modules/koa/lib/application.js | 291 + .../node_modules/koa/lib/context.js | 251 + .../node_modules/koa/lib/request.js | 726 + .../node_modules/koa/lib/response.js | 586 + .../koa/node_modules/debug/.coveralls.yml | 1 + .../koa/node_modules/debug/.eslintrc | 14 + .../koa/node_modules/debug/.npmignore | 9 + .../koa/node_modules/debug/.travis.yml | 20 + .../koa/node_modules/debug/CHANGELOG.md | 395 + .../koa/node_modules/debug/LICENSE | 19 + .../koa/node_modules/debug/Makefile | 58 + .../koa/node_modules/debug/README.md | 368 + .../koa/node_modules/debug/karma.conf.js | 70 + .../koa/node_modules/debug/node.js | 1 + .../koa/node_modules/debug/package.json | 85 + .../koa/node_modules/debug/src/browser.js | 195 + .../koa/node_modules/debug/src/debug.js | 225 + .../koa/node_modules/debug/src/index.js | 10 + .../koa/node_modules/debug/src/node.js | 186 + .../koa/node_modules/depd/History.md | 103 + .../koa/node_modules/depd/LICENSE | 22 + .../koa/node_modules/depd/Readme.md | 280 + .../koa/node_modules/depd/index.js | 538 + .../node_modules/depd/lib/browser/index.js | 77 + .../koa/node_modules/depd/package.json | 83 + .../node_modules/koa/node_modules/ms/index.js | 152 + .../koa/node_modules/ms/license.md | 21 + .../koa/node_modules/ms/package.json | 72 + .../koa/node_modules/ms/readme.md | 51 + .../node_modules/koa/package.json | 113 + .../node_modules/make-dir/index.js | 85 + .../node_modules/make-dir/license | 9 + .../make-dir/node_modules/pify/index.js | 84 + .../make-dir/node_modules/pify/license | 9 + .../make-dir/node_modules/pify/package.json | 86 + .../make-dir/node_modules/pify/readme.md | 131 + .../node_modules/make-dir/package.json | 89 + .../node_modules/make-dir/readme.md | 116 + .../node_modules/media-typer/HISTORY.md | 22 + .../node_modules/media-typer/LICENSE | 22 + .../node_modules/media-typer/README.md | 81 + .../node_modules/media-typer/index.js | 270 + .../node_modules/media-typer/package.json | 64 + .../node_modules/methods/HISTORY.md | 29 + .../node_modules/methods/LICENSE | 24 + .../node_modules/methods/README.md | 51 + .../node_modules/methods/index.js | 69 + .../node_modules/methods/package.json | 82 + .../node_modules/mime-db/HISTORY.md | 486 + .../node_modules/mime-db/LICENSE | 22 + .../node_modules/mime-db/README.md | 100 + .../node_modules/mime-db/db.json | 8417 ++++++++ .../node_modules/mime-db/index.js | 11 + .../node_modules/mime-db/package.json | 105 + .../node_modules/mime-types/HISTORY.md | 378 + .../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 | 93 + .../node_modules/mime/CHANGELOG.md | 289 + .../node_modules/mime/LICENSE | 21 + .../node_modules/mime/Mime.js | 97 + .../node_modules/mime/README.md | 187 + .../node_modules/mime/cli.js | 46 + .../node_modules/mime/index.js | 4 + .../node_modules/mime/lite.js | 4 + .../node_modules/mime/package.json | 84 + .../node_modules/mime/types/other.js | 1 + .../node_modules/mime/types/standard.js | 1 + .../node_modules/minimatch/LICENSE | 15 + .../node_modules/minimatch/README.md | 209 + .../node_modules/minimatch/minimatch.js | 923 + .../node_modules/minimatch/package.json | 69 + .../node_modules/minimist/.travis.yml | 8 + .../node_modules/minimist/LICENSE | 18 + .../node_modules/minimist/example/parse.js | 2 + .../node_modules/minimist/index.js | 249 + .../node_modules/minimist/package.json | 77 + .../node_modules/minimist/readme.markdown | 98 + .../node_modules/minimist/test/all_bool.js | 32 + .../node_modules/minimist/test/bool.js | 178 + .../node_modules/minimist/test/dash.js | 31 + .../minimist/test/default_bool.js | 35 + .../node_modules/minimist/test/dotted.js | 22 + .../node_modules/minimist/test/kv_short.js | 16 + .../node_modules/minimist/test/long.js | 31 + .../node_modules/minimist/test/num.js | 36 + .../node_modules/minimist/test/parse.js | 197 + .../minimist/test/parse_modified.js | 9 + .../node_modules/minimist/test/proto.js | 60 + .../node_modules/minimist/test/short.js | 67 + .../node_modules/minimist/test/stop_early.js | 15 + .../node_modules/minimist/test/unknown.js | 102 + .../node_modules/minimist/test/whitespace.js | 8 + .../node_modules/morgan/HISTORY.md | 215 + .../node_modules/morgan/LICENSE | 23 + .../node_modules/morgan/README.md | 417 + .../node_modules/morgan/index.js | 544 + .../morgan/node_modules/debug/.coveralls.yml | 1 + .../morgan/node_modules/debug/.eslintrc | 11 + .../morgan/node_modules/debug/.npmignore | 9 + .../morgan/node_modules/debug/.travis.yml | 14 + .../morgan/node_modules/debug/CHANGELOG.md | 362 + .../morgan/node_modules/debug/LICENSE | 19 + .../morgan/node_modules/debug/Makefile | 50 + .../morgan/node_modules/debug/README.md | 312 + .../morgan/node_modules/debug/component.json | 19 + .../morgan/node_modules/debug/karma.conf.js | 70 + .../morgan/node_modules/debug/node.js | 1 + .../morgan/node_modules/debug/package.json | 91 + .../morgan/node_modules/debug/src/browser.js | 185 + .../morgan/node_modules/debug/src/debug.js | 202 + .../morgan/node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/inspector-log.js | 15 + .../morgan/node_modules/debug/src/node.js | 248 + .../morgan/node_modules/depd/History.md | 103 + .../morgan/node_modules/depd/LICENSE | 22 + .../morgan/node_modules/depd/Readme.md | 280 + .../morgan/node_modules/depd/index.js | 538 + .../node_modules/depd/lib/browser/index.js | 77 + .../morgan/node_modules/depd/package.json | 83 + .../morgan/node_modules/ms/index.js | 152 + .../morgan/node_modules/ms/license.md | 21 + .../morgan/node_modules/ms/package.json | 72 + .../morgan/node_modules/ms/readme.md | 51 + .../node_modules/morgan/package.json | 94 + .../node_modules/ms/index.js | 162 + .../node_modules/ms/license.md | 21 + .../node_modules/ms/package.json | 73 + .../node_modules/ms/readme.md | 60 + .../node_modules/negotiator/HISTORY.md | 103 + .../node_modules/negotiator/LICENSE | 24 + .../node_modules/negotiator/README.md | 203 + .../node_modules/negotiator/index.js | 124 + .../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 | 87 + .../node_modules/object-assign/index.js | 90 + .../node_modules/object-assign/license | 21 + .../node_modules/object-assign/package.json | 77 + .../node_modules/object-assign/readme.md | 61 + .../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 | 74 + .../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 | 80 + .../node_modules/once/LICENSE | 15 + .../node_modules/once/README.md | 79 + .../node_modules/once/once.js | 42 + .../node_modules/once/package.json | 72 + .../node_modules/only/.npmignore | 4 + .../node_modules/only/History.md | 5 + .../node_modules/only/Makefile | 7 + .../node_modules/only/Readme.md | 58 + .../node_modules/only/index.js | 10 + .../node_modules/only/package.json | 57 + .../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 | 82 + .../node_modules/path-is-absolute/index.js | 20 + .../node_modules/path-is-absolute/license | 21 + .../path-is-absolute/package.json | 79 + .../node_modules/path-is-absolute/readme.md | 59 + .../node_modules/path-to-regexp/History.md | 171 + .../node_modules/path-to-regexp/LICENSE | 21 + .../node_modules/path-to-regexp/Readme.md | 335 + .../path-to-regexp/dist.es2015/index.js | 398 + .../node_modules/path-to-regexp/dist/index.js | 408 + .../node_modules/path-to-regexp/package.json | 118 + .../node_modules/pend/LICENSE | 23 + .../node_modules/pend/README.md | 41 + .../node_modules/pend/index.js | 55 + .../node_modules/pend/package.json | 50 + .../node_modules/pend/test.js | 137 + .../node_modules/pify/index.js | 68 + .../node_modules/pify/license | 21 + .../node_modules/pify/package.json | 84 + .../node_modules/pify/readme.md | 119 + .../node_modules/pinkie-promise/index.js | 3 + .../node_modules/pinkie-promise/license | 21 + .../node_modules/pinkie-promise/package.json | 70 + .../node_modules/pinkie-promise/readme.md | 28 + .../node_modules/pinkie/index.js | 292 + .../node_modules/pinkie/license | 21 + .../node_modules/pinkie/package.json | 71 + .../node_modules/pinkie/readme.md | 83 + .../node_modules/playwright/LICENSE | 202 + .../node_modules/playwright/NOTICE | 5 + .../node_modules/playwright/README.md | 141 + .../node_modules/playwright/bin/PrintDeps.exe | Bin 0 -> 275456 bytes .../node_modules/playwright/bin/README.md | 2 + .../playwright/bin/android-driver-target.apk | Bin 0 -> 770013 bytes .../playwright/bin/android-driver.apk | Bin 0 -> 587818 bytes .../playwright/bin/install_media_pack.ps1 | 5 + .../bin/reinstall_chrome_beta_linux.sh | 27 + .../bin/reinstall_chrome_beta_mac.sh | 13 + .../bin/reinstall_chrome_beta_win.ps1 | 25 + .../bin/reinstall_chrome_stable_linux.sh | 28 + .../bin/reinstall_chrome_stable_mac.sh | 12 + .../bin/reinstall_chrome_stable_win.ps1 | 26 + .../bin/reinstall_msedge_beta_linux.sh | 27 + .../bin/reinstall_msedge_beta_mac.sh | 11 + .../bin/reinstall_msedge_beta_win.ps1 | 21 + .../bin/reinstall_msedge_dev_linux.sh | 27 + .../bin/reinstall_msedge_dev_mac.sh | 11 + .../bin/reinstall_msedge_dev_win.ps1 | 21 + .../bin/reinstall_msedge_stable_mac.sh | 11 + .../bin/reinstall_msedge_stable_win.ps1 | 21 + .../node_modules/playwright/browsers.json | 38 + .../node_modules/playwright/commitinfo | 1 + .../node_modules/playwright/index.js | 17 + .../node_modules/playwright/index.mjs | 27 + .../node_modules/playwright/install.js | 19 + .../playwright/lib/browserServerImpl.js | 187 + .../node_modules/playwright/lib/cli/cli.js | 549 + .../node_modules/playwright/lib/cli/driver.js | 94 + .../playwright/lib/client/accessibility.js | 53 + .../playwright/lib/client/android.js | 519 + .../node_modules/playwright/lib/client/api.js | 279 + .../playwright/lib/client/artifact.js | 103 + .../playwright/lib/client/browser.js | 146 + .../playwright/lib/client/browserContext.js | 487 + .../playwright/lib/client/browserType.js | 258 + .../playwright/lib/client/cdpSession.js | 65 + .../playwright/lib/client/channelOwner.js | 203 + .../playwright/lib/client/clientHelper.js | 164 + .../playwright/lib/client/connection.js | 369 + .../playwright/lib/client/consoleMessage.js | 64 + .../playwright/lib/client/coverage.js | 47 + .../playwright/lib/client/dialog.js | 62 + .../playwright/lib/client/download.js | 73 + .../playwright/lib/client/electron.js | 159 + .../playwright/lib/client/elementHandle.js | 392 + .../playwright/lib/client/events.js | 89 + .../playwright/lib/client/fetch.js | 166 + .../playwright/lib/client/fileChooser.js | 53 + .../playwright/lib/client/frame.js | 624 + .../playwright/lib/client/input.js | 151 + .../playwright/lib/client/jsHandle.js | 143 + .../playwright/lib/client/jsonPipe.js | 40 + .../playwright/lib/client/locator.js | 301 + .../playwright/lib/client/network.js | 661 + .../playwright/lib/client/page.js | 827 + .../playwright/lib/client/playwright.js | 177 + .../playwright/lib/client/selectors.js | 71 + .../playwright/lib/client/stream.js | 65 + .../playwright/lib/client/tracing.js | 74 + .../playwright/lib/client/types.js | 69 + .../playwright/lib/client/video.js | 63 + .../playwright/lib/client/waiter.js | 185 + .../playwright/lib/client/worker.js | 78 + .../playwright/lib/common/types.js | 5 + .../lib/dispatchers/androidDispatcher.js | 234 + .../lib/dispatchers/artifactDispatcher.js | 125 + .../dispatchers/browserContextDispatcher.js | 260 + .../lib/dispatchers/browserDispatcher.js | 87 + .../lib/dispatchers/browserTypeDispatcher.js | 112 + .../lib/dispatchers/cdpSessionDispatcher.js | 53 + .../dispatchers/consoleMessageDispatcher.js | 39 + .../lib/dispatchers/dialogDispatcher.js | 44 + .../playwright/lib/dispatchers/dispatcher.js | 405 + .../lib/dispatchers/electronDispatcher.js | 93 + .../dispatchers/elementHandlerDispatcher.js | 244 + .../lib/dispatchers/frameDispatcher.js | 296 + .../lib/dispatchers/jsHandleDispatcher.js | 110 + .../lib/dispatchers/jsonPipeDispatcher.js | 74 + .../lib/dispatchers/networkDispatchers.js | 265 + .../lib/dispatchers/pageDispatcher.js | 367 + .../lib/dispatchers/playwrightDispatcher.js | 189 + .../lib/dispatchers/selectorsDispatcher.js | 36 + .../lib/dispatchers/streamDispatcher.js | 65 + .../lib/generated/consoleApiSource.js | 8 + .../lib/generated/injectedScriptSource.js | 8 + .../lib/generated/recorderSource.js | 8 + .../lib/generated/utilityScriptSource.js | 8 + .../playwright/lib/grid/gridAgent.js | 49 + .../playwright/lib/grid/gridClient.js | 70 + .../playwright/lib/grid/gridServer.js | 445 + .../playwright/lib/grid/gridWorker.js | 60 + .../playwright/lib/grid/simpleGridFactory.js | 46 + .../node_modules/playwright/lib/inprocess.js | 54 + .../node_modules/playwright/lib/nativeDeps.js | 50 + .../playwright/lib/outofprocess.js | 88 + .../playwright/lib/protocol/callMetadata.js | 5 + .../playwright/lib/protocol/channels.js | 54 + .../playwright/lib/protocol/serializers.js | 200 + .../playwright/lib/protocol/transport.js | 96 + .../playwright/lib/protocol/validator.js | 1396 ++ .../lib/protocol/validatorPrimitives.js | 122 + .../playwright/lib/remote/playwrightClient.js | 80 + .../playwright/lib/remote/playwrightServer.js | 156 + .../playwright/lib/server/accessibility.js | 72 + .../playwright/lib/server/android/android.js | 479 + .../lib/server/android/backendAdb.js | 202 + .../playwright/lib/server/artifact.js | 123 + .../playwright/lib/server/browser.js | 118 + .../playwright/lib/server/browserContext.js | 509 + .../playwright/lib/server/browserType.js | 306 + .../lib/server/chromium/appIcon.png | Bin 0 -> 16565 bytes .../lib/server/chromium/chromium.js | 212 + .../lib/server/chromium/crAccessibility.js | 272 + .../playwright/lib/server/chromium/crApp.js | 33 + .../lib/server/chromium/crBrowser.js | 591 + .../lib/server/chromium/crConnection.js | 264 + .../lib/server/chromium/crCoverage.js | 295 + .../lib/server/chromium/crDevTools.js | 115 + .../lib/server/chromium/crDragDrop.js | 160 + .../lib/server/chromium/crExecutionContext.js | 184 + .../playwright/lib/server/chromium/crInput.js | 190 + .../lib/server/chromium/crNetworkManager.js | 771 + .../playwright/lib/server/chromium/crPage.js | 1271 ++ .../playwright/lib/server/chromium/crPdf.js | 158 + .../lib/server/chromium/crProtocolHelper.js | 129 + .../lib/server/chromium/videoRecorder.js | 174 + .../lib/server/common/componentUtils.js | 189 + .../playwright/lib/server/common/cssParser.js | 240 + .../lib/server/common/cssTokenizer.js | 950 + .../playwright/lib/server/common/domErrors.js | 5 + .../lib/server/common/protocolError.js | 37 + .../lib/server/common/selectorParser.js | 130 + .../server/common/utilityScriptSerializers.js | 166 + .../playwright/lib/server/console.js | 61 + .../lib/server/deviceDescriptors.js | 21 + .../lib/server/deviceDescriptorsSource.json | 1249 ++ .../playwright/lib/server/dialog.js | 78 + .../node_modules/playwright/lib/server/dom.js | 1180 ++ .../playwright/lib/server/download.js | 65 + .../lib/server/electron/electron.js | 252 + .../playwright/lib/server/fetch.js | 443 + .../playwright/lib/server/fileChooser.js | 47 + .../lib/server/firefox/ffAccessibility.js | 244 + .../lib/server/firefox/ffBrowser.js | 461 + .../lib/server/firefox/ffConnection.js | 274 + .../lib/server/firefox/ffExecutionContext.js | 156 + .../playwright/lib/server/firefox/ffInput.js | 172 + .../lib/server/firefox/ffNetworkManager.js | 280 + .../playwright/lib/server/firefox/ffPage.js | 652 + .../playwright/lib/server/firefox/firefox.js | 122 + .../playwright/lib/server/frames.js | 1491 ++ .../playwright/lib/server/helper.js | 116 + .../playwright/lib/server/input.js | 343 + .../playwright/lib/server/instrumentation.js | 83 + .../playwright/lib/server/javascript.js | 278 + .../lib/server/macEditingCommands.js | 135 + .../playwright/lib/server/network.js | 671 + .../playwright/lib/server/page.js | 662 + .../playwright/lib/server/pipeTransport.js | 93 + .../playwright/lib/server/playwright.js | 81 + .../playwright/lib/server/progress.js | 111 + .../playwright/lib/server/screenshotter.js | 257 + .../playwright/lib/server/selectors.js | 157 + .../server/snapshot/inMemorySnapshotter.js | 121 + .../lib/server/snapshot/snapshotRenderer.js | 255 + .../lib/server/snapshot/snapshotServer.js | 283 + .../lib/server/snapshot/snapshotStorage.js | 82 + .../lib/server/snapshot/snapshotTypes.js | 5 + .../lib/server/snapshot/snapshotter.js | 188 + .../server/snapshot/snapshotterInjected.js | 488 + .../lib/server/supplements/debugger.js | 138 + .../lib/server/supplements/har/har.js | 5 + .../lib/server/supplements/har/harRecorder.js | 80 + .../lib/server/supplements/har/harTracer.js | 441 + .../supplements/recorder/codeGenerator.js | 183 + .../lib/server/supplements/recorder/csharp.js | 294 + .../lib/server/supplements/recorder/java.js | 233 + .../server/supplements/recorder/javascript.js | 283 + .../server/supplements/recorder/language.js | 53 + .../lib/server/supplements/recorder/python.js | 284 + .../supplements/recorder/recorderActions.js | 61 + .../supplements/recorder/recorderApp.js | 179 + .../supplements/recorder/recorderTypes.js | 5 + .../supplements/recorder/recorderUtils.js | 50 + .../lib/server/supplements/recorder/utils.js | 74 + .../server/supplements/recorderSupplement.js | 612 + .../lib/server/trace/common/traceEvents.js | 5 + .../lib/server/trace/recorder/tracing.js | 427 + .../lib/server/trace/viewer/traceModel.js | 216 + .../lib/server/trace/viewer/traceViewer.js | 259 + .../playwright/lib/server/transport.js | 113 + .../playwright/lib/server/types.js | 71 + .../playwright/lib/server/usKeyboardLayout.js | 557 + .../playwright/lib/server/webkit/webkit.js | 96 + .../lib/server/webkit/wkAccessibility.js | 222 + .../playwright/lib/server/webkit/wkBrowser.js | 376 + .../lib/server/webkit/wkConnection.js | 216 + .../lib/server/webkit/wkExecutionContext.js | 190 + .../playwright/lib/server/webkit/wkInput.js | 193 + .../server/webkit/wkInterceptableRequest.js | 203 + .../playwright/lib/server/webkit/wkPage.js | 1374 ++ .../lib/server/webkit/wkProvisionalPage.js | 69 + .../playwright/lib/server/webkit/wkWorkers.js | 125 + .../node_modules/playwright/lib/test/cli.js | 228 + .../playwright/lib/test/dispatcher.js | 575 + .../playwright/lib/test/expect.js | 113 + .../playwright/lib/test/fixtures.js | 408 + .../playwright/lib/test/globals.js | 44 + .../node_modules/playwright/lib/test/index.js | 433 + .../node_modules/playwright/lib/test/ipc.js | 5 + .../playwright/lib/test/loader.js | 431 + .../playwright/lib/test/matchers/golden.js | 272 + .../playwright/lib/test/matchers/matchers.js | 233 + .../lib/test/matchers/toBeTruthy.js | 51 + .../playwright/lib/test/matchers/toEqual.js | 69 + .../lib/test/matchers/toMatchSnapshot.js | 70 + .../lib/test/matchers/toMatchText.js | 68 + .../playwright/lib/test/profiler.js | 60 + .../playwright/lib/test/project.js | 162 + .../playwright/lib/test/reporters/base.js | 355 + .../playwright/lib/test/reporters/dot.js | 89 + .../playwright/lib/test/reporters/empty.js | 26 + .../playwright/lib/test/reporters/html.js | 262 + .../playwright/lib/test/reporters/json.js | 243 + .../playwright/lib/test/reporters/junit.js | 219 + .../playwright/lib/test/reporters/line.js | 92 + .../playwright/lib/test/reporters/list.js | 191 + .../lib/test/reporters/multiplexer.js | 103 + .../playwright/lib/test/reporters/raw.js | 200 + .../playwright/lib/test/runner.js | 612 + .../node_modules/playwright/lib/test/test.js | 185 + .../playwright/lib/test/testType.js | 243 + .../playwright/lib/test/transform.js | 135 + .../node_modules/playwright/lib/test/types.js | 30 + .../node_modules/playwright/lib/test/util.js | 204 + .../playwright/lib/test/webServer.js | 148 + .../playwright/lib/test/worker.js | 143 + .../playwright/lib/test/workerRunner.js | 585 + .../lib/third_party/diff_match_patch.js | 2222 +++ .../highlightjs/highlightjs/core.js | 2378 +++ .../highlightjs/highlightjs/highlight.js | 2 + .../highlightjs/highlightjs/index.js | 8 + .../highlightjs/languages/csharp.js | 367 + .../highlightjs/highlightjs/languages/java.js | 176 + .../highlightjs/languages/javascript.js | 601 + .../highlightjs/languages/python.js | 289 + .../playwright/lib/utils/async.js | 105 + .../playwright/lib/utils/browserFetcher.js | 143 + .../playwright/lib/utils/debugLogger.js | 108 + .../playwright/lib/utils/dependencies.js | 566 + .../playwright/lib/utils/errors.js | 44 + .../playwright/lib/utils/eventsHelper.js | 43 + .../playwright/lib/utils/httpServer.js | 152 + .../playwright/lib/utils/multimap.js | 89 + .../playwright/lib/utils/netUtils.js | 37 + .../playwright/lib/utils/processLauncher.js | 206 + .../playwright/lib/utils/registry.js | 692 + .../playwright/lib/utils/socksProxy.js | 286 + .../playwright/lib/utils/stackTrace.js | 106 + .../playwright/lib/utils/timeoutSettings.js | 68 + .../playwright/lib/utils/ubuntuVersion.js | 84 + .../playwright/lib/utils/utils.js | 505 + .../40e1017745522c215602cd4956e7f6f4.ttf | Bin 0 -> 62564 bytes .../lib/web/htmlReport/app.bundle.js | 30 + .../playwright/lib/web/htmlReport/index.html | 1 + .../40e1017745522c215602cd4956e7f6f4.ttf | Bin 0 -> 62564 bytes .../playwright/lib/web/recorder/app.bundle.js | 30 + .../playwright/lib/web/recorder/index.html | 1 + .../node_modules/playwright/lib/web/theme.js | 32 + .../40e1017745522c215602cd4956e7f6f4.ttf | Bin 0 -> 62564 bytes .../lib/web/traceViewer/app.bundle.js | 30 + .../lib/web/traceViewer/geometry.js | 5 + .../playwright/lib/web/traceViewer/index.html | 1 + .../lib/web/traceViewer/ui/modelUtil.js | 110 + .../playwright/lib/web/uiUtils.js | 61 + .../node_modules/playwright/package.json | 78 + .../node_modules/pngjs/.eslintignore | 2 + .../node_modules/pngjs/.eslintrc.json | 19 + .../node_modules/pngjs/.prettierignore | 3 + .../node_modules/pngjs/LICENSE | 20 + .../node_modules/pngjs/README.md | 429 + .../node_modules/pngjs/browser.js | 16096 ++++++++++++++++ .../pngjs/coverage/lcov-report/base.css | 354 + .../coverage/lcov-report/bitmapper.js.html | 881 + .../coverage/lcov-report/bitpacker.js.html | 554 + .../coverage/lcov-report/block-navigation.js | 77 + .../coverage/lcov-report/chunkstream.js.html | 647 + .../coverage/lcov-report/constants.js.html | 176 + .../pngjs/coverage/lcov-report/crc.js.html | 200 + .../pngjs/coverage/lcov-report/favicon.png | Bin 0 -> 540 bytes .../coverage/lcov-report/filter-pack.js.html | 593 + .../lcov-report/filter-parse-async.js.html | 152 + .../lcov-report/filter-parse-sync.js.html | 143 + .../coverage/lcov-report/filter-parse.js.html | 611 + .../lcov-report/format-normaliser.js.html | 359 + .../pngjs/coverage/lcov-report/index.html | 426 + .../coverage/lcov-report/interlace.js.html | 365 + .../coverage/lcov-report/packer-async.js.html | 230 + .../coverage/lcov-report/packer-sync.js.html | 248 + .../pngjs/coverage/lcov-report/packer.js.html | 467 + .../lcov-report/paeth-predictor.js.html | 128 + .../coverage/lcov-report/parser-async.js.html | 575 + .../coverage/lcov-report/parser-sync.js.html | 404 + .../pngjs/coverage/lcov-report/parser.js.html | 950 + .../coverage/lcov-report/png-sync.js.html | 116 + .../pngjs/coverage/lcov-report/png.js.html | 662 + .../pngjs/coverage/lcov-report/prettify.css | 101 + .../pngjs/coverage/lcov-report/prettify.js | 1007 + .../lcov-report/sort-arrow-sprite.png | Bin 0 -> 209 bytes .../pngjs/coverage/lcov-report/sorter.js | 169 + .../coverage/lcov-report/sync-inflate.js.html | 584 + .../coverage/lcov-report/sync-reader.js.html | 215 + .../node_modules/pngjs/coverage/lcov.info | 2177 +++ .../node_modules/pngjs/lib/bitmapper.js | 267 + .../node_modules/pngjs/lib/bitpacker.js | 158 + .../node_modules/pngjs/lib/chunkstream.js | 189 + .../node_modules/pngjs/lib/constants.js | 32 + .../node_modules/pngjs/lib/crc.js | 40 + .../node_modules/pngjs/lib/filter-pack.js | 171 + .../pngjs/lib/filter-parse-async.js | 24 + .../pngjs/lib/filter-parse-sync.js | 21 + .../node_modules/pngjs/lib/filter-parse.js | 177 + .../pngjs/lib/format-normaliser.js | 93 + .../node_modules/pngjs/lib/interlace.js | 95 + .../node_modules/pngjs/lib/packer-async.js | 50 + .../node_modules/pngjs/lib/packer-sync.js | 56 + .../node_modules/pngjs/lib/packer.js | 129 + .../node_modules/pngjs/lib/paeth-predictor.js | 16 + .../node_modules/pngjs/lib/parser-async.js | 165 + .../node_modules/pngjs/lib/parser-sync.js | 108 + .../node_modules/pngjs/lib/parser.js | 290 + .../node_modules/pngjs/lib/png-sync.js | 12 + .../node_modules/pngjs/lib/png.js | 194 + .../node_modules/pngjs/lib/sync-inflate.js | 168 + .../node_modules/pngjs/lib/sync-reader.js | 45 + .../node_modules/pngjs/package.json | 125 + .../process-nextick-args/index.js | 45 + .../process-nextick-args/license.md | 19 + .../process-nextick-args/package.json | 53 + .../process-nextick-args/readme.md | 18 + .../node_modules/progress/CHANGELOG.md | 115 + .../node_modules/progress/LICENSE | 22 + .../node_modules/progress/Makefile | 8 + .../node_modules/progress/Readme.md | 146 + .../node_modules/progress/index.js | 1 + .../progress/lib/node-progress.js | 236 + .../node_modules/progress/package.json | 74 + .../node_modules/proper-lockfile/CHANGELOG.md | 108 + .../node_modules/proper-lockfile/LICENSE | 21 + .../node_modules/proper-lockfile/README.md | 183 + .../node_modules/proper-lockfile/index.js | 40 + .../proper-lockfile/lib/adapter.js | 85 + .../proper-lockfile/lib/lockfile.js | 342 + .../proper-lockfile/lib/mtime-precision.js | 55 + .../node_modules/proper-lockfile/package.json | 105 + .../node_modules/proxy-from-env/.eslintrc | 29 + .../node_modules/proxy-from-env/.travis.yml | 10 + .../node_modules/proxy-from-env/LICENSE | 20 + .../node_modules/proxy-from-env/README.md | 131 + .../node_modules/proxy-from-env/index.js | 108 + .../node_modules/proxy-from-env/package.json | 66 + .../node_modules/proxy-from-env/test.js | 483 + .../node_modules/pump/.travis.yml | 5 + .../node_modules/pump/LICENSE | 21 + .../node_modules/pump/README.md | 65 + .../node_modules/pump/index.js | 82 + .../node_modules/pump/package.json | 62 + .../node_modules/pump/test-browser.js | 66 + .../node_modules/pump/test-node.js | 53 + .../node_modules/readable-stream/.travis.yml | 34 + .../readable-stream/CONTRIBUTING.md | 38 + .../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 | 687 + .../lib/internal/streams/BufferList.js | 79 + .../lib/internal/streams/destroy.js | 74 + .../lib/internal/streams/stream-browser.js | 1 + .../lib/internal/streams/stream.js | 1 + .../node_modules/readable-stream/package.json | 87 + .../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/resolve-path/HISTORY.md | 66 + .../node_modules/resolve-path/LICENSE | 23 + .../node_modules/resolve-path/README.md | 111 + .../node_modules/resolve-path/index.js | 88 + .../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 | 93 + .../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 | 64 + .../node_modules/setprototypeof/LICENSE | 13 + .../node_modules/setprototypeof/README.md | 26 + .../node_modules/setprototypeof/index.js | 15 + .../node_modules/setprototypeof/package.json | 55 + .../node_modules/resolve-path/package.json | 91 + .../node_modules/retry/.npmignore | 3 + .../node_modules/retry/.travis.yml | 15 + .../node_modules/retry/License | 21 + .../node_modules/retry/Makefile | 18 + .../node_modules/retry/README.md | 227 + .../node_modules/retry/equation.gif | Bin 0 -> 1209 bytes .../node_modules/retry/example/dns.js | 31 + .../node_modules/retry/example/stop.js | 40 + .../node_modules/retry/index.js | 1 + .../node_modules/retry/lib/retry.js | 100 + .../node_modules/retry/lib/retry_operation.js | 158 + .../node_modules/retry/package.json | 67 + .../node_modules/retry/test/common.js | 10 + .../retry/test/integration/test-forever.js | 24 + .../test/integration/test-retry-operation.js | 258 + .../retry/test/integration/test-retry-wrap.js | 101 + .../retry/test/integration/test-timeouts.js | 69 + .../node_modules/rimraf/CHANGELOG.md | 65 + .../node_modules/rimraf/LICENSE | 15 + .../node_modules/rimraf/README.md | 101 + .../node_modules/rimraf/bin.js | 68 + .../node_modules/rimraf/package.json | 75 + .../node_modules/rimraf/rimraf.js | 360 + .../node_modules/safe-buffer/LICENSE | 21 + .../node_modules/safe-buffer/README.md | 584 + .../node_modules/safe-buffer/index.js | 62 + .../node_modules/safe-buffer/package.json | 70 + .../node_modules/seek-bzip/LICENSE | 26 + .../node_modules/seek-bzip/README.md | 185 + .../node_modules/seek-bzip/bin/seek-bunzip | 129 + .../seek-bzip/bin/seek-bzip-table | 71 + .../node_modules/seek-bzip/lib/bitreader.js | 94 + .../node_modules/seek-bzip/lib/crc32.js | 104 + .../node_modules/seek-bzip/lib/index.js | 605 + .../node_modules/seek-bzip/lib/stream.js | 42 + .../node_modules/commander/CHANGELOG.md | 419 + .../seek-bzip/node_modules/commander/LICENSE | 22 + .../node_modules/commander/Readme.md | 428 + .../seek-bzip/node_modules/commander/index.js | 1224 ++ .../node_modules/commander/package.json | 73 + .../node_modules/seek-bzip/package.json | 76 + .../node_modules/setprototypeof/LICENSE | 13 + .../node_modules/setprototypeof/README.md | 31 + .../node_modules/setprototypeof/index.js | 17 + .../node_modules/setprototypeof/package.json | 68 + .../node_modules/setprototypeof/test/index.js | 24 + .../node_modules/signal-exit/LICENSE.txt | 16 + .../node_modules/signal-exit/README.md | 39 + .../node_modules/signal-exit/index.js | 178 + .../node_modules/signal-exit/package.json | 68 + .../node_modules/signal-exit/signals.js | 53 + .../node_modules/stack-utils/index.js | 338 + .../node_modules/stack-utils/license | 21 + .../escape-string-regexp/index.js | 11 + .../node_modules/escape-string-regexp/license | 9 + .../escape-string-regexp/package.json | 86 + .../escape-string-regexp/readme.md | 29 + .../node_modules/stack-utils/package.json | 74 + .../node_modules/stack-utils/readme.md | 143 + .../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 | 92 + .../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 | 62 + .../node_modules/strip-dirs/LICENSE | 20 + .../node_modules/strip-dirs/README.md | 75 + .../node_modules/strip-dirs/index.js | 72 + .../node_modules/strip-dirs/package.json | 77 + .../node_modules/tar-stream/LICENSE | 21 + .../node_modules/tar-stream/README.md | 168 + .../node_modules/tar-stream/extract.js | 258 + .../node_modules/tar-stream/headers.js | 283 + .../node_modules/tar-stream/index.js | 2 + .../node_modules/tar-stream/pack.js | 255 + .../node_modules/tar-stream/package.json | 91 + .../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 | 71 + .../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-buffer/.travis.yml | 9 + .../node_modules/to-buffer/LICENSE | 21 + .../node_modules/to-buffer/README.md | 23 + .../node_modules/to-buffer/index.js | 14 + .../node_modules/to-buffer/package.json | 55 + .../node_modules/to-buffer/test.js | 26 + .../node_modules/toidentifier/LICENSE | 21 + .../node_modules/toidentifier/README.md | 61 + .../node_modules/toidentifier/index.js | 30 + .../node_modules/toidentifier/package.json | 79 + .../node_modules/tsscmp/.travis.yml | 18 + .../node_modules/tsscmp/LICENSE | 21 + .../node_modules/tsscmp/README.md | 48 + .../node_modules/tsscmp/appveyor.yml | 29 + .../node_modules/tsscmp/lib/index.js | 38 + .../node_modules/tsscmp/package.json | 63 + .../tsscmp/test/benchmark/index.js | 30 + .../node_modules/tsscmp/test/unit/index.js | 69 + .../node_modules/type-is/HISTORY.md | 259 + .../node_modules/type-is/LICENSE | 23 + .../node_modules/type-is/README.md | 170 + .../node_modules/type-is/index.js | 266 + .../node_modules/type-is/package.json | 87 + .../node_modules/unbzip2-stream/LICENSE | 24 + .../node_modules/unbzip2-stream/README.md | 59 + .../unbzip2-stream/dist/unbzip2-stream.min.js | 1 + .../node_modules/unbzip2-stream/index.js | 93 + .../unbzip2-stream/lib/bit_iterator.js | 39 + .../node_modules/unbzip2-stream/lib/bzip2.js | 365 + .../node_modules/unbzip2-stream/package.json | 83 + .../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 | 59 + .../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 | 81 + .../node_modules/vscode-uri/LICENSE.md | 9 + .../node_modules/vscode-uri/README.md | 67 + .../node_modules/vscode-uri/lib/esm/index.js | 2 + .../node_modules/vscode-uri/lib/umd/index.js | 2 + .../node_modules/vscode-uri/package.json | 67 + .../node_modules/wrappy/LICENSE | 15 + .../node_modules/wrappy/README.md | 36 + .../node_modules/wrappy/package.json | 62 + .../node_modules/wrappy/wrappy.js | 33 + .../node_modules/ws/LICENSE | 21 + .../node_modules/ws/README.md | 495 + .../node_modules/ws/browser.js | 8 + .../node_modules/ws/index.js | 10 + .../node_modules/ws/lib/buffer-util.js | 129 + .../node_modules/ws/lib/constants.js | 10 + .../node_modules/ws/lib/event-target.js | 184 + .../node_modules/ws/lib/extension.js | 223 + .../node_modules/ws/lib/limiter.js | 55 + .../node_modules/ws/lib/permessage-deflate.js | 518 + .../node_modules/ws/lib/receiver.js | 607 + .../node_modules/ws/lib/sender.js | 409 + .../node_modules/ws/lib/stream.js | 177 + .../node_modules/ws/lib/validation.js | 104 + .../node_modules/ws/lib/websocket-server.js | 447 + .../node_modules/ws/lib/websocket.js | 1110 ++ .../node_modules/ws/package.json | 93 + .../node_modules/xtend/.jshintrc | 30 + .../node_modules/xtend/LICENSE | 20 + .../node_modules/xtend/README.md | 32 + .../node_modules/xtend/immutable.js | 19 + .../node_modules/xtend/mutable.js | 17 + .../node_modules/xtend/package.json | 89 + .../node_modules/xtend/test.js | 103 + .../node_modules/yauzl/LICENSE | 21 + .../node_modules/yauzl/README.md | 658 + .../node_modules/yauzl/index.js | 796 + .../node_modules/yauzl/package.json | 72 + .../node_modules/yazl/LICENSE | 21 + .../node_modules/yazl/README.md | 389 + .../node_modules/yazl/index.js | 749 + .../node_modules/yazl/package.json | 69 + .../node_modules/ylru/History.md | 22 + .../node_modules/ylru/LICENSE | 23 + .../node_modules/ylru/README.md | 91 + .../node_modules/ylru/index.js | 106 + .../node_modules/ylru/package.json | 71 + .../out/src/extension.js | 268 + .../out/src/test/runTest.js | 33 + .../out/src/test/suite/extension.test.js | 15 + .../out/src/test/suite/index.js | 40 + .../package.json | 155 + .../publish | 5 + .../test-web.sh | 2 + .../.gitignore | 1 + .../.vsixmanifest | 42 + .../LICENSE.txt | 674 + .../README.md | 48 + .../assets/icon.png | Bin 0 -> 22407 bytes .../assets/icon.svg | 23 + .../assets/screenshot.png | Bin 0 -> 330839 bytes .../assets/screenshot.xcf | Bin 0 -> 701020 bytes .../assets/screenshot_extra.png | Bin 0 -> 315956 bytes .../package.json | 96 + .../product-icons/adwaita-icons.ttf | Bin 0 -> 2764 bytes .../product-icons/adwaita.json | 73 + .../product-icons/scalable/ea01.svg | 10 + .../product-icons/scalable/ea02.svg | 10 + .../product-icons/scalable/ea03.svg | 10 + .../product-icons/scalable/ea04.svg | 10 + .../product-icons/scalable/ea05.svg | 8 + .../product-icons/scalable/ea06.svg | 8 + .../product-icons/scalable/ea07.svg | 8 + .../product-icons/scalable/ea08.svg | 8 + .../product-icons/scalable/ea09.svg | 8 + .../product-icons/scalable/ea0a.svg | 8 + .../product-icons/scalable/ea0b.svg | 49 + .../product-icons/scalable/ea0c.svg | 8 + .../product-icons/scalable/ea0d.svg | 8 + .../product-icons/scalable/eb94.svg | 8 + .../src/adwaita_colors.py | 340 + .../src/adwaita_ui_colors.py | 117 + .../src/build.py | 81 + .../src/default_themes/README.md | 1 + .../src/default_themes/dark.jsonc | 1201 ++ .../src/default_themes/light.jsonc | 1224 ++ .../src/gtksourceview_xml/Adwaita-dark.xml | 183 + .../src/gtksourceview_xml/Adwaita.xml | 181 + .../src/gtksourceview_xml/update.sh | 3 + .../adwaita-dark-colorful-status-bar.json | 551 + ...ntax-highlighting-colorful-status-bar.json | 642 + ...aita-dark-default-syntax-highlighting.json | 641 + .../themes/adwaita-dark.json | 550 + .../adwaita-light-colorful-status-bar.json | 551 + ...ntax-highlighting-colorful-status-bar.json | 665 + ...ita-light-default-syntax-highlighting.json | 664 + .../themes/adwaita-light.json | 550 + 1276 files changed, 204780 insertions(+), 1 deletion(-) create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/.github/FUNDING.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/.vsixmanifest create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/LICENSE.txt create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/assets/example.png create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/assets/icon.png create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/build/web-extension.webpack.config.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/dist/web/extension.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/history.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/lib/API_tpl.hbs create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/lib/layer.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/lib/router.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@tootallnate/once/dist/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@tootallnate/once/package.json create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/node/LICENSE create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/node/README.md create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/node/package.json create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/yauzl/LICENSE create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/yauzl/README.md create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/yauzl/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/README.md create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/app.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/download.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/extensions.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/main.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/workbench.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/views/workbench.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/dist/src/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/dist/src/promisify.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/.jshintrc create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/.npmignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/implementation.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/loader.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/optional.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register-shim.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/bluebird.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/es6-promise.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/lie.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/native-promise-only.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/pinkie.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/promise.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/q.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/rsvp.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/vow.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/when.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/.github/FUNDING.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/LICENSE.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/base64js.min.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/.jshintrc create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/LICENSE.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/bl.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/test/test.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc-unsafe/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc-unsafe/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc-unsafe/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-fill/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-fill/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-fill/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/AUTHORS.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/README.markdown create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/example/map.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/test/map.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/lib/browser/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/lib/util.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/common.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/node.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/example/cmp.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/lib/is_arguments.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/lib/keys.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/readme.markdown create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/test/cmp.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/.npmignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/License create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/Makefile create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/test/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/browser/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/compat/callsite-tostring.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/compat/event-listener-count.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/compat/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/LICENSE create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/cli.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/buffer-stream.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/.npmignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/test/test.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/old.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/buffer-stream.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/common.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/glob.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/sync.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/clone.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/graceful-fs.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/legacy-streams.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/polyfills.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.eslintignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.eslintrc create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.github/FUNDING.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.nycrc create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/shams.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/shams/core-js.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/shams/get-own-property-symbols.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/tests.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/.eslintrc create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/.github/FUNDING.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/shams.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/shams/core-js.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/tests.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/dist/agent.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/dist/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/dist/agent.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/dist/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/dist/parse-proxy-response.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/inflight.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/inherits.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/inherits_browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.eslintignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.eslintrc create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.nvmrc create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.nycrc create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/test/corejs.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/test/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/test/uglified.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/index.jsnext.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/.npmignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/Makefile create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/component.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/test.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/CONTRIBUTING.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/lib/decoder.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/lib/encoder.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/.npmignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/test.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/node.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/common.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/node.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/dist/koa.mjs create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/application.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/context.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/request.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/response.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.coveralls.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.eslintrc create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.npmignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/Makefile create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/karma.conf.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/node.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/debug.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/node.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/lib/browser/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/license.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/db.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/Mime.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/README.md create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/cli.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/lite.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/types/other.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/types/standard.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/minimatch.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/example/parse.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/readme.markdown create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/all_bool.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/bool.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/dash.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/default_bool.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/dotted.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/kv_short.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/long.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/num.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/parse.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/parse_modified.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/proto.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/short.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/stop_early.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/unknown.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/whitespace.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.coveralls.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.eslintrc create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.npmignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/Makefile create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/component.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/karma.conf.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/node.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/debug.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/inspector-log.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/node.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/lib/browser/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/license.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/license.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/charset.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/encoding.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/language.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/mediaType.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/once.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/.npmignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/Makefile create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/dist.es2015/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/dist/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/test.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/NOTICE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/PrintDeps.exe create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/android-driver-target.apk create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/android-driver.apk create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/install_media_pack.ps1 create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_beta_linux.sh create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_beta_mac.sh create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_beta_win.ps1 create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_stable_linux.sh create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_stable_mac.sh create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_stable_win.ps1 create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_beta_linux.sh create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_beta_mac.sh create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_beta_win.ps1 create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_dev_linux.sh create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_dev_mac.sh create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_dev_win.ps1 create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_stable_mac.sh create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_stable_win.ps1 create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/browsers.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/commitinfo create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/index.mjs create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/install.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/browserServerImpl.js create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/cli/cli.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/cli/driver.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/accessibility.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/android.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/api.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/artifact.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/browserContext.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/browserType.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/cdpSession.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/channelOwner.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/clientHelper.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/connection.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/consoleMessage.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/coverage.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/dialog.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/download.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/electron.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/elementHandle.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/events.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/fetch.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/fileChooser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/frame.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/input.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/jsHandle.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/jsonPipe.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/locator.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/network.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/page.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/playwright.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/selectors.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/stream.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/tracing.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/types.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/video.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/waiter.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/client/worker.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/common/types.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/androidDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/artifactDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/browserContextDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/browserDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/browserTypeDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/cdpSessionDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/consoleMessageDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/dialogDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/dispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/electronDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/elementHandlerDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/frameDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/jsHandleDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/jsonPipeDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/networkDispatchers.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/pageDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/playwrightDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/selectorsDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/dispatchers/streamDispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/generated/consoleApiSource.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/generated/injectedScriptSource.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/generated/recorderSource.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/generated/utilityScriptSource.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/grid/gridAgent.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/grid/gridClient.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/grid/gridServer.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/grid/gridWorker.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/grid/simpleGridFactory.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/inprocess.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/nativeDeps.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/outofprocess.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/callMetadata.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/channels.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/serializers.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/transport.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/validator.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/validatorPrimitives.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/remote/playwrightClient.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/remote/playwrightServer.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/accessibility.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/android/android.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/android/backendAdb.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/artifact.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/browserContext.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/browserType.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/appIcon.png create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/chromium.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crAccessibility.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crApp.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crBrowser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crConnection.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crCoverage.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crDevTools.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crDragDrop.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crExecutionContext.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crInput.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crNetworkManager.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crPage.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crPdf.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crProtocolHelper.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/videoRecorder.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/componentUtils.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/cssParser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/cssTokenizer.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/domErrors.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/protocolError.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/selectorParser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/utilityScriptSerializers.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/console.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/deviceDescriptors.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/deviceDescriptorsSource.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/dialog.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/dom.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/download.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/electron/electron.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/fetch.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/fileChooser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/firefox/ffAccessibility.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/firefox/ffBrowser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/firefox/ffConnection.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/firefox/ffExecutionContext.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/firefox/ffInput.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/firefox/ffNetworkManager.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/firefox/ffPage.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/firefox/firefox.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/frames.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/helper.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/input.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/instrumentation.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/javascript.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/macEditingCommands.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/network.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/page.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/pipeTransport.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/playwright.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/progress.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/screenshotter.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/selectors.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/snapshot/inMemorySnapshotter.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/snapshot/snapshotRenderer.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/snapshot/snapshotServer.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/snapshot/snapshotStorage.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/snapshot/snapshotTypes.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/snapshot/snapshotter.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/snapshot/snapshotterInjected.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/debugger.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/har/har.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/har/harRecorder.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/har/harTracer.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/recorder/codeGenerator.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/recorder/csharp.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/recorder/java.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/recorder/javascript.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/recorder/language.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/recorder/python.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/recorder/recorderActions.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/recorder/recorderApp.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/recorder/recorderTypes.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/recorder/recorderUtils.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/recorder/utils.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/supplements/recorderSupplement.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/trace/common/traceEvents.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/trace/recorder/tracing.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/trace/viewer/traceModel.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/trace/viewer/traceViewer.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/transport.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/types.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/usKeyboardLayout.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/webkit/webkit.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/webkit/wkAccessibility.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/webkit/wkBrowser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/webkit/wkConnection.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/webkit/wkExecutionContext.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/webkit/wkInput.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/webkit/wkInterceptableRequest.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/webkit/wkPage.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/webkit/wkProvisionalPage.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/webkit/wkWorkers.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/cli.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/dispatcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/expect.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/fixtures.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/globals.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/ipc.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/loader.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/matchers/golden.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/matchers/matchers.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/matchers/toBeTruthy.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/matchers/toEqual.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/matchers/toMatchSnapshot.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/matchers/toMatchText.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/profiler.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/project.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/reporters/base.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/reporters/dot.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/reporters/empty.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/reporters/html.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/reporters/json.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/reporters/junit.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/reporters/line.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/reporters/list.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/reporters/multiplexer.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/reporters/raw.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/runner.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/test.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/testType.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/transform.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/types.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/util.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/webServer.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/worker.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/test/workerRunner.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/third_party/diff_match_patch.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/third_party/highlightjs/highlightjs/core.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/third_party/highlightjs/highlightjs/highlight.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/third_party/highlightjs/highlightjs/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/third_party/highlightjs/highlightjs/languages/csharp.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/third_party/highlightjs/highlightjs/languages/java.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/third_party/highlightjs/highlightjs/languages/javascript.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/third_party/highlightjs/highlightjs/languages/python.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/async.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/browserFetcher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/debugLogger.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/dependencies.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/errors.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/eventsHelper.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/httpServer.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/multimap.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/netUtils.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/processLauncher.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/registry.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/socksProxy.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/stackTrace.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/timeoutSettings.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/ubuntuVersion.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/utils/utils.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/htmlReport/40e1017745522c215602cd4956e7f6f4.ttf create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/htmlReport/app.bundle.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/htmlReport/index.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/recorder/40e1017745522c215602cd4956e7f6f4.ttf create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/recorder/app.bundle.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/recorder/index.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/theme.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/traceViewer/40e1017745522c215602cd4956e7f6f4.ttf create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/traceViewer/app.bundle.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/traceViewer/geometry.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/traceViewer/index.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/traceViewer/ui/modelUtil.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/web/uiUtils.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/.eslintignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/.eslintrc.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/.prettierignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/base.css create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/block-navigation.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/constants.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/crc.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/favicon.png create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/index.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/interlace.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/packer-async.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/packer.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/parser-async.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/parser.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/png-sync.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/png.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/prettify.css create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/prettify.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/sorter.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/coverage/lcov.info create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/bitmapper.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/bitpacker.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/chunkstream.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/constants.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/crc.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/filter-pack.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/filter-parse-async.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/filter-parse-sync.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/filter-parse.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/format-normaliser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/interlace.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/packer-async.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/packer-sync.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/packer.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/paeth-predictor.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/parser-async.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/parser-sync.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/parser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/png-sync.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/png.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/sync-inflate.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/lib/sync-reader.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pngjs/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/process-nextick-args/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/process-nextick-args/license.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/process-nextick-args/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/process-nextick-args/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/progress/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/progress/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/progress/Makefile create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/progress/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/progress/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/progress/lib/node-progress.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/progress/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proper-lockfile/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proper-lockfile/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proper-lockfile/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proper-lockfile/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proper-lockfile/lib/adapter.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proper-lockfile/lib/lockfile.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proper-lockfile/lib/mtime-precision.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proper-lockfile/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proxy-from-env/.eslintrc create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proxy-from-env/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proxy-from-env/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proxy-from-env/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proxy-from-env/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proxy-from-env/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/proxy-from-env/test.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pump/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pump/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pump/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pump/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pump/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pump/test-browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pump/test-node.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/CONTRIBUTING.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/GOVERNANCE.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/duplex-browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/duplex.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/lib/_stream_duplex.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/lib/_stream_passthrough.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/lib/_stream_readable.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/lib/_stream_transform.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/lib/_stream_writable.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/lib/internal/streams/BufferList.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/lib/internal/streams/destroy.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/lib/internal/streams/stream-browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/lib/internal/streams/stream.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/passthrough.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/readable-browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/readable.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/transform.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/writable-browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/readable-stream/writable.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/http-errors/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/http-errors/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/http-errors/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/http-errors/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/http-errors/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/inherits/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/inherits/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/inherits/inherits.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/inherits/inherits_browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/inherits/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/setprototypeof/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/setprototypeof/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/setprototypeof/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/node_modules/setprototypeof/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/resolve-path/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/.npmignore create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/License create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/Makefile create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/equation.gif create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/example/dns.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/example/stop.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/lib/retry.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/lib/retry_operation.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/test/common.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/test/integration/test-forever.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/test/integration/test-retry-operation.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/test/integration/test-retry-wrap.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/retry/test/integration/test-timeouts.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/rimraf/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/rimraf/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/rimraf/README.md create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/rimraf/bin.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/rimraf/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/rimraf/rimraf.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/safe-buffer/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/safe-buffer/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/safe-buffer/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/safe-buffer/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/README.md create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/bin/seek-bunzip create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/bin/seek-bzip-table create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/lib/bitreader.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/lib/crc32.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/lib/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/lib/stream.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/node_modules/commander/CHANGELOG.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/node_modules/commander/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/node_modules/commander/Readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/node_modules/commander/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/node_modules/commander/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/seek-bzip/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/setprototypeof/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/setprototypeof/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/setprototypeof/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/setprototypeof/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/setprototypeof/test/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/signal-exit/LICENSE.txt create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/signal-exit/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/signal-exit/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/signal-exit/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/signal-exit/signals.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/stack-utils/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/stack-utils/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/stack-utils/node_modules/escape-string-regexp/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/stack-utils/node_modules/escape-string-regexp/license create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/stack-utils/node_modules/escape-string-regexp/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/stack-utils/node_modules/escape-string-regexp/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/stack-utils/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/stack-utils/readme.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/statuses/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/statuses/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/statuses/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/statuses/codes.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/statuses/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/statuses/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/string_decoder/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/string_decoder/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/string_decoder/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/string_decoder/lib/string_decoder.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/string_decoder/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/strip-dirs/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/strip-dirs/README.md create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/strip-dirs/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/strip-dirs/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tar-stream/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tar-stream/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tar-stream/extract.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tar-stream/headers.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tar-stream/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tar-stream/pack.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tar-stream/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/through/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/through/LICENSE.APACHE2 create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/through/LICENSE.MIT create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/through/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/through/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/through/readme.markdown create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/through/test/async.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/through/test/auto-destroy.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/through/test/buffering.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/through/test/end.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/through/test/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/to-buffer/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/to-buffer/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/to-buffer/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/to-buffer/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/to-buffer/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/to-buffer/test.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/toidentifier/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/toidentifier/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/toidentifier/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/toidentifier/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tsscmp/.travis.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tsscmp/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tsscmp/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tsscmp/appveyor.yml create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tsscmp/lib/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tsscmp/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tsscmp/test/benchmark/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/tsscmp/test/unit/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/type-is/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/type-is/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/type-is/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/type-is/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/type-is/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/unbzip2-stream/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/unbzip2-stream/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/unbzip2-stream/dist/unbzip2-stream.min.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/unbzip2-stream/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/unbzip2-stream/lib/bit_iterator.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/unbzip2-stream/lib/bzip2.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/unbzip2-stream/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/util-deprecate/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/util-deprecate/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/util-deprecate/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/util-deprecate/browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/util-deprecate/node.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/util-deprecate/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/vary/HISTORY.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/vary/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/vary/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/vary/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/vary/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/vscode-uri/LICENSE.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/vscode-uri/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/vscode-uri/lib/esm/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/vscode-uri/lib/umd/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/vscode-uri/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/wrappy/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/wrappy/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/wrappy/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/wrappy/wrappy.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/browser.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/lib/buffer-util.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/lib/constants.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/lib/event-target.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/lib/extension.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/lib/limiter.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/lib/permessage-deflate.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/lib/receiver.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/lib/sender.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/lib/stream.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/lib/validation.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/lib/websocket-server.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/lib/websocket.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ws/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/xtend/.jshintrc create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/xtend/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/xtend/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/xtend/immutable.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/xtend/mutable.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/xtend/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/xtend/test.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/yauzl/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/yauzl/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/yauzl/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/yauzl/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/yazl/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/yazl/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/yazl/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/yazl/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ylru/History.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ylru/LICENSE create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ylru/README.md create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ylru/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ylru/package.json create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/out/src/extension.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/out/src/test/runTest.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/out/src/test/suite/extension.test.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/out/src/test/suite/index.js create mode 100644 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/package.json create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/publish create mode 100755 dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/test-web.sh create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/.gitignore create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/.vsixmanifest create mode 100755 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/LICENSE.txt create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/README.md create mode 100755 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/assets/icon.png create mode 100755 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/assets/icon.svg create mode 100755 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/assets/screenshot.png create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/assets/screenshot.xcf create mode 100755 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/assets/screenshot_extra.png create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/package.json create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/adwaita-icons.ttf create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/adwaita.json create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea01.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea02.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea03.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea04.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea05.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea06.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea07.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea08.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea09.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea0a.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea0b.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea0c.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/ea0d.svg create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/product-icons/scalable/eb94.svg create mode 100755 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/src/adwaita_colors.py create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/src/adwaita_ui_colors.py create mode 100755 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/src/build.py create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/src/default_themes/README.md create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/src/default_themes/dark.jsonc create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/src/default_themes/light.jsonc create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/src/gtksourceview_xml/Adwaita-dark.xml create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/src/gtksourceview_xml/Adwaita.xml create mode 100755 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/src/gtksourceview_xml/update.sh create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/themes/adwaita-dark-colorful-status-bar.json create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/themes/adwaita-dark-default-syntax-highlighting-colorful-status-bar.json create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/themes/adwaita-dark-default-syntax-highlighting.json create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/themes/adwaita-dark.json create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/themes/adwaita-light-colorful-status-bar.json create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/themes/adwaita-light-default-syntax-highlighting-colorful-status-bar.json create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/themes/adwaita-light-default-syntax-highlighting.json create mode 100644 dotfiles/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal/themes/adwaita-light.json diff --git a/dotfiles/.vscode-oss/extensions/extensions.json b/dotfiles/.vscode-oss/extensions/extensions.json index bb3bffeb..e2571bbf 100644 --- a/dotfiles/.vscode-oss/extensions/extensions.json +++ b/dotfiles/.vscode-oss/extensions/extensions.json @@ -1 +1 @@ -[{"identifier":{"id":"piousdeer.adwaita-theme","uuid":"93fbc635-4a9a-4ff1-88ba-bf017484c602"},"version":"1.1.0","location":{"$mid":1,"path":"/home/trude/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal","scheme":"file"},"relativeLocation":"piousdeer.adwaita-theme-1.1.0-universal","metadata":{"id":"93fbc635-4a9a-4ff1-88ba-bf017484c602","publisherId":"93befe42-7314-4d14-8724-19419a27ed64","publisherDisplayName":"piousdeer","targetPlatform":"universal","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"installedTimestamp":1713908192752,"pinned":false,"source":"gallery"}},{"identifier":{"id":"oderwat.indent-rainbow","uuid":"eaa2127d-cb69-4ab9-8505-a60c9ee5f28b"},"version":"8.3.1","location":{"$mid":1,"fsPath":"/home/trude/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal","external":"file:///home/trude/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal","path":"/home/trude/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal","scheme":"file"},"relativeLocation":"oderwat.indent-rainbow-8.3.1-universal","metadata":{"id":"eaa2127d-cb69-4ab9-8505-a60c9ee5f28b","publisherId":"ac064ae0-224d-4351-9aa4-45ef7bf3ed21","publisherDisplayName":"oderwat","targetPlatform":"universal","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"installedTimestamp":1714048339842,"pinned":false,"source":"gallery"}}] \ No newline at end of file +[{"identifier":{"id":"piousdeer.adwaita-theme","uuid":"93fbc635-4a9a-4ff1-88ba-bf017484c602"},"version":"1.1.0","location":{"$mid":1,"path":"/home/trude/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal","scheme":"file"},"relativeLocation":"piousdeer.adwaita-theme-1.1.0-universal","metadata":{"id":"93fbc635-4a9a-4ff1-88ba-bf017484c602","publisherId":"93befe42-7314-4d14-8724-19419a27ed64","publisherDisplayName":"piousdeer","targetPlatform":"universal","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"installedTimestamp":1714048423200,"pinned":false,"source":"gallery"}},{"identifier":{"id":"oderwat.indent-rainbow","uuid":"eaa2127d-cb69-4ab9-8505-a60c9ee5f28b"},"version":"8.3.1","location":{"$mid":1,"fsPath":"/home/trude/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal","external":"file:///home/trude/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal","path":"/home/trude/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal","scheme":"file"},"relativeLocation":"oderwat.indent-rainbow-8.3.1-universal","metadata":{"id":"eaa2127d-cb69-4ab9-8505-a60c9ee5f28b","publisherId":"ac064ae0-224d-4351-9aa4-45ef7bf3ed21","publisherDisplayName":"oderwat","targetPlatform":"universal","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"installedTimestamp":1714048433635,"pinned":false,"source":"gallery"}}] \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/.github/FUNDING.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/.github/FUNDING.yml new file mode 100644 index 00000000..cb17226c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: oderwat +patreon: # +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/.vsixmanifest b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/.vsixmanifest new file mode 100644 index 00000000..a2f73703 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/.vsixmanifest @@ -0,0 +1,42 @@ + + + + + indent-rainbow + Makes indentation easier to read + __web_extension + Other + Public + + + + + + + + + + + + + + + + + + + + extension/LICENSE.txt + extension/assets/icon.png + + + + + + + + + + + + \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/LICENSE.txt b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/LICENSE.txt new file mode 100644 index 00000000..da69a70a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Hans Raaf + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/README.md new file mode 100644 index 00000000..191ebcbf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/README.md @@ -0,0 +1,114 @@ +# Indent-Rainbow + +## A simple extension to make indentation more readable + +If you use this plugin a lot, please consider a donation: + +Buy Me A Coffee + +[![Donate with PayPal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://paypal.me/oderwat) + +--- + +This extension colorizes the indentation in front of your text, alternating four different colors on each step. Some may find it helpful in writing code for Python, Nim, Yaml, and probably even filetypes that are not indentation dependent. + +Note: This will also work with vscode-web (github.dev) since version 8.0.0. + +![Example](https://raw.githubusercontent.com/oderwat/vscode-indent-rainbow/master/assets/example.png) + +Get it here: [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow) + +It uses the current editor window tab size and can handle mixed tab + spaces (not recommended). In addition, it visibly marks lines where the indentation is not a multiple of the tab size. The visualization can help to find problems with the indentation in some situations. + +### Configuration + +Although you can use it as it is, there is the possibility to configure some aspects of the extension: + +```js + // For which languages indent-rainbow should be activated (if empty it means all). + "indentRainbow.includedLanguages": [] // for example ["nim", "nims", "python"] + + // For which languages indent-rainbow should be deactivated (if empty it means none). + "indentRainbow.excludedLanguages": ["plaintext"] + + // The delay in ms until the editor gets updated. + "indentRainbow.updateDelay": 100 // 10 makes it super fast but may cost more resources +``` + +*Notice: Defining both `includedLanguages` and `excludedLanguages` does not make much sense. Use one of both!* + +You can configure your own colors by adding and tampering with the following code: + +```js + // Defining custom colors instead of default "Rainbow" for dark backgrounds. + "indentRainbow.colors": [ + "rgba(255,255,64,0.07)", + "rgba(127,255,127,0.07)", + "rgba(255,127,255,0.07)", + "rgba(79,236,236,0.07)" + ] + + // The indent color if the number of spaces is not a multiple of "tabSize". + "indentRainbow.errorColor": "rgba(128,32,32,0.6)" + + // The indent color when there is a mix between spaces and tabs. + // To be disabled this coloring set this to an empty string. + "indentRainbow.tabmixColor": "rgba(128,32,96,0.6)" +``` + +> Notice: `errorColor` was renamed from `error_color` in earlier versions. + +### Light mode (new since v8.3.0) + +There is a (new) alternate mode that uses lines (with a customizable width) instead of the background coloring of the whitespace. Here is an example configuration I like: + +```js + // Using the light mode + "indentRainbow.indicatorStyle": "light", + // we use a simple 1 pixel wide line + "indentRainbow.lightIndicatorStyleLineWidth": 1, + // the same colors as above but more visible + "indentRainbow.colors": [ + "rgba(255,255,64,0.3)", + "rgba(127,255,127,0.3)", + "rgba(255,127,255,0.3)", + "rgba(79,236,236,0.3)" +``` + +> For this addition, a big thank you goes to Christian Hoock [wk1](https://github.com/wk1). He also added the editor window reload on config changes. + +### Hiding error highlighting + +Skip error highlighting for RegEx patterns. For example, you may want to turn off the indent errors for JSDoc's valid additional space (disabled by default), or comment lines beginning with `//` + +```js + // Example of regular expression in JSON (note double backslash to escape characters) + "indentRainbow.ignoreLinePatterns" : [ + "/[ \t]* [*]/g", // lines begining with * + "/[ \t]+[/]{2}/g" // lines begininning with // + ] +``` + +Skip error highlighting for some or all languages. For example, you may want to turn off the indent errors for `markdown` and `haskell` (which is the default) + +```js + "indentRainbow.ignoreErrorLanguages" : [ + "markdown", + "haskell" + ] +``` + +If error color is disabled, indent colors will be rendered until the length of rendered characters (white spaces, tabs, and other ones) is divisible by tabsize. Turn on this option to render white spaces and tabs only. + +```js + "indentRainbow.colorOnWhiteSpaceOnly": true // false is the default +``` + +Build with: + +``` +npm install +npm run vscode:prepublish +``` + +Running `npm run compile` makes the compiler recompile on file change. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/assets/example.png b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/assets/example.png new file mode 100644 index 0000000000000000000000000000000000000000..3e8deedf507e9f2acd179986b42873d97f28b4b3 GIT binary patch literal 125386 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"use strict";var e={496:e=>{e.exports=require("vscode")}},o={};function n(t){var i=o[t];if(void 0!==i)return i.exports;var r=o[t]={exports:{}};return e[t](r,r.exports,n),r.exports}var t={};(()=>{var e=t;Object.defineProperty(e,"__esModule",{value:!0}),e.activate=void 0;const o=n(496);e.activate=function(e){let n=[],t=!1,i=!1,r=null,a=!1,c=o.window.activeTextEditor;const d=o.workspace.getConfiguration("indentRainbow").errorColor||"rgba(128,32,32,0.3)",s=o.window.createTextEditorDecorationType({backgroundColor:d}),u=o.workspace.getConfiguration("indentRainbow").tabmixColor||"",g=""!==u?o.window.createTextEditorDecorationType({backgroundColor:u}):null,l=o.workspace.getConfiguration("indentRainbow").ignoreLinePatterns||[],w=o.workspace.getConfiguration("indentRainbow").colorOnWhiteSpaceOnly||!1,f=o.workspace.getConfiguration("indentRainbow").indicatorStyle||"classic",p=o.workspace.getConfiguration("indentRainbow").lightIndicatorStyleLineWidth||1;function h(){var e=o.workspace.getConfiguration("indentRainbow").ignoreErrorLanguages||[];a=!1,0!==e.length&&(-1===e.indexOf("*")&&-1===e.indexOf(r)||(a=!0))}function x(){if(c&&r!==c.document.languageId){var e=o.workspace.getConfiguration("indentRainbow").includedLanguages||[],a=o.workspace.getConfiguration("indentRainbow").excludedLanguages||[];r=c.document.languageId,t=!0,0!==e.length&&-1===e.indexOf(r)&&(t=!1),t&&0!==a.length&&-1!==a.indexOf(r)&&(t=!1)}if(i&&!t){var d=[];for(let e of n)c.setDecorations(e,d);i=!1}return h(),t}(o.workspace.getConfiguration("indentRainbow").colors||["rgba(255,255,64,0.07)","rgba(127,255,127,0.07)","rgba(255,127,255,0.07)","rgba(79,236,236,0.07)"]).forEach(((e,t)=>{"classic"===f?n[t]=o.window.createTextEditorDecorationType({backgroundColor:e}):"light"===f&&(n[t]=o.window.createTextEditorDecorationType({borderStyle:"solid",borderColor:e,borderWidth:`0 0 0 ${p}px`}))})),l.forEach(((e,o)=>{if("string"==typeof e){var n=e.match(/^\/(.*?)\/([gim]*)$/);l[o]=n?new RegExp(n[1],n[2]):new RegExp(e)}})),c&&h(),c&&x()&&v(),o.window.onDidChangeActiveTextEditor((e=>{c=e,e&&h(),e&&x()&&v()}),null,e.subscriptions),o.workspace.onDidChangeTextDocument((e=>{c&&h(),c&&e.document===c.document&&x()&&v()}),null,e.subscriptions);var b=null;function v(){b&&clearTimeout(b);var e=o.workspace.getConfiguration("indentRainbow").updateDelay||100;b=setTimeout(m,e)}function m(){if(!c)return;var e=/^[\t ]+/gm,t=c.document.getText(),r=c.options.tabSize,d=4;"auto"!==r&&(d=+r);var u=" ".repeat(d);const f=[];let p=[],h=g?[]:null,x=[];var b,v;n.forEach((()=>{x.push([])})),a||l.forEach((e=>{for(;v=e.exec(t);){const e=c.document.positionAt(v.index),o=c.document.lineAt(e).lineNumber;f.push(o)}}));for(var m=new RegExp("\t","g");b=e.exec(t);){const e=c.document.positionAt(b.index),n=c.document.lineAt(e).lineNumber;let t=a||-1!==f.indexOf(n);var C=b[0],k=b[0].replace(m,u).length;if(t||k%d==0)for(var R=b[0],E=R.length,T=0,y=0;yE&&(y=E),L=c.document.positionAt(b.index+y),M={range:new o.Range(O,L),hoverMessage:null};var D=0,A=0;if(!t&&h&&(A=C.split("\t").length-1)&&(D=C.split(" ").length-1),D>0&&A>0)h.push(M);else{let e=T%x.length;x[e].push(M)}T++}else{var O=c.document.positionAt(b.index),L=c.document.positionAt(b.index+b[0].length),M={range:new o.Range(O,L),hoverMessage:null};p.push(M)}}n.forEach(((e,o)=>{c.setDecorations(e,x[o])})),c.setDecorations(s,p),g&&c.setDecorations(g,h),i=!0}o.workspace.onDidChangeConfiguration((e=>{if(e.affectsConfiguration("indentRainbow")){const e=["Reload now","Later"];o.window.showInformationMessage("The VSCode window needs to reload for the changes to take effect. Would you like to reload the window now?",...e).then((n=>{n===e[0]&&o.commands.executeCommand("workbench.action.reloadWindow")}))}}))}})();var i=exports;for(var r in t)i[r]=t[r];t.__esModule&&Object.defineProperty(i,"__esModule",{value:!0})})(); \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/LICENSE new file mode 100644 index 00000000..a0a52cfc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Alexander C. Mingoia +Copyright (c) 2019-present Nick Baugh and Koajs 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. \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/README.md new file mode 100644 index 00000000..47c0dd8e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/README.md @@ -0,0 +1,55 @@ +# [@koa/router](https://github.com/koajs/router) + +> Router middleware for [Koa](https://github.com/koajs/koa). + +[![NPM version](https://img.shields.io/npm/v/@koa/router.svg?style=flat)](https://npmjs.org/package/@koa/router) +[![NPM Downloads](https://img.shields.io/npm/dm/@koa/router.svg?style=flat)](https://npmjs.org/package/@koa/router) +[![Node.js Version](https://img.shields.io/node/v/@koa/router.svg?style=flat)](http://nodejs.org/download/) +[![Build Status](https://img.shields.io/travis/koajs/router.svg?style=flat)](http://travis-ci.org/koajs/router) +[![gitter](https://img.shields.io/gitter/room/koajs/koa.svg?style=flat)](https://gitter.im/koajs/koa) + +* Express-style routing (`app.get`, `app.put`, `app.post`, etc.) +* Named URL parameters +* Named routes with URL generation +* Responds to `OPTIONS` requests with allowed methods +* Support for `405 Method Not Allowed` and `501 Not Implemented` +* Multiple route middleware +* Multiple and nestable routers +* `async/await` support + +## Migrating to 7 / Koa 2 + +- The API has changed to match the new promise-based middleware + signature of koa 2. See the [koa 2.x readme](https://github.com/koajs/koa/tree/2.0.0-alpha.3) for more + information. +- Middleware is now always run in the order declared by `.use()` (or `.get()`, + etc.), which matches Express 4 API. + +## Installation + +```bash +# npm .. +npm i @koa/router +# yarn .. +yarn add @koa/router +``` + +## [API Reference](./API.md) + +## Contributing + +Please submit all issues and pull requests to the [koajs/router](http://github.com/koajs/router) repository! + +## Support + +If you have any problem or suggestion please open an issue [here](https://github.com/koajs/router/issues). + +## Call for Maintainers + +This module is forked from the original [koa-router](https://github.com/ZijianHe/koa-router) due to its lack of activity. `koa-router` is the most widely used router module in the Koa community and we need maintainers. If you're interested in fixing bugs or implementing new features feel free to open a pull request. We'll be adding active contributors as collaborators. + +Thanks to the original authors @alexmingoia and the original team for their great work. + +### License + +[MIT](LICENSE) \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/history.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/history.md new file mode 100644 index 00000000..cb85e77d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/history.md @@ -0,0 +1,157 @@ +9.0.0 / 2020-04-09 +================== + +- Update `path-to-regexp`. Migration path: change usage of `'*'` in routes to `(.*)` or `:splat*`. + - Example: `router.get('*', ....)` becomes `router.get('(.*)') ....)` + + +8.0.0 / 2019-06-16 +================== + +**others** + * [[`b5dd5e8`](http://github.com/koajs/koa-router/commit/b5dd5e8f00e841b7061a62ab6228cbe96a999470)] - chore: rename to @koa/router (dead-horse <>) + +------------- + +# Changelogs inherit from koa-router. + +## 7.4.0 + +- Fix router.url() for multiple nested routers [#407](https://github.com/alexmingoia/koa-router/pull/407) +- `layer.name` added to `ctx` at `ctx.routerName` during routing [#412](https://github.com/alexmingoia/koa-router/pull/412) +- Router.use() was erroneously settings `(.*)` as a prefix to all routers nested with .use that did not pass an explicit prefix string as the first argument. This resulted in routes being matched that should not have been, included the running of multiple route handlers in error. [#369](https://github.com/alexmingoia/koa-router/issues/369) and [#410](https://github.com/alexmingoia/koa-router/issues/410) include information on this issue. + +## 7.3.0 + +- Router#url() now accepts query parameters to add to generated urls [#396](https://github.com/alexmingoia/koa-router/pull/396) + +## 7.2.1 + +- Respond to CORS preflights with 200, 0 length body [#359](https://github.com/alexmingoia/koa-router/issues/359) + +## 7.2.0 + +- Fix a bug in Router#url and append Router object to ctx. [#350](https://github.com/alexmingoia/koa-router/pull/350) +- Adds `_matchedRouteName` to context [#337](https://github.com/alexmingoia/koa-router/pull/337) +- Respond to CORS preflights with 200, 0 length body [#359](https://github.com/alexmingoia/koa-router/issues/359) + +## 7.1.1 + +- Fix bug where param handlers were run out of order [#282](https://github.com/alexmingoia/koa-router/pull/282) + +## 7.1.0 + +- Backports: merge 5.4 work into the 7.x upstream. See 5.4.0 updates for more details. + +## 7.0.1 + +- Fix: allowedMethods should be ctx.method not this.method [#215](https://github.com/alexmingoia/koa-router/pull/215) + +## 7.0.0 + +- The API has changed to match the new promise-based middleware + signature of koa 2. See the + [koa 2.x readme](https://github.com/koajs/koa/tree/2.0.0-alpha.3) for more + information. +- Middleware is now always run in the order declared by `.use()` (or `.get()`, + etc.), which matches Express 4 API. + +## 5.4.0 + +- Expose matched route at `ctx._matchedRoute`. + +## 5.3.0 + +- Register multiple routes with array of paths [#203](https://github.com/alexmingoia/koa-router/issue/143). +- Improved router.url() [#143](https://github.com/alexmingoia/koa-router/pull/143) +- Adds support for named routes and regular expressions + [#152](https://github.com/alexmingoia/koa-router/pull/152) +- Add support for custom throw functions for 405 and 501 responses [#206](https://github.com/alexmingoia/koa-router/pull/206) + +## 5.2.3 + +- Fix for middleware running twice when nesting routes [#184](https://github.com/alexmingoia/koa-router/issues/184) + +## 5.2.2 + +- Register routes without params before those with params [#183](https://github.com/alexmingoia/koa-router/pull/183) +- Fix for allowed methods [#182](https://github.com/alexmingoia/koa-router/issues/182) + +## 5.2.0 + +- Add support for async/await. Resolves [#130](https://github.com/alexmingoia/koa-router/issues/130). +- Add support for array of paths by Router#use(). Resolves [#175](https://github.com/alexmingoia/koa-router/issues/175). +- Inherit param middleware when nesting routers. Fixes [#170](https://github.com/alexmingoia/koa-router/issues/170). +- Default router middleware without path to root. Fixes [#161](https://github.com/alexmingoia/koa-router/issues/161), [#155](https://github.com/alexmingoia/koa-router/issues/155), [#156](https://github.com/alexmingoia/koa-router/issues/156). +- Run nested router middleware after parent's. Fixes [#156](https://github.com/alexmingoia/koa-router/issues/156). +- Remove dependency on koa-compose. + +## 5.1.1 + +- Match routes in order they were defined. Fixes #131. + +## 5.1.0 + +- Support mounting router middleware at a given path. + +## 5.0.1 + +- Fix bug with missing parameters when nesting routers. + +## 5.0.0 + +- Remove confusing API for extending koa app with router methods. Router#use() + does not have the same behavior as app#use(). +- Add support for nesting routes. +- Remove support for regular expression routes to achieve nestable routers and + enable future trie-based routing optimizations. + +## 4.3.2 + +- Do not send 405 if route matched but status is 404. Fixes #112, closes #114. + +## 4.3.1 + +- Do not run middleware if not yielded to by previous middleware. Fixes #115. + +## 4.3.0 + +- Add support for router prefixes. +- Add MIT license. + +## 4.2.0 + +- Fixed issue with router middleware being applied even if no route was +matched. +- Router.url - new static method to generate url from url pattern and data + +## 4.1.0 + +Private API changed to separate context parameter decoration from route +matching. `Router#match` and `Route#match` are now pure functions that return +an array of routes that match the URL path. + +For modules using this private API that need to determine if a method and path +match a route, `route.methods` must be checked against the routes returned from +`router.match()`: + +```javascript +var matchedRoute = router.match(path).filter(function (route) { + return ~route.methods.indexOf(method); +}).shift(); +``` + +## 4.0.0 + +405, 501, and OPTIONS response handling was moved into separate middleware +`router.allowedMethods()`. This resolves incorrect 501 or 405 responses when +using multiple routers. + +### Breaking changes + +4.x is mostly backwards compatible with 3.x, except for the following: + +- Instantiating a router with `new` and `app` returns the router instance, + whereas 3.x returns the router middleware. When creating a router in 4.x, the + only time router middleware is returned is when creating using the + `Router(app)` signature (with `app` and without `new`). diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/lib/API_tpl.hbs b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/lib/API_tpl.hbs new file mode 100644 index 00000000..82c7b986 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/lib/API_tpl.hbs @@ -0,0 +1,7 @@ + +## API Reference +{{#module name="koa-router"~}} + {{>body~}} + {{>member-index~}} + {{>members~}} +{{/module~}} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/lib/layer.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/lib/layer.js new file mode 100644 index 00000000..02724e38 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/lib/layer.js @@ -0,0 +1,238 @@ +const { pathToRegexp, compile, parse } = require('path-to-regexp'); +const { parse: parseUrl, format: formatUrl } = require('url'); + +module.exports = Layer; + +/** + * Initialize a new routing Layer with given `method`, `path`, and `middleware`. + * + * @param {String|RegExp} path Path string or regular expression. + * @param {Array} methods Array of HTTP verbs. + * @param {Array} middleware Layer callback/middleware or series of. + * @param {Object=} opts + * @param {String=} opts.name route name + * @param {String=} opts.sensitive case sensitive (default: false) + * @param {String=} opts.strict require the trailing slash (default: false) + * @returns {Layer} + * @private + */ + +function Layer(path, methods, middleware, opts) { + this.opts = opts || {}; + this.name = this.opts.name || null; + this.methods = []; + this.paramNames = []; + this.stack = Array.isArray(middleware) ? middleware : [middleware]; + + for (let i = 0; i < methods.length; i++) { + const l = this.methods.push(methods[i].toUpperCase()); + if (this.methods[l - 1] === 'GET') this.methods.unshift('HEAD'); + } + + // ensure middleware is a function + for (let i = 0; i < this.stack.length; i++) { + const fn = this.stack[i]; + const type = (typeof fn); + if (type !== 'function') + throw new Error( + `${methods.toString()} \`${this.opts.name || path}\`: \`middleware\` must be a function, not \`${type}\`` + ); + } + + this.path = path; + this.regexp = pathToRegexp(path, this.paramNames, this.opts); +}; + +/** + * Returns whether request `path` matches route. + * + * @param {String} path + * @returns {Boolean} + * @private + */ + +Layer.prototype.match = function (path) { + return this.regexp.test(path); +}; + +/** + * Returns map of URL parameters for given `path` and `paramNames`. + * + * @param {String} path + * @param {Array.} captures + * @param {Object=} existingParams + * @returns {Object} + * @private + */ + +Layer.prototype.params = function (path, captures, existingParams) { + const params = existingParams || {}; + + for (let len = captures.length, i = 0; i < len; i++) { + if (this.paramNames[i]) { + const c = captures[i]; + if (c && c.length !== 0) params[this.paramNames[i].name] = c ? safeDecodeURIComponent(c) : c; + } + } + + return params; +}; + +/** + * Returns array of regexp url path captures. + * + * @param {String} path + * @returns {Array.} + * @private + */ + +Layer.prototype.captures = function (path) { + return this.opts.ignoreCaptures ? [] : path.match(this.regexp).slice(1); +}; + +/** + * Generate URL for route using given `params`. + * + * @example + * + * ```javascript + * const route = new Layer('/users/:id', ['GET'], fn); + * + * route.url({ id: 123 }); // => "/users/123" + * ``` + * + * @param {Object} params url parameters + * @returns {String} + * @private + */ + +Layer.prototype.url = function (params, options) { + let args = params; + const url = this.path.replace(/\(\.\*\)/g, ''); + + if (typeof params != 'object') { + args = Array.prototype.slice.call(arguments); + if (typeof args[args.length - 1] == 'object') { + options = args[args.length - 1]; + args = args.slice(0, args.length - 1); + } + } + + const toPath = compile(url, options); + let replaced; + + const tokens = parse(url); + let replace = {}; + + if (args instanceof Array) { + for (let len = tokens.length, i = 0, j = 0; i < len; i++) { + if (tokens[i].name) replace[tokens[i].name] = args[j++]; + } + } else if (tokens.some(token => token.name)) { + replace = params; + } else if (!options) { + options = params; + } + + replaced = toPath(replace); + + if (options && options.query) { + replaced = parseUrl(replaced); + if (typeof options.query === 'string') { + replaced.search = options.query; + } else { + replaced.search = undefined; + replaced.query = options.query; + } + return formatUrl(replaced); + } + + return replaced; +}; + +/** + * Run validations on route named parameters. + * + * @example + * + * ```javascript + * router + * .param('user', function (id, ctx, next) { + * ctx.user = users[id]; + * if (!user) return ctx.status = 404; + * next(); + * }) + * .get('/users/:user', function (ctx, next) { + * ctx.body = ctx.user; + * }); + * ``` + * + * @param {String} param + * @param {Function} middleware + * @returns {Layer} + * @private + */ + +Layer.prototype.param = function (param, fn) { + const stack = this.stack; + const params = this.paramNames; + const middleware = function (ctx, next) { + return fn.call(this, ctx.params[param], ctx, next); + }; + middleware.param = param; + + const names = params.map(function (p) { + return p.name; + }); + + const x = names.indexOf(param); + if (x > -1) { + // iterate through the stack, to figure out where to place the handler fn + stack.some(function (fn, i) { + // param handlers are always first, so when we find an fn w/o a param property, stop here + // if the param handler at this part of the stack comes after the one we are adding, stop here + if (!fn.param || names.indexOf(fn.param) > x) { + // inject this param handler right before the current item + stack.splice(i, 0, middleware); + return true; // then break the loop + } + }); + } + + return this; +}; + +/** + * Prefix route path. + * + * @param {String} prefix + * @returns {Layer} + * @private + */ + +Layer.prototype.setPrefix = function (prefix) { + if (this.path) { + this.path = (this.path !== '/' || this.opts.strict === true) ? `${prefix}${this.path}` : prefix + this.paramNames = []; + this.regexp = pathToRegexp(this.path, this.paramNames, this.opts); + } + + return this; +}; + +/** + * Safe decodeURIComponent, won't throw any error. + * If `decodeURIComponent` error happen, just return the original value. + * + * @param {String} text + * @returns {String} URL decode original string. + * @private + */ + +function safeDecodeURIComponent(text) { + try { + return decodeURIComponent(text); + } catch (e) { + return text; + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/lib/router.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/lib/router.js new file mode 100644 index 00000000..a7f08711 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/lib/router.js @@ -0,0 +1,753 @@ +/** + * RESTful resource routing middleware for koa. + * + * @author Alex Mingoia + * @link https://github.com/alexmingoia/koa-router + */ + +const debug = require('debug')('koa-router'); +const compose = require('koa-compose'); +const HttpError = require('http-errors'); +const methods = require('methods'); +const Layer = require('./layer'); +const { pathToRegexp } = require('path-to-regexp'); + +/** + * @module koa-router + */ + +module.exports = Router; + +/** + * Create a new router. + * + * @example + * + * Basic usage: + * + * ```javascript + * const Koa = require('koa'); + * const Router = require('@koa/router'); + * + * const app = new Koa(); + * const router = new Router(); + * + * router.get('/', (ctx, next) => { + * // ctx.router available + * }); + * + * app + * .use(router.routes()) + * .use(router.allowedMethods()); + * ``` + * + * @alias module:koa-router + * @param {Object=} opts + * @param {String=} opts.prefix prefix router paths + * @constructor + */ + +function Router(opts) { + if (!(this instanceof Router)) return new Router(opts); + + this.opts = opts || {}; + this.methods = this.opts.methods || [ + 'HEAD', + 'OPTIONS', + 'GET', + 'PUT', + 'PATCH', + 'POST', + 'DELETE' + ]; + + this.params = {}; + this.stack = []; +}; + +/** + * Create `router.verb()` methods, where *verb* is one of the HTTP verbs such + * as `router.get()` or `router.post()`. + * + * Match URL patterns to callback functions or controller actions using `router.verb()`, + * where **verb** is one of the HTTP verbs such as `router.get()` or `router.post()`. + * + * Additionaly, `router.all()` can be used to match against all methods. + * + * ```javascript + * router + * .get('/', (ctx, next) => { + * ctx.body = 'Hello World!'; + * }) + * .post('/users', (ctx, next) => { + * // ... + * }) + * .put('/users/:id', (ctx, next) => { + * // ... + * }) + * .del('/users/:id', (ctx, next) => { + * // ... + * }) + * .all('/users/:id', (ctx, next) => { + * // ... + * }); + * ``` + * + * When a route is matched, its path is available at `ctx._matchedRoute` and if named, + * the name is available at `ctx._matchedRouteName` + * + * Route paths will be translated to regular expressions using + * [path-to-regexp](https://github.com/pillarjs/path-to-regexp). + * + * Query strings will not be considered when matching requests. + * + * #### Named routes + * + * Routes can optionally have names. This allows generation of URLs and easy + * renaming of URLs during development. + * + * ```javascript + * router.get('user', '/users/:id', (ctx, next) => { + * // ... + * }); + * + * router.url('user', 3); + * // => "/users/3" + * ``` + * + * #### Multiple middleware + * + * Multiple middleware may be given: + * + * ```javascript + * router.get( + * '/users/:id', + * (ctx, next) => { + * return User.findOne(ctx.params.id).then(function(user) { + * ctx.user = user; + * next(); + * }); + * }, + * ctx => { + * console.log(ctx.user); + * // => { id: 17, name: "Alex" } + * } + * ); + * ``` + * + * ### Nested routers + * + * Nesting routers is supported: + * + * ```javascript + * const forums = new Router(); + * const posts = new Router(); + * + * posts.get('/', (ctx, next) => {...}); + * posts.get('/:pid', (ctx, next) => {...}); + * forums.use('/forums/:fid/posts', posts.routes(), posts.allowedMethods()); + * + * // responds to "/forums/123/posts" and "/forums/123/posts/123" + * app.use(forums.routes()); + * ``` + * + * #### Router prefixes + * + * Route paths can be prefixed at the router level: + * + * ```javascript + * const router = new Router({ + * prefix: '/users' + * }); + * + * router.get('/', ...); // responds to "/users" + * router.get('/:id', ...); // responds to "/users/:id" + * ``` + * + * #### URL parameters + * + * Named route parameters are captured and added to `ctx.params`. + * + * ```javascript + * router.get('/:category/:title', (ctx, next) => { + * console.log(ctx.params); + * // => { category: 'programming', title: 'how-to-node' } + * }); + * ``` + * + * The [path-to-regexp](https://github.com/pillarjs/path-to-regexp) module is + * used to convert paths to regular expressions. + * + * @name get|put|post|patch|delete|del + * @memberof module:koa-router.prototype + * @param {String} path + * @param {Function=} middleware route middleware(s) + * @param {Function} callback route callback + * @returns {Router} + */ + +for (let i = 0; i < methods.length; i++) { + function setMethodVerb(method) { + Router.prototype[method] = function(name, path, middleware) { + if (typeof path === "string" || path instanceof RegExp) { + middleware = Array.prototype.slice.call(arguments, 2); + } else { + middleware = Array.prototype.slice.call(arguments, 1); + path = name; + name = null; + } + + this.register(path, [method], middleware, { + name: name + }); + + return this; + }; + } + setMethodVerb(methods[i]); +} + +// Alias for `router.delete()` because delete is a reserved word +Router.prototype.del = Router.prototype['delete']; + +/** + * Use given middleware. + * + * Middleware run in the order they are defined by `.use()`. They are invoked + * sequentially, requests start at the first middleware and work their way + * "down" the middleware stack. + * + * @example + * + * ```javascript + * // session middleware will run before authorize + * router + * .use(session()) + * .use(authorize()); + * + * // use middleware only with given path + * router.use('/users', userAuth()); + * + * // or with an array of paths + * router.use(['/users', '/admin'], userAuth()); + * + * app.use(router.routes()); + * ``` + * + * @param {String=} path + * @param {Function} middleware + * @param {Function=} ... + * @returns {Router} + */ + +Router.prototype.use = function () { + const router = this; + const middleware = Array.prototype.slice.call(arguments); + let path; + + // support array of paths + if (Array.isArray(middleware[0]) && typeof middleware[0][0] === 'string') { + let arrPaths = middleware[0]; + for (let i = 0; i < arrPaths.length; i++) { + const p = arrPaths[i]; + router.use.apply(router, [p].concat(middleware.slice(1))); + } + + return this; + } + + const hasPath = typeof middleware[0] === 'string'; + if (hasPath) path = middleware.shift(); + + for (let i = 0; i < middleware.length; i++) { + const m = middleware[i]; + if (m.router) { + const cloneRouter = Object.assign(Object.create(Router.prototype), m.router, { + stack: m.router.stack.slice(0) + }); + + for (let j = 0; j < cloneRouter.stack.length; j++) { + const nestedLayer = cloneRouter.stack[j]; + const cloneLayer = Object.assign( + Object.create(Layer.prototype), + nestedLayer + ); + + if (path) cloneLayer.setPrefix(path); + if (router.opts.prefix) cloneLayer.setPrefix(router.opts.prefix); + router.stack.push(cloneLayer); + cloneRouter.stack[j] = cloneLayer; + } + + if (router.params) { + function setRouterParams(paramArr) { + const routerParams = paramArr; + for (let j = 0; j < routerParams.length; j++) { + const key = routerParams[j]; + cloneRouter.param(key, router.params[key]); + } + } + setRouterParams(Object.keys(router.params)); + } + } else { + const keys = []; + pathToRegexp(router.opts.prefix || '', keys); + const routerPrefixHasParam = router.opts.prefix && keys.length; + router.register(path || '([^\/]*)', [], m, { end: false, ignoreCaptures: !hasPath && !routerPrefixHasParam }); + } + } + + return this; +}; + +/** + * Set the path prefix for a Router instance that was already initialized. + * + * @example + * + * ```javascript + * router.prefix('/things/:thing_id') + * ``` + * + * @param {String} prefix + * @returns {Router} + */ + +Router.prototype.prefix = function (prefix) { + prefix = prefix.replace(/\/$/, ''); + + this.opts.prefix = prefix; + + for (let i = 0; i < this.stack.length; i++) { + const route = this.stack[i]; + route.setPrefix(prefix); + } + + return this; +}; + +/** + * Returns router middleware which dispatches a route matching the request. + * + * @returns {Function} + */ + +Router.prototype.routes = Router.prototype.middleware = function () { + const router = this; + + let dispatch = function dispatch(ctx, next) { + debug('%s %s', ctx.method, ctx.path); + + const path = router.opts.routerPath || ctx.routerPath || ctx.path; + const matched = router.match(path, ctx.method); + let layerChain; + + if (ctx.matched) { + ctx.matched.push.apply(ctx.matched, matched.path); + } else { + ctx.matched = matched.path; + } + + ctx.router = router; + + if (!matched.route) return next(); + + const matchedLayers = matched.pathAndMethod + const mostSpecificLayer = matchedLayers[matchedLayers.length - 1] + ctx._matchedRoute = mostSpecificLayer.path; + if (mostSpecificLayer.name) { + ctx._matchedRouteName = mostSpecificLayer.name; + } + + layerChain = matchedLayers.reduce(function(memo, layer) { + memo.push(function(ctx, next) { + ctx.captures = layer.captures(path, ctx.captures); + ctx.params = ctx.request.params = layer.params(path, ctx.captures, ctx.params); + ctx.routerPath = layer.path; + ctx.routerName = layer.name; + ctx._matchedRoute = layer.path; + if (layer.name) { + ctx._matchedRouteName = layer.name; + } + return next(); + }); + return memo.concat(layer.stack); + }, []); + + return compose(layerChain)(ctx, next); + }; + + dispatch.router = this; + + return dispatch; +}; + +/** + * Returns separate middleware for responding to `OPTIONS` requests with + * an `Allow` header containing the allowed methods, as well as responding + * with `405 Method Not Allowed` and `501 Not Implemented` as appropriate. + * + * @example + * + * ```javascript + * const Koa = require('koa'); + * const Router = require('@koa/router'); + * + * const app = new Koa(); + * const router = new Router(); + * + * app.use(router.routes()); + * app.use(router.allowedMethods()); + * ``` + * + * **Example with [Boom](https://github.com/hapijs/boom)** + * + * ```javascript + * const Koa = require('koa'); + * const Router = require('@koa/router'); + * const Boom = require('boom'); + * + * const app = new Koa(); + * const router = new Router(); + * + * app.use(router.routes()); + * app.use(router.allowedMethods({ + * throw: true, + * notImplemented: () => new Boom.notImplemented(), + * methodNotAllowed: () => new Boom.methodNotAllowed() + * })); + * ``` + * + * @param {Object=} options + * @param {Boolean=} options.throw throw error instead of setting status and header + * @param {Function=} options.notImplemented throw the returned value in place of the default NotImplemented error + * @param {Function=} options.methodNotAllowed throw the returned value in place of the default MethodNotAllowed error + * @returns {Function} + */ + +Router.prototype.allowedMethods = function (options) { + options = options || {}; + const implemented = this.methods; + + return function allowedMethods(ctx, next) { + return next().then(function() { + const allowed = {}; + + if (!ctx.status || ctx.status === 404) { + for (let i = 0; i < ctx.matched.length; i++) { + const route = ctx.matched[i]; + for (let j = 0; j < route.methods.length; j++) { + const method = route.methods[j]; + allowed[method] = method; + } + } + + const allowedArr = Object.keys(allowed); + + if (!~implemented.indexOf(ctx.method)) { + if (options.throw) { + let notImplementedThrowable = (typeof options.notImplemented === 'function') + ? options.notImplemented() // set whatever the user returns from their function + : new HttpError.NotImplemented(); + + throw notImplementedThrowable; + } else { + ctx.status = 501; + ctx.set('Allow', allowedArr.join(', ')); + } + } else if (allowedArr.length) { + if (ctx.method === 'OPTIONS') { + ctx.status = 200; + ctx.body = ''; + ctx.set('Allow', allowedArr.join(', ')); + } else if (!allowed[ctx.method]) { + if (options.throw) { + let notAllowedThrowable = (typeof options.methodNotAllowed === 'function') + ? options.methodNotAllowed() // set whatever the user returns from their function + : new HttpError.MethodNotAllowed(); + + throw notAllowedThrowable; + } else { + ctx.status = 405; + ctx.set('Allow', allowedArr.join(', ')); + } + } + } + } + }); + }; +}; + +/** + * Register route with all methods. + * + * @param {String} name Optional. + * @param {String} path + * @param {Function=} middleware You may also pass multiple middleware. + * @param {Function} callback + * @returns {Router} + * @private + */ + +Router.prototype.all = function (name, path, middleware) { + if (typeof path === 'string') { + middleware = Array.prototype.slice.call(arguments, 2); + } else { + middleware = Array.prototype.slice.call(arguments, 1); + path = name; + name = null; + } + + this.register(path, methods, middleware, { name }); + + return this; +}; + +/** + * Redirect `source` to `destination` URL with optional 30x status `code`. + * + * Both `source` and `destination` can be route names. + * + * ```javascript + * router.redirect('/login', 'sign-in'); + * ``` + * + * This is equivalent to: + * + * ```javascript + * router.all('/login', ctx => { + * ctx.redirect('/sign-in'); + * ctx.status = 301; + * }); + * ``` + * + * @param {String} source URL or route name. + * @param {String} destination URL or route name. + * @param {Number=} code HTTP status code (default: 301). + * @returns {Router} + */ + +Router.prototype.redirect = function (source, destination, code) { + // lookup source route by name + if (source[0] !== '/') source = this.url(source); + + // lookup destination route by name + if (destination[0] !== '/' && !destination.includes('://')) destination = this.url(destination); + + return this.all(source, ctx => { + ctx.redirect(destination); + ctx.status = code || 301; + }); +}; + +/** + * Create and register a route. + * + * @param {String} path Path string. + * @param {Array.} methods Array of HTTP verbs. + * @param {Function} middleware Multiple middleware also accepted. + * @returns {Layer} + * @private + */ + +Router.prototype.register = function (path, methods, middleware, opts) { + opts = opts || {}; + + const router = this; + const stack = this.stack; + + // support array of paths + if (Array.isArray(path)) { + for (let i = 0; i < path.length; i++) { + const curPath = path[i]; + router.register.call(router, curPath, methods, middleware, opts); + } + + return this; + } + + // create route + const route = new Layer(path, methods, middleware, { + end: opts.end === false ? opts.end : true, + name: opts.name, + sensitive: opts.sensitive || this.opts.sensitive || false, + strict: opts.strict || this.opts.strict || false, + prefix: opts.prefix || this.opts.prefix || "", + ignoreCaptures: opts.ignoreCaptures + }); + + if (this.opts.prefix) { + route.setPrefix(this.opts.prefix); + } + + // add parameter middleware + for (let i = 0; i < Object.keys(this.params).length; i++) { + const param = Object.keys(this.params)[i]; + route.param(param, this.params[param]); + } + + stack.push(route); + + debug('defined route %s %s', route.methods, route.path); + + return route; +}; + +/** + * Lookup route with given `name`. + * + * @param {String} name + * @returns {Layer|false} + */ + +Router.prototype.route = function (name) { + const routes = this.stack; + + for (let len = routes.length, i=0; i { + * // ... + * }); + * + * router.url('user', 3); + * // => "/users/3" + * + * router.url('user', { id: 3 }); + * // => "/users/3" + * + * router.use((ctx, next) => { + * // redirect to named route + * ctx.redirect(ctx.router.url('sign-in')); + * }) + * + * router.url('user', { id: 3 }, { query: { limit: 1 } }); + * // => "/users/3?limit=1" + * + * router.url('user', { id: 3 }, { query: "limit=1" }); + * // => "/users/3?limit=1" + * ``` + * + * @param {String} name route name + * @param {Object} params url parameters + * @param {Object} [options] options parameter + * @param {Object|String} [options.query] query options + * @returns {String|Error} + */ + +Router.prototype.url = function (name, params) { + const route = this.route(name); + + if (route) { + const args = Array.prototype.slice.call(arguments, 1); + return route.url.apply(route, args); + } + + return new Error(`No route found for name: ${name}`); +}; + +/** + * Match given `path` and return corresponding routes. + * + * @param {String} path + * @param {String} method + * @returns {Object.} returns layers that matched path and + * path and method. + * @private + */ + +Router.prototype.match = function (path, method) { + const layers = this.stack; + let layer; + const matched = { + path: [], + pathAndMethod: [], + route: false + }; + + for (let len = layers.length, i = 0; i < len; i++) { + layer = layers[i]; + + debug('test %s %s', layer.path, layer.regexp); + + if (layer.match(path)) { + matched.path.push(layer); + + if (layer.methods.length === 0 || ~layer.methods.indexOf(method)) { + matched.pathAndMethod.push(layer); + if (layer.methods.length) matched.route = true; + } + } + } + + return matched; +}; + +/** + * Run middleware for named route parameters. Useful for auto-loading or + * validation. + * + * @example + * + * ```javascript + * router + * .param('user', (id, ctx, next) => { + * ctx.user = users[id]; + * if (!ctx.user) return ctx.status = 404; + * return next(); + * }) + * .get('/users/:user', ctx => { + * ctx.body = ctx.user; + * }) + * .get('/users/:user/friends', ctx => { + * return ctx.user.getFriends().then(function(friends) { + * ctx.body = friends; + * }); + * }) + * // /users/3 => {"id": 3, "name": "Alex"} + * // /users/3/friends => [{"id": 4, "name": "TJ"}] + * ``` + * + * @param {String} param + * @param {Function} middleware + * @returns {Router} + */ + +Router.prototype.param = function(param, middleware) { + this.params[param] = middleware; + for (let i = 0; i < this.stack.length; i++) { + const route = this.stack[i]; + route.param(param, middleware); + } + + return this; +}; + +/** + * Generate URL from url pattern and given `params`. + * + * @example + * + * ```javascript + * const url = Router.url('/users/:id', {id: 1}); + * // => "/users/1" + * ``` + * + * @param {String} path url pattern + * @param {Object} params url parameters + * @returns {String} + */ +Router.url = function (path) { + const args = Array.prototype.slice.call(arguments, 1); + return Layer.prototype.url.apply({ path }, args); +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/package.json new file mode 100644 index 00000000..9e0d0c96 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@koa/router/package.json @@ -0,0 +1,85 @@ +{ + "_args": [ + [ + "@koa/router@10.1.1", + "/tmp/repository/main" + ] + ], + "_from": "@koa/router@10.1.1", + "_id": "@koa/router@10.1.1", + "_inBundle": false, + "_integrity": "sha512-ORNjq5z4EmQPriKbR0ER3k4Gh7YGNhWDL7JBW+8wXDrHLbWYKYSJaOJ9aN06npF5tbTxe2JBOsurpJDAvjiXKw==", + "_location": "/@koa/router", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "@koa/router@10.1.1", + "name": "@koa/router", + "escapedName": "@koa%2frouter", + "scope": "@koa", + "rawSpec": "10.1.1", + "saveSpec": null, + "fetchSpec": "10.1.1" + }, + "_requiredBy": [ + "/@vscode/test-web" + ], + "_resolved": "https://registry.npmjs.org/@koa/router/-/router-10.1.1.tgz", + "_spec": "10.1.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Alex Mingoia", + "email": "talk@alexmingoia.com" + }, + "bugs": { + "url": "https://github.com/koajs/router/issues", + "email": "niftylettuce@gmail.com" + }, + "dependencies": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "koa-compose": "^4.1.0", + "methods": "^1.1.2", + "path-to-regexp": "^6.1.0" + }, + "description": "Router middleware for koa. Provides RESTful resource routing.", + "devDependencies": { + "@ladjs/env": "^1.0.0", + "expect.js": "^0.3.1", + "jsdoc-to-markdown": "^5.0.3", + "koa": "^2.11.0", + "mocha": "^7.0.1", + "nyc": "^15.0.0", + "should": "^13.2.3", + "supertest": "^4.0.2", + "wrk": "^1.2.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/koajs/router", + "keywords": [ + "koa", + "middleware", + "route", + "router" + ], + "license": "MIT", + "main": "lib/router.js", + "name": "@koa/router", + "repository": { + "type": "git", + "url": "git+https://github.com/koajs/router.git" + }, + "scripts": { + "bench": "make -C bench", + "coverage": "nyc npm run test", + "docs": "NODE_ENV=test jsdoc2md -t ./lib/API_tpl.hbs --src ./lib/*.js >| API.md", + "test": "mocha test/**/*.js" + }, + "version": "10.1.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@tootallnate/once/dist/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@tootallnate/once/dist/index.js new file mode 100644 index 00000000..bfd0dc88 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@tootallnate/once/dist/index.js @@ -0,0 +1,39 @@ +"use strict"; +function noop() { } +function once(emitter, name) { + const o = once.spread(emitter, name); + const r = o.then((args) => args[0]); + r.cancel = o.cancel; + return r; +} +(function (once) { + function spread(emitter, name) { + let c = null; + const p = new Promise((resolve, reject) => { + function cancel() { + emitter.removeListener(name, onEvent); + emitter.removeListener('error', onError); + p.cancel = noop; + } + function onEvent(...args) { + cancel(); + resolve(args); + } + function onError(err) { + cancel(); + reject(err); + } + c = cancel; + emitter.on(name, onEvent); + emitter.on('error', onError); + }); + if (!c) { + throw new TypeError('Could not get `cancel()` function'); + } + p.cancel = c; + return p; + } + once.spread = spread; +})(once || (once = {})); +module.exports = once; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@tootallnate/once/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@tootallnate/once/package.json new file mode 100644 index 00000000..36610a48 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@tootallnate/once/package.json @@ -0,0 +1,79 @@ +{ + "_args": [ + [ + "@tootallnate/once@1.1.2", + "/tmp/repository/main" + ] + ], + "_from": "@tootallnate/once@1.1.2", + "_id": "@tootallnate/once@1.1.2", + "_inBundle": false, + "_integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "_location": "/@tootallnate/once", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "@tootallnate/once@1.1.2", + "name": "@tootallnate/once", + "escapedName": "@tootallnate%2fonce", + "scope": "@tootallnate", + "rawSpec": "1.1.2", + "saveSpec": null, + "fetchSpec": "1.1.2" + }, + "_requiredBy": [ + "/http-proxy-agent" + ], + "_resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "_spec": "1.1.2", + "_where": "/tmp/repository/main", + "author": { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io/" + }, + "bugs": { + "url": "https://github.com/TooTallNate/once/issues" + }, + "description": "Creates a Promise that waits for a single event", + "devDependencies": { + "@types/node": "^12.12.11", + "@typescript-eslint/eslint-plugin": "1.6.0", + "@typescript-eslint/parser": "1.1.0", + "eslint": "5.16.0", + "eslint-config-airbnb": "17.1.0", + "eslint-config-prettier": "4.1.0", + "eslint-import-resolver-typescript": "1.1.1", + "eslint-plugin-import": "2.16.0", + "eslint-plugin-jsx-a11y": "6.2.1", + "eslint-plugin-react": "7.12.4", + "mocha": "^6.2.2", + "rimraf": "^3.0.0", + "typescript": "^3.7.3" + }, + "engines": { + "node": ">= 6" + }, + "files": [ + "dist" + ], + "homepage": "https://github.com/TooTallNate/once#readme", + "keywords": [], + "license": "MIT", + "main": "./dist/index.js", + "name": "@tootallnate/once", + "repository": { + "type": "git", + "url": "git://github.com/TooTallNate/once.git" + }, + "scripts": { + "build": "tsc", + "prebuild": "rimraf dist", + "prepublishOnly": "npm run build", + "test": "mocha --reporter spec", + "test-lint": "eslint src --ext .js,.ts" + }, + "types": "./dist/index.d.ts", + "version": "1.1.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/node/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/node/LICENSE new file mode 100755 index 00000000..9e841e7a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/node/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/node/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/node/README.md new file mode 100755 index 00000000..cf403d49 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/node/README.md @@ -0,0 +1,16 @@ +# Installation +> `npm install --save @types/node` + +# Summary +This package contains type definitions for Node.js (https://nodejs.org/). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node/v12. + +### Additional Details + * Last updated: Tue, 21 Sep 2021 18:31:42 GMT + * Dependencies: none + * Global values: `Buffer`, `NodeJS`, `__dirname`, `__filename`, `clearImmediate`, `clearInterval`, `clearTimeout`, `console`, `exports`, `global`, `module`, `process`, `queueMicrotask`, `require`, `setImmediate`, `setInterval`, `setTimeout` + +# Credits +These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Hoàng Văn Khải](https://github.com/KSXGitHub), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Zane Hannan AU](https://github.com/ZaneHannanAU), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Minh Son Nguyen](https://github.com/nguymin4), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), and [Jason Kwok](https://github.com/JasonHK). diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/node/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/node/package.json new file mode 100755 index 00000000..b7da7293 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/node/package.json @@ -0,0 +1,203 @@ +{ + "_args": [ + [ + "@types/node@12.20.26", + "/tmp/repository/main" + ] + ], + "_from": "@types/node@12.20.26", + "_id": "@types/node@12.20.26", + "_inBundle": false, + "_integrity": "sha512-gIt+h4u2uTho2bsH1K250fUv5fHU71ET1yWT7bM4523zV/XrFb9jlWBOV4DO8FpscY+Sz/WEr1EEjIP2H4yumQ==", + "_location": "/@types/node", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "@types/node@12.20.26", + "name": "@types/node", + "escapedName": "@types%2fnode", + "scope": "@types", + "rawSpec": "12.20.26", + "saveSpec": null, + "fetchSpec": "12.20.26" + }, + "_requiredBy": [ + "#DEV:/", + "/@types/glob", + "/@types/yauzl", + "/jest-worker" + ], + "_resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.26.tgz", + "_spec": "12.20.26", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues" + }, + "contributors": [ + { + "name": "Microsoft TypeScript", + "url": "https://github.com/Microsoft" + }, + { + "name": "DefinitelyTyped", + "url": "https://github.com/DefinitelyTyped" + }, + { + "name": "Alberto Schiabel", + "url": "https://github.com/jkomyno" + }, + { + "name": "Alvis HT Tang", + "url": "https://github.com/alvis" + }, + { + "name": "Andrew Makarov", + "url": "https://github.com/r3nya" + }, + { + "name": "Benjamin Toueg", + "url": "https://github.com/btoueg" + }, + { + "name": "Chigozirim C.", + "url": "https://github.com/smac89" + }, + { + "name": "David Junger", + "url": "https://github.com/touffy" + }, + { + "name": "Deividas Bakanas", + "url": "https://github.com/DeividasBakanas" + }, + { + "name": "Eugene Y. Q. Shen", + "url": "https://github.com/eyqs" + }, + { + "name": "Hannes Magnusson", + "url": "https://github.com/Hannes-Magnusson-CK" + }, + { + "name": "Hoàng Văn Khải", + "url": "https://github.com/KSXGitHub" + }, + { + "name": "Huw", + "url": "https://github.com/hoo29" + }, + { + "name": "Kelvin Jin", + "url": "https://github.com/kjin" + }, + { + "name": "Klaus Meinhardt", + "url": "https://github.com/ajafff" + }, + { + "name": "Lishude", + "url": "https://github.com/islishude" + }, + { + "name": "Mariusz Wiktorczyk", + "url": "https://github.com/mwiktorczyk" + }, + { + "name": "Mohsen Azimi", + "url": "https://github.com/mohsen1" + }, + { + "name": "Nicolas Even", + "url": "https://github.com/n-e" + }, + { + "name": "Nikita Galkin", + "url": "https://github.com/galkin" + }, + { + "name": "Parambir Singh", + "url": "https://github.com/parambirs" + }, + { + "name": "Sebastian Silbermann", + "url": "https://github.com/eps1lon" + }, + { + "name": "Simon Schick", + "url": "https://github.com/SimonSchick" + }, + { + "name": "Thomas den Hollander", + "url": "https://github.com/ThomasdenH" + }, + { + "name": "Wilco Bakker", + "url": "https://github.com/WilcoBakker" + }, + { + "name": "wwwy3y3", + "url": "https://github.com/wwwy3y3" + }, + { + "name": "Zane Hannan AU", + "url": "https://github.com/ZaneHannanAU" + }, + { + "name": "Samuel Ainsworth", + "url": "https://github.com/samuela" + }, + { + "name": "Kyle Uehlein", + "url": "https://github.com/kuehlein" + }, + { + "name": "Thanik Bhongbhibhat", + "url": "https://github.com/bhongy" + }, + { + "name": "Marcin Kopacz", + "url": "https://github.com/chyzwar" + }, + { + "name": "Trivikram Kamat", + "url": "https://github.com/trivikr" + }, + { + "name": "Minh Son Nguyen", + "url": "https://github.com/nguymin4" + }, + { + "name": "Junxiao Shi", + "url": "https://github.com/yoursunny" + }, + { + "name": "Ilia Baryshnikov", + "url": "https://github.com/qwelias" + }, + { + "name": "ExE Boss", + "url": "https://github.com/ExE-Boss" + }, + { + "name": "Jason Kwok", + "url": "https://github.com/JasonHK" + } + ], + "dependencies": {}, + "description": "TypeScript definitions for Node.js", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node", + "license": "MIT", + "main": "", + "name": "@types/node", + "repository": { + "type": "git", + "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/node" + }, + "scripts": {}, + "typeScriptVersion": "3.7", + "types": "index.d.ts", + "typesPublisherContentHash": "a306840a5ab2bd20920a38042841e53fb66553e7f394ca81bcae00ef7572dd93", + "version": "12.20.26" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/yauzl/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/yauzl/LICENSE new file mode 100755 index 00000000..9e841e7a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/yauzl/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/yauzl/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/yauzl/README.md new file mode 100755 index 00000000..722f7be3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/yauzl/README.md @@ -0,0 +1,16 @@ +# Installation +> `npm install --save @types/yauzl` + +# Summary +This package contains type definitions for yauzl (https://github.com/thejoshwolfe/yauzl). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/yauzl. + +### Additional Details + * Last updated: Fri, 02 Jul 2021 16:32:08 GMT + * Dependencies: [@types/node](https://npmjs.com/package/@types/node) + * Global values: none + +# Credits +These definitions were written by [Florian Keller](https://github.com/ffflorian). diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/yauzl/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/yauzl/package.json new file mode 100755 index 00000000..fe1a7326 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@types/yauzl/package.json @@ -0,0 +1,59 @@ +{ + "_args": [ + [ + "@types/yauzl@2.9.2", + "/tmp/repository/main" + ] + ], + "_from": "@types/yauzl@2.9.2", + "_id": "@types/yauzl@2.9.2", + "_inBundle": false, + "_integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "_location": "/@types/yauzl", + "_optional": true, + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "@types/yauzl@2.9.2", + "name": "@types/yauzl", + "escapedName": "@types%2fyauzl", + "scope": "@types", + "rawSpec": "2.9.2", + "saveSpec": null, + "fetchSpec": "2.9.2" + }, + "_requiredBy": [ + "/extract-zip" + ], + "_resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "_spec": "2.9.2", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues" + }, + "contributors": [ + { + "name": "Florian Keller", + "url": "https://github.com/ffflorian" + } + ], + "dependencies": { + "@types/node": "*" + }, + "description": "TypeScript definitions for yauzl", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/yauzl", + "license": "MIT", + "main": "", + "name": "@types/yauzl", + "repository": { + "type": "git", + "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/yauzl" + }, + "scripts": {}, + "typeScriptVersion": "3.6", + "types": "index.d.ts", + "typesPublisherContentHash": "66e9dbfe16bce3e314bf2f77c0f250a6ef6a082062b3dc253fbaa9451e1de452", + "version": "2.9.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/CHANGELOG.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/CHANGELOG.md new file mode 100644 index 00000000..c1eaa1a8 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +### 0.0.1 | + +- Initial version + + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/LICENSE new file mode 100644 index 00000000..4b3ba9df --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Microsoft Corporation. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/README.md new file mode 100644 index 00000000..7c6759a8 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/README.md @@ -0,0 +1,90 @@ +# @vscode/test-web + +![Test Status Badge](https://github.com/microsoft/vscode-test-web/workflows/Tests/badge.svg) + +This module helps testing VS Code web extensions locally. + +The node module runs a local web server that serves VS Code Browser including the extensions located at the given local path. Additionally the extension tests are automatically run. + + +## Usage + +Via command line: + +Test web extension in browser: + +```sh +vscode-test-web --browserType=webkit --extensionDevelopmentPath=$extensionLocation +``` + +Run web extension tests: + +```sh +vscode-test-web --browserType=webkit --extensionDevelopmentPath=$extensionLocation --extensionTestsPath=$extensionLocation/dist/web/test/suite/index.js +``` + + +Via API: + +```ts +async function go() { + try { + // The folder containing the Extension Manifest package.json + const extensionDevelopmentPath = path.resolve(__dirname, '../../../'); + + // The path to module with the test runner and tests + const extensionTestsPath = path.resolve(__dirname, './suite/index'); + + // Start a web server that serves VSCode in a browser, run the tests + await runTests({ browserType: 'chromium', extensionDevelopmentPath, extensionTestsPath }); + } catch (err) { + console.error('Failed to run tests'); + process.exit(1); + } +} + +go() +``` + +CLI options: +``` + --browserType 'chromium' | 'firefox' | 'webkit': The browser to launch + --extensionDevelopmentPath path. [Optional]: A path pointing to a extension to include. + --extensionTestsPath path. [Optional]: A path to a test module to run + --folder-uri. [Optional]: The folder to open VS Code on + --version. 'insiders' (Default) | 'stable' | 'sources' [Optional] + --open-devtools. Opens the dev tools [Optional] + --headless. Whether to show the browser. Defaults to true when an extensionTestsPath is provided, otherwise false. [Optional] +``` + +Corrsponding options are available in the API. + + +## Development + +- `yarn install` +- Make necessary changes in [`src`](./src) +- `yarn compile` (or `yarn watch`) + +- run `yarn sample` to launch VS Code Browser with the `sample` extension bundled in this repo. + +- run `yarn sample-tests` to launch VS Code Browser running the extension tests of the `sample` extension bundled in this repo. + + +## License + +[MIT](LICENSE) + +## Contributing + +This project welcomes contributions and suggestions. Most contributions require you to agree to a +Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us +the rights to use your contribution. For details, visit https://cla.microsoft.com. + +When you submit a pull request, a CLA-bot will automatically determine whether you need to provide +a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions +provided by the bot. You will only need to do this once across all repos using our CLA. + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). +For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or +contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/index.js new file mode 100755 index 00000000..d90a3253 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/index.js @@ -0,0 +1,163 @@ +#!/usr/bin/env node +"use strict"; +/* eslint-disable header/header */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.open = exports.runTests = void 0; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +const main_1 = require("./server/main"); +const download_1 = require("./server/download"); +const playwright = require("playwright"); +const minimist = require("minimist"); +const path = require("path"); +/** + * Runs the tests in a browser. + * + * @param options The options defining browser type, extension and test location. + */ +async function runTests(options) { + var _a; + const config = { + extensionDevelopmentPath: options.extensionDevelopmentPath, + extensionTestsPath: options.extensionTestsPath, + build: await getBuild(options.version), + folderUri: options.folderUri + }; + const port = 3000; + const server = await main_1.runServer(port, config); + const endpoint = `http://localhost:${port}`; + const result = await openInBrowser({ + browserType: options.browserType, + endpoint, + headless: (_a = options.headless) !== null && _a !== void 0 ? _a : true, + devTools: options.devTools, + waitForDebugger: options.waitForDebugger, + }); + server.close(); + if (result) { + return; + } + throw new Error('Test failed'); +} +exports.runTests = runTests; +async function getBuild(version) { + if (version === 'sources') { + return { type: 'sources' }; + } + return await download_1.downloadAndUnzipVSCode(version === 'stable' ? 'stable' : 'insider'); +} +async function open(options) { + var _a; + const config = { + extensionDevelopmentPath: options.extensionDevelopmentPath, + build: await getBuild(options.version), + folderUri: options.folderUri + }; + const port = 3000; + await main_1.runServer(port, config); + const endpoint = `http://localhost:${port}`; + await openInBrowser({ + browserType: options.browserType, + endpoint, + headless: (_a = options.headless) !== null && _a !== void 0 ? _a : false, + devTools: options.devTools + }); +} +exports.open = open; +const width = 1200; +const height = 800; +function openInBrowser(options) { + return new Promise(async (s) => { + var _a; + const args = []; + if (process.platform === 'linux' && options.browserType === 'chromium') { + args.push('--no-sandbox'); + } + if (options.waitForDebugger) { + args.push(`--remote-debugging-port=${options.waitForDebugger}`); + } + const browser = await playwright[options.browserType].launch({ headless: options.headless, args, devtools: options.devTools }); + const context = await browser.newContext(); + const page = (_a = context.pages()[0]) !== null && _a !== void 0 ? _a : await context.newPage(); + if (options.waitForDebugger) { + await page.waitForFunction(() => '__jsDebugIsReady' in globalThis); + } + await page.setViewportSize({ width, height }); + await page.goto(options.endpoint); + await page.exposeFunction('codeAutomationLog', (type, args) => { + console[type](...args); + }); + await page.exposeFunction('codeAutomationExit', async (code) => { + try { + await browser.close(); + } + catch (error) { + console.error(`Error when closing browser: ${error}`); + } + s(code === 0); + }); + }); +} +function isStringOrUndefined(value) { + return value === undefined || (typeof value === 'string'); +} +function isBooleanOrUndefined(value) { + return value === undefined || (typeof value === 'boolean'); +} +function isBrowserType(browserType) { + return (typeof browserType === 'string') && ['chromium', 'firefox', 'webkit'].includes(browserType); +} +function isValidVersion(version) { + return version === undefined || ((typeof version === 'string') && ['insiders', 'stable', 'sources'].includes(version)); +} +function getPortNumber(port) { + if (typeof port === 'string') { + const number = Number.parseInt(port); + if (!Number.isNaN(number) && number >= 0) { + return number; + } + } + return undefined; +} +if (require.main === module) { + const options = { string: ['extensionDevelopmentPath', 'extensionTestsPath', 'browserType', 'version', 'waitForDebugger', 'folder-uri'], boolean: ['open-devtools', 'headless'] }; + const args = minimist(process.argv.slice(2), options); + const { browserType, extensionDevelopmentPath, extensionTestsPath, version, waitForDebugger, headless } = args; + const port = getPortNumber(waitForDebugger); + if (!isBrowserType(browserType) || !isStringOrUndefined(extensionDevelopmentPath) || !isStringOrUndefined(extensionTestsPath) || !isValidVersion(version) || !isStringOrUndefined(args['folder-uri']) || !isBooleanOrUndefined(args['open-devtools']) || !isBooleanOrUndefined(headless)) { + console.log('Usage:'); + console.log(` --browserType 'chromium' | 'firefox' | 'webkit': The browser to launch`); + console.log(` --extensionDevelopmentPath path. [Optional]: A path pointing to a extension to include.`); + console.log(` --extensionTestsPath path. [Optional]: A path to a test module to run`); + console.log(` --folder-uri. [Optional]: The folder to open VS Code on`); + console.log(` --version. 'insiders' (Default) | 'stable' | 'sources' [Optional]`); + console.log(` --open-devtools. Opens the dev tools [Optional]`); + console.log(` --headless. Whether to show the browser. Defaults to true when an extensionTestsPath is provided, otherwise false. [Optional]`); + process.exit(-1); + } + if (extensionTestsPath) { + runTests({ + extensionTestsPath: extensionTestsPath && path.resolve(extensionTestsPath), + extensionDevelopmentPath: extensionDevelopmentPath && path.resolve(extensionDevelopmentPath), + browserType, + version, + devTools: args['open-devtools'], + waitForDebugger: port, + folderUri: args['folder-uri'], + headless + }); + } + else { + open({ + extensionDevelopmentPath: extensionDevelopmentPath && path.resolve(extensionDevelopmentPath), + browserType, + version, + devTools: args['open-devtools'], + waitForDebugger: port, + folderUri: args['folder-uri'], + headless + }); + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/app.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/app.js new file mode 100644 index 00000000..9d42c670 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/app.js @@ -0,0 +1,36 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +const Koa = require("koa"); +const morgan = require("koa-morgan"); +const kstatic = require("koa-static"); +const kmount = require("koa-mount"); +const workbench_1 = require("./workbench"); +const path = require("path"); +async function createApp(config) { + const app = new Koa(); + app.use(morgan('dev')); + // this is here such that the iframe worker can fetch the extension files + app.use((ctx, next) => { + ctx.set('Access-Control-Allow-Origin', '*'); + return next(); + }); + app.use(kmount('/static', kstatic(path.join(__dirname, '../static')))); + if (config.extensionPath) { + console.log('Serving extensions from ' + config.extensionPath); + app.use(kmount('/static/extensions', kstatic(config.extensionPath))); + } + if (config.extensionDevelopmentPath) { + console.log('Serving dev extensions from ' + config.extensionDevelopmentPath); + app.use(kmount('/static/devextensions', kstatic(config.extensionDevelopmentPath))); + } + if (config.build.type === 'static') { + app.use(kmount('/static/build', kstatic(config.build.location))); + } + app.use(workbench_1.default(config)); + return app; +} +exports.default = createApp; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/download.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/download.js new file mode 100644 index 00000000..e30318bc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/download.js @@ -0,0 +1,151 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fetchJSON = exports.fetch = exports.downloadAndUnzipVSCode = void 0; +const fs_1 = require("fs"); +const path = require("path"); +const https = require("https"); +const http = require("http"); +const createHttpsProxyAgent = require("https-proxy-agent"); +const createHttpProxyAgent = require("http-proxy-agent"); +const url_1 = require("url"); +const decompress = require("decompress"); +const decompressTargz = require("decompress-targz"); +const extensionRoot = process.cwd(); +const vscodeTestDir = path.resolve(extensionRoot, '.vscode-test-web'); +async function getLatestVersion(quality) { + const update = await fetchJSON(`https://update.code.visualstudio.com/api/update/web-standalone/${quality}/latest`); + return update; +} +const reset = '\x1b[G\x1b[0K'; +async function download(downloadUrl, destination, message) { + process.stdout.write(message); + return new Promise((resolve, reject) => { + const httpLibrary = downloadUrl.startsWith('https') ? https : http; + httpLibrary.get(downloadUrl, getAgent(downloadUrl), res => { + const total = Number(res.headers['content-length']); + let received = 0; + let timeout; + const outStream = fs_1.createWriteStream(destination); + outStream.on('close', () => resolve(destination)); + outStream.on('error', reject); + res.on('data', chunk => { + if (!timeout) { + timeout = setTimeout(() => { + process.stdout.write(`${reset}${message}: ${received}/${total} (${(received / total * 100).toFixed()}%)`); + timeout = undefined; + }, 100); + } + received += chunk.length; + }); + res.on('end', () => { + if (timeout) { + clearTimeout(timeout); + } + process.stdout.write(`${reset}${message}: complete\n`); + }); + res.on('error', reject); + res.pipe(outStream); + }); + }); +} +async function unzip(source, destination, message) { + process.stdout.write(message); + if (!fs_1.existsSync(destination)) { + await fs_1.promises.mkdir(destination, { recursive: true }); + } + await decompress(source, destination, { + plugins: [ + decompressTargz() + ], + strip: 1 + }); + process.stdout.write(`${reset}${message}: complete\n`); +} +async function downloadAndUnzipVSCode(quality) { + const info = await getLatestVersion(quality); + const folderName = `vscode-web-${quality}-${info.version}`; + const downloadedPath = path.resolve(vscodeTestDir, folderName); + if (fs_1.existsSync(downloadedPath) && fs_1.existsSync(path.join(downloadedPath, 'version'))) { + return { type: 'static', location: downloadedPath }; + } + if (fs_1.existsSync(vscodeTestDir)) { + await fs_1.promises.rmdir(vscodeTestDir, { recursive: true, maxRetries: 5 }); + } + await fs_1.promises.mkdir(vscodeTestDir, { recursive: true }); + const productName = `VS Code ${quality === 'stable' ? 'Stable' : 'Insiders'}`; + const tmpArchiveName = `vscode-web-${quality}-${info.version}-tmp`; + try { + await download(info.url, tmpArchiveName, `Downloading ${productName}`); + await unzip(tmpArchiveName, downloadedPath, `Unpacking ${productName}`); + await fs_1.promises.writeFile(path.join(downloadedPath, 'version'), folderName); + } + catch (err) { + console.error(err); + throw Error(`Failed to download and unpack ${productName}`); + } + finally { + try { + fs_1.promises.unlink(tmpArchiveName); + } + catch (e) { + // ignore + } + } + return { type: 'static', location: downloadedPath }; +} +exports.downloadAndUnzipVSCode = downloadAndUnzipVSCode; +async function fetch(api) { + return new Promise((resolve, reject) => { + const httpLibrary = api.startsWith('https') ? https : http; + httpLibrary.get(api, getAgent(api), res => { + if (res.statusCode !== 200) { + reject('Failed to get content from '); + } + let data = ''; + res.on('data', chunk => { + data += chunk; + }); + res.on('end', () => { + resolve(data); + }); + res.on('error', err => { + reject(err); + }); + }); + }); +} +exports.fetch = fetch; +async function fetchJSON(api) { + const data = await fetch(api); + try { + return JSON.parse(data); + } + catch (err) { + throw new Error(`Failed to parse response from ${api}`); + } +} +exports.fetchJSON = fetchJSON; +let PROXY_AGENT = undefined; +let HTTPS_PROXY_AGENT = undefined; +if (process.env.npm_config_proxy) { + PROXY_AGENT = createHttpProxyAgent(process.env.npm_config_proxy); + HTTPS_PROXY_AGENT = createHttpsProxyAgent(process.env.npm_config_proxy); +} +if (process.env.npm_config_https_proxy) { + HTTPS_PROXY_AGENT = createHttpsProxyAgent(process.env.npm_config_https_proxy); +} +function getAgent(url) { + const parsed = new url_1.URL(url); + const options = {}; + if (PROXY_AGENT && parsed.protocol.startsWith('http:')) { + options.agent = PROXY_AGENT; + } + if (HTTPS_PROXY_AGENT && parsed.protocol.startsWith('https:')) { + options.agent = HTTPS_PROXY_AGENT; + } + return options; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/extensions.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/extensions.js new file mode 100644 index 00000000..a5bc3f22 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/extensions.js @@ -0,0 +1,45 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.scanForExtensions = void 0; +const fs_1 = require("fs"); +const path = require("path"); +async function scanForExtensions(rootPath, serverURI) { + const result = []; + async function getExtension(relativePosixFolderPath) { + try { + const packageJSONPath = path.join(rootPath, relativePosixFolderPath, 'package.json'); + if ((await fs_1.promises.stat(packageJSONPath)).isFile()) { + return { + scheme: serverURI.scheme, + authority: serverURI.authority, + path: path.posix.join(serverURI.path, relativePosixFolderPath), + }; + } + } + catch { + return undefined; + } + } + async function processFolder(relativePosixFolderPath) { + const extension = await getExtension(relativePosixFolderPath); + if (extension) { + result.push(extension); + } + else { + const folderPath = path.join(rootPath, relativePosixFolderPath); + const entries = await fs_1.promises.readdir(folderPath, { withFileTypes: true }); + for (const entry of entries) { + if (entry.isDirectory() && entry.name.charAt(0) !== '.') { + await processFolder(path.posix.join(relativePosixFolderPath, entry.name)); + } + } + } + } + await processFolder(''); + return result; +} +exports.scanForExtensions = scanForExtensions; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/main.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/main.js new file mode 100644 index 00000000..791f3dcb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/main.js @@ -0,0 +1,15 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.runServer = void 0; +const app_1 = require("./app"); +async function runServer(port, config) { + const app = await app_1.default(config); + const server = app.listen(port); + console.log(`Listening on http://localhost:${port}`); + return server; +} +exports.runServer = runServer; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/workbench.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/workbench.js new file mode 100644 index 00000000..401c24ef --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/out/server/workbench.js @@ -0,0 +1,138 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +const path = require("path"); +const fs_1 = require("fs"); +const vscode_uri_1 = require("vscode-uri"); +const Router = require("@koa/router"); +const extensions_1 = require("./extensions"); +const download_1 = require("./download"); +function asJSON(value) { + return JSON.stringify(value).replace(/"/g, '"'); +} +class Workbench { + constructor(baseUrl, dev, builtInExtensions = []) { + this.baseUrl = baseUrl; + this.dev = dev; + this.builtInExtensions = builtInExtensions; + } + async render(workbenchWebConfiguration) { + const values = { + WORKBENCH_WEB_CONFIGURATION: asJSON(workbenchWebConfiguration), + WORKBENCH_AUTH_SESSION: '', + WORKBENCH_WEB_BASE_URL: this.baseUrl, + WORKBENCH_BUILTIN_EXTENSIONS: asJSON(this.builtInExtensions), + WORKBENCH_MAIN: this.getMain() + }; + try { + const workbenchTemplate = (await fs_1.promises.readFile(path.resolve(__dirname, '../../views/workbench.html'))).toString(); + return workbenchTemplate.replace(/\{\{([^}]+)\}\}/g, (_, key) => { var _a; return (_a = values[key]) !== null && _a !== void 0 ? _a : 'undefined'; }); + } + catch (e) { + return e; + } + } + getMain() { + return this.dev + ? `` + : `` + + `` + + ``; + } + async renderCallback() { + return await download_1.fetch(`${this.baseUrl}/out/vs/code/browser/workbench/callback.html`); + } +} +function valueOrFirst(value) { + return Array.isArray(value) ? value[0] : value; +} +async function getWorkbenchOptions(ctx, config) { + const options = {}; + if (config.extensionPath) { + options.additionalBuiltinExtensions = await extensions_1.scanForExtensions(config.extensionPath, { + scheme: ctx.protocol, + authority: ctx.host, + path: '/static/extensions', + }); + } + if (config.extensionDevelopmentPath) { + const developmentOptions = options.developmentOptions = {}; + developmentOptions.extensions = await extensions_1.scanForExtensions(config.extensionDevelopmentPath, { scheme: ctx.protocol, authority: ctx.host, path: '/static/devextensions' }); + if (config.extensionTestsPath) { + let relativePath = path.relative(config.extensionDevelopmentPath, config.extensionTestsPath); + if (process.platform === 'win32') { + relativePath = relativePath.replace(/\\/g, '/'); + } + developmentOptions.extensionTestsPath = { + scheme: ctx.protocol, + authority: ctx.host, + path: path.posix.join('/static/devextensions', relativePath), + }; + } + } + if (config.folderUri) { + options.folderUri = vscode_uri_1.URI.parse(config.folderUri); + } + return options; +} +function default_1(config) { + const router = new Router(); + router.use(async (ctx, next) => { + if (ctx.query['dev'] || config.build.type === 'sources') { + try { + const builtInExtensions = await download_1.fetchJSON('http://localhost:8080/builtin'); + ctx.state.workbench = new Workbench('http://localhost:8080/static', true, builtInExtensions); + } + catch (err) { + console.log(err); + ctx.throw('Could not connect to localhost:8080, make sure you start `yarn web`', 400); + } + } + else if (config.build.type === 'static') { + ctx.state.workbench = new Workbench(`${ctx.protocol}://${ctx.host}/static/build`, false); + } + else if (config.build.type === 'cdn') { + ctx.state.workbench = new Workbench(config.build.uri, false); + } + await next(); + }); + const callbacks = new Map(); + router.get('/callback', async (ctx) => { + const { 'vscode-requestId': vscodeRequestId, 'vscode-scheme': vscodeScheme, 'vscode-authority': vscodeAuthority, 'vscode-path': vscodePath, 'vscode-query': vscodeQuery, 'vscode-fragment': vscodeFragment, } = ctx.query; + if (!vscodeRequestId || !vscodeScheme || !vscodeAuthority) { + return ctx.throw(400); + } + const requestId = valueOrFirst(vscodeRequestId); + const uri = vscode_uri_1.URI.from({ + scheme: valueOrFirst(vscodeScheme), + authority: valueOrFirst(vscodeAuthority), + path: valueOrFirst(vscodePath), + query: valueOrFirst(vscodeQuery), + fragment: valueOrFirst(vscodeFragment), + }); + callbacks.set(requestId, uri); + ctx.body = await ctx.state.workbench.renderCallback(); + }); + router.get('/fetch-callback', async (ctx) => { + const { 'vscode-requestId': vscodeRequestId } = ctx.query; + if (!vscodeRequestId) { + return ctx.throw(400); + } + const requestId = valueOrFirst(vscodeRequestId); + const uri = callbacks.get(requestId); + if (!uri) { + return ctx.throw(400); + } + callbacks.delete(requestId); + ctx.body = uri.toJSON(); + }); + router.get('/', async (ctx) => { + const options = await getWorkbenchOptions(ctx, config); + ctx.body = await ctx.state.workbench.render(options); + }); + return router.routes(); +} +exports.default = default_1; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/package.json new file mode 100644 index 00000000..c31f3e3a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/package.json @@ -0,0 +1,93 @@ +{ + "_args": [ + [ + "@vscode/test-web@0.0.8", + "/tmp/repository/main" + ] + ], + "_from": "@vscode/test-web@0.0.8", + "_id": "@vscode/test-web@0.0.8", + "_inBundle": false, + "_integrity": "sha512-8VEKJ1s8Fo0oRFV/yLrgMv1bFuhS4PGodMR73FnTn6dzlNrV9g7mFrUsm+YyqqzdTUdo+7fahWS/qw0l/64e+w==", + "_location": "/@vscode/test-web", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "@vscode/test-web@0.0.8", + "name": "@vscode/test-web", + "escapedName": "@vscode%2ftest-web", + "scope": "@vscode", + "rawSpec": "0.0.8", + "saveSpec": null, + "fetchSpec": "0.0.8" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "https://registry.npmjs.org/@vscode/test-web/-/test-web-0.0.8.tgz", + "_spec": "0.0.8", + "_where": "/tmp/repository/main", + "author": { + "name": "Visual Studio Code Team" + }, + "bin": { + "vscode-test-web": "out/index.js" + }, + "bugs": { + "url": "https://github.com/Microsoft/vscode-test-web/issues" + }, + "dependencies": { + "@koa/router": "^10.0.0", + "decompress": "^4.2.1", + "decompress-targz": "^4.1.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "koa": "^2.13.1", + "koa-morgan": "^1.0.1", + "koa-mount": "^4.0.0", + "koa-static": "^5.0.0", + "minimist": "^1.2.5", + "playwright": "^1.12.2", + "vscode-uri": "^3.0.2" + }, + "description": "![Test Status Badge](https://github.com/microsoft/vscode-test-web/workflows/Tests/badge.svg)", + "devDependencies": { + "@types/decompress": "^4.2.3", + "@types/koa": "^2.13.1", + "@types/koa-morgan": "^1.0.4", + "@types/koa-mount": "^4.0.0", + "@types/koa-static": "^4.0.1", + "@types/koa__router": "^8.0.4", + "@types/minimist": "^1.2.1", + "@types/node": "^12.19.9", + "@typescript-eslint/eslint-plugin": "^4.13.0", + "@typescript-eslint/parser": "^4.13.0", + "eslint": "^7.17.0", + "eslint-plugin-header": "^3.1.0", + "typescript": "^4.1.3" + }, + "engines": { + "node": ">=8.9.3" + }, + "homepage": "https://github.com/Microsoft/vscode-test-web#readme", + "license": "MIT", + "main": "./out/index.js", + "name": "@vscode/test-web", + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/vscode-test-web.git" + }, + "scripts": { + "compile": "tsc -p ./", + "compile-sample": "yarn --cwd=sample compile-web", + "postversion": "git push && git push --tags", + "prepublishOnly": "tsc -p ./", + "preversion": "npm test", + "sample": "npm run compile && npm run compile-sample && node . --extensionDevelopmentPath=sample --browserType=chromium", + "sample-tests": "npm run compile && npm run compile-sample && node . --extensionDevelopmentPath=sample --extensionTestsPath=sample/dist/web/test/suite/index.js --browserType=chromium", + "test": "eslint src --ext ts && tsc --noEmit", + "watch": "tsc -w -p ./" + }, + "version": "0.0.8" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/views/workbench.html b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/views/workbench.html new file mode 100644 index 00000000..82eb371a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/@vscode/test-web/views/workbench.html @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{WORKBENCH_MAIN}} + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/HISTORY.md new file mode 100644 index 00000000..0bf04178 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/HISTORY.md @@ -0,0 +1,236 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/LICENSE new file mode 100644 index 00000000..06166077 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/LICENSE @@ -0,0 +1,23 @@ +(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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/README.md new file mode 100644 index 00000000..66a2f540 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/README.md @@ -0,0 +1,142 @@ +# 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][travis-image]][travis-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 +[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 +[travis-image]: https://badgen.net/travis/jshttp/accepts/master +[travis-url]: https://travis-ci.org/jshttp/accepts diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/index.js new file mode 100644 index 00000000..e9b2f63f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/index.js @@ -0,0 +1,238 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/package.json new file mode 100644 index 00000000..91a36904 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/accepts/package.json @@ -0,0 +1,89 @@ +{ + "_args": [ + [ + "accepts@1.3.7", + "/tmp/repository/main" + ] + ], + "_from": "accepts@1.3.7", + "_id": "accepts@1.3.7", + "_inBundle": false, + "_integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "_location": "/accepts", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "accepts@1.3.7", + "name": "accepts", + "escapedName": "accepts", + "rawSpec": "1.3.7", + "saveSpec": null, + "fetchSpec": "1.3.7" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "_spec": "1.3.7", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/jshttp/accepts/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "description": "Higher-level content negotiation", + "devDependencies": { + "deep-equal": "1.0.1", + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", + "mocha": "6.1.4", + "nyc": "14.0.0" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "index.js" + ], + "homepage": "https://github.com/jshttp/accepts#readme", + "keywords": [ + "content", + "negotiation", + "accept", + "accepts" + ], + "license": "MIT", + "name": "accepts", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/accepts.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "test-travis": "nyc --reporter=text npm test" + }, + "version": "1.3.7" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/README.md new file mode 100644 index 00000000..256f1f32 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/README.md @@ -0,0 +1,145 @@ +agent-base +========== +### Turn a function into an [`http.Agent`][http.Agent] instance +[![Build Status](https://github.com/TooTallNate/node-agent-base/workflows/Node%20CI/badge.svg)](https://github.com/TooTallNate/node-agent-base/actions?workflow=Node+CI) + +This module provides an `http.Agent` generator. That is, you pass it an async +callback function, and it returns a new `http.Agent` instance that will invoke the +given callback function when sending outbound HTTP requests. + +#### Some subclasses: + +Here's some more interesting uses of `agent-base`. +Send a pull request to list yours! + + * [`http-proxy-agent`][http-proxy-agent]: An HTTP(s) proxy `http.Agent` implementation for HTTP endpoints + * [`https-proxy-agent`][https-proxy-agent]: An HTTP(s) proxy `http.Agent` implementation for HTTPS endpoints + * [`pac-proxy-agent`][pac-proxy-agent]: A PAC file proxy `http.Agent` implementation for HTTP and HTTPS + * [`socks-proxy-agent`][socks-proxy-agent]: A SOCKS proxy `http.Agent` implementation for HTTP and HTTPS + + +Installation +------------ + +Install with `npm`: + +``` bash +$ npm install agent-base +``` + + +Example +------- + +Here's a minimal example that creates a new `net.Socket` connection to the server +for every HTTP request (i.e. the equivalent of `agent: false` option): + +```js +var net = require('net'); +var tls = require('tls'); +var url = require('url'); +var http = require('http'); +var agent = require('agent-base'); + +var endpoint = 'http://nodejs.org/api/'; +var parsed = url.parse(endpoint); + +// This is the important part! +parsed.agent = agent(function (req, opts) { + var socket; + // `secureEndpoint` is true when using the https module + if (opts.secureEndpoint) { + socket = tls.connect(opts); + } else { + socket = net.connect(opts); + } + return socket; +}); + +// Everything else works just like normal... +http.get(parsed, function (res) { + console.log('"response" event!', res.headers); + res.pipe(process.stdout); +}); +``` + +Returning a Promise or using an `async` function is also supported: + +```js +agent(async function (req, opts) { + await sleep(1000); + // etc… +}); +``` + +Return another `http.Agent` instance to "pass through" the responsibility +for that HTTP request to that agent: + +```js +agent(function (req, opts) { + return opts.secureEndpoint ? https.globalAgent : http.globalAgent; +}); +``` + + +API +--- + +## Agent(Function callback[, Object options]) → [http.Agent][] + +Creates a base `http.Agent` that will execute the callback function `callback` +for every HTTP request that it is used as the `agent` for. The callback function +is responsible for creating a `stream.Duplex` instance of some kind that will be +used as the underlying socket in the HTTP request. + +The `options` object accepts the following properties: + + * `timeout` - Number - Timeout for the `callback()` function in milliseconds. Defaults to Infinity (optional). + +The callback function should have the following signature: + +### callback(http.ClientRequest req, Object options, Function cb) → undefined + +The ClientRequest `req` can be accessed to read request headers and +and the path, etc. The `options` object contains the options passed +to the `http.request()`/`https.request()` function call, and is formatted +to be directly passed to `net.connect()`/`tls.connect()`, or however +else you want a Socket to be created. Pass the created socket to +the callback function `cb` once created, and the HTTP request will +continue to proceed. + +If the `https` module is used to invoke the HTTP request, then the +`secureEndpoint` property on `options` _will be set to `true`_. + + +License +------- + +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net> + +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. + +[http-proxy-agent]: https://github.com/TooTallNate/node-http-proxy-agent +[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent +[pac-proxy-agent]: https://github.com/TooTallNate/node-pac-proxy-agent +[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent +[http.Agent]: https://nodejs.org/api/http.html#http_class_http_agent diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/dist/src/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/dist/src/index.js new file mode 100644 index 00000000..bfd9e220 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/dist/src/index.js @@ -0,0 +1,203 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +const events_1 = require("events"); +const debug_1 = __importDefault(require("debug")); +const promisify_1 = __importDefault(require("./promisify")); +const debug = debug_1.default('agent-base'); +function isAgent(v) { + return Boolean(v) && typeof v.addRequest === 'function'; +} +function isSecureEndpoint() { + const { stack } = new Error(); + if (typeof stack !== 'string') + return false; + return stack.split('\n').some(l => l.indexOf('(https.js:') !== -1 || l.indexOf('node:https:') !== -1); +} +function createAgent(callback, opts) { + return new createAgent.Agent(callback, opts); +} +(function (createAgent) { + /** + * Base `http.Agent` implementation. + * No pooling/keep-alive is implemented by default. + * + * @param {Function} callback + * @api public + */ + class Agent extends events_1.EventEmitter { + constructor(callback, _opts) { + super(); + let opts = _opts; + if (typeof callback === 'function') { + this.callback = callback; + } + else if (callback) { + opts = callback; + } + // Timeout for the socket to be returned from the callback + this.timeout = null; + if (opts && typeof opts.timeout === 'number') { + this.timeout = opts.timeout; + } + // These aren't actually used by `agent-base`, but are required + // for the TypeScript definition files in `@types/node` :/ + this.maxFreeSockets = 1; + this.maxSockets = 1; + this.maxTotalSockets = Infinity; + this.sockets = {}; + this.freeSockets = {}; + this.requests = {}; + this.options = {}; + } + get defaultPort() { + if (typeof this.explicitDefaultPort === 'number') { + return this.explicitDefaultPort; + } + return isSecureEndpoint() ? 443 : 80; + } + set defaultPort(v) { + this.explicitDefaultPort = v; + } + get protocol() { + if (typeof this.explicitProtocol === 'string') { + return this.explicitProtocol; + } + return isSecureEndpoint() ? 'https:' : 'http:'; + } + set protocol(v) { + this.explicitProtocol = v; + } + callback(req, opts, fn) { + throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`'); + } + /** + * Called by node-core's "_http_client.js" module when creating + * a new HTTP request with this Agent instance. + * + * @api public + */ + addRequest(req, _opts) { + const opts = Object.assign({}, _opts); + if (typeof opts.secureEndpoint !== 'boolean') { + opts.secureEndpoint = isSecureEndpoint(); + } + if (opts.host == null) { + opts.host = 'localhost'; + } + if (opts.port == null) { + opts.port = opts.secureEndpoint ? 443 : 80; + } + if (opts.protocol == null) { + opts.protocol = opts.secureEndpoint ? 'https:' : 'http:'; + } + if (opts.host && opts.path) { + // If both a `host` and `path` are specified then it's most + // likely the result of a `url.parse()` call... we need to + // remove the `path` portion so that `net.connect()` doesn't + // attempt to open that as a unix socket file. + delete opts.path; + } + delete opts.agent; + delete opts.hostname; + delete opts._defaultAgent; + delete opts.defaultPort; + delete opts.createConnection; + // Hint to use "Connection: close" + // XXX: non-documented `http` module API :( + req._last = true; + req.shouldKeepAlive = false; + let timedOut = false; + let timeoutId = null; + const timeoutMs = opts.timeout || this.timeout; + const onerror = (err) => { + if (req._hadError) + return; + req.emit('error', err); + // For Safety. Some additional errors might fire later on + // and we need to make sure we don't double-fire the error event. + req._hadError = true; + }; + const ontimeout = () => { + timeoutId = null; + timedOut = true; + const err = new Error(`A "socket" was not created for HTTP request before ${timeoutMs}ms`); + err.code = 'ETIMEOUT'; + onerror(err); + }; + const callbackError = (err) => { + if (timedOut) + return; + if (timeoutId !== null) { + clearTimeout(timeoutId); + timeoutId = null; + } + onerror(err); + }; + const onsocket = (socket) => { + if (timedOut) + return; + if (timeoutId != null) { + clearTimeout(timeoutId); + timeoutId = null; + } + if (isAgent(socket)) { + // `socket` is actually an `http.Agent` instance, so + // relinquish responsibility for this `req` to the Agent + // from here on + debug('Callback returned another Agent instance %o', socket.constructor.name); + socket.addRequest(req, opts); + return; + } + if (socket) { + socket.once('free', () => { + this.freeSocket(socket, opts); + }); + req.onSocket(socket); + return; + } + const err = new Error(`no Duplex stream was returned to agent-base for \`${req.method} ${req.path}\``); + onerror(err); + }; + if (typeof this.callback !== 'function') { + onerror(new Error('`callback` is not defined')); + return; + } + if (!this.promisifiedCallback) { + if (this.callback.length >= 3) { + debug('Converting legacy callback function to promise'); + this.promisifiedCallback = promisify_1.default(this.callback); + } + else { + this.promisifiedCallback = this.callback; + } + } + if (typeof timeoutMs === 'number' && timeoutMs > 0) { + timeoutId = setTimeout(ontimeout, timeoutMs); + } + if ('port' in opts && typeof opts.port !== 'number') { + opts.port = Number(opts.port); + } + try { + debug('Resolving socket for %o request: %o', opts.protocol, `${req.method} ${req.path}`); + Promise.resolve(this.promisifiedCallback(req, opts)).then(onsocket, callbackError); + } + catch (err) { + Promise.reject(err).catch(callbackError); + } + } + freeSocket(socket, opts) { + debug('Freeing socket %o %o', socket.constructor.name, opts); + socket.destroy(); + } + destroy() { + debug('Destroying agent %o', this.constructor.name); + } + } + createAgent.Agent = Agent; + // So that `instanceof` works correctly + createAgent.prototype = createAgent.Agent.prototype; +})(createAgent || (createAgent = {})); +module.exports = createAgent; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/dist/src/promisify.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/dist/src/promisify.js new file mode 100644 index 00000000..b2f6132a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/dist/src/promisify.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function promisify(fn) { + return function (req, opts) { + return new Promise((resolve, reject) => { + fn.call(this, req, opts, (err, rtn) => { + if (err) { + reject(err); + } + else { + resolve(rtn); + } + }); + }); + }; +} +exports.default = promisify; +//# sourceMappingURL=promisify.js.map \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/package.json new file mode 100644 index 00000000..1e646698 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/agent-base/package.json @@ -0,0 +1,98 @@ +{ + "_args": [ + [ + "agent-base@6.0.2", + "/tmp/repository/main" + ] + ], + "_from": "agent-base@6.0.2", + "_id": "agent-base@6.0.2", + "_inBundle": false, + "_integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "_location": "/agent-base", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "agent-base@6.0.2", + "name": "agent-base", + "escapedName": "agent-base", + "rawSpec": "6.0.2", + "saveSpec": null, + "fetchSpec": "6.0.2" + }, + "_requiredBy": [ + "/http-proxy-agent", + "/https-proxy-agent" + ], + "_resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "_spec": "6.0.2", + "_where": "/tmp/repository/main", + "author": { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io/" + }, + "bugs": { + "url": "https://github.com/TooTallNate/node-agent-base/issues" + }, + "dependencies": { + "debug": "4" + }, + "description": "Turn a function into an `http.Agent` instance", + "devDependencies": { + "@types/debug": "4", + "@types/mocha": "^5.2.7", + "@types/node": "^14.0.20", + "@types/semver": "^7.1.0", + "@types/ws": "^6.0.3", + "@typescript-eslint/eslint-plugin": "1.6.0", + "@typescript-eslint/parser": "1.1.0", + "async-listen": "^1.2.0", + "cpy-cli": "^2.0.0", + "eslint": "5.16.0", + "eslint-config-airbnb": "17.1.0", + "eslint-config-prettier": "4.1.0", + "eslint-import-resolver-typescript": "1.1.1", + "eslint-plugin-import": "2.16.0", + "eslint-plugin-jsx-a11y": "6.2.1", + "eslint-plugin-react": "7.12.4", + "mocha": "^6.2.0", + "rimraf": "^3.0.0", + "semver": "^7.1.2", + "typescript": "^3.5.3", + "ws": "^3.0.0" + }, + "engines": { + "node": ">= 6.0.0" + }, + "files": [ + "dist/src", + "src" + ], + "homepage": "https://github.com/TooTallNate/node-agent-base#readme", + "keywords": [ + "http", + "agent", + "base", + "barebones", + "https" + ], + "license": "MIT", + "main": "dist/src/index", + "name": "agent-base", + "repository": { + "type": "git", + "url": "git://github.com/TooTallNate/node-agent-base.git" + }, + "scripts": { + "build": "tsc", + "postbuild": "cpy --parents src test '!**/*.ts' dist", + "prebuild": "rimraf dist", + "prepublishOnly": "npm run build", + "test": "mocha --reporter spec dist/test/*.js", + "test-lint": "eslint src --ext .js,.ts" + }, + "typings": "dist/src/index", + "version": "6.0.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/.jshintrc b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/.jshintrc new file mode 100644 index 00000000..979105e9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/.jshintrc @@ -0,0 +1,4 @@ +{ + "node":true, + "strict":true +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/.npmignore b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/.npmignore new file mode 100644 index 00000000..1354abc0 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/.npmignore @@ -0,0 +1,7 @@ +.git* +test/ +test-browser/ +build/ +.travis.yml +*.swp +Makefile diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/LICENSE new file mode 100644 index 00000000..9187fe5d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2014-2016 Kevin Beaty + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/README.md new file mode 100644 index 00000000..174bea4a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/README.md @@ -0,0 +1,161 @@ +## Any Promise + +[![Build Status](https://secure.travis-ci.org/kevinbeaty/any-promise.svg)](http://travis-ci.org/kevinbeaty/any-promise) + +Let your library support any ES 2015 (ES6) compatible `Promise` and leave the choice to application authors. The application can *optionally* register its preferred `Promise` implementation and it will be exported when requiring `any-promise` from library code. + +If no preference is registered, defaults to the global `Promise` for newer Node.js versions. The browser version defaults to the window `Promise`, so polyfill or register as necessary. + +### Usage with global Promise: + +Assuming the global `Promise` is the desired implementation: + +```bash +# Install any libraries depending on any-promise +$ npm install mz +``` + +The installed libraries will use global Promise by default. + +```js +// in library +var Promise = require('any-promise') // the global Promise + +function promiseReturningFunction(){ + return new Promise(function(resolve, reject){...}) +} +``` + +### Usage with registration: + +Assuming `bluebird` is the desired Promise implementation: + +```bash +# Install preferred promise library +$ npm install bluebird +# Install any-promise to allow registration +$ npm install any-promise +# Install any libraries you would like to use depending on any-promise +$ npm install mz +``` + +Register your preference in the application entry point before any other `require` of packages that load `any-promise`: + +```javascript +// top of application index.js or other entry point +require('any-promise/register/bluebird') + +// -or- Equivalent to above, but allows customization of Promise library +require('any-promise/register')('bluebird', {Promise: require('bluebird')}) +``` + +Now that the implementation is registered, you can use any package depending on `any-promise`: + + +```javascript +var fsp = require('mz/fs') // mz/fs will use registered bluebird promises +var Promise = require('any-promise') // the registered bluebird promise +``` + +It is safe to call `register` multiple times, but it must always be with the same implementation. + +Again, registration is *optional*. It should only be called by the application user if overriding the global `Promise` implementation is desired. + +### Optional Application Registration + +As an application author, you can *optionally* register a preferred `Promise` implementation on application startup (before any call to `require('any-promise')`: + +You must register your preference before any call to `require('any-promise')` (by you or required packages), and only one implementation can be registered. Typically, this registration would occur at the top of the application entry point. + + +#### Registration shortcuts + +If you are using a known `Promise` implementation, you can register your preference with a shortcut: + + +```js +require('any-promise/register/bluebird') +// -or- +import 'any-promise/register/q'; +``` + +Shortcut registration is the preferred registration method as it works in the browser and Node.js. It is also convenient for using with `import` and many test runners, that offer a `--require` flag: + +``` +$ ava --require=any-promise/register/bluebird test.js +``` + +Current known implementations include `bluebird`, `q`, `when`, `rsvp`, `es6-promise`, `promise`, `native-promise-only`, `pinkie`, `vow` and `lie`. If you are not using a known implementation, you can use another registration method described below. + + +#### Basic Registration + +As an alternative to registration shortcuts, you can call the `register` function with the preferred `Promise` implementation. The benefit of this approach is that a `Promise` library can be required by name without being a known implementation. This approach does NOT work in the browser. To use `any-promise` in the browser use either registration shortcuts or specify the `Promise` constructor using advanced registration (see below). + +```javascript +require('any-promise/register')('when') +// -or- require('any-promise/register')('any other ES6 compatible library (known or otherwise)') +``` + +This registration method will try to detect the `Promise` constructor from requiring the specified implementation. If you would like to specify your own constructor, see advanced registration. + + +#### Advanced Registration + +To use the browser version, you should either install a polyfill or explicitly register the `Promise` constructor: + +```javascript +require('any-promise/register')('bluebird', {Promise: require('bluebird')}) +``` + +This could also be used for registering a custom `Promise` implementation or subclass. + +Your preference will be registered globally, allowing a single registration even if multiple versions of `any-promise` are installed in the NPM dependency tree or are using multiple bundled JavaScript files in the browser. You can bypass this global registration in options: + + +```javascript +require('../register')('es6-promise', {Promise: require('es6-promise').Promise, global: false}) +``` + +### Library Usage + +To use any `Promise` constructor, simply require it: + +```javascript +var Promise = require('any-promise'); + +return Promise + .all([xf, f, init, coll]) + .then(fn); + + +return new Promise(function(resolve, reject){ + try { + resolve(item); + } catch(e){ + reject(e); + } +}); + +``` + +Except noted below, libraries using `any-promise` should only use [documented](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) functions as there is no guarantee which implementation will be chosen by the application author. Libraries should never call `register`, only the application user should call if desired. + + +#### Advanced Library Usage + +If your library needs to branch code based on the registered implementation, you can retrieve it using `var impl = require('any-promise/implementation')`, where `impl` will be the package name (`"bluebird"`, `"when"`, etc.) if registered, `"global.Promise"` if using the global version on Node.js, or `"window.Promise"` if using the browser version. You should always include a default case, as there is no guarantee what package may be registered. + + +### Support for old Node.js versions + +Node.js versions prior to `v0.12` may have contained buggy versions of the global `Promise`. For this reason, the global `Promise` is not loaded automatically for these old versions. If using `any-promise` in Node.js versions versions `<= v0.12`, the user should register a desired implementation. + +If an implementation is not registered, `any-promise` will attempt to discover an installed `Promise` implementation. If no implementation can be found, an error will be thrown on `require('any-promise')`. While the auto-discovery usually avoids errors, it is non-deterministic. It is recommended that the user always register a preferred implementation for older Node.js versions. + +This auto-discovery is only available for Node.jS versions prior to `v0.12`. Any newer versions will always default to the global `Promise` implementation. + +### Related + +- [any-observable](https://github.com/sindresorhus/any-observable) - `any-promise` for Observables. + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/implementation.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/implementation.js new file mode 100644 index 00000000..a45ae94d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/implementation.js @@ -0,0 +1 @@ +module.exports = require('./register')().implementation diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/index.js new file mode 100644 index 00000000..74b85483 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/index.js @@ -0,0 +1 @@ +module.exports = require('./register')().Promise diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/loader.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/loader.js new file mode 100644 index 00000000..e1649142 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/loader.js @@ -0,0 +1,78 @@ +"use strict" + // global key for user preferred registration +var REGISTRATION_KEY = '@@any-promise/REGISTRATION', + // Prior registration (preferred or detected) + registered = null + +/** + * Registers the given implementation. An implementation must + * be registered prior to any call to `require("any-promise")`, + * typically on application load. + * + * If called with no arguments, will return registration in + * following priority: + * + * For Node.js: + * + * 1. Previous registration + * 2. global.Promise if node.js version >= 0.12 + * 3. Auto detected promise based on first sucessful require of + * known promise libraries. Note this is a last resort, as the + * loaded library is non-deterministic. node.js >= 0.12 will + * always use global.Promise over this priority list. + * 4. Throws error. + * + * For Browser: + * + * 1. Previous registration + * 2. window.Promise + * 3. Throws error. + * + * Options: + * + * Promise: Desired Promise constructor + * global: Boolean - Should the registration be cached in a global variable to + * allow cross dependency/bundle registration? (default true) + */ +module.exports = function(root, loadImplementation){ + return function register(implementation, opts){ + implementation = implementation || null + opts = opts || {} + // global registration unless explicitly {global: false} in options (default true) + var registerGlobal = opts.global !== false; + + // load any previous global registration + if(registered === null && registerGlobal){ + registered = root[REGISTRATION_KEY] || null + } + + if(registered !== null + && implementation !== null + && registered.implementation !== implementation){ + // Throw error if attempting to redefine implementation + throw new Error('any-promise already defined as "'+registered.implementation+ + '". You can only register an implementation before the first '+ + ' call to require("any-promise") and an implementation cannot be changed') + } + + if(registered === null){ + // use provided implementation + if(implementation !== null && typeof opts.Promise !== 'undefined'){ + registered = { + Promise: opts.Promise, + implementation: implementation + } + } else { + // require implementation if implementation is specified but not provided + registered = loadImplementation(implementation) + } + + if(registerGlobal){ + // register preference globally in case multiple installations + root[REGISTRATION_KEY] = registered + } + } + + return registered + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/optional.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/optional.js new file mode 100644 index 00000000..f3889420 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/optional.js @@ -0,0 +1,6 @@ +"use strict"; +try { + module.exports = require('./register')().Promise || null +} catch(e) { + module.exports = null +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/package.json new file mode 100644 index 00000000..de8908d0 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/package.json @@ -0,0 +1,75 @@ +{ + "_args": [ + [ + "any-promise@1.3.0", + "/tmp/repository/main" + ] + ], + "_from": "any-promise@1.3.0", + "_id": "any-promise@1.3.0", + "_inBundle": false, + "_integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "_location": "/any-promise", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "any-promise@1.3.0", + "name": "any-promise", + "escapedName": "any-promise", + "rawSpec": "1.3.0", + "saveSpec": null, + "fetchSpec": "1.3.0" + }, + "_requiredBy": [ + "/koa-convert/koa-compose" + ], + "_resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "_spec": "1.3.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Kevin Beaty" + }, + "browser": { + "./register.js": "./register-shim.js" + }, + "bugs": { + "url": "https://github.com/kevinbeaty/any-promise/issues" + }, + "dependencies": {}, + "description": "Resolve any installed ES6 compatible promise", + "devDependencies": { + "ava": "^0.14.0", + "bluebird": "^3.0.0", + "es6-promise": "^3.0.0", + "is-promise": "^2.0.0", + "lie": "^3.0.0", + "mocha": "^2.0.0", + "native-promise-only": "^0.8.0", + "phantomjs-prebuilt": "^2.0.0", + "pinkie": "^2.0.0", + "promise": "^7.0.0", + "q": "^1.0.0", + "rsvp": "^3.0.0", + "vow": "^0.4.0", + "when": "^3.0.0", + "zuul": "^3.0.0" + }, + "homepage": "http://github.com/kevinbeaty/any-promise", + "keywords": [ + "promise", + "es6" + ], + "license": "MIT", + "main": "index.js", + "name": "any-promise", + "repository": { + "type": "git", + "url": "git+https://github.com/kevinbeaty/any-promise.git" + }, + "scripts": { + "test": "ava" + }, + "typings": "index.d.ts", + "version": "1.3.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register-shim.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register-shim.js new file mode 100644 index 00000000..9049405c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register-shim.js @@ -0,0 +1,18 @@ +"use strict"; +module.exports = require('./loader')(window, loadImplementation) + +/** + * Browser specific loadImplementation. Always uses `window.Promise` + * + * To register a custom implementation, must register with `Promise` option. + */ +function loadImplementation(){ + if(typeof window.Promise === 'undefined'){ + throw new Error("any-promise browser requires a polyfill or explicit registration"+ + " e.g: require('any-promise/register/bluebird')") + } + return { + Promise: window.Promise, + implementation: 'window.Promise' + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register.js new file mode 100644 index 00000000..255c6e2f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register.js @@ -0,0 +1,94 @@ +"use strict" +module.exports = require('./loader')(global, loadImplementation); + +/** + * Node.js version of loadImplementation. + * + * Requires the given implementation and returns the registration + * containing {Promise, implementation} + * + * If implementation is undefined or global.Promise, loads it + * Otherwise uses require + */ +function loadImplementation(implementation){ + var impl = null + + if(shouldPreferGlobalPromise(implementation)){ + // if no implementation or env specified use global.Promise + impl = { + Promise: global.Promise, + implementation: 'global.Promise' + } + } else if(implementation){ + // if implementation specified, require it + var lib = require(implementation) + impl = { + Promise: lib.Promise || lib, + implementation: implementation + } + } else { + // try to auto detect implementation. This is non-deterministic + // and should prefer other branches, but this is our last chance + // to load something without throwing error + impl = tryAutoDetect() + } + + if(impl === null){ + throw new Error('Cannot find any-promise implementation nor'+ + ' global.Promise. You must install polyfill or call'+ + ' require("any-promise/register") with your preferred'+ + ' implementation, e.g. require("any-promise/register/bluebird")'+ + ' on application load prior to any require("any-promise").') + } + + return impl +} + +/** + * Determines if the global.Promise should be preferred if an implementation + * has not been registered. + */ +function shouldPreferGlobalPromise(implementation){ + if(implementation){ + return implementation === 'global.Promise' + } else if(typeof global.Promise !== 'undefined'){ + // Load global promise if implementation not specified + // Versions < 0.11 did not have global Promise + // Do not use for version < 0.12 as version 0.11 contained buggy versions + var version = (/v(\d+)\.(\d+)\.(\d+)/).exec(process.version) + return !(version && +version[1] == 0 && +version[2] < 12) + } + + // do not have global.Promise or another implementation was specified + return false +} + +/** + * Look for common libs as last resort there is no guarantee that + * this will return a desired implementation or even be deterministic. + * The priority is also nearly arbitrary. We are only doing this + * for older versions of Node.js <0.12 that do not have a reasonable + * global.Promise implementation and we the user has not registered + * the preference. This preserves the behavior of any-promise <= 0.1 + * and may be deprecated or removed in the future + */ +function tryAutoDetect(){ + var libs = [ + "es6-promise", + "promise", + "native-promise-only", + "bluebird", + "rsvp", + "when", + "q", + "pinkie", + "lie", + "vow"] + var i = 0, len = libs.length + for(; i < len; i++){ + try { + return loadImplementation(libs[i]) + } catch(e){} + } + return null +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/bluebird.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/bluebird.js new file mode 100644 index 00000000..de0f87eb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/bluebird.js @@ -0,0 +1,2 @@ +'use strict'; +require('../register')('bluebird', {Promise: require('bluebird')}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/es6-promise.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/es6-promise.js new file mode 100644 index 00000000..59bd55b7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/es6-promise.js @@ -0,0 +1,2 @@ +'use strict'; +require('../register')('es6-promise', {Promise: require('es6-promise').Promise}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/lie.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/lie.js new file mode 100644 index 00000000..7d305ca4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/lie.js @@ -0,0 +1,2 @@ +'use strict'; +require('../register')('lie', {Promise: require('lie')}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/native-promise-only.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/native-promise-only.js new file mode 100644 index 00000000..70a5a5e1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/native-promise-only.js @@ -0,0 +1,2 @@ +'use strict'; +require('../register')('native-promise-only', {Promise: require('native-promise-only')}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/pinkie.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/pinkie.js new file mode 100644 index 00000000..caaf98a5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/pinkie.js @@ -0,0 +1,2 @@ +'use strict'; +require('../register')('pinkie', {Promise: require('pinkie')}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/promise.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/promise.js new file mode 100644 index 00000000..746620d4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/promise.js @@ -0,0 +1,2 @@ +'use strict'; +require('../register')('promise', {Promise: require('promise')}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/q.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/q.js new file mode 100644 index 00000000..0fc633a9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/q.js @@ -0,0 +1,2 @@ +'use strict'; +require('../register')('q', {Promise: require('q').Promise}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/rsvp.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/rsvp.js new file mode 100644 index 00000000..02b13180 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/rsvp.js @@ -0,0 +1,2 @@ +'use strict'; +require('../register')('rsvp', {Promise: require('rsvp').Promise}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/vow.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/vow.js new file mode 100644 index 00000000..5b6868c4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/vow.js @@ -0,0 +1,2 @@ +'use strict'; +require('../register')('vow', {Promise: require('vow').Promise}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/when.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/when.js new file mode 100644 index 00000000..d91c13d3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/any-promise/register/when.js @@ -0,0 +1,2 @@ +'use strict'; +require('../register')('when', {Promise: require('when').Promise}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/.github/FUNDING.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/.github/FUNDING.yml new file mode 100644 index 00000000..cea8b16e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/.github/FUNDING.yml @@ -0,0 +1,2 @@ +tidelift: "npm/balanced-match" +patreon: juliangruber diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/LICENSE.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/LICENSE.md new file mode 100644 index 00000000..2cdc8e41 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/LICENSE.md @@ -0,0 +1,21 @@ +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/README.md new file mode 100644 index 00000000..d2a48b6b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/README.md @@ -0,0 +1,97 @@ +# balanced-match + +Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well! + +[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) +[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) + +[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) + +## Example + +Get the first matching pair of braces: + +```js +var balanced = require('balanced-match'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); +console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post')); +``` + +The matches are: + +```bash +$ node example.js +{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } +{ start: 3, + end: 9, + pre: 'pre', + body: 'first', + post: 'between{second}post' } +{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' } +``` + +## API + +### var m = balanced(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +object with those keys: + +* **start** the index of the first match of `a` +* **end** the index of the matching `b` +* **pre** the preamble, `a` and `b` not included +* **body** the match, `a` and `b` not included +* **post** the postscript, `a` and `b` not included + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`. + +### var r = balanced.range(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +array with indexes: `[ , ]`. + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install balanced-match +``` + +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/index.js new file mode 100644 index 00000000..c67a6460 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/index.js @@ -0,0 +1,62 @@ +'use strict'; +module.exports = balanced; +function balanced(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); + + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + if(a===b) { + return [ai, bi]; + } + begs = []; + left = str.length; + + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/package.json new file mode 100644 index 00000000..ff03e25f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/balanced-match/package.json @@ -0,0 +1,79 @@ +{ + "_args": [ + [ + "balanced-match@1.0.2", + "/tmp/repository/main" + ] + ], + "_from": "balanced-match@1.0.2", + "_id": "balanced-match@1.0.2", + "_inBundle": false, + "_integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "_location": "/balanced-match", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "balanced-match@1.0.2", + "name": "balanced-match", + "escapedName": "balanced-match", + "rawSpec": "1.0.2", + "saveSpec": null, + "fetchSpec": "1.0.2" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "_spec": "1.0.2", + "_where": "/tmp/repository/main", + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/balanced-match/issues" + }, + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "homepage": "https://github.com/juliangruber/balanced-match", + "keywords": [ + "match", + "regexp", + "test", + "balanced", + "parse" + ], + "license": "MIT", + "main": "index.js", + "name": "balanced-match", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/balanced-match.git" + }, + "scripts": { + "bench": "matcha test/bench.js", + "test": "tape test/test.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "version": "1.0.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/LICENSE new file mode 100644 index 00000000..6d52b8ac --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Jameson Little + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/README.md new file mode 100644 index 00000000..b42a48f4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/README.md @@ -0,0 +1,34 @@ +base64-js +========= + +`base64-js` does basic base64 encoding/decoding in pure JS. + +[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js) + +Many browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data. + +Sometimes encoding/decoding binary data in the browser is useful, and that is what this module does. + +## install + +With [npm](https://npmjs.org) do: + +`npm install base64-js` and `var base64js = require('base64-js')` + +For use in web browsers do: + +`` + +[Get supported base64-js with the Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-base64-js?utm_source=npm-base64-js&utm_medium=referral&utm_campaign=readme) + +## methods + +`base64js` has three exposed functions, `byteLength`, `toByteArray` and `fromByteArray`, which both take a single argument. + +* `byteLength` - Takes a base64 string and returns length of byte array +* `toByteArray` - Takes a base64 string and returns a byte array +* `fromByteArray` - Takes a byte array and returns a base64 string + +## license + +MIT diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/base64js.min.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/base64js.min.js new file mode 100644 index 00000000..908ac83f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/base64js.min.js @@ -0,0 +1 @@ +(function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"==typeof window?"undefined"==typeof global?"undefined"==typeof self?this:self:global:window,b.base64js=a()}})(function(){return function(){function b(d,e,g){function a(j,i){if(!e[j]){if(!d[j]){var f="function"==typeof require&&require;if(!i&&f)return f(j,!0);if(h)return h(j,!0);var c=new Error("Cannot find module '"+j+"'");throw c.code="MODULE_NOT_FOUND",c}var k=e[j]={exports:{}};d[j][0].call(k.exports,function(b){var c=d[j][1][b];return a(c||b)},k,k.exports,b,d,e,g)}return e[j].exports}for(var h="function"==typeof require&&require,c=0;c>16,j[k++]=255&b>>8,j[k++]=255&b;return 2===h&&(b=l[a.charCodeAt(c)]<<2|l[a.charCodeAt(c+1)]>>4,j[k++]=255&b),1===h&&(b=l[a.charCodeAt(c)]<<10|l[a.charCodeAt(c+1)]<<4|l[a.charCodeAt(c+2)]>>2,j[k++]=255&b>>8,j[k++]=255&b),j}function g(a){return k[63&a>>18]+k[63&a>>12]+k[63&a>>6]+k[63&a]}function h(a,b,c){for(var d,e=[],f=b;fj?j:g+f));return 1===d?(b=a[c-1],e.push(k[b>>2]+k[63&b<<4]+"==")):2===d&&(b=(a[c-2]<<8)+a[c-1],e.push(k[b>>10]+k[63&b>>4]+k[63&b<<2]+"=")),e.join("")}c.byteLength=function(a){var b=d(a),c=b[0],e=b[1];return 3*(c+e)/4-e},c.toByteArray=f,c.fromByteArray=j;for(var k=[],l=[],m="undefined"==typeof Uint8Array?Array:Uint8Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,p=n.length;o 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('=') + if (validLen === -1) validLen = len + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4) + + return [validLen, placeHoldersLen] +} + +// base64 is 4/3 + up to two characters of the original data +function byteLength (b64) { + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function toByteArray (b64) { + var tmp + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) + + var curByte = 0 + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen + + var i + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)] + arr[curByte++] = (tmp >> 16) & 0xFF + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + return arr +} + +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] +} + +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF) + output.push(tripletToBase64(tmp)) + } + return output.join('') +} + +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ) + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1] + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ) + } + + return parts.join('') +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/package.json new file mode 100644 index 00000000..12ab8a20 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/base64-js/package.json @@ -0,0 +1,78 @@ +{ + "_args": [ + [ + "base64-js@1.5.1", + "/tmp/repository/main" + ] + ], + "_from": "base64-js@1.5.1", + "_id": "base64-js@1.5.1", + "_inBundle": false, + "_integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "_location": "/base64-js", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "base64-js@1.5.1", + "name": "base64-js", + "escapedName": "base64-js", + "rawSpec": "1.5.1", + "saveSpec": null, + "fetchSpec": "1.5.1" + }, + "_requiredBy": [ + "/buffer" + ], + "_resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "_spec": "1.5.1", + "_where": "/tmp/repository/main", + "author": { + "name": "T. Jameson Little", + "email": "t.jameson.little@gmail.com" + }, + "bugs": { + "url": "https://github.com/beatgammit/base64-js/issues" + }, + "description": "Base64 encoding/decoding in pure JS", + "devDependencies": { + "babel-minify": "^0.5.1", + "benchmark": "^2.1.4", + "browserify": "^16.3.0", + "standard": "*", + "tape": "4.x" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "homepage": "https://github.com/beatgammit/base64-js", + "keywords": [ + "base64" + ], + "license": "MIT", + "main": "index.js", + "name": "base64-js", + "repository": { + "type": "git", + "url": "git://github.com/beatgammit/base64-js.git" + }, + "scripts": { + "build": "browserify -s base64js -r ./ | minify > base64js.min.js", + "lint": "standard", + "test": "npm run lint && npm run unit", + "unit": "tape test/*.js" + }, + "typings": "index.d.ts", + "version": "1.5.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/HISTORY.md new file mode 100644 index 00000000..2c44a010 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/HISTORY.md @@ -0,0 +1,52 @@ +2.0.1 / 2018-09-19 +================== + + * deps: safe-buffer@5.1.2 + +2.0.0 / 2017-09-12 +================== + + * Drop support for Node.js below 0.8 + * Remove `auth(ctx)` signature -- pass in header or `auth(ctx.req)` + * Use `safe-buffer` for improved Buffer API + +1.1.0 / 2016-11-18 +================== + + * Add `auth.parse` for low-level string parsing + +1.0.4 / 2016-05-10 +================== + + * Improve error message when `req` argument is not an object + * Improve error message when `req` missing `headers` property + +1.0.3 / 2015-07-01 +================== + + * Fix regression accepting a Koa context + +1.0.2 / 2015-06-12 +================== + + * Improve error message when `req` argument missing + * perf: enable strict mode + * perf: hoist regular expression + * perf: parse with regular expressions + * perf: remove argument reassignment + +1.0.1 / 2015-05-04 +================== + + * Update readme + +1.0.0 / 2014-07-01 +================== + + * Support empty password + * Support empty username + +0.0.1 / 2013-11-30 +================== + + * Initial release diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/LICENSE new file mode 100644 index 00000000..89041f61 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2013 TJ Holowaychuk +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015-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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/README.md new file mode 100644 index 00000000..5f3d758b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/README.md @@ -0,0 +1,113 @@ +# basic-auth + +[![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] + +Generic basic auth Authorization header field parser for whatever. + +## 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): + +``` +$ npm install basic-auth +``` + +## API + + + +```js +var auth = require('basic-auth') +``` + +### auth(req) + +Get the basic auth credentials from the given request. The `Authorization` +header is parsed and if the header is invalid, `undefined` is returned, +otherwise an object with `name` and `pass` properties. + +### auth.parse(string) + +Parse a basic auth authorization header string. This will return an object +with `name` and `pass` properties, or `undefined` if the string is invalid. + +## Example + +Pass a Node.js request object to the module export. If parsing fails +`undefined` is returned, otherwise an object with `.name` and `.pass`. + + + +```js +var auth = require('basic-auth') +var user = auth(req) +// => { name: 'something', pass: 'whatever' } +``` + +A header string from any other location can also be parsed with +`auth.parse`, for example a `Proxy-Authorization` header: + + + +```js +var auth = require('basic-auth') +var user = auth.parse(req.getHeader('Proxy-Authorization')) +``` + +### With vanilla node.js http server + +```js +var http = require('http') +var auth = require('basic-auth') +var compare = require('tsscmp') + +// Create server +var server = http.createServer(function (req, res) { + var credentials = auth(req) + + // Check credentials + // The "check" function will typically be against your user store + if (!credentials || !check(credentials.name, credentials.pass)) { + res.statusCode = 401 + res.setHeader('WWW-Authenticate', 'Basic realm="example"') + res.end('Access denied') + } else { + res.end('Access granted') + } +}) + +// Basic function to validate credentials for example +function check (name, pass) { + var valid = true + + // Simple method to prevent short-circut and use timing-safe compare + valid = compare(name, 'john') && valid + valid = compare(pass, 'secret') && valid + + return valid +} + +// Listen +server.listen(3000) +``` + +# License + +[MIT](LICENSE) + +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/basic-auth/master +[coveralls-url]: https://coveralls.io/r/jshttp/basic-auth?branch=master +[downloads-image]: https://badgen.net/npm/dm/basic-auth +[downloads-url]: https://npmjs.org/package/basic-auth +[node-version-image]: https://badgen.net/npm/node/basic-auth +[node-version-url]: https://nodejs.org/en/download +[npm-image]: https://badgen.net/npm/v/basic-auth +[npm-url]: https://npmjs.org/package/basic-auth +[travis-image]: https://badgen.net/travis/jshttp/basic-auth/master +[travis-url]: https://travis-ci.org/jshttp/basic-auth diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/index.js new file mode 100644 index 00000000..9106e646 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/index.js @@ -0,0 +1,133 @@ +/*! + * basic-auth + * Copyright(c) 2013 TJ Holowaychuk + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2016 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var Buffer = require('safe-buffer').Buffer + +/** + * Module exports. + * @public + */ + +module.exports = auth +module.exports.parse = parse + +/** + * RegExp for basic auth credentials + * + * credentials = auth-scheme 1*SP token68 + * auth-scheme = "Basic" ; case insensitive + * token68 = 1*( ALPHA / DIGIT / "-" / "." / "_" / "~" / "+" / "/" ) *"=" + * @private + */ + +var CREDENTIALS_REGEXP = /^ *(?:[Bb][Aa][Ss][Ii][Cc]) +([A-Za-z0-9._~+/-]+=*) *$/ + +/** + * RegExp for basic auth user/pass + * + * user-pass = userid ":" password + * userid = * + * password = *TEXT + * @private + */ + +var USER_PASS_REGEXP = /^([^:]*):(.*)$/ + +/** + * Parse the Authorization header field of a request. + * + * @param {object} req + * @return {object} with .name and .pass + * @public + */ + +function auth (req) { + if (!req) { + throw new TypeError('argument req is required') + } + + if (typeof req !== 'object') { + throw new TypeError('argument req is required to be an object') + } + + // get header + var header = getAuthorization(req) + + // parse header + return parse(header) +} + +/** + * Decode base64 string. + * @private + */ + +function decodeBase64 (str) { + return Buffer.from(str, 'base64').toString() +} + +/** + * Get the Authorization header from request object. + * @private + */ + +function getAuthorization (req) { + if (!req.headers || typeof req.headers !== 'object') { + throw new TypeError('argument req is required to have headers property') + } + + return req.headers.authorization +} + +/** + * Parse basic auth to object. + * + * @param {string} string + * @return {object} + * @public + */ + +function parse (string) { + if (typeof string !== 'string') { + return undefined + } + + // parse header + var match = CREDENTIALS_REGEXP.exec(string) + + if (!match) { + return undefined + } + + // decode user pass + var userPass = USER_PASS_REGEXP.exec(decodeBase64(match[1])) + + if (!userPass) { + return undefined + } + + // return credentials object + return new Credentials(userPass[1], userPass[2]) +} + +/** + * Object to represent user credentials. + * @private + */ + +function Credentials (name, pass) { + this.name = name + this.pass = pass +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/package.json new file mode 100644 index 00000000..b62d323f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/basic-auth/package.json @@ -0,0 +1,76 @@ +{ + "_args": [ + [ + "basic-auth@2.0.1", + "/tmp/repository/main" + ] + ], + "_from": "basic-auth@2.0.1", + "_id": "basic-auth@2.0.1", + "_inBundle": false, + "_integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "_location": "/basic-auth", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "basic-auth@2.0.1", + "name": "basic-auth", + "escapedName": "basic-auth", + "rawSpec": "2.0.1", + "saveSpec": null, + "fetchSpec": "2.0.1" + }, + "_requiredBy": [ + "/morgan" + ], + "_resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "_spec": "2.0.1", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/jshttp/basic-auth/issues" + }, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "description": "node.js basic auth parser", + "devDependencies": { + "eslint": "5.6.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.14.0", + "eslint-plugin-markdown": "1.0.0-beta.6", + "eslint-plugin-node": "7.0.1", + "eslint-plugin-promise": "4.0.1", + "eslint-plugin-standard": "4.0.0", + "istanbul": "0.4.5", + "mocha": "5.2.0" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "homepage": "https://github.com/jshttp/basic-auth#readme", + "keywords": [ + "basic", + "auth", + "authorization", + "basicauth" + ], + "license": "MIT", + "name": "basic-auth", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/basic-auth.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --check-leaks --reporter spec --bail", + "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": "2.0.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/.jshintrc b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/.jshintrc new file mode 100644 index 00000000..c8ef3ca4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/.jshintrc @@ -0,0 +1,59 @@ +{ + "predef": [ ] + , "bitwise": false + , "camelcase": false + , "curly": false + , "eqeqeq": false + , "forin": false + , "immed": false + , "latedef": false + , "noarg": true + , "noempty": true + , "nonew": true + , "plusplus": false + , "quotmark": true + , "regexp": false + , "undef": true + , "unused": true + , "strict": false + , "trailing": true + , "maxlen": 120 + , "asi": true + , "boss": true + , "debug": true + , "eqnull": true + , "esnext": true + , "evil": true + , "expr": true + , "funcscope": false + , "globalstrict": false + , "iterator": false + , "lastsemic": true + , "laxbreak": true + , "laxcomma": true + , "loopfunc": true + , "multistr": false + , "onecase": false + , "proto": false + , "regexdash": false + , "scripturl": true + , "smarttabs": false + , "shadow": false + , "sub": true + , "supernew": false + , "validthis": true + , "browser": true + , "couch": false + , "devel": false + , "dojo": false + , "mootools": false + , "node": true + , "nonstandard": true + , "prototypejs": false + , "rhino": false + , "worker": true + , "wsh": false + , "nomen": false + , "onevar": false + , "passfail": false +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/.travis.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/.travis.yml new file mode 100644 index 00000000..a349506c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/.travis.yml @@ -0,0 +1,13 @@ +sudo: false +language: node_js +node_js: + - '6' + - '8' + - '10' + - '12' + - '14' + - lts/* +notifications: + email: + - rod@vagg.org + - matteo.collina@gmail.com diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/LICENSE.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/LICENSE.md new file mode 100644 index 00000000..ff35a347 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/LICENSE.md @@ -0,0 +1,13 @@ +The MIT License (MIT) +===================== + +Copyright (c) 2013-2016 bl contributors +---------------------------------- + +*bl contributors listed at * + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/README.md new file mode 100644 index 00000000..9eebd88b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/README.md @@ -0,0 +1,208 @@ +# bl *(BufferList)* + +[![Build Status](https://travis-ci.org/rvagg/bl.svg?branch=master)](https://travis-ci.org/rvagg/bl) + +**A Node.js Buffer list collector, reader and streamer thingy.** + +[![NPM](https://nodei.co/npm/bl.png?downloads=true&downloadRank=true)](https://nodei.co/npm/bl/) +[![NPM](https://nodei.co/npm-dl/bl.png?months=6&height=3)](https://nodei.co/npm/bl/) + +**bl** is a storage object for collections of Node Buffers, exposing them with the main Buffer readable API. Also works as a duplex stream so you can collect buffers from a stream that emits them and emit buffers to a stream that consumes them! + +The original buffers are kept intact and copies are only done as necessary. Any reads that require the use of a single original buffer will return a slice of that buffer only (which references the same memory as the original buffer). Reads that span buffers perform concatenation as required and return the results transparently. + +```js +const BufferList = require('bl') + +var bl = new BufferList() +bl.append(new Buffer('abcd')) +bl.append(new Buffer('efg')) +bl.append('hi') // bl will also accept & convert Strings +bl.append(new Buffer('j')) +bl.append(new Buffer([ 0x3, 0x4 ])) + +console.log(bl.length) // 12 + +console.log(bl.slice(0, 10).toString('ascii')) // 'abcdefghij' +console.log(bl.slice(3, 10).toString('ascii')) // 'defghij' +console.log(bl.slice(3, 6).toString('ascii')) // 'def' +console.log(bl.slice(3, 8).toString('ascii')) // 'defgh' +console.log(bl.slice(5, 10).toString('ascii')) // 'fghij' + +// or just use toString! +console.log(bl.toString()) // 'abcdefghij\u0003\u0004' +console.log(bl.toString('ascii', 3, 8)) // 'defgh' +console.log(bl.toString('ascii', 5, 10)) // 'fghij' + +// other standard Buffer readables +console.log(bl.readUInt16BE(10)) // 0x0304 +console.log(bl.readUInt16LE(10)) // 0x0403 +``` + +Give it a callback in the constructor and use it just like **[concat-stream](https://github.com/maxogden/node-concat-stream)**: + +```js +const bl = require('bl') + , fs = require('fs') + +fs.createReadStream('README.md') + .pipe(bl(function (err, data) { // note 'new' isn't strictly required + // `data` is a complete Buffer object containing the full data + console.log(data.toString()) + })) +``` + +Note that when you use the *callback* method like this, the resulting `data` parameter is a concatenation of all `Buffer` objects in the list. If you want to avoid the overhead of this concatenation (in cases of extreme performance consciousness), then avoid the *callback* method and just listen to `'end'` instead, like a standard Stream. + +Or to fetch a URL using [hyperquest](https://github.com/substack/hyperquest) (should work with [request](http://github.com/mikeal/request) and even plain Node http too!): +```js +const hyperquest = require('hyperquest') + , bl = require('bl') + , url = 'https://raw.github.com/rvagg/bl/master/README.md' + +hyperquest(url).pipe(bl(function (err, data) { + console.log(data.toString()) +})) +``` + +Or, use it as a readable stream to recompose a list of Buffers to an output source: + +```js +const BufferList = require('bl') + , fs = require('fs') + +var bl = new BufferList() +bl.append(new Buffer('abcd')) +bl.append(new Buffer('efg')) +bl.append(new Buffer('hi')) +bl.append(new Buffer('j')) + +bl.pipe(fs.createWriteStream('gibberish.txt')) +``` + +## API + + * new BufferList([ callback ]) + * bl.length + * bl.append(buffer) + * bl.get(index) + * bl.slice([ start[, end ] ]) + * bl.shallowSlice([ start[, end ] ]) + * bl.copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ]) + * bl.duplicate() + * bl.consume(bytes) + * bl.toString([encoding, [ start, [ end ]]]) + * bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8() + * Streams + +-------------------------------------------------------- + +### new BufferList([ callback | Buffer | Buffer array | BufferList | BufferList array | String ]) +The constructor takes an optional callback, if supplied, the callback will be called with an error argument followed by a reference to the **bl** instance, when `bl.end()` is called (i.e. from a piped stream). This is a convenient method of collecting the entire contents of a stream, particularly when the stream is *chunky*, such as a network stream. + +Normally, no arguments are required for the constructor, but you can initialise the list by passing in a single `Buffer` object or an array of `Buffer` object. + +`new` is not strictly required, if you don't instantiate a new object, it will be done automatically for you so you can create a new instance simply with: + +```js +var bl = require('bl') +var myinstance = bl() + +// equivalent to: + +var BufferList = require('bl') +var myinstance = new BufferList() +``` + +-------------------------------------------------------- + +### bl.length +Get the length of the list in bytes. This is the sum of the lengths of all of the buffers contained in the list, minus any initial offset for a semi-consumed buffer at the beginning. Should accurately represent the total number of bytes that can be read from the list. + +-------------------------------------------------------- + +### bl.append(Buffer | Buffer array | BufferList | BufferList array | String) +`append(buffer)` adds an additional buffer or BufferList to the internal list. `this` is returned so it can be chained. + +-------------------------------------------------------- + +### bl.get(index) +`get()` will return the byte at the specified index. + +-------------------------------------------------------- + +### bl.slice([ start, [ end ] ]) +`slice()` returns a new `Buffer` object containing the bytes within the range specified. Both `start` and `end` are optional and will default to the beginning and end of the list respectively. + +If the requested range spans a single internal buffer then a slice of that buffer will be returned which shares the original memory range of that Buffer. If the range spans multiple buffers then copy operations will likely occur to give you a uniform Buffer. + +-------------------------------------------------------- + +### bl.shallowSlice([ start, [ end ] ]) +`shallowSlice()` returns a new `BufferList` object containing the bytes within the range specified. Both `start` and `end` are optional and will default to the beginning and end of the list respectively. + +No copies will be performed. All buffers in the result share memory with the original list. + +-------------------------------------------------------- + +### bl.copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ]) +`copy()` copies the content of the list in the `dest` buffer, starting from `destStart` and containing the bytes within the range specified with `srcStart` to `srcEnd`. `destStart`, `start` and `end` are optional and will default to the beginning of the `dest` buffer, and the beginning and end of the list respectively. + +-------------------------------------------------------- + +### bl.duplicate() +`duplicate()` performs a **shallow-copy** of the list. The internal Buffers remains the same, so if you change the underlying Buffers, the change will be reflected in both the original and the duplicate. This method is needed if you want to call `consume()` or `pipe()` and still keep the original list.Example: + +```js +var bl = new BufferList() + +bl.append('hello') +bl.append(' world') +bl.append('\n') + +bl.duplicate().pipe(process.stdout, { end: false }) + +console.log(bl.toString()) +``` + +-------------------------------------------------------- + +### bl.consume(bytes) +`consume()` will shift bytes *off the start of the list*. The number of bytes consumed don't need to line up with the sizes of the internal Buffers—initial offsets will be calculated accordingly in order to give you a consistent view of the data. + +-------------------------------------------------------- + +### bl.toString([encoding, [ start, [ end ]]]) +`toString()` will return a string representation of the buffer. The optional `start` and `end` arguments are passed on to `slice()`, while the `encoding` is passed on to `toString()` of the resulting Buffer. See the [Buffer#toString()](http://nodejs.org/docs/latest/api/buffer.html#buffer_buf_tostring_encoding_start_end) documentation for more information. + +-------------------------------------------------------- + +### bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8() + +All of the standard byte-reading methods of the `Buffer` interface are implemented and will operate across internal Buffer boundaries transparently. + +See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work. + +-------------------------------------------------------- + +### Streams +**bl** is a Node **[Duplex Stream](http://nodejs.org/docs/latest/api/stream.html#stream_class_stream_duplex)**, so it can be read from and written to like a standard Node stream. You can also `pipe()` to and from a **bl** instance. + +-------------------------------------------------------- + +## Contributors + +**bl** is brought to you by the following hackers: + + * [Rod Vagg](https://github.com/rvagg) + * [Matteo Collina](https://github.com/mcollina) + * [Jarett Cruger](https://github.com/jcrugzz) + +======= + + +## License & copyright + +Copyright (c) 2013-2016 bl contributors (listed above). + +bl is licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/bl.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/bl.js new file mode 100644 index 00000000..0c8de189 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/bl.js @@ -0,0 +1,290 @@ +var DuplexStream = require('readable-stream/duplex') + , util = require('util') + , Buffer = require('safe-buffer').Buffer + + +function BufferList (callback) { + if (!(this instanceof BufferList)) + return new BufferList(callback) + + this._bufs = [] + this.length = 0 + + if (typeof callback == 'function') { + this._callback = callback + + var piper = function piper (err) { + if (this._callback) { + this._callback(err) + this._callback = null + } + }.bind(this) + + this.on('pipe', function onPipe (src) { + src.on('error', piper) + }) + this.on('unpipe', function onUnpipe (src) { + src.removeListener('error', piper) + }) + } else { + this.append(callback) + } + + DuplexStream.call(this) +} + + +util.inherits(BufferList, DuplexStream) + + +BufferList.prototype._offset = function _offset (offset) { + var tot = 0, i = 0, _t + if (offset === 0) return [ 0, 0 ] + for (; i < this._bufs.length; i++) { + _t = tot + this._bufs[i].length + if (offset < _t || i == this._bufs.length - 1) + return [ i, offset - tot ] + tot = _t + } +} + + +BufferList.prototype.append = function append (buf) { + var i = 0 + + if (Buffer.isBuffer(buf)) { + this._appendBuffer(buf); + } else if (Array.isArray(buf)) { + for (; i < buf.length; i++) + this.append(buf[i]) + } else if (buf instanceof BufferList) { + // unwrap argument into individual BufferLists + for (; i < buf._bufs.length; i++) + this.append(buf._bufs[i]) + } else if (buf != null) { + // coerce number arguments to strings, since Buffer(number) does + // uninitialized memory allocation + if (typeof buf == 'number') + buf = buf.toString() + + this._appendBuffer(Buffer.from(buf)); + } + + return this +} + + +BufferList.prototype._appendBuffer = function appendBuffer (buf) { + this._bufs.push(buf) + this.length += buf.length +} + + +BufferList.prototype._write = function _write (buf, encoding, callback) { + this._appendBuffer(buf) + + if (typeof callback == 'function') + callback() +} + + +BufferList.prototype._read = function _read (size) { + if (!this.length) + return this.push(null) + + size = Math.min(size, this.length) + this.push(this.slice(0, size)) + this.consume(size) +} + + +BufferList.prototype.end = function end (chunk) { + DuplexStream.prototype.end.call(this, chunk) + + if (this._callback) { + this._callback(null, this.slice()) + this._callback = null + } +} + + +BufferList.prototype.get = function get (index) { + return this.slice(index, index + 1)[0] +} + + +BufferList.prototype.slice = function slice (start, end) { + if (typeof start == 'number' && start < 0) + start += this.length + if (typeof end == 'number' && end < 0) + end += this.length + return this.copy(null, 0, start, end) +} + + +BufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) { + if (typeof srcStart != 'number' || srcStart < 0) + srcStart = 0 + if (typeof srcEnd != 'number' || srcEnd > this.length) + srcEnd = this.length + if (srcStart >= this.length) + return dst || Buffer.alloc(0) + if (srcEnd <= 0) + return dst || Buffer.alloc(0) + + var copy = !!dst + , off = this._offset(srcStart) + , len = srcEnd - srcStart + , bytes = len + , bufoff = (copy && dstStart) || 0 + , start = off[1] + , l + , i + + // copy/slice everything + if (srcStart === 0 && srcEnd == this.length) { + if (!copy) { // slice, but full concat if multiple buffers + return this._bufs.length === 1 + ? this._bufs[0] + : Buffer.concat(this._bufs, this.length) + } + + // copy, need to copy individual buffers + for (i = 0; i < this._bufs.length; i++) { + this._bufs[i].copy(dst, bufoff) + bufoff += this._bufs[i].length + } + + return dst + } + + // easy, cheap case where it's a subset of one of the buffers + if (bytes <= this._bufs[off[0]].length - start) { + return copy + ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes) + : this._bufs[off[0]].slice(start, start + bytes) + } + + if (!copy) // a slice, we need something to copy in to + dst = Buffer.allocUnsafe(len) + + for (i = off[0]; i < this._bufs.length; i++) { + l = this._bufs[i].length - start + + if (bytes > l) { + this._bufs[i].copy(dst, bufoff, start) + bufoff += l + } else { + this._bufs[i].copy(dst, bufoff, start, start + bytes) + bufoff += l + break + } + + bytes -= l + + if (start) + start = 0 + } + + // safeguard so that we don't return uninitialized memory + if (dst.length > bufoff) return dst.slice(0, bufoff) + + return dst +} + +BufferList.prototype.shallowSlice = function shallowSlice (start, end) { + start = start || 0 + end = end || this.length + + if (start < 0) + start += this.length + if (end < 0) + end += this.length + + var startOffset = this._offset(start) + , endOffset = this._offset(end) + , buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1) + + if (endOffset[1] == 0) + buffers.pop() + else + buffers[buffers.length-1] = buffers[buffers.length-1].slice(0, endOffset[1]) + + if (startOffset[1] != 0) + buffers[0] = buffers[0].slice(startOffset[1]) + + return new BufferList(buffers) +} + +BufferList.prototype.toString = function toString (encoding, start, end) { + return this.slice(start, end).toString(encoding) +} + +BufferList.prototype.consume = function consume (bytes) { + // first, normalize the argument, in accordance with how Buffer does it + bytes = Math.trunc(bytes) + // do nothing if not a positive number + if (Number.isNaN(bytes) || bytes <= 0) return this + + while (this._bufs.length) { + if (bytes >= this._bufs[0].length) { + bytes -= this._bufs[0].length + this.length -= this._bufs[0].length + this._bufs.shift() + } else { + this._bufs[0] = this._bufs[0].slice(bytes) + this.length -= bytes + break + } + } + return this +} + + +BufferList.prototype.duplicate = function duplicate () { + var i = 0 + , copy = new BufferList() + + for (; i < this._bufs.length; i++) + copy.append(this._bufs[i]) + + return copy +} + + +BufferList.prototype.destroy = function destroy () { + this._bufs.length = 0 + this.length = 0 + this.push(null) +} + + +;(function () { + var methods = { + 'readDoubleBE' : 8 + , 'readDoubleLE' : 8 + , 'readFloatBE' : 4 + , 'readFloatLE' : 4 + , 'readInt32BE' : 4 + , 'readInt32LE' : 4 + , 'readUInt32BE' : 4 + , 'readUInt32LE' : 4 + , 'readInt16BE' : 2 + , 'readInt16LE' : 2 + , 'readUInt16BE' : 2 + , 'readUInt16LE' : 2 + , 'readInt8' : 1 + , 'readUInt8' : 1 + } + + for (var m in methods) { + (function (m) { + BufferList.prototype[m] = function (offset) { + return this.slice(offset, offset + methods[m])[m](0) + } + }(m)) + } +}()) + + +module.exports = BufferList diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/package.json new file mode 100644 index 00000000..cfd775ee --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/package.json @@ -0,0 +1,66 @@ +{ + "_args": [ + [ + "bl@1.2.3", + "/tmp/repository/main" + ] + ], + "_from": "bl@1.2.3", + "_id": "bl@1.2.3", + "_inBundle": false, + "_integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "_location": "/bl", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "bl@1.2.3", + "name": "bl", + "escapedName": "bl", + "rawSpec": "1.2.3", + "saveSpec": null, + "fetchSpec": "1.2.3" + }, + "_requiredBy": [ + "/tar-stream" + ], + "_resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "_spec": "1.2.3", + "_where": "/tmp/repository/main", + "authors": [ + "Rod Vagg (https://github.com/rvagg)", + "Matteo Collina (https://github.com/mcollina)", + "Jarett Cruger (https://github.com/jcrugzz)" + ], + "bugs": { + "url": "https://github.com/rvagg/bl/issues" + }, + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + }, + "description": "Buffer List: collect buffers and access with a standard readable Buffer interface, streamable too!", + "devDependencies": { + "faucet": "0.0.1", + "hash_file": "~0.1.1", + "tape": "~4.9.0" + }, + "homepage": "https://github.com/rvagg/bl", + "keywords": [ + "buffer", + "buffers", + "stream", + "awesomesauce" + ], + "license": "MIT", + "main": "bl.js", + "name": "bl", + "repository": { + "type": "git", + "url": "git+https://github.com/rvagg/bl.git" + }, + "scripts": { + "test": "node test/test.js | faucet" + }, + "version": "1.2.3" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/test/test.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/test/test.js new file mode 100644 index 00000000..dac1861e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/bl/test/test.js @@ -0,0 +1,718 @@ +var tape = require('tape') + , crypto = require('crypto') + , fs = require('fs') + , hash = require('hash_file') + , BufferList = require('../') + , Buffer = require('safe-buffer').Buffer + + , encodings = + ('hex utf8 utf-8 ascii binary base64' + + (process.browser ? '' : ' ucs2 ucs-2 utf16le utf-16le')).split(' ') + +tape('single bytes from single buffer', function (t) { + var bl = new BufferList() + bl.append(Buffer.from('abcd')) + + t.equal(bl.length, 4) + + t.equal(bl.get(0), 97) + t.equal(bl.get(1), 98) + t.equal(bl.get(2), 99) + t.equal(bl.get(3), 100) + + t.end() +}) + +tape('single bytes from multiple buffers', function (t) { + var bl = new BufferList() + bl.append(Buffer.from('abcd')) + bl.append(Buffer.from('efg')) + bl.append(Buffer.from('hi')) + bl.append(Buffer.from('j')) + + t.equal(bl.length, 10) + + t.equal(bl.get(0), 97) + t.equal(bl.get(1), 98) + t.equal(bl.get(2), 99) + t.equal(bl.get(3), 100) + t.equal(bl.get(4), 101) + t.equal(bl.get(5), 102) + t.equal(bl.get(6), 103) + t.equal(bl.get(7), 104) + t.equal(bl.get(8), 105) + t.equal(bl.get(9), 106) + t.end() +}) + +tape('multi bytes from single buffer', function (t) { + var bl = new BufferList() + bl.append(Buffer.from('abcd')) + + t.equal(bl.length, 4) + + t.equal(bl.slice(0, 4).toString('ascii'), 'abcd') + t.equal(bl.slice(0, 3).toString('ascii'), 'abc') + t.equal(bl.slice(1, 4).toString('ascii'), 'bcd') + t.equal(bl.slice(-4, -1).toString('ascii'), 'abc') + + t.end() +}) + +tape('multi bytes from single buffer (negative indexes)', function (t) { + var bl = new BufferList() + bl.append(Buffer.from('buffer')) + + t.equal(bl.length, 6) + + t.equal(bl.slice(-6, -1).toString('ascii'), 'buffe') + t.equal(bl.slice(-6, -2).toString('ascii'), 'buff') + t.equal(bl.slice(-5, -2).toString('ascii'), 'uff') + + t.end() +}) + +tape('multiple bytes from multiple buffers', function (t) { + var bl = new BufferList() + + bl.append(Buffer.from('abcd')) + bl.append(Buffer.from('efg')) + bl.append(Buffer.from('hi')) + bl.append(Buffer.from('j')) + + t.equal(bl.length, 10) + + t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') + t.equal(bl.slice(3, 10).toString('ascii'), 'defghij') + t.equal(bl.slice(3, 6).toString('ascii'), 'def') + t.equal(bl.slice(3, 8).toString('ascii'), 'defgh') + t.equal(bl.slice(5, 10).toString('ascii'), 'fghij') + t.equal(bl.slice(-7, -4).toString('ascii'), 'def') + + t.end() +}) + +tape('multiple bytes from multiple buffer lists', function (t) { + var bl = new BufferList() + + bl.append(new BufferList([ Buffer.from('abcd'), Buffer.from('efg') ])) + bl.append(new BufferList([ Buffer.from('hi'), Buffer.from('j') ])) + + t.equal(bl.length, 10) + + t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') + + t.equal(bl.slice(3, 10).toString('ascii'), 'defghij') + t.equal(bl.slice(3, 6).toString('ascii'), 'def') + t.equal(bl.slice(3, 8).toString('ascii'), 'defgh') + t.equal(bl.slice(5, 10).toString('ascii'), 'fghij') + + t.end() +}) + +// same data as previous test, just using nested constructors +tape('multiple bytes from crazy nested buffer lists', function (t) { + var bl = new BufferList() + + bl.append(new BufferList([ + new BufferList([ + new BufferList(Buffer.from('abc')) + , Buffer.from('d') + , new BufferList(Buffer.from('efg')) + ]) + , new BufferList([ Buffer.from('hi') ]) + , new BufferList(Buffer.from('j')) + ])) + + t.equal(bl.length, 10) + + t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') + + t.equal(bl.slice(3, 10).toString('ascii'), 'defghij') + t.equal(bl.slice(3, 6).toString('ascii'), 'def') + t.equal(bl.slice(3, 8).toString('ascii'), 'defgh') + t.equal(bl.slice(5, 10).toString('ascii'), 'fghij') + + t.end() +}) + +tape('append accepts arrays of Buffers', function (t) { + var bl = new BufferList() + bl.append(Buffer.from('abc')) + bl.append([ Buffer.from('def') ]) + bl.append([ Buffer.from('ghi'), Buffer.from('jkl') ]) + bl.append([ Buffer.from('mnop'), Buffer.from('qrstu'), Buffer.from('vwxyz') ]) + t.equal(bl.length, 26) + t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') + t.end() +}) + +tape('append accepts arrays of BufferLists', function (t) { + var bl = new BufferList() + bl.append(Buffer.from('abc')) + bl.append([ new BufferList('def') ]) + bl.append(new BufferList([ Buffer.from('ghi'), new BufferList('jkl') ])) + bl.append([ Buffer.from('mnop'), new BufferList([ Buffer.from('qrstu'), Buffer.from('vwxyz') ]) ]) + t.equal(bl.length, 26) + t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') + t.end() +}) + +tape('append chainable', function (t) { + var bl = new BufferList() + t.ok(bl.append(Buffer.from('abcd')) === bl) + t.ok(bl.append([ Buffer.from('abcd') ]) === bl) + t.ok(bl.append(new BufferList(Buffer.from('abcd'))) === bl) + t.ok(bl.append([ new BufferList(Buffer.from('abcd')) ]) === bl) + t.end() +}) + +tape('append chainable (test results)', function (t) { + var bl = new BufferList('abc') + .append([ new BufferList('def') ]) + .append(new BufferList([ Buffer.from('ghi'), new BufferList('jkl') ])) + .append([ Buffer.from('mnop'), new BufferList([ Buffer.from('qrstu'), Buffer.from('vwxyz') ]) ]) + + t.equal(bl.length, 26) + t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') + t.end() +}) + +tape('consuming from multiple buffers', function (t) { + var bl = new BufferList() + + bl.append(Buffer.from('abcd')) + bl.append(Buffer.from('efg')) + bl.append(Buffer.from('hi')) + bl.append(Buffer.from('j')) + + t.equal(bl.length, 10) + + t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') + + bl.consume(3) + t.equal(bl.length, 7) + t.equal(bl.slice(0, 7).toString('ascii'), 'defghij') + + bl.consume(2) + t.equal(bl.length, 5) + t.equal(bl.slice(0, 5).toString('ascii'), 'fghij') + + bl.consume(1) + t.equal(bl.length, 4) + t.equal(bl.slice(0, 4).toString('ascii'), 'ghij') + + bl.consume(1) + t.equal(bl.length, 3) + t.equal(bl.slice(0, 3).toString('ascii'), 'hij') + + bl.consume(2) + t.equal(bl.length, 1) + t.equal(bl.slice(0, 1).toString('ascii'), 'j') + + t.end() +}) + +tape('complete consumption', function (t) { + var bl = new BufferList() + + bl.append(Buffer.from('a')) + bl.append(Buffer.from('b')) + + bl.consume(2) + + t.equal(bl.length, 0) + t.equal(bl._bufs.length, 0) + + t.end() +}) + +tape('test readUInt8 / readInt8', function (t) { + var buf1 = Buffer.alloc(1) + , buf2 = Buffer.alloc(3) + , buf3 = Buffer.alloc(3) + , bl = new BufferList() + + buf2[1] = 0x3 + buf2[2] = 0x4 + buf3[0] = 0x23 + buf3[1] = 0x42 + + bl.append(buf1) + bl.append(buf2) + bl.append(buf3) + + t.equal(bl.readUInt8(2), 0x3) + t.equal(bl.readInt8(2), 0x3) + t.equal(bl.readUInt8(3), 0x4) + t.equal(bl.readInt8(3), 0x4) + t.equal(bl.readUInt8(4), 0x23) + t.equal(bl.readInt8(4), 0x23) + t.equal(bl.readUInt8(5), 0x42) + t.equal(bl.readInt8(5), 0x42) + t.end() +}) + +tape('test readUInt16LE / readUInt16BE / readInt16LE / readInt16BE', function (t) { + var buf1 = Buffer.alloc(1) + , buf2 = Buffer.alloc(3) + , buf3 = Buffer.alloc(3) + , bl = new BufferList() + + buf2[1] = 0x3 + buf2[2] = 0x4 + buf3[0] = 0x23 + buf3[1] = 0x42 + + bl.append(buf1) + bl.append(buf2) + bl.append(buf3) + + t.equal(bl.readUInt16BE(2), 0x0304) + t.equal(bl.readUInt16LE(2), 0x0403) + t.equal(bl.readInt16BE(2), 0x0304) + t.equal(bl.readInt16LE(2), 0x0403) + t.equal(bl.readUInt16BE(3), 0x0423) + t.equal(bl.readUInt16LE(3), 0x2304) + t.equal(bl.readInt16BE(3), 0x0423) + t.equal(bl.readInt16LE(3), 0x2304) + t.equal(bl.readUInt16BE(4), 0x2342) + t.equal(bl.readUInt16LE(4), 0x4223) + t.equal(bl.readInt16BE(4), 0x2342) + t.equal(bl.readInt16LE(4), 0x4223) + t.end() +}) + +tape('test readUInt32LE / readUInt32BE / readInt32LE / readInt32BE', function (t) { + var buf1 = Buffer.alloc(1) + , buf2 = Buffer.alloc(3) + , buf3 = Buffer.alloc(3) + , bl = new BufferList() + + buf2[1] = 0x3 + buf2[2] = 0x4 + buf3[0] = 0x23 + buf3[1] = 0x42 + + bl.append(buf1) + bl.append(buf2) + bl.append(buf3) + + t.equal(bl.readUInt32BE(2), 0x03042342) + t.equal(bl.readUInt32LE(2), 0x42230403) + t.equal(bl.readInt32BE(2), 0x03042342) + t.equal(bl.readInt32LE(2), 0x42230403) + t.end() +}) + +tape('test readFloatLE / readFloatBE', function (t) { + var buf1 = Buffer.alloc(1) + , buf2 = Buffer.alloc(3) + , buf3 = Buffer.alloc(3) + , bl = new BufferList() + + buf2[1] = 0x00 + buf2[2] = 0x00 + buf3[0] = 0x80 + buf3[1] = 0x3f + + bl.append(buf1) + bl.append(buf2) + bl.append(buf3) + + t.equal(bl.readFloatLE(2), 0x01) + t.end() +}) + +tape('test readDoubleLE / readDoubleBE', function (t) { + var buf1 = Buffer.alloc(1) + , buf2 = Buffer.alloc(3) + , buf3 = Buffer.alloc(10) + , bl = new BufferList() + + buf2[1] = 0x55 + buf2[2] = 0x55 + buf3[0] = 0x55 + buf3[1] = 0x55 + buf3[2] = 0x55 + buf3[3] = 0x55 + buf3[4] = 0xd5 + buf3[5] = 0x3f + + bl.append(buf1) + bl.append(buf2) + bl.append(buf3) + + t.equal(bl.readDoubleLE(2), 0.3333333333333333) + t.end() +}) + +tape('test toString', function (t) { + var bl = new BufferList() + + bl.append(Buffer.from('abcd')) + bl.append(Buffer.from('efg')) + bl.append(Buffer.from('hi')) + bl.append(Buffer.from('j')) + + t.equal(bl.toString('ascii', 0, 10), 'abcdefghij') + t.equal(bl.toString('ascii', 3, 10), 'defghij') + t.equal(bl.toString('ascii', 3, 6), 'def') + t.equal(bl.toString('ascii', 3, 8), 'defgh') + t.equal(bl.toString('ascii', 5, 10), 'fghij') + + t.end() +}) + +tape('test toString encoding', function (t) { + var bl = new BufferList() + , b = Buffer.from('abcdefghij\xff\x00') + + bl.append(Buffer.from('abcd')) + bl.append(Buffer.from('efg')) + bl.append(Buffer.from('hi')) + bl.append(Buffer.from('j')) + bl.append(Buffer.from('\xff\x00')) + + encodings.forEach(function (enc) { + t.equal(bl.toString(enc), b.toString(enc), enc) + }) + + t.end() +}) + +tape('uninitialized memory', function (t) { + const secret = crypto.randomBytes(256) + for (let i = 0; i < 1e6; i++) { + const clone = Buffer.from(secret) + const bl = new BufferList() + bl.append(Buffer.from('a')) + bl.consume(-1024) + const buf = bl.slice(1) + if (buf.indexOf(clone) !== -1) { + t.fail(`Match (at ${i})`) + break + } + } + t.end() +}) + +!process.browser && tape('test stream', function (t) { + var random = crypto.randomBytes(65534) + , rndhash = hash(random, 'md5') + , md5sum = crypto.createHash('md5') + , bl = new BufferList(function (err, buf) { + t.ok(Buffer.isBuffer(buf)) + t.ok(err === null) + t.equal(rndhash, hash(bl.slice(), 'md5')) + t.equal(rndhash, hash(buf, 'md5')) + + bl.pipe(fs.createWriteStream('/tmp/bl_test_rnd_out.dat')) + .on('close', function () { + var s = fs.createReadStream('/tmp/bl_test_rnd_out.dat') + s.on('data', md5sum.update.bind(md5sum)) + s.on('end', function() { + t.equal(rndhash, md5sum.digest('hex'), 'woohoo! correct hash!') + t.end() + }) + }) + + }) + + fs.writeFileSync('/tmp/bl_test_rnd.dat', random) + fs.createReadStream('/tmp/bl_test_rnd.dat').pipe(bl) +}) + +tape('instantiation with Buffer', function (t) { + var buf = crypto.randomBytes(1024) + , buf2 = crypto.randomBytes(1024) + , b = BufferList(buf) + + t.equal(buf.toString('hex'), b.slice().toString('hex'), 'same buffer') + b = BufferList([ buf, buf2 ]) + t.equal(b.slice().toString('hex'), Buffer.concat([ buf, buf2 ]).toString('hex'), 'same buffer') + t.end() +}) + +tape('test String appendage', function (t) { + var bl = new BufferList() + , b = Buffer.from('abcdefghij\xff\x00') + + bl.append('abcd') + bl.append('efg') + bl.append('hi') + bl.append('j') + bl.append('\xff\x00') + + encodings.forEach(function (enc) { + t.equal(bl.toString(enc), b.toString(enc)) + }) + + t.end() +}) + +tape('test Number appendage', function (t) { + var bl = new BufferList() + , b = Buffer.from('1234567890') + + bl.append(1234) + bl.append(567) + bl.append(89) + bl.append(0) + + encodings.forEach(function (enc) { + t.equal(bl.toString(enc), b.toString(enc)) + }) + + t.end() +}) + +tape('write nothing, should get empty buffer', function (t) { + t.plan(3) + BufferList(function (err, data) { + t.notOk(err, 'no error') + t.ok(Buffer.isBuffer(data), 'got a buffer') + t.equal(0, data.length, 'got a zero-length buffer') + t.end() + }).end() +}) + +tape('unicode string', function (t) { + t.plan(2) + var inp1 = '\u2600' + , inp2 = '\u2603' + , exp = inp1 + ' and ' + inp2 + , bl = BufferList() + bl.write(inp1) + bl.write(' and ') + bl.write(inp2) + t.equal(exp, bl.toString()) + t.equal(Buffer.from(exp).toString('hex'), bl.toString('hex')) +}) + +tape('should emit finish', function (t) { + var source = BufferList() + , dest = BufferList() + + source.write('hello') + source.pipe(dest) + + dest.on('finish', function () { + t.equal(dest.toString('utf8'), 'hello') + t.end() + }) +}) + +tape('basic copy', function (t) { + var buf = crypto.randomBytes(1024) + , buf2 = Buffer.alloc(1024) + , b = BufferList(buf) + + b.copy(buf2) + t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer') + t.end() +}) + +tape('copy after many appends', function (t) { + var buf = crypto.randomBytes(512) + , buf2 = Buffer.alloc(1024) + , b = BufferList(buf) + + b.append(buf) + b.copy(buf2) + t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer') + t.end() +}) + +tape('copy at a precise position', function (t) { + var buf = crypto.randomBytes(1004) + , buf2 = Buffer.alloc(1024) + , b = BufferList(buf) + + b.copy(buf2, 20) + t.equal(b.slice().toString('hex'), buf2.slice(20).toString('hex'), 'same buffer') + t.end() +}) + +tape('copy starting from a precise location', function (t) { + var buf = crypto.randomBytes(10) + , buf2 = Buffer.alloc(5) + , b = BufferList(buf) + + b.copy(buf2, 0, 5) + t.equal(b.slice(5).toString('hex'), buf2.toString('hex'), 'same buffer') + t.end() +}) + +tape('copy in an interval', function (t) { + var rnd = crypto.randomBytes(10) + , b = BufferList(rnd) // put the random bytes there + , actual = Buffer.alloc(3) + , expected = Buffer.alloc(3) + + rnd.copy(expected, 0, 5, 8) + b.copy(actual, 0, 5, 8) + + t.equal(actual.toString('hex'), expected.toString('hex'), 'same buffer') + t.end() +}) + +tape('copy an interval between two buffers', function (t) { + var buf = crypto.randomBytes(10) + , buf2 = Buffer.alloc(10) + , b = BufferList(buf) + + b.append(buf) + b.copy(buf2, 0, 5, 15) + + t.equal(b.slice(5, 15).toString('hex'), buf2.toString('hex'), 'same buffer') + t.end() +}) + +tape('shallow slice across buffer boundaries', function (t) { + var bl = new BufferList(['First', 'Second', 'Third']) + + t.equal(bl.shallowSlice(3, 13).toString(), 'stSecondTh') + t.end() +}) + +tape('shallow slice within single buffer', function (t) { + t.plan(2) + var bl = new BufferList(['First', 'Second', 'Third']) + + t.equal(bl.shallowSlice(5, 10).toString(), 'Secon') + t.equal(bl.shallowSlice(7, 10).toString(), 'con') + t.end() +}) + +tape('shallow slice single buffer', function (t) { + t.plan(3) + var bl = new BufferList(['First', 'Second', 'Third']) + + t.equal(bl.shallowSlice(0, 5).toString(), 'First') + t.equal(bl.shallowSlice(5, 11).toString(), 'Second') + t.equal(bl.shallowSlice(11, 16).toString(), 'Third') +}) + +tape('shallow slice with negative or omitted indices', function (t) { + t.plan(4) + var bl = new BufferList(['First', 'Second', 'Third']) + + t.equal(bl.shallowSlice().toString(), 'FirstSecondThird') + t.equal(bl.shallowSlice(5).toString(), 'SecondThird') + t.equal(bl.shallowSlice(5, -3).toString(), 'SecondTh') + t.equal(bl.shallowSlice(-8).toString(), 'ondThird') +}) + +tape('shallow slice does not make a copy', function (t) { + t.plan(1) + var buffers = [Buffer.from('First'), Buffer.from('Second'), Buffer.from('Third')] + var bl = (new BufferList(buffers)).shallowSlice(5, -3) + + buffers[1].fill('h') + buffers[2].fill('h') + + t.equal(bl.toString(), 'hhhhhhhh') +}) + +tape('duplicate', function (t) { + t.plan(2) + + var bl = new BufferList('abcdefghij\xff\x00') + , dup = bl.duplicate() + + t.equal(bl.prototype, dup.prototype) + t.equal(bl.toString('hex'), dup.toString('hex')) +}) + +tape('destroy no pipe', function (t) { + t.plan(2) + + var bl = new BufferList('alsdkfja;lsdkfja;lsdk') + bl.destroy() + + t.equal(bl._bufs.length, 0) + t.equal(bl.length, 0) +}) + +!process.browser && tape('destroy with pipe before read end', function (t) { + t.plan(2) + + var bl = new BufferList() + fs.createReadStream(__dirname + '/test.js') + .pipe(bl) + + bl.destroy() + + t.equal(bl._bufs.length, 0) + t.equal(bl.length, 0) + +}) + +!process.browser && tape('destroy with pipe before read end with race', function (t) { + t.plan(2) + + var bl = new BufferList() + fs.createReadStream(__dirname + '/test.js') + .pipe(bl) + + setTimeout(function () { + bl.destroy() + setTimeout(function () { + t.equal(bl._bufs.length, 0) + t.equal(bl.length, 0) + }, 500) + }, 500) +}) + +!process.browser && tape('destroy with pipe after read end', function (t) { + t.plan(2) + + var bl = new BufferList() + fs.createReadStream(__dirname + '/test.js') + .on('end', onEnd) + .pipe(bl) + + function onEnd () { + bl.destroy() + + t.equal(bl._bufs.length, 0) + t.equal(bl.length, 0) + } +}) + +!process.browser && tape('destroy with pipe while writing to a destination', function (t) { + t.plan(4) + + var bl = new BufferList() + , ds = new BufferList() + + fs.createReadStream(__dirname + '/test.js') + .on('end', onEnd) + .pipe(bl) + + function onEnd () { + bl.pipe(ds) + + setTimeout(function () { + bl.destroy() + + t.equals(bl._bufs.length, 0) + t.equals(bl.length, 0) + + ds.destroy() + + t.equals(bl._bufs.length, 0) + t.equals(bl.length, 0) + + }, 100) + } +}) + +!process.browser && tape('handle error', function (t) { + t.plan(2) + fs.createReadStream('/does/not/exist').pipe(BufferList(function (err, data) { + t.ok(err instanceof Error, 'has error') + t.notOk(data, 'no data') + })) +}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/LICENSE new file mode 100644 index 00000000..de322667 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013 Julian Gruber + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/README.md new file mode 100644 index 00000000..6b4e0e16 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/README.md @@ -0,0 +1,129 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) +[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/) + +[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) + +## Example + +```js +var expand = require('brace-expansion'); + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +var expand = require('brace-expansion'); +``` + +### var expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install brace-expansion +``` + +## Contributors + +- [Julian Gruber](https://github.com/juliangruber) +- [Isaac Z. Schlueter](https://github.com/isaacs) + +## Sponsors + +This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! + +Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/index.js new file mode 100644 index 00000000..0478be81 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/index.js @@ -0,0 +1,201 @@ +var concatMap = require('concat-map'); +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; +} + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/package.json new file mode 100644 index 00000000..7eaf44cb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/brace-expansion/package.json @@ -0,0 +1,79 @@ +{ + "_args": [ + [ + "brace-expansion@1.1.11", + "/tmp/repository/main" + ] + ], + "_from": "brace-expansion@1.1.11", + "_id": "brace-expansion@1.1.11", + "_inBundle": false, + "_integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "_location": "/brace-expansion", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "brace-expansion@1.1.11", + "name": "brace-expansion", + "escapedName": "brace-expansion", + "rawSpec": "1.1.11", + "saveSpec": null, + "fetchSpec": "1.1.11" + }, + "_requiredBy": [ + "/minimatch", + "/mocha/minimatch" + ], + "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "_spec": "1.1.11", + "_where": "/tmp/repository/main", + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/brace-expansion/issues" + }, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "description": "Brace expansion as known from sh/bash", + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "homepage": "https://github.com/juliangruber/brace-expansion", + "keywords": [], + "license": "MIT", + "main": "index.js", + "name": "brace-expansion", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/brace-expansion.git" + }, + "scripts": { + "bench": "matcha test/perf/bench.js", + "gentest": "bash test/generate.sh", + "test": "tape test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "version": "1.1.11" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc-unsafe/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc-unsafe/index.js new file mode 100644 index 00000000..0bd335ff --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc-unsafe/index.js @@ -0,0 +1,17 @@ +function allocUnsafe (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be a number') + } + + if (size < 0) { + throw new RangeError('"size" argument must not be negative') + } + + if (Buffer.allocUnsafe) { + return Buffer.allocUnsafe(size) + } else { + return new Buffer(size) + } +} + +module.exports = allocUnsafe diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc-unsafe/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc-unsafe/package.json new file mode 100644 index 00000000..21a539fa --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc-unsafe/package.json @@ -0,0 +1,60 @@ +{ + "_args": [ + [ + "buffer-alloc-unsafe@1.1.0", + "/tmp/repository/main" + ] + ], + "_from": "buffer-alloc-unsafe@1.1.0", + "_id": "buffer-alloc-unsafe@1.1.0", + "_inBundle": false, + "_integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "_location": "/buffer-alloc-unsafe", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "buffer-alloc-unsafe@1.1.0", + "name": "buffer-alloc-unsafe", + "escapedName": "buffer-alloc-unsafe", + "rawSpec": "1.1.0", + "saveSpec": null, + "fetchSpec": "1.1.0" + }, + "_requiredBy": [ + "/buffer-alloc" + ], + "_resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "_spec": "1.1.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/LinusU/buffer-alloc-unsafe/issues" + }, + "description": "A [ponyfill](https://ponyfill.com) for `Buffer.allocUnsafe`.", + "devDependencies": { + "standard": "^7.1.2" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/LinusU/buffer-alloc-unsafe#readme", + "keywords": [ + "allocUnsafe", + "allocate", + "buffer allocUnsafe", + "buffer unsafe allocate", + "buffer", + "ponyfill", + "unsafe allocate" + ], + "license": "MIT", + "name": "buffer-alloc-unsafe", + "repository": { + "type": "git", + "url": "git+https://github.com/LinusU/buffer-alloc-unsafe.git" + }, + "scripts": { + "test": "standard && node test" + }, + "version": "1.1.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc-unsafe/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc-unsafe/readme.md new file mode 100644 index 00000000..8725ecf6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc-unsafe/readme.md @@ -0,0 +1,46 @@ +# Buffer Alloc Unsafe + +A [ponyfill](https://ponyfill.com) for `Buffer.allocUnsafe`. + +Works as Node.js: `v7.0.0`
+Works on Node.js: `v0.10.0` + +## Installation + +```sh +npm install --save buffer-alloc-unsafe +``` + +## Usage + +```js +const allocUnsafe = require('buffer-alloc-unsafe') + +console.log(allocUnsafe(10)) +//=> + +console.log(allocUnsafe(10)) +//=> + +console.log(allocUnsafe(10)) +//=> + +allocUnsafe(-10) +//=> RangeError: "size" argument must not be negative +``` + +## API + +### allocUnsafe(size) + +- `size` <Integer> The desired length of the new `Buffer` + +Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must be +less than or equal to the value of `buffer.kMaxLength` and greater than or equal +to zero. Otherwise, a `RangeError` is thrown. + +## See also + +- [buffer-alloc](https://github.com/LinusU/buffer-alloc) A ponyfill for `Buffer.alloc` +- [buffer-fill](https://github.com/LinusU/buffer-fill) A ponyfill for `Buffer.fill` +- [buffer-from](https://github.com/LinusU/buffer-from) A ponyfill for `Buffer.from` diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc/index.js new file mode 100644 index 00000000..fe658606 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc/index.js @@ -0,0 +1,32 @@ +var bufferFill = require('buffer-fill') +var allocUnsafe = require('buffer-alloc-unsafe') + +module.exports = function alloc (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be a number') + } + + if (size < 0) { + throw new RangeError('"size" argument must not be negative') + } + + if (Buffer.alloc) { + return Buffer.alloc(size, fill, encoding) + } + + var buffer = allocUnsafe(size) + + if (size === 0) { + return buffer + } + + if (fill === undefined) { + return bufferFill(buffer, 0) + } + + if (typeof encoding !== 'string') { + encoding = undefined + } + + return bufferFill(buffer, fill, encoding) +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc/package.json new file mode 100644 index 00000000..b56d7112 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc/package.json @@ -0,0 +1,62 @@ +{ + "_args": [ + [ + "buffer-alloc@1.2.0", + "/tmp/repository/main" + ] + ], + "_from": "buffer-alloc@1.2.0", + "_id": "buffer-alloc@1.2.0", + "_inBundle": false, + "_integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "_location": "/buffer-alloc", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "buffer-alloc@1.2.0", + "name": "buffer-alloc", + "escapedName": "buffer-alloc", + "rawSpec": "1.2.0", + "saveSpec": null, + "fetchSpec": "1.2.0" + }, + "_requiredBy": [ + "/tar-stream" + ], + "_resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "_spec": "1.2.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/LinusU/buffer-alloc/issues" + }, + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + }, + "description": "A [ponyfill](https://ponyfill.com) for `Buffer.alloc`.", + "devDependencies": { + "standard": "^7.1.2" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/LinusU/buffer-alloc#readme", + "keywords": [ + "alloc", + "allocate", + "buffer alloc", + "buffer allocate", + "buffer" + ], + "license": "MIT", + "name": "buffer-alloc", + "repository": { + "type": "git", + "url": "git+https://github.com/LinusU/buffer-alloc.git" + }, + "scripts": { + "test": "standard && node test" + }, + "version": "1.2.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc/readme.md new file mode 100644 index 00000000..80c7d7bb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-alloc/readme.md @@ -0,0 +1,43 @@ +# Buffer Alloc + +A [ponyfill](https://ponyfill.com) for `Buffer.alloc`. + +Works as Node.js: `v7.0.0`
+Works on Node.js: `v0.10.0` + +## Installation + +```sh +npm install --save buffer-alloc +``` + +## Usage + +```js +const alloc = require('buffer-alloc') + +console.log(alloc(4)) +//=> + +console.log(alloc(6, 0x41)) +//=> + +console.log(alloc(10, 'linus', 'utf8')) +//=> +``` + +## API + +### alloc(size[, fill[, encoding]]) + +- `size` <Integer> The desired length of the new `Buffer` +- `fill` <String> | <Buffer> | <Integer> A value to pre-fill the new `Buffer` with. **Default:** `0` +- `encoding` <String> If `fill` is a string, this is its encoding. **Default:** `'utf8'` + +Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the `Buffer` will be zero-filled. + +## See also + +- [buffer-alloc-unsafe](https://github.com/LinusU/buffer-alloc-unsafe) A ponyfill for `Buffer.allocUnsafe` +- [buffer-fill](https://github.com/LinusU/buffer-fill) A ponyfill for `Buffer.fill` +- [buffer-from](https://github.com/LinusU/buffer-from) A ponyfill for `Buffer.from` diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/LICENSE new file mode 100644 index 00000000..4cef10eb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/LICENSE @@ -0,0 +1,19 @@ +The MIT License + +Copyright (c) 2013 Brian J. Brennan + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/README.md new file mode 100644 index 00000000..0d9d8b83 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/README.md @@ -0,0 +1,47 @@ +# buffer-crc32 + +[![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32) + +crc32 that works with binary data and fancy character sets, outputs +buffer, signed or unsigned data and has tests. + +Derived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix + +# install +``` +npm install buffer-crc32 +``` + +# example +```js +var crc32 = require('buffer-crc32'); +// works with buffers +var buf = Buffer([0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00]) +crc32(buf) // -> + +// has convenience methods for getting signed or unsigned ints +crc32.signed(buf) // -> -1805997238 +crc32.unsigned(buf) // -> 2488970058 + +// will cast to buffer if given a string, so you can +// directly use foreign characters safely +crc32('自動販売機') // -> + +// and works in append mode too +var partialCrc = crc32('hey'); +var partialCrc = crc32(' ', partialCrc); +var partialCrc = crc32('sup', partialCrc); +var partialCrc = crc32(' ', partialCrc); +var finalCrc = crc32('bros', partialCrc); // -> +``` + +# tests +This was tested against the output of zlib's crc32 method. You can run +the tests with`npm test` (requires tap) + +# see also +https://github.com/alexgorbatchev/node-crc, `crc.buffer.crc32` also +supports buffer inputs and return unsigned ints (thanks @tjholowaychuk). + +# license +MIT/X11 diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/index.js new file mode 100644 index 00000000..6727dd39 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/index.js @@ -0,0 +1,111 @@ +var Buffer = require('buffer').Buffer; + +var CRC_TABLE = [ + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d +]; + +if (typeof Int32Array !== 'undefined') { + CRC_TABLE = new Int32Array(CRC_TABLE); +} + +function ensureBuffer(input) { + if (Buffer.isBuffer(input)) { + return input; + } + + var hasNewBufferAPI = + typeof Buffer.alloc === "function" && + typeof Buffer.from === "function"; + + if (typeof input === "number") { + return hasNewBufferAPI ? Buffer.alloc(input) : new Buffer(input); + } + else if (typeof input === "string") { + return hasNewBufferAPI ? Buffer.from(input) : new Buffer(input); + } + else { + throw new Error("input must be buffer, number, or string, received " + + typeof input); + } +} + +function bufferizeInt(num) { + var tmp = ensureBuffer(4); + tmp.writeInt32BE(num, 0); + return tmp; +} + +function _crc32(buf, previous) { + buf = ensureBuffer(buf); + if (Buffer.isBuffer(previous)) { + previous = previous.readUInt32BE(0); + } + var crc = ~~previous ^ -1; + for (var n = 0; n < buf.length; n++) { + crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8); + } + return (crc ^ -1); +} + +function crc32() { + return bufferizeInt(_crc32.apply(null, arguments)); +} +crc32.signed = function () { + return _crc32.apply(null, arguments); +}; +crc32.unsigned = function () { + return _crc32.apply(null, arguments) >>> 0; +}; + +module.exports = crc32; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/package.json new file mode 100644 index 00000000..dc8f7a12 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-crc32/package.json @@ -0,0 +1,73 @@ +{ + "_args": [ + [ + "buffer-crc32@0.2.13", + "/tmp/repository/main" + ] + ], + "_from": "buffer-crc32@0.2.13", + "_id": "buffer-crc32@0.2.13", + "_inBundle": false, + "_integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "_location": "/buffer-crc32", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "buffer-crc32@0.2.13", + "name": "buffer-crc32", + "escapedName": "buffer-crc32", + "rawSpec": "0.2.13", + "saveSpec": null, + "fetchSpec": "0.2.13" + }, + "_requiredBy": [ + "/yauzl", + "/yazl" + ], + "_resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "_spec": "0.2.13", + "_where": "/tmp/repository/main", + "author": { + "name": "Brian J. Brennan", + "email": "brianloveswords@gmail.com" + }, + "bugs": { + "url": "https://github.com/brianloveswords/buffer-crc32/issues" + }, + "contributors": [ + { + "name": "Vladimir Kuznetsov" + } + ], + "dependencies": {}, + "description": "A pure javascript CRC32 algorithm that plays nice with binary data", + "devDependencies": { + "tap": "~0.2.5" + }, + "engines": { + "node": "*" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/brianloveswords/buffer-crc32", + "license": "MIT", + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/brianloveswords/buffer-crc32/raw/master/LICENSE" + } + ], + "main": "index.js", + "name": "buffer-crc32", + "optionalDependencies": {}, + "repository": { + "type": "git", + "url": "git://github.com/brianloveswords/buffer-crc32.git" + }, + "scripts": { + "test": "tap tests/*.test.js" + }, + "version": "0.2.13" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-fill/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-fill/index.js new file mode 100644 index 00000000..428a9e1f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-fill/index.js @@ -0,0 +1,113 @@ +/* Node.js 6.4.0 and up has full support */ +var hasFullSupport = (function () { + try { + if (!Buffer.isEncoding('latin1')) { + return false + } + + var buf = Buffer.alloc ? Buffer.alloc(4) : new Buffer(4) + + buf.fill('ab', 'ucs2') + + return (buf.toString('hex') === '61006200') + } catch (_) { + return false + } +}()) + +function isSingleByte (val) { + return (val.length === 1 && val.charCodeAt(0) < 256) +} + +function fillWithNumber (buffer, val, start, end) { + if (start < 0 || end > buffer.length) { + throw new RangeError('Out of range index') + } + + start = start >>> 0 + end = end === undefined ? buffer.length : end >>> 0 + + if (end > start) { + buffer.fill(val, start, end) + } + + return buffer +} + +function fillWithBuffer (buffer, val, start, end) { + if (start < 0 || end > buffer.length) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return buffer + } + + start = start >>> 0 + end = end === undefined ? buffer.length : end >>> 0 + + var pos = start + var len = val.length + while (pos <= (end - len)) { + val.copy(buffer, pos) + pos += len + } + + if (pos !== end) { + val.copy(buffer, pos, 0, end - pos) + } + + return buffer +} + +function fill (buffer, val, start, end, encoding) { + if (hasFullSupport) { + return buffer.fill(val, start, end, encoding) + } + + if (typeof val === 'number') { + return fillWithNumber(buffer, val, start, end) + } + + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = buffer.length + } else if (typeof end === 'string') { + encoding = end + end = buffer.length + } + + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + + if (encoding === 'latin1') { + encoding = 'binary' + } + + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + if (val === '') { + return fillWithNumber(buffer, 0, start, end) + } + + if (isSingleByte(val)) { + return fillWithNumber(buffer, val.charCodeAt(0), start, end) + } + + val = new Buffer(val, encoding) + } + + if (Buffer.isBuffer(val)) { + return fillWithBuffer(buffer, val, start, end) + } + + // Other values (e.g. undefined, boolean, object) results in zero-fill + return fillWithNumber(buffer, 0, start, end) +} + +module.exports = fill diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-fill/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-fill/package.json new file mode 100644 index 00000000..889104de --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-fill/package.json @@ -0,0 +1,52 @@ +{ + "_args": [ + [ + "buffer-fill@1.0.0", + "/tmp/repository/main" + ] + ], + "_from": "buffer-fill@1.0.0", + "_id": "buffer-fill@1.0.0", + "_inBundle": false, + "_integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "_location": "/buffer-fill", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "buffer-fill@1.0.0", + "name": "buffer-fill", + "escapedName": "buffer-fill", + "rawSpec": "1.0.0", + "saveSpec": null, + "fetchSpec": "1.0.0" + }, + "_requiredBy": [ + "/buffer-alloc" + ], + "_resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "_spec": "1.0.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/LinusU/buffer-fill/issues" + }, + "description": "A [ponyfill](https://ponyfill.com) for `Buffer.fill`.", + "devDependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "standard": "^7.1.2" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/LinusU/buffer-fill#readme", + "license": "MIT", + "name": "buffer-fill", + "repository": { + "type": "git", + "url": "git+https://github.com/LinusU/buffer-fill.git" + }, + "scripts": { + "test": "standard && node test" + }, + "version": "1.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-fill/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-fill/readme.md new file mode 100644 index 00000000..ac307383 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer-fill/readme.md @@ -0,0 +1,54 @@ +# Buffer Fill + +A [ponyfill](https://ponyfill.com) for `Buffer.fill`. + +Works as Node.js: `v6.4.0`
+Works on Node.js: `v0.10.0` + +## Installation + +```sh +npm install --save buffer-fill +``` + +## Usage + +```js +const fill = require('buffer-fill') +const buf = Buffer.allocUnsafe(5) + +console.log(buf.fill(8)) +//=> + +console.log(buf.fill(9, 2, 4)) +//=> + +console.log(buf.fill('linus', 'latin1')) +//=> + +console.log(buf.fill('\u0222')) +//=> +``` + +## API + +### fill(buf, value[, offset[, end]][, encoding]) + +- `value` <String> | <Buffer> | <Integer> The value to fill `buf` with +- `offset` <Integer> Where to start filling `buf`. **Default:** `0` +- `end` <Integer> Where to stop filling `buf` (not inclusive). **Default:** `buf.length` +- `encoding` <String> If `value` is a string, this is its encoding. **Default:** `'utf8'` +- Return: <Buffer> A reference to `buf` + +Fills `buf` with the specified `value`. If the `offset` and `end` are not given, +the entire `buf` will be filled. This is meant to be a small simplification to +allow the creation and filling of a `Buffer` to be done on a single line. + +If the final write of a `fill()` operation falls on a multi-byte character, then +only the first bytes of that character that fit into `buf` are written. + +## See also + +- [buffer-alloc-unsafe](https://github.com/LinusU/buffer-alloc-unsafe) A ponyfill for `Buffer.allocUnsafe` +- [buffer-alloc](https://github.com/LinusU/buffer-alloc) A ponyfill for `Buffer.alloc` +- [buffer-from](https://github.com/LinusU/buffer-from) A ponyfill for `Buffer.from` diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/AUTHORS.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/AUTHORS.md new file mode 100644 index 00000000..22eb1712 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/AUTHORS.md @@ -0,0 +1,70 @@ +# Authors + +#### Ordered by first contribution. + +- Romain Beauxis (toots@rastageeks.org) +- Tobias Koppers (tobias.koppers@googlemail.com) +- Janus (ysangkok@gmail.com) +- Rainer Dreyer (rdrey1@gmail.com) +- Tõnis Tiigi (tonistiigi@gmail.com) +- James Halliday (mail@substack.net) +- Michael Williamson (mike@zwobble.org) +- elliottcable (github@elliottcable.name) +- rafael (rvalle@livelens.net) +- Andrew Kelley (superjoe30@gmail.com) +- Andreas Madsen (amwebdk@gmail.com) +- Mike Brevoort (mike.brevoort@pearson.com) +- Brian White (mscdex@mscdex.net) +- Feross Aboukhadijeh (feross@feross.org) +- Ruben Verborgh (ruben@verborgh.org) +- eliang (eliang.cs@gmail.com) +- Jesse Tane (jesse.tane@gmail.com) +- Alfonso Boza (alfonso@cloud.com) +- Mathias Buus (mathiasbuus@gmail.com) +- Devon Govett (devongovett@gmail.com) +- Daniel Cousens (github@dcousens.com) +- Joseph Dykstra (josephdykstra@gmail.com) +- Parsha Pourkhomami (parshap+git@gmail.com) +- Damjan Košir (damjan.kosir@gmail.com) +- daverayment (dave.rayment@gmail.com) +- kawanet (u-suke@kawa.net) +- Linus Unnebäck (linus@folkdatorn.se) +- Nolan Lawson (nolan.lawson@gmail.com) +- Calvin Metcalf (calvin.metcalf@gmail.com) +- Koki Takahashi (hakatasiloving@gmail.com) +- Guy Bedford (guybedford@gmail.com) +- Jan Schär (jscissr@gmail.com) +- RaulTsc (tomescu.raul@gmail.com) +- Matthieu Monsch (monsch@alum.mit.edu) +- Dan Ehrenberg (littledan@chromium.org) +- Kirill Fomichev (fanatid@ya.ru) +- Yusuke Kawasaki (u-suke@kawa.net) +- DC (dcposch@dcpos.ch) +- John-David Dalton (john.david.dalton@gmail.com) +- adventure-yunfei (adventure030@gmail.com) +- Emil Bay (github@tixz.dk) +- Sam Sudar (sudar.sam@gmail.com) +- Volker Mische (volker.mische@gmail.com) +- David Walton (support@geekstocks.com) +- Сковорода Никита Андреевич (chalkerx@gmail.com) +- greenkeeper[bot] (greenkeeper[bot]@users.noreply.github.com) +- ukstv (sergey.ukustov@machinomy.com) +- Renée Kooi (renee@kooi.me) +- ranbochen (ranbochen@qq.com) +- Vladimir Borovik (bobahbdb@gmail.com) +- greenkeeper[bot] (23040076+greenkeeper[bot]@users.noreply.github.com) +- kumavis (aaron@kumavis.me) +- Sergey Ukustov (sergey.ukustov@machinomy.com) +- Fei Liu (liu.feiwood@gmail.com) +- Blaine Bublitz (blaine.bublitz@gmail.com) +- clement (clement@seald.io) +- Koushik Dutta (koushd@gmail.com) +- Jordan Harband (ljharb@gmail.com) +- Niklas Mischkulnig (mischnic@users.noreply.github.com) +- Nikolai Vavilov (vvnicholas@gmail.com) +- Fedor Nezhivoi (gyzerok@users.noreply.github.com) +- Peter Newman (peternewman@users.noreply.github.com) +- mathmakgakpak (44949126+mathmakgakpak@users.noreply.github.com) +- jkkang (jkkang@smartauth.kr) + +#### Generated by bin/update-authors.sh. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/LICENSE new file mode 100644 index 00000000..d6bf75dc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh, 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/README.md new file mode 100644 index 00000000..9a23d7cf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/README.md @@ -0,0 +1,410 @@ +# 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/buffer/master.svg +[travis-url]: https://travis-ci.org/feross/buffer +[npm-image]: https://img.shields.io/npm/v/buffer.svg +[npm-url]: https://npmjs.org/package/buffer +[downloads-image]: https://img.shields.io/npm/dm/buffer.svg +[downloads-url]: https://npmjs.org/package/buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### The buffer module from [node.js](https://nodejs.org/), for the browser. + +[![saucelabs][saucelabs-image]][saucelabs-url] + +[saucelabs-image]: https://saucelabs.com/browser-matrix/buffer.svg +[saucelabs-url]: https://saucelabs.com/u/buffer + +With [browserify](http://browserify.org), simply `require('buffer')` or use the `Buffer` global and you will get this module. + +The goal is to provide an API that is 100% identical to +[node's Buffer API](https://nodejs.org/api/buffer.html). Read the +[official docs](https://nodejs.org/api/buffer.html) for the full list of properties, +instance methods, and class methods that are supported. + +## features + +- Manipulate binary data like a boss, in all browsers! +- Super fast. Backed by Typed Arrays (`Uint8Array`/`ArrayBuffer`, not `Object`) +- Extremely small bundle size (**6.75KB minified + gzipped**, 51.9KB with comments) +- Excellent browser support (Chrome, Firefox, Edge, Safari 9+, IE 11, iOS 9+, Android, etc.) +- Preserves Node API exactly, with one minor difference (see below) +- Square-bracket `buf[4]` notation works! +- Does not modify any browser prototypes or put anything on `window` +- Comprehensive test suite (including all buffer tests from node.js core) + +## install + +To use this module directly (without browserify), install it: + +```bash +npm install buffer +``` + +This module was previously called **native-buffer-browserify**, but please use **buffer** +from now on. + +If you do not use a bundler, you can use the [standalone script](https://bundle.run/buffer). + +## usage + +The module's API is identical to node's `Buffer` API. Read the +[official docs](https://nodejs.org/api/buffer.html) for the full list of properties, +instance methods, and class methods that are supported. + +As mentioned above, `require('buffer')` or use the `Buffer` global with +[browserify](http://browserify.org) and this module will automatically be included +in your bundle. Almost any npm module will work in the browser, even if it assumes that +the node `Buffer` API will be available. + +To depend on this module explicitly (without browserify), require it like this: + +```js +var Buffer = require('buffer/').Buffer // note: the trailing slash is important! +``` + +To require this module explicitly, use `require('buffer/')` which tells the node.js module +lookup algorithm (also used by browserify) to use the **npm module** named `buffer` +instead of the **node.js core** module named `buffer`! + + +## how does it work? + +The Buffer constructor returns instances of `Uint8Array` that have their prototype +changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of `Uint8Array`, +so the returned instances will have all the node `Buffer` methods and the +`Uint8Array` methods. Square bracket notation works as expected -- it returns a +single octet. + +The `Uint8Array` prototype remains unmodified. + + +## tracking the latest node api + +This module tracks the Buffer API in the latest (unstable) version of node.js. The Buffer +API is considered **stable** in the +[node stability index](https://nodejs.org/docs/latest/api/documentation.html#documentation_stability_index), +so it is unlikely that there will ever be breaking changes. +Nonetheless, when/if the Buffer API changes in node, this module's API will change +accordingly. + +## related packages + +- [`buffer-reverse`](https://www.npmjs.com/package/buffer-reverse) - Reverse a buffer +- [`buffer-xor`](https://www.npmjs.com/package/buffer-xor) - Bitwise xor a buffer +- [`is-buffer`](https://www.npmjs.com/package/is-buffer) - Determine if an object is a Buffer without including the whole `Buffer` package + +## conversion packages + +### convert typed array to buffer + +Use [`typedarray-to-buffer`](https://www.npmjs.com/package/typedarray-to-buffer) to convert any kind of typed array to a `Buffer`. Does not perform a copy, so it's super fast. + +### convert buffer to typed array + +`Buffer` is a subclass of `Uint8Array` (which is a typed array). So there is no need to explicitly convert to typed array. Just use the buffer as a `Uint8Array`. + +### convert blob to buffer + +Use [`blob-to-buffer`](https://www.npmjs.com/package/blob-to-buffer) to convert a `Blob` to a `Buffer`. + +### convert buffer to blob + +To convert a `Buffer` to a `Blob`, use the `Blob` constructor: + +```js +var blob = new Blob([ buffer ]) +``` + +Optionally, specify a mimetype: + +```js +var blob = new Blob([ buffer ], { type: 'text/html' }) +``` + +### convert arraybuffer to buffer + +To convert an `ArrayBuffer` to a `Buffer`, use the `Buffer.from` function. Does not perform a copy, so it's super fast. + +```js +var buffer = Buffer.from(arrayBuffer) +``` + +### convert buffer to arraybuffer + +To convert a `Buffer` to an `ArrayBuffer`, use the `.buffer` property (which is present on all `Uint8Array` objects): + +```js +var arrayBuffer = buffer.buffer.slice( + buffer.byteOffset, buffer.byteOffset + buffer.byteLength +) +``` + +Alternatively, use the [`to-arraybuffer`](https://www.npmjs.com/package/to-arraybuffer) module. + +## performance + +See perf tests in `/perf`. + +`BrowserBuffer` is the browser `buffer` module (this repo). `Uint8Array` is included as a +sanity check (since `BrowserBuffer` uses `Uint8Array` under the hood, `Uint8Array` will +always be at least a bit faster). Finally, `NodeBuffer` is the node.js buffer module, +which is included to compare against. + +NOTE: Performance has improved since these benchmarks were taken. PR welcome to update the README. + +### Chrome 38 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 11,457,464 ops/sec | ±0.86% | 66 | ✓ | +| Uint8Array#bracket-notation | 10,824,332 ops/sec | ±0.74% | 65 | | +| | | | | +| BrowserBuffer#concat | 450,532 ops/sec | ±0.76% | 68 | | +| Uint8Array#concat | 1,368,911 ops/sec | ±1.50% | 62 | ✓ | +| | | | | +| BrowserBuffer#copy(16000) | 903,001 ops/sec | ±0.96% | 67 | | +| Uint8Array#copy(16000) | 1,422,441 ops/sec | ±1.04% | 66 | ✓ | +| | | | | +| BrowserBuffer#copy(16) | 11,431,358 ops/sec | ±0.46% | 69 | | +| Uint8Array#copy(16) | 13,944,163 ops/sec | ±1.12% | 68 | ✓ | +| | | | | +| BrowserBuffer#new(16000) | 106,329 ops/sec | ±6.70% | 44 | | +| Uint8Array#new(16000) | 131,001 ops/sec | ±2.85% | 31 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 1,554,491 ops/sec | ±1.60% | 65 | | +| Uint8Array#new(16) | 6,623,930 ops/sec | ±1.66% | 65 | ✓ | +| | | | | +| BrowserBuffer#readDoubleBE | 112,830 ops/sec | ±0.51% | 69 | ✓ | +| DataView#getFloat64 | 93,500 ops/sec | ±0.57% | 68 | | +| | | | | +| BrowserBuffer#readFloatBE | 146,678 ops/sec | ±0.95% | 68 | ✓ | +| DataView#getFloat32 | 99,311 ops/sec | ±0.41% | 67 | | +| | | | | +| BrowserBuffer#readUInt32LE | 843,214 ops/sec | ±0.70% | 69 | ✓ | +| DataView#getUint32 | 103,024 ops/sec | ±0.64% | 67 | | +| | | | | +| BrowserBuffer#slice | 1,013,941 ops/sec | ±0.75% | 67 | | +| Uint8Array#subarray | 1,903,928 ops/sec | ±0.53% | 67 | ✓ | +| | | | | +| BrowserBuffer#writeFloatBE | 61,387 ops/sec | ±0.90% | 67 | | +| DataView#setFloat32 | 141,249 ops/sec | ±0.40% | 66 | ✓ | + + +### Firefox 33 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 20,800,421 ops/sec | ±1.84% | 60 | | +| Uint8Array#bracket-notation | 20,826,235 ops/sec | ±2.02% | 61 | ✓ | +| | | | | +| BrowserBuffer#concat | 153,076 ops/sec | ±2.32% | 61 | | +| Uint8Array#concat | 1,255,674 ops/sec | ±8.65% | 52 | ✓ | +| | | | | +| BrowserBuffer#copy(16000) | 1,105,312 ops/sec | ±1.16% | 63 | | +| Uint8Array#copy(16000) | 1,615,911 ops/sec | ±0.55% | 66 | ✓ | +| | | | | +| BrowserBuffer#copy(16) | 16,357,599 ops/sec | ±0.73% | 68 | | +| Uint8Array#copy(16) | 31,436,281 ops/sec | ±1.05% | 68 | ✓ | +| | | | | +| BrowserBuffer#new(16000) | 52,995 ops/sec | ±6.01% | 35 | | +| Uint8Array#new(16000) | 87,686 ops/sec | ±5.68% | 45 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 252,031 ops/sec | ±1.61% | 66 | | +| Uint8Array#new(16) | 8,477,026 ops/sec | ±0.49% | 68 | ✓ | +| | | | | +| BrowserBuffer#readDoubleBE | 99,871 ops/sec | ±0.41% | 69 | | +| DataView#getFloat64 | 285,663 ops/sec | ±0.70% | 68 | ✓ | +| | | | | +| BrowserBuffer#readFloatBE | 115,540 ops/sec | ±0.42% | 69 | | +| DataView#getFloat32 | 288,722 ops/sec | ±0.82% | 68 | ✓ | +| | | | | +| BrowserBuffer#readUInt32LE | 633,926 ops/sec | ±1.08% | 67 | ✓ | +| DataView#getUint32 | 294,808 ops/sec | ±0.79% | 64 | | +| | | | | +| BrowserBuffer#slice | 349,425 ops/sec | ±0.46% | 69 | | +| Uint8Array#subarray | 5,965,819 ops/sec | ±0.60% | 65 | ✓ | +| | | | | +| BrowserBuffer#writeFloatBE | 59,980 ops/sec | ±0.41% | 67 | | +| DataView#setFloat32 | 317,634 ops/sec | ±0.63% | 68 | ✓ | + +### Safari 8 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 10,279,729 ops/sec | ±2.25% | 56 | ✓ | +| Uint8Array#bracket-notation | 10,030,767 ops/sec | ±2.23% | 59 | | +| | | | | +| BrowserBuffer#concat | 144,138 ops/sec | ±1.38% | 65 | | +| Uint8Array#concat | 4,950,764 ops/sec | ±1.70% | 63 | ✓ | +| | | | | +| BrowserBuffer#copy(16000) | 1,058,548 ops/sec | ±1.51% | 64 | | +| Uint8Array#copy(16000) | 1,409,666 ops/sec | ±1.17% | 65 | ✓ | +| | | | | +| BrowserBuffer#copy(16) | 6,282,529 ops/sec | ±1.88% | 58 | | +| Uint8Array#copy(16) | 11,907,128 ops/sec | ±2.87% | 58 | ✓ | +| | | | | +| BrowserBuffer#new(16000) | 101,663 ops/sec | ±3.89% | 57 | | +| Uint8Array#new(16000) | 22,050,818 ops/sec | ±6.51% | 46 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 176,072 ops/sec | ±2.13% | 64 | | +| Uint8Array#new(16) | 24,385,731 ops/sec | ±5.01% | 51 | ✓ | +| | | | | +| BrowserBuffer#readDoubleBE | 41,341 ops/sec | ±1.06% | 67 | | +| DataView#getFloat64 | 322,280 ops/sec | ±0.84% | 68 | ✓ | +| | | | | +| BrowserBuffer#readFloatBE | 46,141 ops/sec | ±1.06% | 65 | | +| DataView#getFloat32 | 337,025 ops/sec | ±0.43% | 69 | ✓ | +| | | | | +| BrowserBuffer#readUInt32LE | 151,551 ops/sec | ±1.02% | 66 | | +| DataView#getUint32 | 308,278 ops/sec | ±0.94% | 67 | ✓ | +| | | | | +| BrowserBuffer#slice | 197,365 ops/sec | ±0.95% | 66 | | +| Uint8Array#subarray | 9,558,024 ops/sec | ±3.08% | 58 | ✓ | +| | | | | +| BrowserBuffer#writeFloatBE | 17,518 ops/sec | ±1.03% | 63 | | +| DataView#setFloat32 | 319,751 ops/sec | ±0.48% | 68 | ✓ | + + +### Node 0.11.14 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 10,489,828 ops/sec | ±3.25% | 90 | | +| Uint8Array#bracket-notation | 10,534,884 ops/sec | ±0.81% | 92 | ✓ | +| NodeBuffer#bracket-notation | 10,389,910 ops/sec | ±0.97% | 87 | | +| | | | | +| BrowserBuffer#concat | 487,830 ops/sec | ±2.58% | 88 | | +| Uint8Array#concat | 1,814,327 ops/sec | ±1.28% | 88 | ✓ | +| NodeBuffer#concat | 1,636,523 ops/sec | ±1.88% | 73 | | +| | | | | +| BrowserBuffer#copy(16000) | 1,073,665 ops/sec | ±0.77% | 90 | | +| Uint8Array#copy(16000) | 1,348,517 ops/sec | ±0.84% | 89 | ✓ | +| NodeBuffer#copy(16000) | 1,289,533 ops/sec | ±0.82% | 93 | | +| | | | | +| BrowserBuffer#copy(16) | 12,782,706 ops/sec | ±0.74% | 85 | | +| Uint8Array#copy(16) | 14,180,427 ops/sec | ±0.93% | 92 | ✓ | +| NodeBuffer#copy(16) | 11,083,134 ops/sec | ±1.06% | 89 | | +| | | | | +| BrowserBuffer#new(16000) | 141,678 ops/sec | ±3.30% | 67 | | +| Uint8Array#new(16000) | 161,491 ops/sec | ±2.96% | 60 | | +| NodeBuffer#new(16000) | 292,699 ops/sec | ±3.20% | 55 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 1,655,466 ops/sec | ±2.41% | 82 | | +| Uint8Array#new(16) | 14,399,926 ops/sec | ±0.91% | 94 | ✓ | +| NodeBuffer#new(16) | 3,894,696 ops/sec | ±0.88% | 92 | | +| | | | | +| BrowserBuffer#readDoubleBE | 109,582 ops/sec | ±0.75% | 93 | ✓ | +| DataView#getFloat64 | 91,235 ops/sec | ±0.81% | 90 | | +| NodeBuffer#readDoubleBE | 88,593 ops/sec | ±0.96% | 81 | | +| | | | | +| BrowserBuffer#readFloatBE | 139,854 ops/sec | ±1.03% | 85 | ✓ | +| DataView#getFloat32 | 98,744 ops/sec | ±0.80% | 89 | | +| NodeBuffer#readFloatBE | 92,769 ops/sec | ±0.94% | 93 | | +| | | | | +| BrowserBuffer#readUInt32LE | 710,861 ops/sec | ±0.82% | 92 | | +| DataView#getUint32 | 117,893 ops/sec | ±0.84% | 91 | | +| NodeBuffer#readUInt32LE | 851,412 ops/sec | ±0.72% | 93 | ✓ | +| | | | | +| BrowserBuffer#slice | 1,673,877 ops/sec | ±0.73% | 94 | | +| Uint8Array#subarray | 6,919,243 ops/sec | ±0.67% | 90 | ✓ | +| NodeBuffer#slice | 4,617,604 ops/sec | ±0.79% | 93 | | +| | | | | +| BrowserBuffer#writeFloatBE | 66,011 ops/sec | ±0.75% | 93 | | +| DataView#setFloat32 | 127,760 ops/sec | ±0.72% | 93 | ✓ | +| NodeBuffer#writeFloatBE | 103,352 ops/sec | ±0.83% | 93 | | + +### iojs 1.8.1 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 10,990,488 ops/sec | ±1.11% | 91 | | +| Uint8Array#bracket-notation | 11,268,757 ops/sec | ±0.65% | 97 | | +| NodeBuffer#bracket-notation | 11,353,260 ops/sec | ±0.83% | 94 | ✓ | +| | | | | +| BrowserBuffer#concat | 378,954 ops/sec | ±0.74% | 94 | | +| Uint8Array#concat | 1,358,288 ops/sec | ±0.97% | 87 | | +| NodeBuffer#concat | 1,934,050 ops/sec | ±1.11% | 78 | ✓ | +| | | | | +| BrowserBuffer#copy(16000) | 894,538 ops/sec | ±0.56% | 84 | | +| Uint8Array#copy(16000) | 1,442,656 ops/sec | ±0.71% | 96 | | +| NodeBuffer#copy(16000) | 1,457,898 ops/sec | ±0.53% | 92 | ✓ | +| | | | | +| BrowserBuffer#copy(16) | 12,870,457 ops/sec | ±0.67% | 95 | | +| Uint8Array#copy(16) | 16,643,989 ops/sec | ±0.61% | 93 | ✓ | +| NodeBuffer#copy(16) | 14,885,848 ops/sec | ±0.74% | 94 | | +| | | | | +| BrowserBuffer#new(16000) | 109,264 ops/sec | ±4.21% | 63 | | +| Uint8Array#new(16000) | 138,916 ops/sec | ±1.87% | 61 | | +| NodeBuffer#new(16000) | 281,449 ops/sec | ±3.58% | 51 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 1,362,935 ops/sec | ±0.56% | 99 | | +| Uint8Array#new(16) | 6,193,090 ops/sec | ±0.64% | 95 | ✓ | +| NodeBuffer#new(16) | 4,745,425 ops/sec | ±1.56% | 90 | | +| | | | | +| BrowserBuffer#readDoubleBE | 118,127 ops/sec | ±0.59% | 93 | ✓ | +| DataView#getFloat64 | 107,332 ops/sec | ±0.65% | 91 | | +| NodeBuffer#readDoubleBE | 116,274 ops/sec | ±0.94% | 95 | | +| | | | | +| BrowserBuffer#readFloatBE | 150,326 ops/sec | ±0.58% | 95 | ✓ | +| DataView#getFloat32 | 110,541 ops/sec | ±0.57% | 98 | | +| NodeBuffer#readFloatBE | 121,599 ops/sec | ±0.60% | 87 | | +| | | | | +| BrowserBuffer#readUInt32LE | 814,147 ops/sec | ±0.62% | 93 | | +| DataView#getUint32 | 137,592 ops/sec | ±0.64% | 90 | | +| NodeBuffer#readUInt32LE | 931,650 ops/sec | ±0.71% | 96 | ✓ | +| | | | | +| BrowserBuffer#slice | 878,590 ops/sec | ±0.68% | 93 | | +| Uint8Array#subarray | 2,843,308 ops/sec | ±1.02% | 90 | | +| NodeBuffer#slice | 4,998,316 ops/sec | ±0.68% | 90 | ✓ | +| | | | | +| BrowserBuffer#writeFloatBE | 65,927 ops/sec | ±0.74% | 93 | | +| DataView#setFloat32 | 139,823 ops/sec | ±0.97% | 89 | ✓ | +| NodeBuffer#writeFloatBE | 135,763 ops/sec | ±0.65% | 96 | | +| | | | | + +## Testing the project + +First, install the project: + + npm install + +Then, to run tests in Node.js, run: + + npm run test-node + +To test locally in a browser, you can run: + + npm run test-browser-es5-local # For ES5 browsers that don't support ES6 + npm run test-browser-es6-local # For ES6 compliant browsers + +This will print out a URL that you can then open in a browser to run the tests, using [airtap](https://www.npmjs.com/package/airtap). + +To run automated browser tests using Saucelabs, ensure that your `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables are set, then run: + + npm test + +This is what's run in Travis, to check against various browsers. The list of browsers is kept in the `bin/airtap-es5.yml` and `bin/airtap-es6.yml` files. + +## JavaScript Standard Style + +This module uses [JavaScript Standard Style](https://github.com/feross/standard). + +[![JavaScript Style Guide](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) + +To test that the code conforms to the style, `npm install` and run: + + ./node_modules/.bin/standard + +## credit + +This was originally forked from [buffer-browserify](https://github.com/toots/buffer-browserify). + +## Security Policies and Procedures + +The `buffer` team and community take all security bugs in `buffer` seriously. Please see our [security policies and procedures](https://github.com/feross/security) document to learn how to report issues. + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org), and other contributors. Originally forked from an MIT-licensed module by Romain Beauxis. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/index.js new file mode 100644 index 00000000..609cf311 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/index.js @@ -0,0 +1,1817 @@ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +'use strict' + +var base64 = require('base64-js') +var ieee754 = require('ieee754') +var customInspectSymbol = + (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation + ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation + : null + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +var K_MAX_LENGTH = 0x7fffffff +exports.kMaxLength = K_MAX_LENGTH + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() + +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && + typeof console.error === 'function') { + console.error( + 'This browser lacks typed array (Uint8Array) support which is required by ' + + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' + ) +} + +function typedArraySupport () { + // Can typed array instances can be augmented? + try { + var arr = new Uint8Array(1) + var proto = { foo: function () { return 42 } } + Object.setPrototypeOf(proto, Uint8Array.prototype) + Object.setPrototypeOf(arr, proto) + return arr.foo() === 42 + } catch (e) { + return false + } +} + +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } +}) + +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } +}) + +function createBuffer (length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"') + } + // Return an augmented `Uint8Array` instance + var buf = new Uint8Array(length) + Object.setPrototypeOf(buf, Buffer.prototype) + return buf +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ) + } + return allocUnsafe(arg) + } + return from(arg, encodingOrOffset, length) +} + +Buffer.poolSize = 8192 // not used by this implementation + +function from (value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayView(value) + } + + if (value == null) { + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof SharedArrayBuffer !== 'undefined' && + (isInstance(value, SharedArrayBuffer) || + (value && isInstance(value.buffer, SharedArrayBuffer)))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) + } + + var valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + var b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from( + value[Symbol.toPrimitive]('string'), encodingOrOffset, length + ) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length) +} + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) +Object.setPrototypeOf(Buffer, Uint8Array) + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number') + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } +} + +function alloc (size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpreted as a start offset. + return typeof encoding === 'string' + ? createBuffer(size).fill(fill, encoding) + : createBuffer(size).fill(fill) + } + return createBuffer(size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding) +} + +function allocUnsafe (size) { + assertSize(size) + return createBuffer(size < 0 ? 0 : checked(size) | 0) +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size) +} + +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + var length = byteLength(string, encoding) | 0 + var buf = createBuffer(length) + + var actual = buf.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual) + } + + return buf +} + +function fromArrayLike (array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0 + var buf = createBuffer(length) + for (var i = 0; i < length; i += 1) { + buf[i] = array[i] & 255 + } + return buf +} + +function fromArrayView (arrayView) { + if (isInstance(arrayView, Uint8Array)) { + var copy = new Uint8Array(arrayView) + return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength) + } + return fromArrayLike(arrayView) +} + +function fromArrayBuffer (array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds') + } + + var buf + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array) + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset) + } else { + buf = new Uint8Array(array, byteOffset, length) + } + + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(buf, Buffer.prototype) + + return buf +} + +function fromObject (obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0 + var buf = createBuffer(len) + + if (buf.length === 0) { + return buf + } + + obj.copy(buf, 0, 0, len) + return buf + } + + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) + } + return fromArrayLike(obj) + } + + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } +} + +function checked (length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false +} + +Buffer.compare = function compare (a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + var buffer = Buffer.allocUnsafe(length) + var pos = 0 + for (i = 0; i < list.length; ++i) { + var buf = list[i] + if (isInstance(buf, Uint8Array)) { + if (pos + buf.length > buffer.length) { + Buffer.from(buf).copy(buffer, pos) + } else { + Uint8Array.prototype.set.call( + buffer, + buf, + pos + ) + } + } else if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } else { + buf.copy(buffer, pos) + } + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) + } + + var len = string.length + var mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 + } + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + var loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coercion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true + +function swap (b, n, m) { + var i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + var len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + var len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + var len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + var length = this.length + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.toLocaleString = Buffer.prototype.toString + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' + return '' +} +if (customInspectSymbol) { + Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } + if (!Buffer.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) + + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i + if (dir) { + var foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + var found = true + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + var strLen = string.length + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (numberIsNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0 + if (isFinite(length)) { + length = length >>> 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + case 'latin1': + case 'binary': + return asciiWrite(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) + ? 4 + : (firstByte > 0xDF) + ? 3 + : (firstByte > 0xBF) + ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; ++i) { + out += hexSliceLookupTable[buf[i]] + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + // If bytes.length is odd, the last 8 bits must be ignored (same as node.js) + for (var i = 0; i < bytes.length - 1; i += 2) { + res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf = this.subarray(start, end) + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(newBuf, Buffer.prototype) + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUintLE = +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUintBE = +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUint8 = +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUint16LE = +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUint16BE = +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUint32LE = +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUint32BE = +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUintLE = +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUintBE = +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUint8 = +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeUint16LE = +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeUint16BE = +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeUint32LE = +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeUint32BE = +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + if (val.length === 1) { + var code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } + } else if (typeof val === 'number') { + val = val & 255 + } else if (typeof val === 'boolean') { + val = Number(val) + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + var i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + var bytes = Buffer.isBuffer(val) + ? val + : Buffer.from(val, encoding) + var len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// HELPER FUNCTIONS +// ================ + +var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance (obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) +} +function numberIsNaN (obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare +} + +// Create lookup table for `toString('hex')` +// See: https://github.com/feross/buffer/issues/219 +var hexSliceLookupTable = (function () { + var alphabet = '0123456789abcdef' + var table = new Array(256) + for (var i = 0; i < 16; ++i) { + var i16 = i * 16 + for (var j = 0; j < 16; ++j) { + table[i16 + j] = alphabet[i] + alphabet[j] + } + } + return table +})() diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/package.json new file mode 100644 index 00000000..af420f92 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/buffer/package.json @@ -0,0 +1,130 @@ +{ + "_args": [ + [ + "buffer@5.7.1", + "/tmp/repository/main" + ] + ], + "_from": "buffer@5.7.1", + "_id": "buffer@5.7.1", + "_inBundle": false, + "_integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "_location": "/buffer", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "buffer@5.7.1", + "name": "buffer", + "escapedName": "buffer", + "rawSpec": "5.7.1", + "saveSpec": null, + "fetchSpec": "5.7.1" + }, + "_requiredBy": [ + "/unbzip2-stream" + ], + "_resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "_spec": "5.7.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "https://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/buffer/issues" + }, + "contributors": [ + { + "name": "Romain Beauxis", + "email": "toots@rastageeks.org" + }, + { + "name": "James Halliday", + "email": "mail@substack.net" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + }, + "description": "Node.js Buffer API, for the browser", + "devDependencies": { + "airtap": "^3.0.0", + "benchmark": "^2.1.4", + "browserify": "^17.0.0", + "concat-stream": "^2.0.0", + "hyperquest": "^2.1.3", + "is-buffer": "^2.0.4", + "is-nan": "^1.3.0", + "split": "^1.0.1", + "standard": "*", + "tape": "^5.0.1", + "through2": "^4.0.2", + "uglify-js": "^3.11.3" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "homepage": "https://github.com/feross/buffer", + "jspm": { + "map": { + "./index.js": { + "node": "@node/buffer" + } + } + }, + "keywords": [ + "arraybuffer", + "browser", + "browserify", + "buffer", + "compatible", + "dataview", + "uint8array" + ], + "license": "MIT", + "main": "index.js", + "name": "buffer", + "repository": { + "type": "git", + "url": "git://github.com/feross/buffer.git" + }, + "scripts": { + "perf": "browserify --debug perf/bracket-notation.js > perf/bundle.js && open perf/index.html", + "perf-node": "node perf/bracket-notation.js && node perf/concat.js && node perf/copy-big.js && node perf/copy.js && node perf/new-big.js && node perf/new.js && node perf/readDoubleBE.js && node perf/readFloatBE.js && node perf/readUInt32LE.js && node perf/slice.js && node perf/writeFloatBE.js", + "size": "browserify -r ./ | uglifyjs -c -m | gzip | wc -c", + "test": "standard && node ./bin/test.js", + "test-browser-es5": "airtap -- test/*.js", + "test-browser-es5-local": "airtap --local -- test/*.js", + "test-browser-es6": "airtap -- test/*.js test/node/*.js", + "test-browser-es6-local": "airtap --local -- test/*.js test/node/*.js", + "test-node": "tape test/*.js test/node/*.js", + "update-authors": "./bin/update-authors.sh" + }, + "standard": { + "ignore": [ + "test/node/**/*.js", + "test/common.js", + "test/_polyfill.js", + "perf/**/*.js" + ], + "globals": [ + "SharedArrayBuffer" + ] + }, + "types": "index.d.ts", + "version": "5.7.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/History.md new file mode 100644 index 00000000..b75e577a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/History.md @@ -0,0 +1,15 @@ + +1.0.1 / 2018-07-18 +================== + +**others** + * [[`88c57c0`](http://github.com/node-modules/cache-content-type/commit/88c57c0bd571da12d7917ae15ad67f02b7b5eabe)] - chore: support node 6 (dead-horse <>) + +1.0.0 / 2018-07-11 +================== + +**features** + * [[`ecb6476`](http://github.com/node-modules/cache-content-type/commit/ecb6476da4a714246f12a86c191dc05aad42e806)] - feat: cache result of mimeTypes.contentType (dead-horse <>),fatal: No names found, cannot describe anything. + +**others** + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/README.md new file mode 100644 index 00000000..605d6c44 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/README.md @@ -0,0 +1,17 @@ +## cache-content-type + +The same as [mime-types](https://github.com/jshttp/mime-types)'s contentType method, but with result cached. + +### Install + +```bash +npm i cache-content-type +``` + +### Usage + +```js +const getType = require('cache-content-type'); +const contentType = getType('html'); +assert(contentType === 'text/html; charset=utf-8'); +``` diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/index.js new file mode 100644 index 00000000..60e66671 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/index.js @@ -0,0 +1,15 @@ +'use strict'; + +const mimeTypes = require('mime-types'); +const LRU = require('ylru'); + +const typeLRUCache = new LRU(100); + +module.exports = type => { + let mimeType = typeLRUCache.get(type); + if (!mimeType) { + mimeType = mimeTypes.contentType(type); + typeLRUCache.set(type, mimeType); + } + return mimeType; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/package.json new file mode 100644 index 00000000..ab721377 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cache-content-type/package.json @@ -0,0 +1,76 @@ +{ + "_args": [ + [ + "cache-content-type@1.0.1", + "/tmp/repository/main" + ] + ], + "_from": "cache-content-type@1.0.1", + "_id": "cache-content-type@1.0.1", + "_inBundle": false, + "_integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "_location": "/cache-content-type", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "cache-content-type@1.0.1", + "name": "cache-content-type", + "escapedName": "cache-content-type", + "rawSpec": "1.0.1", + "saveSpec": null, + "fetchSpec": "1.0.1" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "_spec": "1.0.1", + "_where": "/tmp/repository/main", + "author": { + "name": "dead_horse" + }, + "bugs": { + "url": "https://github.com/node-modules/cache-content-type/issues" + }, + "ci": { + "version": "6, 8, 10" + }, + "dependencies": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + }, + "description": "Create a full Content-Type header given a MIME type or extension and catch the result", + "devDependencies": { + "egg-bin": "^4.7.1", + "egg-ci": "^1.8.0", + "eslint": "^5.1.0", + "eslint-config-egg": "^7.0.0", + "mm": "^2.2.0" + }, + "engines": { + "node": ">= 6.0.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/node-modules/cache-content-type#readme", + "keywords": [ + "mime", + "content-type", + "lru" + ], + "license": "MIT", + "main": "index.js", + "name": "cache-content-type", + "repository": { + "type": "git", + "url": "git+https://github.com/node-modules/cache-content-type.git" + }, + "scripts": { + "ci": "eslint . && npm run cov", + "cov": "egg-bin cov", + "test": "egg-bin test" + }, + "version": "1.0.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/History.md new file mode 100644 index 00000000..68fbb154 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/History.md @@ -0,0 +1,172 @@ +4.6.0 / 2015-07-09 +================== + + * support passing the rest of the arguments to co into the generator + + ```js + function *gen(...args) { } + co(gen, ...args); + ``` + +4.5.0 / 2015-03-17 +================== + + * support regular functions (that return promises) + +4.4.0 / 2015-02-14 +================== + + * refactor `isGeneratorFunction` + * expose generator function from `co.wrap()` + * drop support for node < 0.12 + +4.3.0 / 2015-02-05 +================== + + * check for generator functions in a ES5-transpiler-friendly way + +4.2.0 / 2015-01-20 +================== + + * support comparing generator functions with ES6 transpilers + +4.1.0 / 2014-12-26 +================== + + * fix memory leak #180 + +4.0.2 / 2014-12-18 +================== + + * always return a global promise implementation + +4.0.1 / 2014-11-30 +================== + + * friendlier ES6 module exports + +4.0.0 / 2014-11-15 +================== + + * co now returns a promise and uses promises underneath + * `co.wrap()` for wrapping generator functions + +3.1.0 / 2014-06-30 +================== + + * remove `setImmediate()` shim for node 0.8. semi-backwards breaking. + Users are expected to shim themselves. Also returns CommonJS browser support. + * added key order preservation for objects. thanks @greim + * replace `q` with `bluebird` in benchmarks and tests + +3.0.6 / 2014-05-03 +================== + + * add `setImmediate()` fallback to `process.nextTick` + * remove duplicate code in toThunk + * update thunkify + +3.0.5 / 2014-03-17 +================== + + * fix object/array test failure which tries to enumerate dates. Closes #98 + * fix final callback error propagation. Closes #92 + +3.0.4 / 2014-02-17 +================== + + * fix toThunk object check regression. Closes #89 + +3.0.3 / 2014-02-08 +================== + + * refactor: arrayToThunk @AutoSponge #88 + +3.0.2 / 2014-01-01 +================== + + * fixed: nil arguments replaced with error fn + +3.0.1 / 2013-12-19 +================== + + * fixed: callback passed as an argument to generators + +3.0.0 / 2013-12-19 +================== + + * fixed: callback passed as an argument to generators + * change: `co(function *(){})` now returns a reusable thunk + * change: `this` must now be passed through the returned thunk, ex. `co(function *(){}).call(this)` + * fix "generator already finished" errors + +2.3.0 / 2013-11-12 +================== + + * add `yield object` support + +2.2.0 / 2013-11-05 +================== + + * change: make the `isGenerator()` function more generic + +2.1.0 / 2013-10-21 +================== + + * add passing of arguments into the generator. closes #33. + +2.0.0 / 2013-10-14 +================== + + * remove callback in favour of thunk-only co(). Closes #30 [breaking change] + * remove `co.wrap()` [breaking change] + +1.5.2 / 2013-09-02 +================== + + * fix: preserve receiver with co.wrap() + +1.5.1 / 2013-08-11 +================== + + * remove setImmediate() usage - ~110% perf increase. Closes #14 + +0.5.0 / 2013-08-10 +================== + + * add receiver propagation support + * examples: update streams.js example to use `http.get()` and streams2 API + +1.4.1 / 2013-07-01 +================== + + * fix gen.next(val) for latest v8. Closes #8 + +1.4.0 / 2013-06-21 +================== + + * add promise support to joins + * add `yield generatorFunction` support + * add `yield generator` support + * add nested join support + +1.3.0 / 2013-06-10 +================== + + * add passing of arguments + +1.2.1 / 2013-06-08 +================== + + * fix join() of zero thunks + +1.2.0 / 2013-06-08 +================== + + * add array yielding support. great suggestion by @domenic + +1.1.0 / 2013-06-06 +================== + + * add promise support + * change nextTick to setImmediate diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/LICENSE new file mode 100644 index 00000000..92faba5d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca> + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/Readme.md new file mode 100644 index 00000000..c1d4882a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/Readme.md @@ -0,0 +1,212 @@ +# co + +[![Gitter][gitter-image]][gitter-url] +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![Downloads][downloads-image]][downloads-url] + + Generator based control flow goodness for nodejs and the browser, + using promises, letting you write non-blocking code in a nice-ish way. + +## Co v4 + + `co@4.0.0` has been released, which now relies on promises. + It is a stepping stone towards [ES7 async/await](https://github.com/lukehoban/ecmascript-asyncawait). + The primary API change is how `co()` is invoked. + Before, `co` returned a "thunk", which you then called with a callback and optional arguments. + Now, `co()` returns a promise. + +```js +co(function* () { + var result = yield Promise.resolve(true); + return result; +}).then(function (value) { + console.log(value); +}, function (err) { + console.error(err.stack); +}); +``` + + If you want to convert a `co`-generator-function into a regular function that returns a promise, + you now use `co.wrap(fn*)`. + +```js +var fn = co.wrap(function* (val) { + return yield Promise.resolve(val); +}); + +fn(true).then(function (val) { + +}); +``` + +## Platform Compatibility + + `co@4+` requires a `Promise` implementation. + For versions of node `< 0.11` and for many older browsers, + you should/must include your own `Promise` polyfill. + + When using node 0.11.x or greater, you must use the `--harmony-generators` + flag or just `--harmony` to get access to generators. + + When using node 0.10.x and lower or browsers without generator support, + you must use [gnode](https://github.com/TooTallNate/gnode) and/or [regenerator](http://facebook.github.io/regenerator/). + + io.js is supported out of the box, you can use `co` without flags or polyfills. + +## Installation + +``` +$ npm install co +``` + +## Associated libraries + +Any library that returns promises work well with `co`. + +- [mz](https://github.com/normalize/mz) - wrap all of node's code libraries as promises. + +View the [wiki](https://github.com/visionmedia/co/wiki) for more libraries. + +## Examples + +```js +var co = require('co'); + +co(function *(){ + // yield any promise + var result = yield Promise.resolve(true); +}).catch(onerror); + +co(function *(){ + // resolve multiple promises in parallel + var a = Promise.resolve(1); + var b = Promise.resolve(2); + var c = Promise.resolve(3); + var res = yield [a, b, c]; + console.log(res); + // => [1, 2, 3] +}).catch(onerror); + +// errors can be try/catched +co(function *(){ + try { + yield Promise.reject(new Error('boom')); + } catch (err) { + console.error(err.message); // "boom" + } +}).catch(onerror); + +function onerror(err) { + // log any uncaught errors + // co will not throw any errors you do not handle!!! + // HANDLE ALL YOUR ERRORS!!! + console.error(err.stack); +} +``` + +## Yieldables + + The `yieldable` objects currently supported are: + + - promises + - thunks (functions) + - array (parallel execution) + - objects (parallel execution) + - generators (delegation) + - generator functions (delegation) + +Nested `yieldable` objects are supported, meaning you can nest +promises within objects within arrays, and so on! + +### Promises + +[Read more on promises!](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) + +### Thunks + +Thunks are functions that only have a single argument, a callback. +Thunk support only remains for backwards compatibility and may +be removed in future versions of `co`. + +### Arrays + +`yield`ing an array will resolve all the `yieldables` in parallel. + +```js +co(function* () { + var res = yield [ + Promise.resolve(1), + Promise.resolve(2), + Promise.resolve(3), + ]; + console.log(res); // => [1, 2, 3] +}).catch(onerror); +``` + +### Objects + +Just like arrays, objects resolve all `yieldable`s in parallel. + +```js +co(function* () { + var res = yield { + 1: Promise.resolve(1), + 2: Promise.resolve(2), + }; + console.log(res); // => { 1: 1, 2: 2 } +}).catch(onerror); +``` + +### Generators and Generator Functions + +Any generator or generator function you can pass into `co` +can be yielded as well. This should generally be avoided +as we should be moving towards spec-compliant `Promise`s instead. + +## API + +### co(fn*).then( val => ) + +Returns a promise that resolves a generator, generator function, +or any function that returns a generator. + +```js +co(function* () { + return yield Promise.resolve(true); +}).then(function (val) { + console.log(val); +}, function (err) { + console.error(err.stack); +}); +``` + +### var fn = co.wrap(fn*) + +Convert a generator into a regular function that returns a `Promise`. + +```js +var fn = co.wrap(function* (val) { + return yield Promise.resolve(val); +}); + +fn(true).then(function (val) { + +}); +``` + +## License + + MIT + +[npm-image]: https://img.shields.io/npm/v/co.svg?style=flat-square +[npm-url]: https://npmjs.org/package/co +[travis-image]: https://img.shields.io/travis/tj/co.svg?style=flat-square +[travis-url]: https://travis-ci.org/tj/co +[coveralls-image]: https://img.shields.io/coveralls/tj/co.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/tj/co +[downloads-image]: http://img.shields.io/npm/dm/co.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/co +[gitter-image]: https://badges.gitter.im/Join%20Chat.svg +[gitter-url]: https://gitter.im/tj/co?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/index.js new file mode 100644 index 00000000..87ba8ba8 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/index.js @@ -0,0 +1,237 @@ + +/** + * slice() reference. + */ + +var slice = Array.prototype.slice; + +/** + * Expose `co`. + */ + +module.exports = co['default'] = co.co = co; + +/** + * Wrap the given generator `fn` into a + * function that returns a promise. + * This is a separate function so that + * every `co()` call doesn't create a new, + * unnecessary closure. + * + * @param {GeneratorFunction} fn + * @return {Function} + * @api public + */ + +co.wrap = function (fn) { + createPromise.__generatorFunction__ = fn; + return createPromise; + function createPromise() { + return co.call(this, fn.apply(this, arguments)); + } +}; + +/** + * Execute the generator function or a generator + * and return a promise. + * + * @param {Function} fn + * @return {Promise} + * @api public + */ + +function co(gen) { + var ctx = this; + var args = slice.call(arguments, 1) + + // we wrap everything in a promise to avoid promise chaining, + // which leads to memory leak errors. + // see https://github.com/tj/co/issues/180 + return new Promise(function(resolve, reject) { + if (typeof gen === 'function') gen = gen.apply(ctx, args); + if (!gen || typeof gen.next !== 'function') return resolve(gen); + + onFulfilled(); + + /** + * @param {Mixed} res + * @return {Promise} + * @api private + */ + + function onFulfilled(res) { + var ret; + try { + ret = gen.next(res); + } catch (e) { + return reject(e); + } + next(ret); + } + + /** + * @param {Error} err + * @return {Promise} + * @api private + */ + + function onRejected(err) { + var ret; + try { + ret = gen.throw(err); + } catch (e) { + return reject(e); + } + next(ret); + } + + /** + * Get the next value in the generator, + * return a promise. + * + * @param {Object} ret + * @return {Promise} + * @api private + */ + + function next(ret) { + if (ret.done) return resolve(ret.value); + var value = toPromise.call(ctx, ret.value); + if (value && isPromise(value)) return value.then(onFulfilled, onRejected); + return onRejected(new TypeError('You may only yield a function, promise, generator, array, or object, ' + + 'but the following object was passed: "' + String(ret.value) + '"')); + } + }); +} + +/** + * Convert a `yield`ed value into a promise. + * + * @param {Mixed} obj + * @return {Promise} + * @api private + */ + +function toPromise(obj) { + if (!obj) return obj; + if (isPromise(obj)) return obj; + if (isGeneratorFunction(obj) || isGenerator(obj)) return co.call(this, obj); + if ('function' == typeof obj) return thunkToPromise.call(this, obj); + if (Array.isArray(obj)) return arrayToPromise.call(this, obj); + if (isObject(obj)) return objectToPromise.call(this, obj); + return obj; +} + +/** + * Convert a thunk to a promise. + * + * @param {Function} + * @return {Promise} + * @api private + */ + +function thunkToPromise(fn) { + var ctx = this; + return new Promise(function (resolve, reject) { + fn.call(ctx, function (err, res) { + if (err) return reject(err); + if (arguments.length > 2) res = slice.call(arguments, 1); + resolve(res); + }); + }); +} + +/** + * Convert an array of "yieldables" to a promise. + * Uses `Promise.all()` internally. + * + * @param {Array} obj + * @return {Promise} + * @api private + */ + +function arrayToPromise(obj) { + return Promise.all(obj.map(toPromise, this)); +} + +/** + * Convert an object of "yieldables" to a promise. + * Uses `Promise.all()` internally. + * + * @param {Object} obj + * @return {Promise} + * @api private + */ + +function objectToPromise(obj){ + var results = new obj.constructor(); + var keys = Object.keys(obj); + var promises = []; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var promise = toPromise.call(this, obj[key]); + if (promise && isPromise(promise)) defer(promise, key); + else results[key] = obj[key]; + } + return Promise.all(promises).then(function () { + return results; + }); + + function defer(promise, key) { + // predefine the key in the result + results[key] = undefined; + promises.push(promise.then(function (res) { + results[key] = res; + })); + } +} + +/** + * Check if `obj` is a promise. + * + * @param {Object} obj + * @return {Boolean} + * @api private + */ + +function isPromise(obj) { + return 'function' == typeof obj.then; +} + +/** + * Check if `obj` is a generator. + * + * @param {Mixed} obj + * @return {Boolean} + * @api private + */ + +function isGenerator(obj) { + return 'function' == typeof obj.next && 'function' == typeof obj.throw; +} + +/** + * Check if `obj` is a generator function. + * + * @param {Mixed} obj + * @return {Boolean} + * @api private + */ +function isGeneratorFunction(obj) { + var constructor = obj.constructor; + if (!constructor) return false; + if ('GeneratorFunction' === constructor.name || 'GeneratorFunction' === constructor.displayName) return true; + return isGenerator(constructor.prototype); +} + +/** + * Check for plain object. + * + * @param {Mixed} val + * @return {Boolean} + * @api private + */ + +function isObject(val) { + return Object == val.constructor; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/package.json new file mode 100644 index 00000000..55961338 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/co/package.json @@ -0,0 +1,69 @@ +{ + "_args": [ + [ + "co@4.6.0", + "/tmp/repository/main" + ] + ], + "_from": "co@4.6.0", + "_id": "co@4.6.0", + "_inBundle": false, + "_integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "_location": "/co", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "co@4.6.0", + "name": "co", + "escapedName": "co", + "rawSpec": "4.6.0", + "saveSpec": null, + "fetchSpec": "4.6.0" + }, + "_requiredBy": [ + "/koa-convert" + ], + "_resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "_spec": "4.6.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/tj/co/issues" + }, + "description": "generator async control flow goodness", + "devDependencies": { + "browserify": "^10.0.0", + "istanbul-harmony": "0", + "mocha": "^2.0.0", + "mz": "^1.0.2" + }, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/tj/co#readme", + "keywords": [ + "async", + "flow", + "generator", + "coro", + "coroutine" + ], + "license": "MIT", + "name": "co", + "repository": { + "type": "git", + "url": "git+https://github.com/tj/co.git" + }, + "scripts": { + "browserify": "browserify index.js -o ./co-browser.js -s co", + "prepublish": "npm run browserify", + "test": "mocha --harmony", + "test-cov": "node --harmony node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- --reporter dot", + "test-travis": "node --harmony node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha --report lcovonly -- --reporter dot" + }, + "version": "4.6.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/CHANGELOG.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/CHANGELOG.md new file mode 100644 index 00000000..9b8359bf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/CHANGELOG.md @@ -0,0 +1,361 @@ +# Changelog + +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). (Format adopted after v3.0.0.) + + + + +## [6.2.1] (2020-12-13) + +### Fixed + +- some tests failed if directory path included a space ([1390]) + +## [6.2.0] (2020-10-25) + +### Added + +- added 'tsx' file extension for stand-alone executable subcommands ([#1368]) +- documented second parameter to `.description()` to describe command arguments ([#1353]) +- documentation of special cases with options taking varying numbers of option-arguments ([#1332]) +- documentation for terminology ([#1361]) + +### Fixed + +- add missing TypeScript definition for `.addHelpCommand()' ([#1375]) +- removed blank line after "Arguments:" in help, to match "Options:" and "Commands:" ([#1360]) + +### Changed + +- update dependencies + +## [6.1.0] (2020-08-28) + +### Added + +- include URL to relevant section of README for error for potential conflict between Command properties and option values ([#1306]) +- `.combineFlagAndOptionalValue(false)` to ease upgrade path from older versions of Commander ([#1326]) +- allow disabling the built-in help option using `.helpOption(false)` ([#1325]) +- allow just some arguments in `argumentDescription` to `.description()` ([#1323]) + +### Changed + +- tidy async test and remove lint override ([#1312]) + +### Fixed + +- executable subcommand launching when script path not known ([#1322]) + +## [6.0.0] (2020-07-21) + +### Added + +- add support for variadic options ([#1250]) +- allow options to be added with just a short flag ([#1256]) + - *Breaking* the option property has same case as flag. e.g. flag `-n` accessed as `opts().n` (previously uppercase) +- *Breaking* throw an error if there might be a clash between option name and a Command property, with advice on how to resolve ([#1275]) + +### Fixed + +- Options which contain -no- in the middle of the option flag should not be treated as negatable. ([#1301]) + +## [6.0.0-0] (2020-06-20) + +(Released in 6.0.0) + +## [5.1.0] (2020-04-25) + +### Added + +- support for multiple command aliases, the first of which is shown in the auto-generated help ([#531], [#1236]) +- configuration support in `addCommand()` for `hidden` and `isDefault` ([#1232]) + +### Fixed + +- omit masked help flags from the displayed help ([#645], [#1247]) +- remove old short help flag when change help flags using `helpOption` ([#1248]) + +### Changed + +- remove use of `arguments` to improve auto-generated help in editors ([#1235]) +- rename `.command()` configuration `noHelp` to `hidden` (but not remove old support) ([#1232]) +- improvements to documentation +- update dependencies +- update tested versions of node +- eliminate lint errors in TypeScript ([#1208]) + +## [5.0.0] (2020-03-14) + +### Added + +* support for nested commands with action-handlers ([#1] [#764] [#1149]) +* `.addCommand()` for adding a separately configured command ([#764] [#1149]) +* allow a non-executable to be set as the default command ([#742] [#1149]) +* implicit help command when there are subcommands (previously only if executables) ([#1149]) +* customise implicit help command with `.addHelpCommand()` ([#1149]) +* display error message for unknown subcommand, by default ([#432] [#1088] [#1149]) +* display help for missing subcommand, by default ([#1088] [#1149]) +* combined short options as single argument may include boolean flags and value flag and value (e.g. `-a -b -p 80` can be written as `-abp80`) ([#1145]) +* `.parseOption()` includes short flag and long flag expansions ([#1145]) +* `.helpInformation()` returns help text as a string, previously a private routine ([#1169]) +* `.parse()` implicitly uses `process.argv` if arguments not specified ([#1172]) +* optionally specify where `.parse()` arguments "from", if not following node conventions ([#512] [#1172]) +* suggest help option along with unknown command error ([#1179]) +* TypeScript definition for `commands` property of `Command` ([#1184]) +* export `program` property ([#1195]) +* `createCommand` factory method to simplify subclassing ([#1191]) + +### Fixed + +* preserve argument order in subcommands ([#508] [#962] [#1138]) +* do not emit `command:*` for executable subcommands ([#809] [#1149]) +* action handler called whether or not there are non-option arguments ([#1062] [#1149]) +* combining option short flag and value in single argument now works for subcommands ([#1145]) +* only add implicit help command when it will not conflict with other uses of argument ([#1153] [#1149]) +* implicit help command works with command aliases ([#948] [#1149]) +* options are validated whether or not there is an action handler ([#1149]) + +### Changed + +* *Breaking* `.args` contains command arguments with just recognised options removed ([#1032] [#1138]) +* *Breaking* display error if required argument for command is missing ([#995] [#1149]) +* tighten TypeScript definition of custom option processing function passed to `.option()` ([#1119]) +* *Breaking* `.allowUnknownOption()` ([#802] [#1138]) + * unknown options included in arguments passed to command action handler + * unknown options included in `.args` +* only recognised option short flags and long flags are expanded (e.g. `-ab` or `--foo=bar`) ([#1145]) +* *Breaking* `.parseOptions()` ([#1138]) + * `args` in returned result renamed `operands` and does not include anything after first unknown option + * `unknown` in returned result has arguments after first unknown option including operands, not just options and values +* *Breaking* `.on('command:*', callback)` and other command events passed (changed) results from `.parseOptions`, i.e. operands and unknown ([#1138]) +* refactor Option from prototype to class ([#1133]) +* refactor Command from prototype to class ([#1159]) +* changes to error handling ([#1165]) + * throw for author error, not just display message + * preflight for variadic error + * add tips to missing subcommand executable +* TypeScript fluent return types changed to be more subclass friendly, return `this` rather than `Command` ([#1180]) +* `.parseAsync` returns `Promise` to be consistent with `.parse()` ([#1180]) +* update dependencies + +### Removed + +* removed EventEmitter from TypeScript definition for Command, eliminating implicit peer dependency on `@types/node` ([#1146]) +* removed private function `normalize` (the functionality has been integrated into `parseOptions`) ([#1145]) +* `parseExpectedArgs` is now private ([#1149]) + +### Migration Tips + +If you use `.on('command:*')` or more complicated tests to detect an unrecognised subcommand, you may be able to delete the code and rely on the default behaviour. + +If you use `program.args` or more complicated tests to detect a missing subcommand, you may be able to delete the code and rely on the default behaviour. + +If you use `.command('*')` to add a default command, you may be be able to switch to `isDefault:true` with a named command. + +If you want to continue combining short options with optional values as though they were boolean flags, set `combineFlagAndOptionalValue(false)` +to expand `-fb` to `-f -b` rather than `-f b`. + +## [5.0.0-4] (2020-03-03) + +(Released in 5.0.0) + +## [5.0.0-3] (2020-02-20) + +(Released in 5.0.0) + +## [5.0.0-2] (2020-02-10) + +(Released in 5.0.0) + +## [5.0.0-1] (2020-02-08) + +(Released in 5.0.0) + +## [5.0.0-0] (2020-02-02) + +(Released in 5.0.0) + +## [4.1.1] (2020-02-02) + +### Fixed + +* TypeScript definition for `.action()` should include Promise for async ([#1157]) + +## [4.1.0] (2020-01-06) + +### Added + +* two routines to change how option values are handled, and eliminate name clashes with command properties ([#933] [#1102]) + * see storeOptionsAsProperties and passCommandToAction in README +* `.parseAsync` to use instead of `.parse` if supply async action handlers ([#806] [#1118]) + +### Fixed + +* Remove trailing blanks from wrapped help text ([#1096]) + +### Changed + +* update dependencies +* extend security coverage for Commander 2.x to 2020-02-03 +* improvements to README +* improvements to TypeScript definition documentation +* move old versions out of main CHANGELOG +* removed explicit use of `ts-node` in tests + +## [4.0.1] (2019-11-12) + +### Fixed + +* display help when requested, even if there are missing required options ([#1091]) + +## [4.0.0] (2019-11-02) + +### Added + +* automatically wrap and indent help descriptions for options and commands ([#1051]) +* `.exitOverride()` allows override of calls to `process.exit` for additional error handling and to keep program running ([#1040]) +* support for declaring required options with `.requiredOptions()` ([#1071]) +* GitHub Actions support ([#1027]) +* translation links in README + +### Changed + +* dev: switch tests from Sinon+Should to Jest with major rewrite of tests ([#1035]) +* call default subcommand even when there are unknown options ([#1047]) +* *Breaking* Commander is only officially supported on Node 8 and above, and requires Node 6 ([#1053]) + +### Fixed + +* *Breaking* keep command object out of program.args when action handler called ([#1048]) + * also, action handler now passed array of unknown arguments +* complain about unknown options when program argument supplied and action handler ([#1049]) + * this changes parameters to `command:*` event to include unknown arguments +* removed deprecated `customFds` option from call to `child_process.spawn` ([#1052]) +* rework TypeScript declarations to bring all types into imported namespace ([#1081]) + +### Migration Tips + +#### Testing for no arguments + +If you were previously using code like: + +```js +if (!program.args.length) ... +``` + +a partial replacement is: + +```js +if (program.rawArgs.length < 3) ... +``` + +## [4.0.0-1] Prerelease (2019-10-08) + +(Released in 4.0.0) + +## [4.0.0-0] Prerelease (2019-10-01) + +(Released in 4.0.0) + +## Older versions + +* [3.x](./changelogs/CHANGELOG-3.md) +* [2.x](./changelogs/CHANGELOG-2.md) +* [1.x](./changelogs/CHANGELOG-1.md) +* [0.x](./changelogs/CHANGELOG-0.md) + +[#1]: https://github.com/tj/commander.js/issues/1 +[#432]: https://github.com/tj/commander.js/issues/432 +[#508]: https://github.com/tj/commander.js/issues/508 +[#512]: https://github.com/tj/commander.js/issues/512 +[#531]: https://github.com/tj/commander.js/issues/531 +[#645]: https://github.com/tj/commander.js/issues/645 +[#742]: https://github.com/tj/commander.js/issues/742 +[#764]: https://github.com/tj/commander.js/issues/764 +[#802]: https://github.com/tj/commander.js/issues/802 +[#806]: https://github.com/tj/commander.js/issues/806 +[#809]: https://github.com/tj/commander.js/issues/809 +[#948]: https://github.com/tj/commander.js/issues/948 +[#962]: https://github.com/tj/commander.js/issues/962 +[#995]: https://github.com/tj/commander.js/issues/995 +[#1027]: https://github.com/tj/commander.js/pull/1027 +[#1032]: https://github.com/tj/commander.js/issues/1032 +[#1035]: https://github.com/tj/commander.js/pull/1035 +[#1040]: https://github.com/tj/commander.js/pull/1040 +[#1047]: https://github.com/tj/commander.js/pull/1047 +[#1048]: https://github.com/tj/commander.js/pull/1048 +[#1049]: https://github.com/tj/commander.js/pull/1049 +[#1051]: https://github.com/tj/commander.js/pull/1051 +[#1052]: https://github.com/tj/commander.js/pull/1052 +[#1053]: https://github.com/tj/commander.js/pull/1053 +[#1062]: https://github.com/tj/commander.js/pull/1062 +[#1071]: https://github.com/tj/commander.js/pull/1071 +[#1081]: https://github.com/tj/commander.js/pull/1081 +[#1088]: https://github.com/tj/commander.js/issues/1088 +[#1091]: https://github.com/tj/commander.js/pull/1091 +[#1096]: https://github.com/tj/commander.js/pull/1096 +[#1102]: https://github.com/tj/commander.js/pull/1102 +[#1118]: https://github.com/tj/commander.js/pull/1118 +[#1119]: https://github.com/tj/commander.js/pull/1119 +[#1133]: https://github.com/tj/commander.js/pull/1133 +[#1138]: https://github.com/tj/commander.js/pull/1138 +[#1145]: https://github.com/tj/commander.js/pull/1145 +[#1146]: https://github.com/tj/commander.js/pull/1146 +[#1149]: https://github.com/tj/commander.js/pull/1149 +[#1153]: https://github.com/tj/commander.js/issues/1153 +[#1157]: https://github.com/tj/commander.js/pull/1157 +[#1159]: https://github.com/tj/commander.js/pull/1159 +[#1165]: https://github.com/tj/commander.js/pull/1165 +[#1169]: https://github.com/tj/commander.js/pull/1169 +[#1172]: https://github.com/tj/commander.js/pull/1172 +[#1179]: https://github.com/tj/commander.js/pull/1179 +[#1180]: https://github.com/tj/commander.js/pull/1180 +[#1184]: https://github.com/tj/commander.js/pull/1184 +[#1191]: https://github.com/tj/commander.js/pull/1191 +[#1195]: https://github.com/tj/commander.js/pull/1195 +[#1208]: https://github.com/tj/commander.js/pull/1208 +[#1232]: https://github.com/tj/commander.js/pull/1232 +[#1235]: https://github.com/tj/commander.js/pull/1235 +[#1236]: https://github.com/tj/commander.js/pull/1236 +[#1247]: https://github.com/tj/commander.js/pull/1247 +[#1248]: https://github.com/tj/commander.js/pull/1248 +[#1250]: https://github.com/tj/commander.js/pull/1250 +[#1256]: https://github.com/tj/commander.js/pull/1256 +[#1275]: https://github.com/tj/commander.js/pull/1275 +[#1301]: https://github.com/tj/commander.js/issues/1301 +[#1306]: https://github.com/tj/commander.js/pull/1306 +[#1312]: https://github.com/tj/commander.js/pull/1312 +[#1322]: https://github.com/tj/commander.js/pull/1322 +[#1323]: https://github.com/tj/commander.js/pull/1323 +[#1325]: https://github.com/tj/commander.js/pull/1325 +[#1326]: https://github.com/tj/commander.js/pull/1326 +[#1332]: https://github.com/tj/commander.js/pull/1332 +[#1353]: https://github.com/tj/commander.js/pull/1353 +[#1360]: https://github.com/tj/commander.js/pull/1360 +[#1361]: https://github.com/tj/commander.js/pull/1361 +[#1368]: https://github.com/tj/commander.js/pull/1368 +[#1375]: https://github.com/tj/commander.js/pull/1375 +[#1390]: https://github.com/tj/commander.js/pull/1390 + +[Unreleased]: https://github.com/tj/commander.js/compare/master...develop +[6.2.1]: https://github.com/tj/commander.js/compare/v6.2.0..v6.2.1 +[6.2.0]: https://github.com/tj/commander.js/compare/v6.1.0..v6.2.0 +[6.1.0]: https://github.com/tj/commander.js/compare/v6.0.0..v6.1.0 +[6.0.0]: https://github.com/tj/commander.js/compare/v5.1.0..v6.0.0 +[6.0.0-0]: https://github.com/tj/commander.js/compare/v5.1.0..v6.0.0-0 +[5.1.0]: https://github.com/tj/commander.js/compare/v5.0.0..v5.1.0 +[5.0.0]: https://github.com/tj/commander.js/compare/v4.1.1..v5.0.0 +[5.0.0-4]: https://github.com/tj/commander.js/compare/v5.0.0-3..v5.0.0-4 +[5.0.0-3]: https://github.com/tj/commander.js/compare/v5.0.0-2..v5.0.0-3 +[5.0.0-2]: https://github.com/tj/commander.js/compare/v5.0.0-1..v5.0.0-2 +[5.0.0-1]: https://github.com/tj/commander.js/compare/v5.0.0-0..v5.0.0-1 +[5.0.0-0]: https://github.com/tj/commander.js/compare/v4.1.1..v5.0.0-0 +[4.1.1]: https://github.com/tj/commander.js/compare/v4.1.0..v4.1.1 +[4.1.0]: https://github.com/tj/commander.js/compare/v4.0.1..v4.1.0 +[4.0.1]: https://github.com/tj/commander.js/compare/v4.0.0..v4.0.1 +[4.0.0]: https://github.com/tj/commander.js/compare/v3.0.2..v4.0.0 +[4.0.0-1]: https://github.com/tj/commander.js/compare/v4.0.0-0..v4.0.0-1 +[4.0.0-0]: https://github.com/tj/commander.js/compare/v3.0.2...v4.0.0-0 diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/LICENSE new file mode 100644 index 00000000..10f997ab --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/Readme.md new file mode 100644 index 00000000..45cd7553 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/Readme.md @@ -0,0 +1,791 @@ +# Commander.js + +[![Build Status](https://api.travis-ci.org/tj/commander.js.svg?branch=master)](http://travis-ci.org/tj/commander.js) +[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander) +[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true) +[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander) + +The complete solution for [node.js](http://nodejs.org) command-line interfaces. + +Read this in other languages: English | [简体中文](./Readme_zh-CN.md) + +- [Commander.js](#commanderjs) + - [Installation](#installation) + - [Declaring _program_ variable](#declaring-program-variable) + - [Options](#options) + - [Common option types, boolean and value](#common-option-types-boolean-and-value) + - [Default option value](#default-option-value) + - [Other option types, negatable boolean and boolean|value](#other-option-types-negatable-boolean-and-booleanvalue) + - [Custom option processing](#custom-option-processing) + - [Required option](#required-option) + - [Variadic option](#variadic-option) + - [Version option](#version-option) + - [Commands](#commands) + - [Specify the argument syntax](#specify-the-argument-syntax) + - [Action handler (sub)commands](#action-handler-subcommands) + - [Stand-alone executable (sub)commands](#stand-alone-executable-subcommands) + - [Automated help](#automated-help) + - [Custom help](#custom-help) + - [.usage and .name](#usage-and-name) + - [.help(cb)](#helpcb) + - [.outputHelp(cb)](#outputhelpcb) + - [.helpInformation()](#helpinformation) + - [.helpOption(flags, description)](#helpoptionflags-description) + - [.addHelpCommand()](#addhelpcommand) + - [Custom event listeners](#custom-event-listeners) + - [Bits and pieces](#bits-and-pieces) + - [.parse() and .parseAsync()](#parse-and-parseasync) + - [Avoiding option name clashes](#avoiding-option-name-clashes) + - [TypeScript](#typescript) + - [createCommand()](#createcommand) + - [Import into ECMAScript Module](#import-into-ecmascript-module) + - [Node options such as `--harmony`](#node-options-such-as---harmony) + - [Debugging stand-alone executable subcommands](#debugging-stand-alone-executable-subcommands) + - [Override exit handling](#override-exit-handling) + - [Examples](#examples) + - [Support](#support) + - [Commander for enterprise](#commander-for-enterprise) + +For information about terms used in this document see: [terminology](./docs/terminology.md) + +## Installation + +```bash +npm install commander +``` + +## Declaring _program_ variable + +Commander exports a global object which is convenient for quick programs. +This is used in the examples in this README for brevity. + +```js +const { program } = require('commander'); +program.version('0.0.1'); +``` + +For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use. + +```js +const { Command } = require('commander'); +const program = new Command(); +program.version('0.0.1'); +``` + +## Options + +Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space or vertical bar ('|'). + +The options can be accessed as properties on the Command object. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. See also optional new behaviour to [avoid name clashes](#avoiding-option-name-clashes). + +Multiple short flags may optionally be combined in a single argument following the dash: boolean flags, followed by a single option taking a value (possibly followed by the value). +For example `-a -b -p 80` may be written as `-ab -p80` or even `-abp80`. + +You can use `--` to indicate the end of the options, and any remaining arguments will be used without being interpreted. + +Options on the command line are not positional, and can be specified before or after other arguments. + +### Common option types, boolean and value + +The two most used option types are a boolean option, and an option which takes its value +from the following argument (declared with angle brackets like `--expect `). Both are `undefined` unless specified on command line. + +Example file: [options-common.js](./examples/options-common.js) + +```js +program + .option('-d, --debug', 'output extra debugging') + .option('-s, --small', 'small pizza size') + .option('-p, --pizza-type ', 'flavour of pizza'); + +program.parse(process.argv); + +if (program.debug) console.log(program.opts()); +console.log('pizza details:'); +if (program.small) console.log('- small pizza size'); +if (program.pizzaType) console.log(`- ${program.pizzaType}`); +``` + +```bash +$ pizza-options -d +{ debug: true, small: undefined, pizzaType: undefined } +pizza details: +$ pizza-options -p +error: option '-p, --pizza-type ' argument missing +$ pizza-options -ds -p vegetarian +{ debug: true, small: true, pizzaType: 'vegetarian' } +pizza details: +- small pizza size +- vegetarian +$ pizza-options --pizza-type=cheese +pizza details: +- cheese +``` + +`program.parse(arguments)` processes the arguments, leaving any args not consumed by the program options in the `program.args` array. + +### Default option value + +You can specify a default value for an option which takes a value. + +Example file: [options-defaults.js](./examples/options-defaults.js) + +```js +program + .option('-c, --cheese ', 'add the specified type of cheese', 'blue'); + +program.parse(process.argv); + +console.log(`cheese: ${program.cheese}`); +``` + +```bash +$ pizza-options +cheese: blue +$ pizza-options --cheese stilton +cheese: stilton +``` + +### Other option types, negatable boolean and boolean|value + +You can define a boolean option long name with a leading `no-` to set the option value to false when used. +Defined alone this also makes the option true by default. + +If you define `--foo` first, adding `--no-foo` does not change the default value from what it would +otherwise be. You can specify a default boolean value for a boolean option and it can be overridden on command line. + +Example file: [options-negatable.js](./examples/options-negatable.js) + +```js +program + .option('--no-sauce', 'Remove sauce') + .option('--cheese ', 'cheese flavour', 'mozzarella') + .option('--no-cheese', 'plain with no cheese') + .parse(process.argv); + +const sauceStr = program.sauce ? 'sauce' : 'no sauce'; +const cheeseStr = (program.cheese === false) ? 'no cheese' : `${program.cheese} cheese`; +console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`); +``` + +```bash +$ pizza-options +You ordered a pizza with sauce and mozzarella cheese +$ pizza-options --sauce +error: unknown option '--sauce' +$ pizza-options --cheese=blue +You ordered a pizza with sauce and blue cheese +$ pizza-options --no-sauce --no-cheese +You ordered a pizza with no sauce and no cheese +``` + +You can specify an option which may be used as a boolean option but may optionally take an option-argument +(declared with square brackets like `--optional [value]`). + +Example file: [options-boolean-or-value.js](./examples/options-boolean-or-value.js) + +```js +program + .option('-c, --cheese [type]', 'Add cheese with optional type'); + +program.parse(process.argv); + +if (program.cheese === undefined) console.log('no cheese'); +else if (program.cheese === true) console.log('add cheese'); +else console.log(`add cheese type ${program.cheese}`); +``` + +```bash +$ pizza-options +no cheese +$ pizza-options --cheese +add cheese +$ pizza-options --cheese mozzarella +add cheese type mozzarella +``` + +For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-taking-varying-arguments.md). + +### Custom option processing + +You may specify a function to do custom processing of option-arguments. The callback function receives two parameters, +the user specified option-argument and the previous value for the option. It returns the new value for the option. + +This allows you to coerce the option-argument to the desired type, or accumulate values, or do entirely custom processing. + +You can optionally specify the default/starting value for the option after the function parameter. + +Example file: [options-custom-processing.js](./examples/options-custom-processing.js) + +```js +function myParseInt(value, dummyPrevious) { + // parseInt takes a string and an optional radix + return parseInt(value); +} + +function increaseVerbosity(dummyValue, previous) { + return previous + 1; +} + +function collect(value, previous) { + return previous.concat([value]); +} + +function commaSeparatedList(value, dummyPrevious) { + return value.split(','); +} + +program + .option('-f, --float ', 'float argument', parseFloat) + .option('-i, --integer ', 'integer argument', myParseInt) + .option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0) + .option('-c, --collect ', 'repeatable value', collect, []) + .option('-l, --list ', 'comma separated list', commaSeparatedList) +; + +program.parse(process.argv); + +if (program.float !== undefined) console.log(`float: ${program.float}`); +if (program.integer !== undefined) console.log(`integer: ${program.integer}`); +if (program.verbose > 0) console.log(`verbosity: ${program.verbose}`); +if (program.collect.length > 0) console.log(program.collect); +if (program.list !== undefined) console.log(program.list); +``` + +```bash +$ custom -f 1e2 +float: 100 +$ custom --integer 2 +integer: 2 +$ custom -v -v -v +verbose: 3 +$ custom -c a -c b -c c +[ 'a', 'b', 'c' ] +$ custom --list x,y,z +[ 'x', 'y', 'z' ] +``` + +### Required option + +You may specify a required (mandatory) option using `.requiredOption`. The option must have a value after parsing, usually specified on the command line, or perhaps from a default value (say from environment). The method is otherwise the same as `.option` in format, taking flags and description, and optional default value or custom processing. + +Example file: [options-required.js](./examples/options-required.js) + +```js +program + .requiredOption('-c, --cheese ', 'pizza must have cheese'); + +program.parse(process.argv); +``` + +```bash +$ pizza +error: required option '-c, --cheese ' not specified +``` + +### Variadic option + +You may make an option variadic by appending `...` to the value placeholder when declaring the option. On the command line you +can then specify multiple option-arguments, and the parsed option value will be an array. The extra arguments +are read until the first argument starting with a dash. The special argument `--` stops option processing entirely. If a value +is specified in the same argument as the option then no further values are read. + +Example file: [options-variadic.js](./examples/options-variadic.js) + +```js +program + .option('-n, --number ', 'specify numbers') + .option('-l, --letter [letters...]', 'specify letters'); + +program.parse(); + +console.log('Options: ', program.opts()); +console.log('Remaining arguments: ', program.args); +``` + +```bash +$ collect -n 1 2 3 --letter a b c +Options: { number: [ '1', '2', '3' ], letter: [ 'a', 'b', 'c' ] } +Remaining arguments: [] +$ collect --letter=A -n80 operand +Options: { number: [ '80' ], letter: [ 'A' ] } +Remaining arguments: [ 'operand' ] +$ collect --letter -n 1 -n 2 3 -- operand +Options: { number: [ '1', '2', '3' ], letter: true } +Remaining arguments: [ 'operand' ] +``` + +For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-taking-varying-arguments.md). + +### Version option + +The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits. + +```js +program.version('0.0.1'); +``` + +```bash +$ ./examples/pizza -V +0.0.1 +``` + +You may change the flags and description by passing additional parameters to the `version` method, using +the same syntax for flags as the `option` method. + +```js +program.version('0.0.1', '-v, --vers', 'output the current version'); +``` + +## Commands + +You can specify (sub)commands using `.command()` or `.addCommand()`. There are two ways these can be implemented: using an action handler attached to the command, or as a stand-alone executable file (described in more detail later). The subcommands may be nested ([example](./examples/nestedCommands.js)). + +In the first parameter to `.command()` you specify the command name and any command-arguments. The arguments may be `` or `[optional]`, and the last argument may also be `variadic...`. + +You can use `.addCommand()` to add an already configured subcommand to the program. + +For example: + +```js +// Command implemented using action handler (description is supplied separately to `.command`) +// Returns new command for configuring. +program + .command('clone [destination]') + .description('clone a repository into a newly created directory') + .action((source, destination) => { + console.log('clone command called'); + }); + +// Command implemented using stand-alone executable file (description is second parameter to `.command`) +// Returns `this` for adding more commands. +program + .command('start ', 'start named service') + .command('stop [service]', 'stop named service, or all if no name supplied'); + +// Command prepared separately. +// Returns `this` for adding more commands. +program + .addCommand(build.makeBuildCommand()); +``` + +Configuration options can be passed with the call to `.command()` and `.addCommand()`. Specifying `hidden: true` will +remove the command from the generated help output. Specifying `isDefault: true` will run the subcommand if no other +subcommand is specified ([example](./examples/defaultCommand.js)). + +### Specify the argument syntax + +You use `.arguments` to specify the expected command-arguments for the top-level command, and for subcommands they are usually +included in the `.command` call. Angled brackets (e.g. ``) indicate required command-arguments. +Square brackets (e.g. `[optional]`) indicate optional command-arguments. +You can optionally describe the arguments in the help by supplying a hash as second parameter to `.description()`. + +Example file: [env](./examples/env) + +```js +program + .version('0.1.0') + .arguments(' [env]') + .description('test command', { + cmd: 'command to run', + env: 'environment to run test in' + }) + .action(function (cmd, env) { + console.log('command:', cmd); + console.log('environment:', env || 'no environment given'); + }); + +program.parse(process.argv); +``` + + The last argument of a command can be variadic, and only the last argument. To make an argument variadic you + append `...` to the argument name. For example: + +```js +const { program } = require('commander'); + +program + .version('0.1.0') + .command('rmdir [otherDirs...]') + .action(function (dir, otherDirs) { + console.log('rmdir %s', dir); + if (otherDirs) { + otherDirs.forEach(function (oDir) { + console.log('rmdir %s', oDir); + }); + } + }); + +program.parse(process.argv); +``` + +The variadic argument is passed to the action handler as an array. + +### Action handler (sub)commands + +You can add options to a command that uses an action handler. +The action handler gets passed a parameter for each argument you declared, and one additional argument which is the +command object itself. This command argument has the values for the command-specific options added as properties. + +```js +const { program } = require('commander'); + +program + .command('rm ') + .option('-r, --recursive', 'Remove recursively') + .action(function (dir, cmdObj) { + console.log('remove ' + dir + (cmdObj.recursive ? ' recursively' : '')) + }) + +program.parse(process.argv) +``` + +You may supply an `async` action handler, in which case you call `.parseAsync` rather than `.parse`. + +```js +async function run() { /* code goes here */ } + +async function main() { + program + .command('run') + .action(run); + await program.parseAsync(process.argv); +} +``` + +A command's options on the command line are validated when the command is used. Any unknown options will be reported as an error. + +### Stand-alone executable (sub)commands + +When `.command()` is invoked with a description argument, this tells Commander that you're going to use stand-alone executables for subcommands. +Commander will search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-subcommand`, like `pm-install`, `pm-search`. +You can specify a custom name with the `executableFile` configuration option. + +You handle the options for an executable (sub)command in the executable, and don't declare them at the top-level. + +Example file: [pm](./examples/pm) + +```js +program + .version('0.1.0') + .command('install [name]', 'install one or more packages') + .command('search [query]', 'search with optional query') + .command('update', 'update installed packages', { executableFile: 'myUpdateSubCommand' }) + .command('list', 'list packages installed', { isDefault: true }); + +program.parse(process.argv); +``` + +If the program is designed to be installed globally, make sure the executables have proper modes, like `755`. + +## Automated help + +The help information is auto-generated based on the information commander already knows about your program. The default +help option is `-h,--help`. + +Example file: [pizza](./examples/pizza) + +```bash +$ node ./examples/pizza --help +Usage: pizza [options] + +An application for pizzas ordering + +Options: + -V, --version output the version number + -p, --peppers Add peppers + -c, --cheese Add the specified type of cheese (default: "marble") + -C, --no-cheese You do not want any cheese + -h, --help display help for command +``` + +A `help` command is added by default if your command has subcommands. It can be used alone, or with a subcommand name to show +further help for the subcommand. These are effectively the same if the `shell` program has implicit help: + +```bash +shell help +shell --help + +shell help spawn +shell spawn --help +``` + +### Custom help + +You can display extra information by listening for "--help". + +Example file: [custom-help](./examples/custom-help) + +```js +program + .option('-f, --foo', 'enable some foo'); + +// must be before .parse() +program.on('--help', () => { + console.log(''); + console.log('Example call:'); + console.log(' $ custom-help --help'); +}); +``` + +Yields the following help output: + +```Text +Usage: custom-help [options] + +Options: + -f, --foo enable some foo + -h, --help display help for command + +Example call: + $ custom-help --help +``` + +### .usage and .name + +These allow you to customise the usage description in the first line of the help. The name is otherwise +deduced from the (full) program arguments. Given: + +```js +program + .name("my-command") + .usage("[global options] command") +``` + +The help will start with: + +```Text +Usage: my-command [global options] command +``` + +### .help(cb) + +Output help information and exit immediately. Optional callback cb allows post-processing of help text before it is displayed. + +### .outputHelp(cb) + +Output help information without exiting. +Optional callback cb allows post-processing of help text before it is displayed. + +### .helpInformation() + +Get the command help information as a string for processing or displaying yourself. (The text does not include the custom help +from `--help` listeners.) + +### .helpOption(flags, description) + +Override the default help flags and description. Pass false to disable the built-in help option. + +```js +program + .helpOption('-e, --HELP', 'read more information'); +``` + +### .addHelpCommand() + +You can explicitly turn on or off the implicit help command with `.addHelpCommand()` and `.addHelpCommand(false)`. + +You can both turn on and customise the help command by supplying the name and description: + +```js +program.addHelpCommand('assist [command]', 'show assistance'); +``` + +## Custom event listeners + +You can execute custom actions by listening to command and option events. + +```js +program.on('option:verbose', function () { + process.env.VERBOSE = this.verbose; +}); + +program.on('command:*', function (operands) { + console.error(`error: unknown command '${operands[0]}'`); + const availableCommands = program.commands.map(cmd => cmd.name()); + mySuggestBestMatch(operands[0], availableCommands); + process.exitCode = 1; +}); +``` + +## Bits and pieces + +### .parse() and .parseAsync() + +The first argument to `.parse` is the array of strings to parse. You may omit the parameter to implicitly use `process.argv`. + +If the arguments follow different conventions than node you can pass a `from` option in the second parameter: + +- 'node': default, `argv[0]` is the application and `argv[1]` is the script being run, with user parameters after that +- 'electron': `argv[1]` varies depending on whether the electron application is packaged +- 'user': all of the arguments from the user + +For example: + +```js +program.parse(process.argv); // Explicit, node conventions +program.parse(); // Implicit, and auto-detect electron +program.parse(['-f', 'filename'], { from: 'user' }); +``` + +### Avoiding option name clashes + +The original and default behaviour is that the option values are stored +as properties on the program, and the action handler is passed a +command object with the options values stored as properties. +This is very convenient to code, but the downside is possible clashes with +existing properties of Command. + +There are two new routines to change the behaviour, and the default behaviour may change in the future: + +- `storeOptionsAsProperties`: whether to store option values as properties on command object, or store separately (specify false) and access using `.opts()` +- `passCommandToAction`: whether to pass command to action handler, +or just the options (specify false) + +Example file: [storeOptionsAsProperties-action.js](./examples/storeOptionsAsProperties-action.js) + +```js +program + .storeOptionsAsProperties(false) + .passCommandToAction(false); + +program + .name('my-program-name') + .option('-n,--name '); + +program + .command('show') + .option('-a,--action ') + .action((options) => { + console.log(options.action); + }); + +program.parse(process.argv); + +const programOptions = program.opts(); +console.log(programOptions.name); +``` + +### TypeScript + +The Commander package includes its TypeScript Definition file. + +If you use `ts-node` and stand-alone executable subcommands written as `.ts` files, you need to call your program through node to get the subcommands called correctly. e.g. + +```bash +node -r ts-node/register pm.ts +``` + +### createCommand() + +This factory function creates a new command. It is exported and may be used instead of using `new`, like: + +```js +const { createCommand } = require('commander'); +const program = createCommand(); +``` + +`createCommand` is also a method of the Command object, and creates a new command rather than a subcommand. This gets used internally +when creating subcommands using `.command()`, and you may override it to +customise the new subcommand (examples using [subclass](./examples/custom-command-class.js) and [function](./examples/custom-command-function.js)). + +### Import into ECMAScript Module + +Commander is currently a CommonJS package, and the default export can be imported into an ES Module: + +```js +// index.mjs +import commander from 'commander'; +const program = commander.program; +const newCommand = new commander.Command(); +``` + +### Node options such as `--harmony` + +You can enable `--harmony` option in two ways: + +- Use `#! /usr/bin/env node --harmony` in the subcommands scripts. (Note Windows does not support this pattern.) +- Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning subcommand process. + +### Debugging stand-alone executable subcommands + +An executable subcommand is launched as a separate child process. + +If you are using the node inspector for [debugging](https://nodejs.org/en/docs/guides/debugging-getting-started/) executable subcommands using `node --inspect` et al, +the inspector port is incremented by 1 for the spawned subcommand. + +If you are using VSCode to debug executable subcommands you need to set the `"autoAttachChildProcesses": true` flag in your launch.json configuration. + +### Override exit handling + +By default Commander calls `process.exit` when it detects errors, or after displaying the help or version. You can override +this behaviour and optionally supply a callback. The default override throws a `CommanderError`. + +The override callback is passed a `CommanderError` with properties `exitCode` number, `code` string, and `message`. The default override behaviour is to throw the error, except for async handling of executable subcommand completion which carries on. The normal display of error messages or version or help +is not affected by the override which is called after the display. + +```js +program.exitOverride(); + +try { + program.parse(process.argv); +} catch (err) { + // custom processing... +} +``` + +## Examples + +Example file: [deploy](./examples/deploy) + +```js +const { program } = require('commander'); + +program + .version('0.1.0') + .option('-C, --chdir ', 'change the working directory') + .option('-c, --config ', 'set config path. defaults to ./deploy.conf') + .option('-T, --no-tests', 'ignore test hook'); + +program + .command('setup [env]') + .description('run setup commands for all envs') + .option("-s, --setup_mode [mode]", "Which setup mode to use") + .action(function(env, options){ + const mode = options.setup_mode || "normal"; + env = env || 'all'; + console.log('setup for %s env(s) with %s mode', env, mode); + }); + +program + .command('exec ') + .alias('ex') + .description('execute the given remote cmd') + .option("-e, --exec_mode ", "Which exec mode to use") + .action(function(cmd, options){ + console.log('exec "%s" using %s mode', cmd, options.exec_mode); + }).on('--help', function() { + console.log(''); + console.log('Examples:'); + console.log(''); + console.log(' $ deploy exec sequential'); + console.log(' $ deploy exec async'); + }); + +program.parse(process.argv); +``` + +More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory. + +## Support + +The current version of Commander is fully supported on Long Term Support versions of Node, and is likely to work with Node 6 but not tested. +(For versions of Node below Node 6, use Commander 3.x or 2.x.) + +The main forum for free and community support is the project [Issues](https://github.com/tj/commander.js/issues) on GitHub. + +### Commander for enterprise + +Available as part of the Tidelift Subscription + +The maintainers of Commander and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-commander?utm_source=npm-commander&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/index.js new file mode 100644 index 00000000..c85f7255 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/index.js @@ -0,0 +1,1881 @@ +/** + * Module dependencies. + */ + +const EventEmitter = require('events').EventEmitter; +const spawn = require('child_process').spawn; +const path = require('path'); +const fs = require('fs'); + +// @ts-check + +class Option { + /** + * Initialize a new `Option` with the given `flags` and `description`. + * + * @param {string} flags + * @param {string} description + * @api public + */ + + constructor(flags, description) { + this.flags = flags; + this.required = flags.includes('<'); // A value must be supplied when the option is specified. + this.optional = flags.includes('['); // A value is optional when the option is specified. + // variadic test ignores et al which might be used to describe custom splitting of single argument + this.variadic = /\w\.\.\.[>\]]$/.test(flags); // The option can take multiple values. + this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line. + const optionFlags = _parseOptionFlags(flags); + this.short = optionFlags.shortFlag; + this.long = optionFlags.longFlag; + this.negate = false; + if (this.long) { + this.negate = this.long.startsWith('--no-'); + } + this.description = description || ''; + this.defaultValue = undefined; + } + + /** + * Return option name. + * + * @return {string} + * @api private + */ + + name() { + if (this.long) { + return this.long.replace(/^--/, ''); + } + return this.short.replace(/^-/, ''); + }; + + /** + * Return option name, in a camelcase format that can be used + * as a object attribute key. + * + * @return {string} + * @api private + */ + + attributeName() { + return camelcase(this.name().replace(/^no-/, '')); + }; + + /** + * Check if `arg` matches the short or long flag. + * + * @param {string} arg + * @return {boolean} + * @api private + */ + + is(arg) { + return this.short === arg || this.long === arg; + }; +} + +/** + * CommanderError class + * @class + */ +class CommanderError extends Error { + /** + * Constructs the CommanderError class + * @param {number} exitCode suggested exit code which could be used with process.exit + * @param {string} code an id string representing the error + * @param {string} message human-readable description of the error + * @constructor + */ + constructor(exitCode, code, message) { + super(message); + // properly capture stack trace in Node.js + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.code = code; + this.exitCode = exitCode; + this.nestedError = undefined; + } +} + +class Command extends EventEmitter { + /** + * Initialize a new `Command`. + * + * @param {string} [name] + * @api public + */ + + constructor(name) { + super(); + this.commands = []; + this.options = []; + this.parent = null; + this._allowUnknownOption = false; + this._args = []; + this.rawArgs = null; + this._scriptPath = null; + this._name = name || ''; + this._optionValues = {}; + this._storeOptionsAsProperties = true; // backwards compatible by default + this._storeOptionsAsPropertiesCalled = false; + this._passCommandToAction = true; // backwards compatible by default + this._actionResults = []; + this._actionHandler = null; + this._executableHandler = false; + this._executableFile = null; // custom name for executable + this._defaultCommandName = null; + this._exitCallback = null; + this._aliases = []; + this._combineFlagAndOptionalValue = true; + + this._hidden = false; + this._hasHelpOption = true; + this._helpFlags = '-h, --help'; + this._helpDescription = 'display help for command'; + this._helpShortFlag = '-h'; + this._helpLongFlag = '--help'; + this._hasImplicitHelpCommand = undefined; // Deliberately undefined, not decided whether true or false + this._helpCommandName = 'help'; + this._helpCommandnameAndArgs = 'help [command]'; + this._helpCommandDescription = 'display help for command'; + } + + /** + * Define a command. + * + * There are two styles of command: pay attention to where to put the description. + * + * Examples: + * + * // Command implemented using action handler (description is supplied separately to `.command`) + * program + * .command('clone [destination]') + * .description('clone a repository into a newly created directory') + * .action((source, destination) => { + * console.log('clone command called'); + * }); + * + * // Command implemented using separate executable file (description is second parameter to `.command`) + * program + * .command('start ', 'start named service') + * .command('stop [service]', 'stop named service, or all if no name supplied'); + * + * @param {string} nameAndArgs - command name and arguments, args are `` or `[optional]` and last may also be `variadic...` + * @param {Object|string} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable) + * @param {Object} [execOpts] - configuration options (for executable) + * @return {Command} returns new command for action handler, or `this` for executable command + * @api public + */ + + command(nameAndArgs, actionOptsOrExecDesc, execOpts) { + let desc = actionOptsOrExecDesc; + let opts = execOpts; + if (typeof desc === 'object' && desc !== null) { + opts = desc; + desc = null; + } + opts = opts || {}; + const args = nameAndArgs.split(/ +/); + const cmd = this.createCommand(args.shift()); + + if (desc) { + cmd.description(desc); + cmd._executableHandler = true; + } + if (opts.isDefault) this._defaultCommandName = cmd._name; + + cmd._hidden = !!(opts.noHelp || opts.hidden); + cmd._hasHelpOption = this._hasHelpOption; + cmd._helpFlags = this._helpFlags; + cmd._helpDescription = this._helpDescription; + cmd._helpShortFlag = this._helpShortFlag; + cmd._helpLongFlag = this._helpLongFlag; + cmd._helpCommandName = this._helpCommandName; + cmd._helpCommandnameAndArgs = this._helpCommandnameAndArgs; + cmd._helpCommandDescription = this._helpCommandDescription; + cmd._exitCallback = this._exitCallback; + cmd._storeOptionsAsProperties = this._storeOptionsAsProperties; + cmd._passCommandToAction = this._passCommandToAction; + cmd._combineFlagAndOptionalValue = this._combineFlagAndOptionalValue; + + cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor + this.commands.push(cmd); + cmd._parseExpectedArgs(args); + cmd.parent = this; + + if (desc) return this; + return cmd; + }; + + /** + * Factory routine to create a new unattached command. + * + * See .command() for creating an attached subcommand, which uses this routine to + * create the command. You can override createCommand to customise subcommands. + * + * @param {string} [name] + * @return {Command} new command + * @api public + */ + + createCommand(name) { + return new Command(name); + }; + + /** + * Add a prepared subcommand. + * + * See .command() for creating an attached subcommand which inherits settings from its parent. + * + * @param {Command} cmd - new subcommand + * @param {Object} [opts] - configuration options + * @return {Command} `this` command for chaining + * @api public + */ + + addCommand(cmd, opts) { + if (!cmd._name) throw new Error('Command passed to .addCommand() must have a name'); + + // To keep things simple, block automatic name generation for deeply nested executables. + // Fail fast and detect when adding rather than later when parsing. + function checkExplicitNames(commandArray) { + commandArray.forEach((cmd) => { + if (cmd._executableHandler && !cmd._executableFile) { + throw new Error(`Must specify executableFile for deeply nested executable: ${cmd.name()}`); + } + checkExplicitNames(cmd.commands); + }); + } + checkExplicitNames(cmd.commands); + + opts = opts || {}; + if (opts.isDefault) this._defaultCommandName = cmd._name; + if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation + + this.commands.push(cmd); + cmd.parent = this; + return this; + }; + + /** + * Define argument syntax for the command. + * + * @api public + */ + + arguments(desc) { + return this._parseExpectedArgs(desc.split(/ +/)); + }; + + /** + * Override default decision whether to add implicit help command. + * + * addHelpCommand() // force on + * addHelpCommand(false); // force off + * addHelpCommand('help [cmd]', 'display help for [cmd]'); // force on with custom details + * + * @return {Command} `this` command for chaining + * @api public + */ + + addHelpCommand(enableOrNameAndArgs, description) { + if (enableOrNameAndArgs === false) { + this._hasImplicitHelpCommand = false; + } else { + this._hasImplicitHelpCommand = true; + if (typeof enableOrNameAndArgs === 'string') { + this._helpCommandName = enableOrNameAndArgs.split(' ')[0]; + this._helpCommandnameAndArgs = enableOrNameAndArgs; + } + this._helpCommandDescription = description || this._helpCommandDescription; + } + return this; + }; + + /** + * @return {boolean} + * @api private + */ + + _lazyHasImplicitHelpCommand() { + if (this._hasImplicitHelpCommand === undefined) { + this._hasImplicitHelpCommand = this.commands.length && !this._actionHandler && !this._findCommand('help'); + } + return this._hasImplicitHelpCommand; + }; + + /** + * Parse expected `args`. + * + * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. + * + * @param {Array} args + * @return {Command} `this` command for chaining + * @api private + */ + + _parseExpectedArgs(args) { + if (!args.length) return; + args.forEach((arg) => { + const argDetails = { + required: false, + name: '', + variadic: false + }; + + switch (arg[0]) { + case '<': + argDetails.required = true; + argDetails.name = arg.slice(1, -1); + break; + case '[': + argDetails.name = arg.slice(1, -1); + break; + } + + if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') { + argDetails.variadic = true; + argDetails.name = argDetails.name.slice(0, -3); + } + if (argDetails.name) { + this._args.push(argDetails); + } + }); + this._args.forEach((arg, i) => { + if (arg.variadic && i < this._args.length - 1) { + throw new Error(`only the last argument can be variadic '${arg.name}'`); + } + }); + return this; + }; + + /** + * Register callback to use as replacement for calling process.exit. + * + * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing + * @return {Command} `this` command for chaining + * @api public + */ + + exitOverride(fn) { + if (fn) { + this._exitCallback = fn; + } else { + this._exitCallback = (err) => { + if (err.code !== 'commander.executeSubCommandAsync') { + throw err; + } else { + // Async callback from spawn events, not useful to throw. + } + }; + } + return this; + }; + + /** + * Call process.exit, and _exitCallback if defined. + * + * @param {number} exitCode exit code for using with process.exit + * @param {string} code an id string representing the error + * @param {string} message human-readable description of the error + * @return never + * @api private + */ + + _exit(exitCode, code, message) { + if (this._exitCallback) { + this._exitCallback(new CommanderError(exitCode, code, message)); + // Expecting this line is not reached. + } + process.exit(exitCode); + }; + + /** + * Register callback `fn` for the command. + * + * Examples: + * + * program + * .command('help') + * .description('display verbose help') + * .action(function() { + * // output help here + * }); + * + * @param {Function} fn + * @return {Command} `this` command for chaining + * @api public + */ + + action(fn) { + const listener = (args) => { + // The .action callback takes an extra parameter which is the command or options. + const expectedArgsCount = this._args.length; + const actionArgs = args.slice(0, expectedArgsCount); + if (this._passCommandToAction) { + actionArgs[expectedArgsCount] = this; + } else { + actionArgs[expectedArgsCount] = this.opts(); + } + // Add the extra arguments so available too. + if (args.length > expectedArgsCount) { + actionArgs.push(args.slice(expectedArgsCount)); + } + + const actionResult = fn.apply(this, actionArgs); + // Remember result in case it is async. Assume parseAsync getting called on root. + let rootCommand = this; + while (rootCommand.parent) { + rootCommand = rootCommand.parent; + } + rootCommand._actionResults.push(actionResult); + }; + this._actionHandler = listener; + return this; + }; + + /** + * Internal routine to check whether there is a clash storing option value with a Command property. + * + * @param {Option} option + * @api private + */ + + _checkForOptionNameClash(option) { + if (!this._storeOptionsAsProperties || this._storeOptionsAsPropertiesCalled) { + // Storing options safely, or user has been explicit and up to them. + return; + } + // User may override help, and hard to tell if worth warning. + if (option.name() === 'help') { + return; + } + + const commandProperty = this._getOptionValue(option.attributeName()); + if (commandProperty === undefined) { + // no clash + return; + } + + let foundClash = true; + if (option.negate) { + // It is ok if define foo before --no-foo. + const positiveLongFlag = option.long.replace(/^--no-/, '--'); + foundClash = !this._findOption(positiveLongFlag); + } else if (option.long) { + const negativeLongFlag = option.long.replace(/^--/, '--no-'); + foundClash = !this._findOption(negativeLongFlag); + } + + if (foundClash) { + throw new Error(`option '${option.name()}' clashes with existing property '${option.attributeName()}' on Command +- call storeOptionsAsProperties(false) to store option values safely, +- or call storeOptionsAsProperties(true) to suppress this check, +- or change option name + +Read more on https://git.io/JJc0W`); + } + }; + + /** + * Internal implementation shared by .option() and .requiredOption() + * + * @param {Object} config + * @param {string} flags + * @param {string} description + * @param {Function|*} [fn] - custom option processing function or default value + * @param {*} [defaultValue] + * @return {Command} `this` command for chaining + * @api private + */ + + _optionEx(config, flags, description, fn, defaultValue) { + const option = new Option(flags, description); + const oname = option.name(); + const name = option.attributeName(); + option.mandatory = !!config.mandatory; + + this._checkForOptionNameClash(option); + + // default as 3rd arg + if (typeof fn !== 'function') { + if (fn instanceof RegExp) { + // This is a bit simplistic (especially no error messages), and probably better handled by caller using custom option processing. + // No longer documented in README, but still present for backwards compatibility. + const regex = fn; + fn = (val, def) => { + const m = regex.exec(val); + return m ? m[0] : def; + }; + } else { + defaultValue = fn; + fn = null; + } + } + + // preassign default value for --no-*, [optional], , or plain flag if boolean value + if (option.negate || option.optional || option.required || typeof defaultValue === 'boolean') { + // when --no-foo we make sure default is true, unless a --foo option is already defined + if (option.negate) { + const positiveLongFlag = option.long.replace(/^--no-/, '--'); + defaultValue = this._findOption(positiveLongFlag) ? this._getOptionValue(name) : true; + } + // preassign only if we have a default + if (defaultValue !== undefined) { + this._setOptionValue(name, defaultValue); + option.defaultValue = defaultValue; + } + } + + // register the option + this.options.push(option); + + // when it's passed assign the value + // and conditionally invoke the callback + this.on('option:' + oname, (val) => { + const oldValue = this._getOptionValue(name); + + // custom processing + if (val !== null && fn) { + val = fn(val, oldValue === undefined ? defaultValue : oldValue); + } else if (val !== null && option.variadic) { + if (oldValue === defaultValue || !Array.isArray(oldValue)) { + val = [val]; + } else { + val = oldValue.concat(val); + } + } + + // unassigned or boolean value + if (typeof oldValue === 'boolean' || typeof oldValue === 'undefined') { + // if no value, negate false, and we have a default, then use it! + if (val == null) { + this._setOptionValue(name, option.negate + ? false + : defaultValue || true); + } else { + this._setOptionValue(name, val); + } + } else if (val !== null) { + // reassign + this._setOptionValue(name, option.negate ? false : val); + } + }); + + return this; + }; + + /** + * Define option with `flags`, `description` and optional + * coercion `fn`. + * + * The `flags` string should contain both the short and long flags, + * separated by comma, a pipe or space. The following are all valid + * all will output this way when `--help` is used. + * + * "-p, --pepper" + * "-p|--pepper" + * "-p --pepper" + * + * Examples: + * + * // simple boolean defaulting to undefined + * program.option('-p, --pepper', 'add pepper'); + * + * program.pepper + * // => undefined + * + * --pepper + * program.pepper + * // => true + * + * // simple boolean defaulting to true (unless non-negated option is also defined) + * program.option('-C, --no-cheese', 'remove cheese'); + * + * program.cheese + * // => true + * + * --no-cheese + * program.cheese + * // => false + * + * // required argument + * program.option('-C, --chdir ', 'change the working directory'); + * + * --chdir /tmp + * program.chdir + * // => "/tmp" + * + * // optional argument + * program.option('-c, --cheese [type]', 'add cheese [marble]'); + * + * @param {string} flags + * @param {string} description + * @param {Function|*} [fn] - custom option processing function or default value + * @param {*} [defaultValue] + * @return {Command} `this` command for chaining + * @api public + */ + + option(flags, description, fn, defaultValue) { + return this._optionEx({}, flags, description, fn, defaultValue); + }; + + /** + * Add a required option which must have a value after parsing. This usually means + * the option must be specified on the command line. (Otherwise the same as .option().) + * + * The `flags` string should contain both the short and long flags, separated by comma, a pipe or space. + * + * @param {string} flags + * @param {string} description + * @param {Function|*} [fn] - custom option processing function or default value + * @param {*} [defaultValue] + * @return {Command} `this` command for chaining + * @api public + */ + + requiredOption(flags, description, fn, defaultValue) { + return this._optionEx({ mandatory: true }, flags, description, fn, defaultValue); + }; + + /** + * Alter parsing of short flags with optional values. + * + * Examples: + * + * // for `.option('-f,--flag [value]'): + * .combineFlagAndOptionalValue(true) // `-f80` is treated like `--flag=80`, this is the default behaviour + * .combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b` + * + * @param {Boolean} [arg] - if `true` or omitted, an optional value can be specified directly after the flag. + * @api public + */ + combineFlagAndOptionalValue(arg) { + this._combineFlagAndOptionalValue = (arg === undefined) || arg; + return this; + }; + + /** + * Allow unknown options on the command line. + * + * @param {Boolean} [arg] - if `true` or omitted, no error will be thrown + * for unknown options. + * @api public + */ + allowUnknownOption(arg) { + this._allowUnknownOption = (arg === undefined) || arg; + return this; + }; + + /** + * Whether to store option values as properties on command object, + * or store separately (specify false). In both cases the option values can be accessed using .opts(). + * + * @param {boolean} value + * @return {Command} `this` command for chaining + * @api public + */ + + storeOptionsAsProperties(value) { + this._storeOptionsAsPropertiesCalled = true; + this._storeOptionsAsProperties = (value === undefined) || value; + if (this.options.length) { + throw new Error('call .storeOptionsAsProperties() before adding options'); + } + return this; + }; + + /** + * Whether to pass command to action handler, + * or just the options (specify false). + * + * @param {boolean} value + * @return {Command} `this` command for chaining + * @api public + */ + + passCommandToAction(value) { + this._passCommandToAction = (value === undefined) || value; + return this; + }; + + /** + * Store option value + * + * @param {string} key + * @param {Object} value + * @api private + */ + + _setOptionValue(key, value) { + if (this._storeOptionsAsProperties) { + this[key] = value; + } else { + this._optionValues[key] = value; + } + }; + + /** + * Retrieve option value + * + * @param {string} key + * @return {Object} value + * @api private + */ + + _getOptionValue(key) { + if (this._storeOptionsAsProperties) { + return this[key]; + } + return this._optionValues[key]; + }; + + /** + * Parse `argv`, setting options and invoking commands when defined. + * + * The default expectation is that the arguments are from node and have the application as argv[0] + * and the script being run in argv[1], with user parameters after that. + * + * Examples: + * + * program.parse(process.argv); + * program.parse(); // implicitly use process.argv and auto-detect node vs electron conventions + * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0] + * + * @param {string[]} [argv] - optional, defaults to process.argv + * @param {Object} [parseOptions] - optionally specify style of options with from: node/user/electron + * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron' + * @return {Command} `this` command for chaining + * @api public + */ + + parse(argv, parseOptions) { + if (argv !== undefined && !Array.isArray(argv)) { + throw new Error('first parameter to parse must be array or undefined'); + } + parseOptions = parseOptions || {}; + + // Default to using process.argv + if (argv === undefined) { + argv = process.argv; + // @ts-ignore + if (process.versions && process.versions.electron) { + parseOptions.from = 'electron'; + } + } + this.rawArgs = argv.slice(); + + // make it a little easier for callers by supporting various argv conventions + let userArgs; + switch (parseOptions.from) { + case undefined: + case 'node': + this._scriptPath = argv[1]; + userArgs = argv.slice(2); + break; + case 'electron': + // @ts-ignore + if (process.defaultApp) { + this._scriptPath = argv[1]; + userArgs = argv.slice(2); + } else { + userArgs = argv.slice(1); + } + break; + case 'user': + userArgs = argv.slice(0); + break; + default: + throw new Error(`unexpected parse option { from: '${parseOptions.from}' }`); + } + if (!this._scriptPath && process.mainModule) { + this._scriptPath = process.mainModule.filename; + } + + // Guess name, used in usage in help. + this._name = this._name || (this._scriptPath && path.basename(this._scriptPath, path.extname(this._scriptPath))); + + // Let's go! + this._parseCommand([], userArgs); + + return this; + }; + + /** + * Parse `argv`, setting options and invoking commands when defined. + * + * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise. + * + * The default expectation is that the arguments are from node and have the application as argv[0] + * and the script being run in argv[1], with user parameters after that. + * + * Examples: + * + * program.parseAsync(process.argv); + * program.parseAsync(); // implicitly use process.argv and auto-detect node vs electron conventions + * program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0] + * + * @param {string[]} [argv] + * @param {Object} [parseOptions] + * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron' + * @return {Promise} + * @api public + */ + + parseAsync(argv, parseOptions) { + this.parse(argv, parseOptions); + return Promise.all(this._actionResults).then(() => this); + }; + + /** + * Execute a sub-command executable. + * + * @api private + */ + + _executeSubCommand(subcommand, args) { + args = args.slice(); + let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows. + const sourceExt = ['.js', '.ts', '.tsx', '.mjs']; + + // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command. + this._checkForMissingMandatoryOptions(); + + // Want the entry script as the reference for command name and directory for searching for other files. + let scriptPath = this._scriptPath; + // Fallback in case not set, due to how Command created or called. + if (!scriptPath && process.mainModule) { + scriptPath = process.mainModule.filename; + } + + let baseDir; + try { + const resolvedLink = fs.realpathSync(scriptPath); + baseDir = path.dirname(resolvedLink); + } catch (e) { + baseDir = '.'; // dummy, probably not going to find executable! + } + + // name of the subcommand, like `pm-install` + let bin = path.basename(scriptPath, path.extname(scriptPath)) + '-' + subcommand._name; + if (subcommand._executableFile) { + bin = subcommand._executableFile; + } + + const localBin = path.join(baseDir, bin); + if (fs.existsSync(localBin)) { + // prefer local `./` to bin in the $PATH + bin = localBin; + } else { + // Look for source files. + sourceExt.forEach((ext) => { + if (fs.existsSync(`${localBin}${ext}`)) { + bin = `${localBin}${ext}`; + } + }); + } + launchWithNode = sourceExt.includes(path.extname(bin)); + + let proc; + if (process.platform !== 'win32') { + if (launchWithNode) { + args.unshift(bin); + // add executable arguments to spawn + args = incrementNodeInspectorPort(process.execArgv).concat(args); + + proc = spawn(process.argv[0], args, { stdio: 'inherit' }); + } else { + proc = spawn(bin, args, { stdio: 'inherit' }); + } + } else { + args.unshift(bin); + // add executable arguments to spawn + args = incrementNodeInspectorPort(process.execArgv).concat(args); + proc = spawn(process.execPath, args, { stdio: 'inherit' }); + } + + const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP']; + signals.forEach((signal) => { + // @ts-ignore + process.on(signal, () => { + if (proc.killed === false && proc.exitCode === null) { + proc.kill(signal); + } + }); + }); + + // By default terminate process when spawned process terminates. + // Suppressing the exit if exitCallback defined is a bit messy and of limited use, but does allow process to stay running! + const exitCallback = this._exitCallback; + if (!exitCallback) { + proc.on('close', process.exit.bind(process)); + } else { + proc.on('close', () => { + exitCallback(new CommanderError(process.exitCode || 0, 'commander.executeSubCommandAsync', '(close)')); + }); + } + proc.on('error', (err) => { + // @ts-ignore + if (err.code === 'ENOENT') { + const executableMissing = `'${bin}' does not exist + - if '${subcommand._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead + - if the default executable name is not suitable, use the executableFile option to supply a custom name`; + throw new Error(executableMissing); + // @ts-ignore + } else if (err.code === 'EACCES') { + throw new Error(`'${bin}' not executable`); + } + if (!exitCallback) { + process.exit(1); + } else { + const wrappedError = new CommanderError(1, 'commander.executeSubCommandAsync', '(error)'); + wrappedError.nestedError = err; + exitCallback(wrappedError); + } + }); + + // Store the reference to the child process + this.runningCommand = proc; + }; + + /** + * @api private + */ + _dispatchSubcommand(commandName, operands, unknown) { + const subCommand = this._findCommand(commandName); + if (!subCommand) this._helpAndError(); + + if (subCommand._executableHandler) { + this._executeSubCommand(subCommand, operands.concat(unknown)); + } else { + subCommand._parseCommand(operands, unknown); + } + }; + + /** + * Process arguments in context of this command. + * + * @api private + */ + + _parseCommand(operands, unknown) { + const parsed = this.parseOptions(unknown); + operands = operands.concat(parsed.operands); + unknown = parsed.unknown; + this.args = operands.concat(unknown); + + if (operands && this._findCommand(operands[0])) { + this._dispatchSubcommand(operands[0], operands.slice(1), unknown); + } else if (this._lazyHasImplicitHelpCommand() && operands[0] === this._helpCommandName) { + if (operands.length === 1) { + this.help(); + } else { + this._dispatchSubcommand(operands[1], [], [this._helpLongFlag]); + } + } else if (this._defaultCommandName) { + outputHelpIfRequested(this, unknown); // Run the help for default command from parent rather than passing to default command + this._dispatchSubcommand(this._defaultCommandName, operands, unknown); + } else { + if (this.commands.length && this.args.length === 0 && !this._actionHandler && !this._defaultCommandName) { + // probably missing subcommand and no handler, user needs help + this._helpAndError(); + } + + outputHelpIfRequested(this, parsed.unknown); + this._checkForMissingMandatoryOptions(); + if (parsed.unknown.length > 0) { + this.unknownOption(parsed.unknown[0]); + } + + if (this._actionHandler) { + const args = this.args.slice(); + this._args.forEach((arg, i) => { + if (arg.required && args[i] == null) { + this.missingArgument(arg.name); + } else if (arg.variadic) { + args[i] = args.splice(i); + } + }); + + this._actionHandler(args); + this.emit('command:' + this.name(), operands, unknown); + } else if (operands.length) { + if (this._findCommand('*')) { + this._dispatchSubcommand('*', operands, unknown); + } else if (this.listenerCount('command:*')) { + this.emit('command:*', operands, unknown); + } else if (this.commands.length) { + this.unknownCommand(); + } + } else if (this.commands.length) { + // This command has subcommands and nothing hooked up at this level, so display help. + this._helpAndError(); + } else { + // fall through for caller to handle after calling .parse() + } + } + }; + + /** + * Find matching command. + * + * @api private + */ + _findCommand(name) { + if (!name) return undefined; + return this.commands.find(cmd => cmd._name === name || cmd._aliases.includes(name)); + }; + + /** + * Return an option matching `arg` if any. + * + * @param {string} arg + * @return {Option} + * @api private + */ + + _findOption(arg) { + return this.options.find(option => option.is(arg)); + }; + + /** + * Display an error message if a mandatory option does not have a value. + * Lazy calling after checking for help flags from leaf subcommand. + * + * @api private + */ + + _checkForMissingMandatoryOptions() { + // Walk up hierarchy so can call in subcommand after checking for displaying help. + for (let cmd = this; cmd; cmd = cmd.parent) { + cmd.options.forEach((anOption) => { + if (anOption.mandatory && (cmd._getOptionValue(anOption.attributeName()) === undefined)) { + cmd.missingMandatoryOptionValue(anOption); + } + }); + } + }; + + /** + * Parse options from `argv` removing known options, + * and return argv split into operands and unknown arguments. + * + * Examples: + * + * argv => operands, unknown + * --known kkk op => [op], [] + * op --known kkk => [op], [] + * sub --unknown uuu op => [sub], [--unknown uuu op] + * sub -- --unknown uuu op => [sub --unknown uuu op], [] + * + * @param {String[]} argv + * @return {{operands: String[], unknown: String[]}} + * @api public + */ + + parseOptions(argv) { + const operands = []; // operands, not options or values + const unknown = []; // first unknown option and remaining unknown args + let dest = operands; + const args = argv.slice(); + + function maybeOption(arg) { + return arg.length > 1 && arg[0] === '-'; + } + + // parse options + let activeVariadicOption = null; + while (args.length) { + const arg = args.shift(); + + // literal + if (arg === '--') { + if (dest === unknown) dest.push(arg); + dest.push(...args); + break; + } + + if (activeVariadicOption && !maybeOption(arg)) { + this.emit(`option:${activeVariadicOption.name()}`, arg); + continue; + } + activeVariadicOption = null; + + if (maybeOption(arg)) { + const option = this._findOption(arg); + // recognised option, call listener to assign value with possible custom processing + if (option) { + if (option.required) { + const value = args.shift(); + if (value === undefined) this.optionMissingArgument(option); + this.emit(`option:${option.name()}`, value); + } else if (option.optional) { + let value = null; + // historical behaviour is optional value is following arg unless an option + if (args.length > 0 && !maybeOption(args[0])) { + value = args.shift(); + } + this.emit(`option:${option.name()}`, value); + } else { // boolean flag + this.emit(`option:${option.name()}`); + } + activeVariadicOption = option.variadic ? option : null; + continue; + } + } + + // Look for combo options following single dash, eat first one if known. + if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') { + const option = this._findOption(`-${arg[1]}`); + if (option) { + if (option.required || (option.optional && this._combineFlagAndOptionalValue)) { + // option with value following in same argument + this.emit(`option:${option.name()}`, arg.slice(2)); + } else { + // boolean option, emit and put back remainder of arg for further processing + this.emit(`option:${option.name()}`); + args.unshift(`-${arg.slice(2)}`); + } + continue; + } + } + + // Look for known long flag with value, like --foo=bar + if (/^--[^=]+=/.test(arg)) { + const index = arg.indexOf('='); + const option = this._findOption(arg.slice(0, index)); + if (option && (option.required || option.optional)) { + this.emit(`option:${option.name()}`, arg.slice(index + 1)); + continue; + } + } + + // looks like an option but unknown, unknowns from here + if (arg.length > 1 && arg[0] === '-') { + dest = unknown; + } + + // add arg + dest.push(arg); + } + + return { operands, unknown }; + }; + + /** + * Return an object containing options as key-value pairs + * + * @return {Object} + * @api public + */ + opts() { + if (this._storeOptionsAsProperties) { + // Preserve original behaviour so backwards compatible when still using properties + const result = {}; + const len = this.options.length; + + for (let i = 0; i < len; i++) { + const key = this.options[i].attributeName(); + result[key] = key === this._versionOptionName ? this._version : this[key]; + } + return result; + } + + return this._optionValues; + }; + + /** + * Argument `name` is missing. + * + * @param {string} name + * @api private + */ + + missingArgument(name) { + const message = `error: missing required argument '${name}'`; + console.error(message); + this._exit(1, 'commander.missingArgument', message); + }; + + /** + * `Option` is missing an argument, but received `flag` or nothing. + * + * @param {Option} option + * @param {string} [flag] + * @api private + */ + + optionMissingArgument(option, flag) { + let message; + if (flag) { + message = `error: option '${option.flags}' argument missing, got '${flag}'`; + } else { + message = `error: option '${option.flags}' argument missing`; + } + console.error(message); + this._exit(1, 'commander.optionMissingArgument', message); + }; + + /** + * `Option` does not have a value, and is a mandatory option. + * + * @param {Option} option + * @api private + */ + + missingMandatoryOptionValue(option) { + const message = `error: required option '${option.flags}' not specified`; + console.error(message); + this._exit(1, 'commander.missingMandatoryOptionValue', message); + }; + + /** + * Unknown option `flag`. + * + * @param {string} flag + * @api private + */ + + unknownOption(flag) { + if (this._allowUnknownOption) return; + const message = `error: unknown option '${flag}'`; + console.error(message); + this._exit(1, 'commander.unknownOption', message); + }; + + /** + * Unknown command. + * + * @api private + */ + + unknownCommand() { + const partCommands = [this.name()]; + for (let parentCmd = this.parent; parentCmd; parentCmd = parentCmd.parent) { + partCommands.unshift(parentCmd.name()); + } + const fullCommand = partCommands.join(' '); + const message = `error: unknown command '${this.args[0]}'.` + + (this._hasHelpOption ? ` See '${fullCommand} ${this._helpLongFlag}'.` : ''); + console.error(message); + this._exit(1, 'commander.unknownCommand', message); + }; + + /** + * Set the program version to `str`. + * + * This method auto-registers the "-V, --version" flag + * which will print the version number when passed. + * + * You can optionally supply the flags and description to override the defaults. + * + * @param {string} str + * @param {string} [flags] + * @param {string} [description] + * @return {this | string} `this` command for chaining, or version string if no arguments + * @api public + */ + + version(str, flags, description) { + if (str === undefined) return this._version; + this._version = str; + flags = flags || '-V, --version'; + description = description || 'output the version number'; + const versionOption = new Option(flags, description); + this._versionOptionName = versionOption.attributeName(); + this.options.push(versionOption); + this.on('option:' + versionOption.name(), () => { + process.stdout.write(str + '\n'); + this._exit(0, 'commander.version', str); + }); + return this; + }; + + /** + * Set the description to `str`. + * + * @param {string} str + * @param {Object} [argsDescription] + * @return {string|Command} + * @api public + */ + + description(str, argsDescription) { + if (str === undefined && argsDescription === undefined) return this._description; + this._description = str; + this._argsDescription = argsDescription; + return this; + }; + + /** + * Set an alias for the command. + * + * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help. + * + * @param {string} [alias] + * @return {string|Command} + * @api public + */ + + alias(alias) { + if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility + + let command = this; + if (this.commands.length !== 0 && this.commands[this.commands.length - 1]._executableHandler) { + // assume adding alias for last added executable subcommand, rather than this + command = this.commands[this.commands.length - 1]; + } + + if (alias === command._name) throw new Error('Command alias can\'t be the same as its name'); + + command._aliases.push(alias); + return this; + }; + + /** + * Set aliases for the command. + * + * Only the first alias is shown in the auto-generated help. + * + * @param {string[]} [aliases] + * @return {string[]|Command} + * @api public + */ + + aliases(aliases) { + // Getter for the array of aliases is the main reason for having aliases() in addition to alias(). + if (aliases === undefined) return this._aliases; + + aliases.forEach((alias) => this.alias(alias)); + return this; + }; + + /** + * Set / get the command usage `str`. + * + * @param {string} [str] + * @return {String|Command} + * @api public + */ + + usage(str) { + if (str === undefined) { + if (this._usage) return this._usage; + + const args = this._args.map((arg) => { + return humanReadableArgName(arg); + }); + return [].concat( + (this.options.length || this._hasHelpOption ? '[options]' : []), + (this.commands.length ? '[command]' : []), + (this._args.length ? args : []) + ).join(' '); + } + + this._usage = str; + return this; + }; + + /** + * Get or set the name of the command + * + * @param {string} [str] + * @return {String|Command} + * @api public + */ + + name(str) { + if (str === undefined) return this._name; + this._name = str; + return this; + }; + + /** + * Return prepared commands. + * + * @return {Array} + * @api private + */ + + prepareCommands() { + const commandDetails = this.commands.filter((cmd) => { + return !cmd._hidden; + }).map((cmd) => { + const args = cmd._args.map((arg) => { + return humanReadableArgName(arg); + }).join(' '); + + return [ + cmd._name + + (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') + + (cmd.options.length ? ' [options]' : '') + + (args ? ' ' + args : ''), + cmd._description + ]; + }); + + if (this._lazyHasImplicitHelpCommand()) { + commandDetails.push([this._helpCommandnameAndArgs, this._helpCommandDescription]); + } + return commandDetails; + }; + + /** + * Return the largest command length. + * + * @return {number} + * @api private + */ + + largestCommandLength() { + const commands = this.prepareCommands(); + return commands.reduce((max, command) => { + return Math.max(max, command[0].length); + }, 0); + }; + + /** + * Return the largest option length. + * + * @return {number} + * @api private + */ + + largestOptionLength() { + const options = [].slice.call(this.options); + options.push({ + flags: this._helpFlags + }); + + return options.reduce((max, option) => { + return Math.max(max, option.flags.length); + }, 0); + }; + + /** + * Return the largest arg length. + * + * @return {number} + * @api private + */ + + largestArgLength() { + return this._args.reduce((max, arg) => { + return Math.max(max, arg.name.length); + }, 0); + }; + + /** + * Return the pad width. + * + * @return {number} + * @api private + */ + + padWidth() { + let width = this.largestOptionLength(); + if (this._argsDescription && this._args.length) { + if (this.largestArgLength() > width) { + width = this.largestArgLength(); + } + } + + if (this.commands && this.commands.length) { + if (this.largestCommandLength() > width) { + width = this.largestCommandLength(); + } + } + + return width; + }; + + /** + * Return help for options. + * + * @return {string} + * @api private + */ + + optionHelp() { + const width = this.padWidth(); + const columns = process.stdout.columns || 80; + const descriptionWidth = columns - width - 4; + function padOptionDetails(flags, description) { + return pad(flags, width) + ' ' + optionalWrap(description, descriptionWidth, width + 2); + }; + + // Explicit options (including version) + const help = this.options.map((option) => { + const fullDesc = option.description + + ((!option.negate && option.defaultValue !== undefined) ? ' (default: ' + JSON.stringify(option.defaultValue) + ')' : ''); + return padOptionDetails(option.flags, fullDesc); + }); + + // Implicit help + const showShortHelpFlag = this._hasHelpOption && this._helpShortFlag && !this._findOption(this._helpShortFlag); + const showLongHelpFlag = this._hasHelpOption && !this._findOption(this._helpLongFlag); + if (showShortHelpFlag || showLongHelpFlag) { + let helpFlags = this._helpFlags; + if (!showShortHelpFlag) { + helpFlags = this._helpLongFlag; + } else if (!showLongHelpFlag) { + helpFlags = this._helpShortFlag; + } + help.push(padOptionDetails(helpFlags, this._helpDescription)); + } + + return help.join('\n'); + }; + + /** + * Return command help documentation. + * + * @return {string} + * @api private + */ + + commandHelp() { + if (!this.commands.length && !this._lazyHasImplicitHelpCommand()) return ''; + + const commands = this.prepareCommands(); + const width = this.padWidth(); + + const columns = process.stdout.columns || 80; + const descriptionWidth = columns - width - 4; + + return [ + 'Commands:', + commands.map((cmd) => { + const desc = cmd[1] ? ' ' + cmd[1] : ''; + return (desc ? pad(cmd[0], width) : cmd[0]) + optionalWrap(desc, descriptionWidth, width + 2); + }).join('\n').replace(/^/gm, ' '), + '' + ].join('\n'); + }; + + /** + * Return program help documentation. + * + * @return {string} + * @api public + */ + + helpInformation() { + let desc = []; + if (this._description) { + desc = [ + this._description, + '' + ]; + + const argsDescription = this._argsDescription; + if (argsDescription && this._args.length) { + const width = this.padWidth(); + const columns = process.stdout.columns || 80; + const descriptionWidth = columns - width - 5; + desc.push('Arguments:'); + this._args.forEach((arg) => { + desc.push(' ' + pad(arg.name, width) + ' ' + wrap(argsDescription[arg.name] || '', descriptionWidth, width + 4)); + }); + desc.push(''); + } + } + + let cmdName = this._name; + if (this._aliases[0]) { + cmdName = cmdName + '|' + this._aliases[0]; + } + let parentCmdNames = ''; + for (let parentCmd = this.parent; parentCmd; parentCmd = parentCmd.parent) { + parentCmdNames = parentCmd.name() + ' ' + parentCmdNames; + } + const usage = [ + 'Usage: ' + parentCmdNames + cmdName + ' ' + this.usage(), + '' + ]; + + let cmds = []; + const commandHelp = this.commandHelp(); + if (commandHelp) cmds = [commandHelp]; + + let options = []; + if (this._hasHelpOption || this.options.length > 0) { + options = [ + 'Options:', + '' + this.optionHelp().replace(/^/gm, ' '), + '' + ]; + } + + return usage + .concat(desc) + .concat(options) + .concat(cmds) + .join('\n'); + }; + + /** + * Output help information for this command. + * + * When listener(s) are available for the helpLongFlag + * those callbacks are invoked. + * + * @api public + */ + + outputHelp(cb) { + if (!cb) { + cb = (passthru) => { + return passthru; + }; + } + const cbOutput = cb(this.helpInformation()); + if (typeof cbOutput !== 'string' && !Buffer.isBuffer(cbOutput)) { + throw new Error('outputHelp callback must return a string or a Buffer'); + } + process.stdout.write(cbOutput); + this.emit(this._helpLongFlag); + }; + + /** + * You can pass in flags and a description to override the help + * flags and help description for your command. Pass in false to + * disable the built-in help option. + * + * @param {string | boolean} [flags] + * @param {string} [description] + * @return {Command} `this` command for chaining + * @api public + */ + + helpOption(flags, description) { + if (typeof flags === 'boolean') { + this._hasHelpOption = flags; + return this; + } + this._helpFlags = flags || this._helpFlags; + this._helpDescription = description || this._helpDescription; + + const helpFlags = _parseOptionFlags(this._helpFlags); + this._helpShortFlag = helpFlags.shortFlag; + this._helpLongFlag = helpFlags.longFlag; + + return this; + }; + + /** + * Output help information and exit. + * + * @param {Function} [cb] + * @api public + */ + + help(cb) { + this.outputHelp(cb); + // exitCode: preserving original behaviour which was calling process.exit() + // message: do not have all displayed text available so only passing placeholder. + this._exit(process.exitCode || 0, 'commander.help', '(outputHelp)'); + }; + + /** + * Output help information and exit. Display for error situations. + * + * @api private + */ + + _helpAndError() { + this.outputHelp(); + // message: do not have all displayed text available so only passing placeholder. + this._exit(1, 'commander.help', '(outputHelp)'); + }; +}; + +/** + * Expose the root command. + */ + +exports = module.exports = new Command(); +exports.program = exports; // More explicit access to global command. + +/** + * Expose classes + */ + +exports.Command = Command; +exports.Option = Option; +exports.CommanderError = CommanderError; + +/** + * Camel-case the given `flag` + * + * @param {string} flag + * @return {string} + * @api private + */ + +function camelcase(flag) { + return flag.split('-').reduce((str, word) => { + return str + word[0].toUpperCase() + word.slice(1); + }); +} + +/** + * Pad `str` to `width`. + * + * @param {string} str + * @param {number} width + * @return {string} + * @api private + */ + +function pad(str, width) { + const len = Math.max(0, width - str.length); + return str + Array(len + 1).join(' '); +} + +/** + * Wraps the given string with line breaks at the specified width while breaking + * words and indenting every but the first line on the left. + * + * @param {string} str + * @param {number} width + * @param {number} indent + * @return {string} + * @api private + */ +function wrap(str, width, indent) { + const regex = new RegExp('.{1,' + (width - 1) + '}([\\s\u200B]|$)|[^\\s\u200B]+?([\\s\u200B]|$)', 'g'); + const lines = str.match(regex) || []; + return lines.map((line, i) => { + if (line.slice(-1) === '\n') { + line = line.slice(0, line.length - 1); + } + return ((i > 0 && indent) ? Array(indent + 1).join(' ') : '') + line.trimRight(); + }).join('\n'); +} + +/** + * Optionally wrap the given str to a max width of width characters per line + * while indenting with indent spaces. Do not wrap if insufficient width or + * string is manually formatted. + * + * @param {string} str + * @param {number} width + * @param {number} indent + * @return {string} + * @api private + */ +function optionalWrap(str, width, indent) { + // Detect manually wrapped and indented strings by searching for line breaks + // followed by multiple spaces/tabs. + if (str.match(/[\n]\s+/)) return str; + // Do not wrap to narrow columns (or can end up with a word per line). + const minWidth = 40; + if (width < minWidth) return str; + + return wrap(str, width, indent); +} + +/** + * Output help information if help flags specified + * + * @param {Command} cmd - command to output help for + * @param {Array} args - array of options to search for help flags + * @api private + */ + +function outputHelpIfRequested(cmd, args) { + const helpOption = cmd._hasHelpOption && args.find(arg => arg === cmd._helpLongFlag || arg === cmd._helpShortFlag); + if (helpOption) { + cmd.outputHelp(); + // (Do not have all displayed text available so only passing placeholder.) + cmd._exit(0, 'commander.helpDisplayed', '(outputHelp)'); + } +} + +/** + * Takes an argument and returns its human readable equivalent for help usage. + * + * @param {Object} arg + * @return {string} + * @api private + */ + +function humanReadableArgName(arg) { + const nameOutput = arg.name + (arg.variadic === true ? '...' : ''); + + return arg.required + ? '<' + nameOutput + '>' + : '[' + nameOutput + ']'; +} + +/** + * Parse the short and long flag out of something like '-m,--mixed ' + * + * @api private + */ + +function _parseOptionFlags(flags) { + let shortFlag; + let longFlag; + // Use original very loose parsing to maintain backwards compatibility for now, + // which allowed for example unintended `-sw, --short-word` [sic]. + const flagParts = flags.split(/[ |,]+/); + if (flagParts.length > 1 && !/^[[<]/.test(flagParts[1])) shortFlag = flagParts.shift(); + longFlag = flagParts.shift(); + // Add support for lone short flag without significantly changing parsing! + if (!shortFlag && /^-[^-]$/.test(longFlag)) { + shortFlag = longFlag; + longFlag = undefined; + } + return { shortFlag, longFlag }; +} + +/** + * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command). + * + * @param {string[]} args - array of arguments from node.execArgv + * @returns {string[]} + * @api private + */ + +function incrementNodeInspectorPort(args) { + // Testing for these options: + // --inspect[=[host:]port] + // --inspect-brk[=[host:]port] + // --inspect-port=[host:]port + return args.map((arg) => { + if (!arg.startsWith('--inspect')) { + return arg; + } + let debugOption; + let debugHost = '127.0.0.1'; + let debugPort = '9229'; + let match; + if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) { + // e.g. --inspect + debugOption = match[1]; + } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null) { + debugOption = match[1]; + if (/^\d+$/.test(match[3])) { + // e.g. --inspect=1234 + debugPort = match[3]; + } else { + // e.g. --inspect=localhost + debugHost = match[3]; + } + } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/)) !== null) { + // e.g. --inspect=localhost:1234 + debugOption = match[1]; + debugHost = match[3]; + debugPort = match[4]; + } + + if (debugOption && debugPort !== '0') { + return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`; + } + return arg; + }); +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/package.json new file mode 100644 index 00000000..659e4b56 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/commander/package.json @@ -0,0 +1,86 @@ +{ + "_args": [ + [ + "commander@6.2.1", + "/tmp/repository/main" + ] + ], + "_from": "commander@6.2.1", + "_id": "commander@6.2.1", + "_inBundle": false, + "_integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "_location": "/commander", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "commander@6.2.1", + "name": "commander", + "escapedName": "commander", + "rawSpec": "6.2.1", + "saveSpec": null, + "fetchSpec": "6.2.1" + }, + "_requiredBy": [ + "/playwright" + ], + "_resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "_spec": "6.2.1", + "_where": "/tmp/repository/main", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "bugs": { + "url": "https://github.com/tj/commander.js/issues" + }, + "dependencies": {}, + "description": "the complete solution for node.js command-line programs", + "devDependencies": { + "@types/jest": "^26.0.15", + "@types/node": "^14.14.2", + "@typescript-eslint/eslint-plugin": "^4.5.0", + "eslint": "^7.11.0", + "eslint-config-standard-with-typescript": "^19.0.1", + "eslint-plugin-jest": "^24.1.0", + "jest": "^26.6.0", + "standard": "^15.0.0", + "typescript": "^4.0.3" + }, + "engines": { + "node": ">= 6" + }, + "files": [ + "index.js", + "typings/index.d.ts" + ], + "homepage": "https://github.com/tj/commander.js#readme", + "jest": { + "collectCoverage": true + }, + "keywords": [ + "commander", + "command", + "option", + "parser", + "cli", + "argument", + "args", + "argv" + ], + "license": "MIT", + "main": "index", + "name": "commander", + "repository": { + "type": "git", + "url": "git+https://github.com/tj/commander.js.git" + }, + "scripts": { + "lint": "eslint index.js \"tests/**/*.js\"", + "test": "jest && npm run test-typings", + "test-typings": "tsc -p tsconfig.json", + "typescript-lint": "eslint typings/*.ts" + }, + "typings": "typings/index.d.ts", + "version": "6.2.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/.travis.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/.travis.yml new file mode 100644 index 00000000..f1d0f13c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.4 + - 0.6 diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/LICENSE new file mode 100644 index 00000000..ee27ba4b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/LICENSE @@ -0,0 +1,18 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/README.markdown b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/README.markdown new file mode 100644 index 00000000..408f70a1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/README.markdown @@ -0,0 +1,62 @@ +concat-map +========== + +Concatenative mapdashery. + +[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map) + +[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map) + +example +======= + +``` js +var concatMap = require('concat-map'); +var xs = [ 1, 2, 3, 4, 5, 6 ]; +var ys = concatMap(xs, function (x) { + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; +}); +console.dir(ys); +``` + +*** + +``` +[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ] +``` + +methods +======= + +``` js +var concatMap = require('concat-map') +``` + +concatMap(xs, fn) +----------------- + +Return an array of concatenated elements by calling `fn(x, i)` for each element +`x` and each index `i` in the array `xs`. + +When `fn(x, i)` returns an array, its result will be concatenated with the +result array. If `fn(x, i)` returns anything else, that value will be pushed +onto the end of the result array. + +install +======= + +With [npm](http://npmjs.org) do: + +``` +npm install concat-map +``` + +license +======= + +MIT + +notes +===== + +This module was written while sitting high above the ground in a tree. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/example/map.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/example/map.js new file mode 100644 index 00000000..33656217 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/example/map.js @@ -0,0 +1,6 @@ +var concatMap = require('../'); +var xs = [ 1, 2, 3, 4, 5, 6 ]; +var ys = concatMap(xs, function (x) { + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; +}); +console.dir(ys); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/index.js new file mode 100644 index 00000000..b29a7812 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/index.js @@ -0,0 +1,13 @@ +module.exports = function (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + var x = fn(xs[i], i); + if (isArray(x)) res.push.apply(res, x); + else res.push(x); + } + return res; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/package.json new file mode 100644 index 00000000..cd66d20a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/package.json @@ -0,0 +1,91 @@ +{ + "_args": [ + [ + "concat-map@0.0.1", + "/tmp/repository/main" + ] + ], + "_from": "concat-map@0.0.1", + "_id": "concat-map@0.0.1", + "_inBundle": false, + "_integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "_location": "/concat-map", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "concat-map@0.0.1", + "name": "concat-map", + "escapedName": "concat-map", + "rawSpec": "0.0.1", + "saveSpec": null, + "fetchSpec": "0.0.1" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "_spec": "0.0.1", + "_where": "/tmp/repository/main", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/node-concat-map/issues" + }, + "description": "concatenative mapdashery", + "devDependencies": { + "tape": "~2.4.0" + }, + "directories": { + "example": "example", + "test": "test" + }, + "homepage": "https://github.com/substack/node-concat-map#readme", + "keywords": [ + "concat", + "concatMap", + "map", + "functional", + "higher-order" + ], + "license": "MIT", + "main": "index.js", + "name": "concat-map", + "repository": { + "type": "git", + "url": "git://github.com/substack/node-concat-map.git" + }, + "scripts": { + "test": "tape test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": { + "ie": [ + 6, + 7, + 8, + 9 + ], + "ff": [ + 3.5, + 10, + 15 + ], + "chrome": [ + 10, + 22 + ], + "safari": [ + 5.1 + ], + "opera": [ + 12 + ] + } + }, + "version": "0.0.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/test/map.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/test/map.js new file mode 100644 index 00000000..fdbd7022 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/concat-map/test/map.js @@ -0,0 +1,39 @@ +var concatMap = require('../'); +var test = require('tape'); + +test('empty or not', function (t) { + var xs = [ 1, 2, 3, 4, 5, 6 ]; + var ixes = []; + var ys = concatMap(xs, function (x, ix) { + ixes.push(ix); + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; + }); + t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]); + t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]); + t.end(); +}); + +test('always something', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ]; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('scalars', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : x; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('undefs', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function () {}); + t.same(ys, [ undefined, undefined, undefined, undefined ]); + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/HISTORY.md new file mode 100644 index 00000000..63a3d08c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/HISTORY.md @@ -0,0 +1,55 @@ +0.5.3 / 2018-12-17 +================== + + * Use `safe-buffer` for improved Buffer API + +0.5.2 / 2016-12-08 +================== + + * Fix `parse` to accept any linear whitespace character + +0.5.1 / 2016-01-17 +================== + + * perf: enable strict mode + +0.5.0 / 2014-10-11 +================== + + * Add `parse` function + +0.4.0 / 2014-09-21 +================== + + * Expand non-Unicode `filename` to the full ISO-8859-1 charset + +0.3.0 / 2014-09-20 +================== + + * Add `fallback` option + * Add `type` option + +0.2.0 / 2014-09-19 +================== + + * Reduce ambiguity of file names with hex escape in buggy browsers + +0.1.2 / 2014-09-19 +================== + + * Fix periodic invalid Unicode filename header + +0.1.1 / 2014-09-19 +================== + + * Fix invalid characters appearing in `filename*` parameter + +0.1.0 / 2014-09-18 +================== + + * Make the `filename` argument optional + +0.0.0 / 2014-09-18 +================== + + * Initial release diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/LICENSE new file mode 100644 index 00000000..84441fbb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/LICENSE @@ -0,0 +1,22 @@ +(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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/README.md new file mode 100644 index 00000000..eebef13d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/README.md @@ -0,0 +1,148 @@ +# content-disposition + +[![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 and parse HTTP `Content-Disposition` header + +## Installation + +```sh +$ npm install content-disposition +``` + +## API + + + +```js +var contentDisposition = require('content-disposition') +``` + +### contentDisposition(filename, options) + +Create an attachment `Content-Disposition` header value using the given file name, +if supplied. The `filename` is optional and if no file name is desired, but you +want to specify `options`, set `filename` to `undefined`. + + + +```js +res.setHeader('Content-Disposition', contentDisposition('∫ maths.pdf')) +``` + +**note** HTTP headers are of the ISO-8859-1 character set. If you are writing this +header through a means different from `setHeader` in Node.js, you'll want to specify +the `'binary'` encoding in Node.js. + +#### Options + +`contentDisposition` accepts these properties in the options object. + +##### fallback + +If the `filename` option is outside ISO-8859-1, then the file name is actually +stored in a supplemental field for clients that support Unicode file names and +a ISO-8859-1 version of the file name is automatically generated. + +This specifies the ISO-8859-1 file name to override the automatic generation or +disables the generation all together, defaults to `true`. + + - A string will specify the ISO-8859-1 file name to use in place of automatic + generation. + - `false` will disable including a ISO-8859-1 file name and only include the + Unicode version (unless the file name is already ISO-8859-1). + - `true` will enable automatic generation if the file name is outside ISO-8859-1. + +If the `filename` option is ISO-8859-1 and this option is specified and has a +different value, then the `filename` option is encoded in the extended field +and this set as the fallback field, even though they are both ISO-8859-1. + +##### type + +Specifies the disposition type, defaults to `"attachment"`. This can also be +`"inline"`, or any other value (all values except inline are treated like +`attachment`, but can convey additional information if both parties agree to +it). The type is normalized to lower-case. + +### contentDisposition.parse(string) + + + +```js +var disposition = contentDisposition.parse('attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt') +``` + +Parse a `Content-Disposition` header string. This automatically handles extended +("Unicode") parameters by decoding them and providing them under the standard +parameter name. This will return an object with the following properties (examples +are shown for the string `'attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt'`): + + - `type`: The disposition type (always lower case). Example: `'attachment'` + + - `parameters`: An object of the parameters in the disposition (name of parameter + always lower case and extended versions replace non-extended versions). Example: + `{filename: "€ rates.txt"}` + +## Examples + +### Send a file for download + +```js +var contentDisposition = require('content-disposition') +var destroy = require('destroy') +var fs = require('fs') +var http = require('http') +var onFinished = require('on-finished') + +var filePath = '/path/to/public/plans.pdf' + +http.createServer(function onRequest (req, res) { + // set headers + res.setHeader('Content-Type', 'application/pdf') + res.setHeader('Content-Disposition', contentDisposition(filePath)) + + // send file + var stream = fs.createReadStream(filePath) + stream.pipe(res) + onFinished(res, function () { + destroy(stream) + }) +}) +``` + +## Testing + +```sh +$ npm test +``` + +## References + +- [RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1][rfc-2616] +- [RFC 5987: Character Set and Language Encoding for Hypertext Transfer Protocol (HTTP) Header Field Parameters][rfc-5987] +- [RFC 6266: Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)][rfc-6266] +- [Test Cases for HTTP Content-Disposition header field (RFC 6266) and the Encodings defined in RFCs 2047, 2231 and 5987][tc-2231] + +[rfc-2616]: https://tools.ietf.org/html/rfc2616 +[rfc-5987]: https://tools.ietf.org/html/rfc5987 +[rfc-6266]: https://tools.ietf.org/html/rfc6266 +[tc-2231]: http://greenbytes.de/tech/tc2231/ + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/content-disposition.svg +[npm-url]: https://npmjs.org/package/content-disposition +[node-version-image]: https://img.shields.io/node/v/content-disposition.svg +[node-version-url]: https://nodejs.org/en/download +[travis-image]: https://img.shields.io/travis/jshttp/content-disposition.svg +[travis-url]: https://travis-ci.org/jshttp/content-disposition +[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-disposition.svg +[coveralls-url]: https://coveralls.io/r/jshttp/content-disposition?branch=master +[downloads-image]: https://img.shields.io/npm/dm/content-disposition.svg +[downloads-url]: https://npmjs.org/package/content-disposition diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/index.js new file mode 100644 index 00000000..3092a4dc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/index.js @@ -0,0 +1,458 @@ +/*! + * content-disposition + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + * @public + */ + +module.exports = contentDisposition +module.exports.parse = parse + +/** + * Module dependencies. + * @private + */ + +var basename = require('path').basename +var Buffer = require('safe-buffer').Buffer + +/** + * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including "%") + * @private + */ + +var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g // eslint-disable-line no-control-regex + +/** + * RegExp to match percent encoding escape. + * @private + */ + +var HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/ +var HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g + +/** + * RegExp to match non-latin1 characters. + * @private + */ + +var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g + +/** + * RegExp to match quoted-pair in RFC 2616 + * + * quoted-pair = "\" CHAR + * CHAR = + * @private + */ + +var QESC_REGEXP = /\\([\u0000-\u007f])/g // eslint-disable-line no-control-regex + +/** + * RegExp to match chars that must be quoted-pair in RFC 2616 + * @private + */ + +var QUOTE_REGEXP = /([\\"])/g + +/** + * RegExp for various RFC 2616 grammar + * + * parameter = token "=" ( token | quoted-string ) + * token = 1* + * separators = "(" | ")" | "<" | ">" | "@" + * | "," | ";" | ":" | "\" | <"> + * | "/" | "[" | "]" | "?" | "=" + * | "{" | "}" | SP | HT + * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) + * qdtext = > + * quoted-pair = "\" CHAR + * CHAR = + * TEXT = + * LWS = [CRLF] 1*( SP | HT ) + * CRLF = CR LF + * CR = + * LF = + * SP = + * HT = + * CTL = + * OCTET = + * @private + */ + +var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g // eslint-disable-line no-control-regex +var TEXT_REGEXP = /^[\x20-\x7e\x80-\xff]+$/ +var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/ + +/** + * RegExp for various RFC 5987 grammar + * + * ext-value = charset "'" [ language ] "'" value-chars + * charset = "UTF-8" / "ISO-8859-1" / mime-charset + * mime-charset = 1*mime-charsetc + * mime-charsetc = ALPHA / DIGIT + * / "!" / "#" / "$" / "%" / "&" + * / "+" / "-" / "^" / "_" / "`" + * / "{" / "}" / "~" + * language = ( 2*3ALPHA [ extlang ] ) + * / 4ALPHA + * / 5*8ALPHA + * extlang = *3( "-" 3ALPHA ) + * value-chars = *( pct-encoded / attr-char ) + * pct-encoded = "%" HEXDIG HEXDIG + * attr-char = ALPHA / DIGIT + * / "!" / "#" / "$" / "&" / "+" / "-" / "." + * / "^" / "_" / "`" / "|" / "~" + * @private + */ + +var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/ + +/** + * RegExp for various RFC 6266 grammar + * + * disposition-type = "inline" | "attachment" | disp-ext-type + * disp-ext-type = token + * disposition-parm = filename-parm | disp-ext-parm + * filename-parm = "filename" "=" value + * | "filename*" "=" ext-value + * disp-ext-parm = token "=" value + * | ext-token "=" ext-value + * ext-token = + * @private + */ + +var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/ // eslint-disable-line no-control-regex + +/** + * Create an attachment Content-Disposition header. + * + * @param {string} [filename] + * @param {object} [options] + * @param {string} [options.type=attachment] + * @param {string|boolean} [options.fallback=true] + * @return {string} + * @public + */ + +function contentDisposition (filename, options) { + var opts = options || {} + + // get type + var type = opts.type || 'attachment' + + // get parameters + var params = createparams(filename, opts.fallback) + + // format into string + return format(new ContentDisposition(type, params)) +} + +/** + * Create parameters object from filename and fallback. + * + * @param {string} [filename] + * @param {string|boolean} [fallback=true] + * @return {object} + * @private + */ + +function createparams (filename, fallback) { + if (filename === undefined) { + return + } + + var params = {} + + if (typeof filename !== 'string') { + throw new TypeError('filename must be a string') + } + + // fallback defaults to true + if (fallback === undefined) { + fallback = true + } + + if (typeof fallback !== 'string' && typeof fallback !== 'boolean') { + throw new TypeError('fallback must be a string or boolean') + } + + if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) { + throw new TypeError('fallback must be ISO-8859-1 string') + } + + // restrict to file base name + var name = basename(filename) + + // determine if name is suitable for quoted string + var isQuotedString = TEXT_REGEXP.test(name) + + // generate fallback name + var fallbackName = typeof fallback !== 'string' + ? fallback && getlatin1(name) + : basename(fallback) + var hasFallback = typeof fallbackName === 'string' && fallbackName !== name + + // set extended filename parameter + if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) { + params['filename*'] = name + } + + // set filename parameter + if (isQuotedString || hasFallback) { + params.filename = hasFallback + ? fallbackName + : name + } + + return params +} + +/** + * Format object to Content-Disposition header. + * + * @param {object} obj + * @param {string} obj.type + * @param {object} [obj.parameters] + * @return {string} + * @private + */ + +function format (obj) { + var parameters = obj.parameters + var type = obj.type + + if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) { + throw new TypeError('invalid type') + } + + // start with normalized type + var string = String(type).toLowerCase() + + // append parameters + if (parameters && typeof parameters === 'object') { + var param + var params = Object.keys(parameters).sort() + + for (var i = 0; i < params.length; i++) { + param = params[i] + + var val = param.substr(-1) === '*' + ? ustring(parameters[param]) + : qstring(parameters[param]) + + string += '; ' + param + '=' + val + } + } + + return string +} + +/** + * Decode a RFC 6987 field value (gracefully). + * + * @param {string} str + * @return {string} + * @private + */ + +function decodefield (str) { + var match = EXT_VALUE_REGEXP.exec(str) + + if (!match) { + throw new TypeError('invalid extended field value') + } + + var charset = match[1].toLowerCase() + var encoded = match[2] + var value + + // to binary string + var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode) + + switch (charset) { + case 'iso-8859-1': + value = getlatin1(binary) + break + case 'utf-8': + value = Buffer.from(binary, 'binary').toString('utf8') + break + default: + throw new TypeError('unsupported charset in extended field') + } + + return value +} + +/** + * Get ISO-8859-1 version of string. + * + * @param {string} val + * @return {string} + * @private + */ + +function getlatin1 (val) { + // simple Unicode -> ISO-8859-1 transformation + return String(val).replace(NON_LATIN1_REGEXP, '?') +} + +/** + * Parse Content-Disposition header string. + * + * @param {string} string + * @return {object} + * @public + */ + +function parse (string) { + if (!string || typeof string !== 'string') { + throw new TypeError('argument string is required') + } + + var match = DISPOSITION_TYPE_REGEXP.exec(string) + + if (!match) { + throw new TypeError('invalid type format') + } + + // normalize type + var index = match[0].length + var type = match[1].toLowerCase() + + var key + var names = [] + var params = {} + var value + + // calculate index to start at + index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';' + ? index - 1 + : index + + // match parameters + while ((match = PARAM_REGEXP.exec(string))) { + if (match.index !== index) { + throw new TypeError('invalid parameter format') + } + + index += match[0].length + key = match[1].toLowerCase() + value = match[2] + + if (names.indexOf(key) !== -1) { + throw new TypeError('invalid duplicate parameter') + } + + names.push(key) + + if (key.indexOf('*') + 1 === key.length) { + // decode extended value + key = key.slice(0, -1) + value = decodefield(value) + + // overwrite existing value + params[key] = value + continue + } + + if (typeof params[key] === 'string') { + continue + } + + if (value[0] === '"') { + // remove quotes and escapes + value = value + .substr(1, value.length - 2) + .replace(QESC_REGEXP, '$1') + } + + params[key] = value + } + + if (index !== -1 && index !== string.length) { + throw new TypeError('invalid parameter format') + } + + return new ContentDisposition(type, params) +} + +/** + * Percent decode a single character. + * + * @param {string} str + * @param {string} hex + * @return {string} + * @private + */ + +function pdecode (str, hex) { + return String.fromCharCode(parseInt(hex, 16)) +} + +/** + * Percent encode a single character. + * + * @param {string} char + * @return {string} + * @private + */ + +function pencode (char) { + return '%' + String(char) + .charCodeAt(0) + .toString(16) + .toUpperCase() +} + +/** + * Quote a string for HTTP. + * + * @param {string} val + * @return {string} + * @private + */ + +function qstring (val) { + var str = String(val) + + return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"' +} + +/** + * Encode a Unicode string for HTTP (RFC 5987). + * + * @param {string} val + * @return {string} + * @private + */ + +function ustring (val) { + var str = String(val) + + // percent encode as UTF-8 + var encoded = encodeURIComponent(str) + .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode) + + return 'UTF-8\'\'' + encoded +} + +/** + * Class for parsed Content-Disposition header for v8 optimization + * + * @public + * @param {string} type + * @param {object} parameters + * @constructor + */ + +function ContentDisposition (type, parameters) { + this.type = type + this.parameters = parameters +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/package.json new file mode 100644 index 00000000..abba3778 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-disposition/package.json @@ -0,0 +1,82 @@ +{ + "_args": [ + [ + "content-disposition@0.5.3", + "/tmp/repository/main" + ] + ], + "_from": "content-disposition@0.5.3", + "_id": "content-disposition@0.5.3", + "_inBundle": false, + "_integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "_location": "/content-disposition", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "content-disposition@0.5.3", + "name": "content-disposition", + "escapedName": "content-disposition", + "rawSpec": "0.5.3", + "saveSpec": null, + "fetchSpec": "0.5.3" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "_spec": "0.5.3", + "_where": "/tmp/repository/main", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "bugs": { + "url": "https://github.com/jshttp/content-disposition/issues" + }, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "description": "Create and parse Content-Disposition header", + "devDependencies": { + "deep-equal": "1.0.1", + "eslint": "5.10.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.14.0", + "eslint-plugin-markdown": "1.0.0-rc.1", + "eslint-plugin-node": "7.0.1", + "eslint-plugin-promise": "4.0.1", + "eslint-plugin-standard": "4.0.0", + "istanbul": "0.4.5", + "mocha": "5.2.0" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "README.md", + "index.js" + ], + "homepage": "https://github.com/jshttp/content-disposition#readme", + "keywords": [ + "content-disposition", + "http", + "rfc6266", + "res" + ], + "license": "MIT", + "name": "content-disposition", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/content-disposition.git" + }, + "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": "0.5.3" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/HISTORY.md new file mode 100644 index 00000000..8f5cb703 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/HISTORY.md @@ -0,0 +1,24 @@ +1.0.4 / 2017-09-11 +================== + + * perf: skip parameter parsing when no parameters + +1.0.3 / 2017-09-10 +================== + + * perf: remove argument reassignment + +1.0.2 / 2016-05-09 +================== + + * perf: enable strict mode + +1.0.1 / 2015-02-13 +================== + + * Improve missing `Content-Type` header error message + +1.0.0 / 2015-02-01 +================== + + * Initial implementation, derived from `media-typer@0.3.0` diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/LICENSE new file mode 100644 index 00000000..34b1a2de --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/README.md new file mode 100644 index 00000000..3ed67413 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/README.md @@ -0,0 +1,92 @@ +# content-type + +[![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 and parse HTTP Content-Type header according to RFC 7231 + +## Installation + +```sh +$ npm install content-type +``` + +## API + +```js +var contentType = require('content-type') +``` + +### contentType.parse(string) + +```js +var obj = contentType.parse('image/svg+xml; charset=utf-8') +``` + +Parse a content type string. This will return an object with the following +properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`): + + - `type`: The media type (the type and subtype, always lower case). + Example: `'image/svg+xml'` + + - `parameters`: An object of the parameters in the media type (name of parameter + always lower case). Example: `{charset: 'utf-8'}` + +Throws a `TypeError` if the string is missing or invalid. + +### contentType.parse(req) + +```js +var obj = contentType.parse(req) +``` + +Parse the `content-type` header from the given `req`. Short-cut for +`contentType.parse(req.headers['content-type'])`. + +Throws a `TypeError` if the `Content-Type` header is missing or invalid. + +### contentType.parse(res) + +```js +var obj = contentType.parse(res) +``` + +Parse the `content-type` header set on the given `res`. Short-cut for +`contentType.parse(res.getHeader('content-type'))`. + +Throws a `TypeError` if the `Content-Type` header is missing or invalid. + +### contentType.format(obj) + +```js +var str = contentType.format({type: 'image/svg+xml'}) +``` + +Format an object into a content type string. This will return a string of the +content type for the given object with the following properties (examples are +shown that produce the string `'image/svg+xml; charset=utf-8'`): + + - `type`: The media type (will be lower-cased). Example: `'image/svg+xml'` + + - `parameters`: An object of the parameters in the media type (name of the + parameter will be lower-cased). Example: `{charset: 'utf-8'}` + +Throws a `TypeError` if the object contains an invalid type or parameter names. + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/content-type.svg +[npm-url]: https://npmjs.org/package/content-type +[node-version-image]: https://img.shields.io/node/v/content-type.svg +[node-version-url]: http://nodejs.org/download/ +[travis-image]: https://img.shields.io/travis/jshttp/content-type/master.svg +[travis-url]: https://travis-ci.org/jshttp/content-type +[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-type/master.svg +[coveralls-url]: https://coveralls.io/r/jshttp/content-type +[downloads-image]: https://img.shields.io/npm/dm/content-type.svg +[downloads-url]: https://npmjs.org/package/content-type diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/index.js new file mode 100644 index 00000000..6ce03f20 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/index.js @@ -0,0 +1,222 @@ +/*! + * content-type + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * RegExp to match *( ";" parameter ) in RFC 7231 sec 3.1.1.1 + * + * parameter = token "=" ( token / quoted-string ) + * token = 1*tchar + * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" + * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" + * / DIGIT / ALPHA + * ; any VCHAR, except delimiters + * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE + * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text + * obs-text = %x80-FF + * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) + */ +var PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g +var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/ +var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/ + +/** + * RegExp to match quoted-pair in RFC 7230 sec 3.2.6 + * + * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) + * obs-text = %x80-FF + */ +var QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g + +/** + * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6 + */ +var QUOTE_REGEXP = /([\\"])/g + +/** + * RegExp to match type in RFC 7231 sec 3.1.1.1 + * + * media-type = type "/" subtype + * type = token + * subtype = token + */ +var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/ + +/** + * Module exports. + * @public + */ + +exports.format = format +exports.parse = parse + +/** + * Format object to media type. + * + * @param {object} obj + * @return {string} + * @public + */ + +function format (obj) { + if (!obj || typeof obj !== 'object') { + throw new TypeError('argument obj is required') + } + + var parameters = obj.parameters + var type = obj.type + + if (!type || !TYPE_REGEXP.test(type)) { + throw new TypeError('invalid type') + } + + var string = type + + // append parameters + if (parameters && typeof parameters === 'object') { + var param + var params = Object.keys(parameters).sort() + + for (var i = 0; i < params.length; i++) { + param = params[i] + + if (!TOKEN_REGEXP.test(param)) { + throw new TypeError('invalid parameter name') + } + + string += '; ' + param + '=' + qstring(parameters[param]) + } + } + + return string +} + +/** + * Parse media type to object. + * + * @param {string|object} string + * @return {Object} + * @public + */ + +function parse (string) { + if (!string) { + throw new TypeError('argument string is required') + } + + // support req/res-like objects as argument + var header = typeof string === 'object' + ? getcontenttype(string) + : string + + if (typeof header !== 'string') { + throw new TypeError('argument string is required to be a string') + } + + var index = header.indexOf(';') + var type = index !== -1 + ? header.substr(0, index).trim() + : header.trim() + + if (!TYPE_REGEXP.test(type)) { + throw new TypeError('invalid media type') + } + + var obj = new ContentType(type.toLowerCase()) + + // parse parameters + if (index !== -1) { + var key + var match + var value + + PARAM_REGEXP.lastIndex = index + + while ((match = PARAM_REGEXP.exec(header))) { + if (match.index !== index) { + throw new TypeError('invalid parameter format') + } + + index += match[0].length + key = match[1].toLowerCase() + value = match[2] + + if (value[0] === '"') { + // remove quotes and escapes + value = value + .substr(1, value.length - 2) + .replace(QESC_REGEXP, '$1') + } + + obj.parameters[key] = value + } + + if (index !== header.length) { + throw new TypeError('invalid parameter format') + } + } + + return obj +} + +/** + * Get content-type from req/res objects. + * + * @param {object} + * @return {Object} + * @private + */ + +function getcontenttype (obj) { + var header + + if (typeof obj.getHeader === 'function') { + // res-like + header = obj.getHeader('content-type') + } else if (typeof obj.headers === 'object') { + // req-like + header = obj.headers && obj.headers['content-type'] + } + + if (typeof header !== 'string') { + throw new TypeError('content-type header is missing from object') + } + + return header +} + +/** + * Quote a string if necessary. + * + * @param {string} val + * @return {string} + * @private + */ + +function qstring (val) { + var str = String(val) + + // no need to quote tokens + if (TOKEN_REGEXP.test(str)) { + return str + } + + if (str.length > 0 && !TEXT_REGEXP.test(str)) { + throw new TypeError('invalid parameter value') + } + + return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"' +} + +/** + * Class to represent a content type. + * @private + */ +function ContentType (type) { + this.parameters = Object.create(null) + this.type = type +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/package.json new file mode 100644 index 00000000..e958cf65 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/content-type/package.json @@ -0,0 +1,78 @@ +{ + "_args": [ + [ + "content-type@1.0.4", + "/tmp/repository/main" + ] + ], + "_from": "content-type@1.0.4", + "_id": "content-type@1.0.4", + "_inBundle": false, + "_integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "_location": "/content-type", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "content-type@1.0.4", + "name": "content-type", + "escapedName": "content-type", + "rawSpec": "1.0.4", + "saveSpec": null, + "fetchSpec": "1.0.4" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "_spec": "1.0.4", + "_where": "/tmp/repository/main", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "bugs": { + "url": "https://github.com/jshttp/content-type/issues" + }, + "description": "Create and parse HTTP Content-Type header", + "devDependencies": { + "eslint": "3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-plugin-import": "2.7.0", + "eslint-plugin-node": "5.1.1", + "eslint-plugin-promise": "3.5.0", + "eslint-plugin-standard": "3.0.1", + "istanbul": "0.4.5", + "mocha": "~1.21.5" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "README.md", + "index.js" + ], + "homepage": "https://github.com/jshttp/content-type#readme", + "keywords": [ + "content-type", + "http", + "req", + "res", + "rfc7231" + ], + "license": "MIT", + "name": "content-type", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/content-type.git" + }, + "scripts": { + "lint": "eslint .", + "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/" + }, + "version": "1.0.4" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/HISTORY.md new file mode 100644 index 00000000..0a4196ad --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/HISTORY.md @@ -0,0 +1,121 @@ +0.8.0 / 2019-10-11 +================== + + * Fix check for default `secure` option behavior + * Fix `maxAge` option preventing cookie deletion + * Support `"none"` in `sameSite` option + * deps: depd@~2.0.0 + - Replace internal `eval` usage with `Function` constructor + - Use instance methods on `process` to check for listeners + * deps: keygrip@~1.1.0 + - Use `tsscmp` module for timing-safe signature verification + +0.7.3 / 2018-11-04 +================== + + * deps: keygrip@~1.0.3 + - perf: enable strict mode + +0.7.2 / 2018-09-09 +================== + + * deps: depd@~1.1.2 + * perf: remove argument reassignment + +0.7.1 / 2017-08-26 +================== + + * deps: depd@~1.1.1 + - Remove unnecessary `Buffer` loading + * deps: keygrip@~1.0.2 + - perf: improve comparison speed + +0.7.0 / 2017-02-19 +================== + + * Add `sameSite` option for SameSite cookie support + * pref: enable strict mode + +0.6.2 / 2016-11-12 +================== + + * Fix `keys` deprecation message + * deps: keygrip@~1.0.1 + +0.6.1 / 2016-02-29 +================== + + * Fix regression in 0.6.0 for array of strings in `keys` option + +0.6.0 / 2016-02-29 +================== + + * Add `secure` constructor option for secure connection checking + * Change constructor to signature `new Cookies(req, res, [options])` + - Replace `new Cookies(req, res, key)` with `new Cookies(req, res, {'keys': keys})` + * Change prototype construction for proper "constructor" property + * Deprecate `secureProxy` option in `.set`; use `secure` option instead + - If `secure: true` throws even over SSL, use the `secure` constructor option + +0.5.1 / 2014-07-27 +================== + + * Throw on invalid values provided to `Cookie` constructor + - This is not strict validation, but basic RFC 7230 validation + +0.5.0 / 2014-07-27 +================== + + * Integrate with `req.protocol` for secure cookies + * Support `maxAge` as well as `maxage` + +0.4.1 / 2014-05-07 +================== + + * Update package for repo move + +0.4.0 / 2014-01-31 +================== + + * Allow passing an array of strings as keys + +0.3.8-0.2.0 +=========== + + * TODO: write down history for these releases + +0.1.6 / 2011-03-01 +================== + + * SSL cookies secure by default + * Use httpOnly by default unless explicitly false + +0.1.5 / 2011-02-26 +================== + + * Delete sig cookie if signed cookie is deleted + +0.1.4 / 2011-02-26 +================== + + * Always set path + +0.1.3 / 2011-02-26 +================== + + * Add sensible defaults for path + +0.1.2 / 2011-02-26 +================== + + * Inherit cookie properties to signature cookie + +0.1.1 / 2011-02-25 +================== + + * Readme updates + +0.1.0 / 2011-02-25 +================== + + * Initial release diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/LICENSE new file mode 100644 index 00000000..687e1e6d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jed Schmidt, http://jed.is/ +Copyright (c) 2015-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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/README.md new file mode 100644 index 00000000..f7c12f8d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/README.md @@ -0,0 +1,145 @@ +Cookies +======= + +[![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] + +Cookies is a [node.js](http://nodejs.org/) module for getting and setting HTTP(S) cookies. Cookies can be signed to prevent tampering, using [Keygrip](https://www.npmjs.com/package/keygrip). It can be used with the built-in node.js HTTP library, or as Connect/Express middleware. + +## 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): + +``` +$ npm install cookies +``` + +## Features + +* **Lazy**: Since cookie verification against multiple keys could be expensive, cookies are only verified lazily when accessed, not eagerly on each request. + +* **Secure**: All cookies are `httponly` by default, and cookies sent over SSL are `secure` by default. An error will be thrown if you try to send secure cookies over an insecure socket. + +* **Unobtrusive**: Signed cookies are stored the same way as unsigned cookies, instead of in an obfuscated signing format. An additional signature cookie is stored for each signed cookie, using a standard naming convention (_cookie-name_`.sig`). This allows other libraries to access the original cookies without having to know the signing mechanism. + +* **Agnostic**: This library is optimized for use with [Keygrip](https://www.npmjs.com/package/keygrip), but does not require it; you can implement your own signing scheme instead if you like and use this library only to read/write cookies. Factoring the signing into a separate library encourages code reuse and allows you to use the same signing library for other areas where signing is needed, such as in URLs. + +## API + +### cookies = new Cookies( request, response, [ options ] ) + +This creates a cookie jar corresponding to the current _request_ and _response_, additionally passing an object _options_. + +A [Keygrip](https://www.npmjs.com/package/keygrip) object or an array of keys can optionally be passed as _options.keys_ to enable cryptographic signing based on SHA1 HMAC, using rotated credentials. + +A Boolean can optionally be passed as _options.secure_ to explicitally specify if the connection is secure, rather than this module examining _request_. + +Note that since this only saves parameters without any other processing, it is very lightweight. Cookies are only parsed on demand when they are accessed. + +### express.createServer( Cookies.express( keys ) ) + +This adds cookie support as a Connect middleware layer for use in Express apps, allowing inbound cookies to be read using `req.cookies.get` and outbound cookies to be set using `res.cookies.set`. + +### cookies.get( name, [ options ] ) + +This extracts the cookie with the given name from the `Cookie` header in the request. If such a cookie exists, its value is returned. Otherwise, nothing is returned. + +`{ signed: true }` can optionally be passed as the second parameter _options_. In this case, a signature cookie (a cookie of same name ending with the `.sig` suffix appended) is fetched. If no such cookie exists, nothing is returned. + +If the signature cookie _does_ exist, the provided [Keygrip](https://www.npmjs.com/package/keygrip) object is used to check whether the hash of _cookie-name_=_cookie-value_ matches that of any registered key: + +* If the signature cookie hash matches the first key, the original cookie value is returned. +* If the signature cookie hash matches any other key, the original cookie value is returned AND an outbound header is set to update the signature cookie's value to the hash of the first key. This enables automatic freshening of signature cookies that have become stale due to key rotation. +* If the signature cookie hash does not match any key, nothing is returned, and an outbound header with an expired date is used to delete the cookie. + +### cookies.set( name, [ value ], [ options ] ) + +This sets the given cookie in the response and returns the current context to allow chaining. + +If the _value_ is omitted, an outbound header with an expired date is used to delete the cookie. + +If the _options_ object is provided, it will be used to generate the outbound cookie header as follows: + +* `maxAge`: a number representing the milliseconds from `Date.now()` for expiry +* `expires`: a `Date` object indicating the cookie's expiration date (expires at the end of session by default). +* `path`: a string indicating the path of the cookie (`/` by default). +* `domain`: a string indicating the domain of the cookie (no default). +* `secure`: a boolean indicating whether the cookie is only to be sent over HTTPS (`false` by default for HTTP, `true` by default for HTTPS). [Read more about this option below](#secure-cookies). +* `httpOnly`: a boolean indicating whether the cookie is only to be sent over HTTP(S), and not made available to client JavaScript (`true` by default). +* `sameSite`: a boolean or string indicating whether the cookie is a "same site" cookie (`false` by default). This can be set to `'strict'`, `'lax'`, or `true` (which maps to `'strict'`). +* `signed`: a boolean indicating whether the cookie is to be signed (`false` by default). If this is true, another cookie of the same name with the `.sig` suffix appended will also be sent, with a 27-byte url-safe base64 SHA1 value representing the hash of _cookie-name_=_cookie-value_ against the first [Keygrip](https://www.npmjs.com/package/keygrip) key. This signature key is used to detect tampering the next time a cookie is received. +* `overwrite`: a boolean indicating whether to overwrite previously set cookies of the same name (`false` by default). If this is true, all cookies set during the same request with the same name (regardless of path or domain) are filtered out of the Set-Cookie header when setting this cookie. + +### Secure cookies + +To send a secure cookie, you set a cookie with the `secure: true` option. + +HTTPS is necessary for secure cookies. When `cookies.set` is called with `secure: true` and a secure connection is not detected, the cookie will not be set and an error will be thrown. + +This module will test each request to see if it's secure by checking: + +* if the `protocol` property of the request is set to `https`, or +* if the `connection.encrypted` property of the request is set to `true`. + +If your server is running behind a proxy and you are using `secure: true`, you need to configure your server to read the request headers added by your proxy to determine whether the request is using a secure connection. + +For more information about working behind proxies, consult the framework you are using: + +* For Koa - [`app.proxy = true`](http://koajs.com/#settings) +* For Express - [trust proxy setting](http://expressjs.com/en/4x/api.html#trust.proxy.options.table) + +If your Koa or Express server is properly configured, the `protocol` property of the request will be set to match the protocol reported by the proxy in the `X-Forwarded-Proto` header. + +## Example + +```js +var http = require('http') +var Cookies = require('cookies') + +// Optionally define keys to sign cookie values +// to prevent client tampering +var keys = ['keyboard cat'] + +var server = http.createServer(function (req, res) { + // Create a cookies object + var cookies = new Cookies(req, res, { keys: keys }) + + // Get a cookie + var lastVisit = cookies.get('LastVisit', { signed: true }) + + // Set the cookie to a value + cookies.set('LastVisit', new Date().toISOString(), { signed: true }) + + if (!lastVisit) { + res.setHeader('Content-Type', 'text/plain') + res.end('Welcome, first time visitor!') + } else { + res.setHeader('Content-Type', 'text/plain') + res.end('Welcome back! Nothing much changed since your last visit at ' + lastVisit + '.') + } +}) + +server.listen(3000, function () { + console.log('Visit us at http://127.0.0.1:3000/ !') +}) +``` + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/cookies.svg +[npm-url]: https://npmjs.org/package/cookies +[coveralls-image]: https://img.shields.io/coveralls/pillarjs/cookies/master.svg +[coveralls-url]: https://coveralls.io/r/pillarjs/cookies?branch=master +[downloads-image]: https://img.shields.io/npm/dm/cookies.svg +[downloads-url]: https://npmjs.org/package/cookies +[node-version-image]: https://img.shields.io/node/v/cookies.svg +[node-version-url]: https://nodejs.org/en/download/ +[travis-image]: https://img.shields.io/travis/pillarjs/cookies/master.svg +[travis-url]: https://travis-ci.org/pillarjs/cookies diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/index.js new file mode 100644 index 00000000..3dd67281 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/index.js @@ -0,0 +1,224 @@ +/*! + * cookies + * Copyright(c) 2014 Jed Schmidt, http://jed.is/ + * Copyright(c) 2015-2016 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +var deprecate = require('depd')('cookies') +var Keygrip = require('keygrip') +var http = require('http') +var cache = {} + +/** + * RegExp to match field-content in RFC 7230 sec 3.2 + * + * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] + * field-vchar = VCHAR / obs-text + * obs-text = %x80-FF + */ + +var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; + +/** + * RegExp to match Same-Site cookie attribute value. + */ + +var SAME_SITE_REGEXP = /^(?:lax|none|strict)$/i + +function Cookies(request, response, options) { + if (!(this instanceof Cookies)) return new Cookies(request, response, options) + + this.secure = undefined + this.request = request + this.response = response + + if (options) { + if (Array.isArray(options)) { + // array of key strings + deprecate('"keys" argument; provide using options {"keys": [...]}') + this.keys = new Keygrip(options) + } else if (options.constructor && options.constructor.name === 'Keygrip') { + // any keygrip constructor to allow different versions + deprecate('"keys" argument; provide using options {"keys": keygrip}') + this.keys = options + } else { + this.keys = Array.isArray(options.keys) ? new Keygrip(options.keys) : options.keys + this.secure = options.secure + } + } +} + +Cookies.prototype.get = function(name, opts) { + var sigName = name + ".sig" + , header, match, value, remote, data, index + , signed = opts && opts.signed !== undefined ? opts.signed : !!this.keys + + header = this.request.headers["cookie"] + if (!header) return + + match = header.match(getPattern(name)) + if (!match) return + + value = match[1] + if (!opts || !signed) return value + + remote = this.get(sigName) + if (!remote) return + + data = name + "=" + value + if (!this.keys) throw new Error('.keys required for signed cookies'); + index = this.keys.index(data, remote) + + if (index < 0) { + this.set(sigName, null, {path: "/", signed: false }) + } else { + index && this.set(sigName, this.keys.sign(data), { signed: false }) + return value + } +}; + +Cookies.prototype.set = function(name, value, opts) { + var res = this.response + , req = this.request + , headers = res.getHeader("Set-Cookie") || [] + , secure = this.secure !== undefined ? !!this.secure : req.protocol === 'https' || req.connection.encrypted + , cookie = new Cookie(name, value, opts) + , signed = opts && opts.signed !== undefined ? opts.signed : !!this.keys + + if (typeof headers == "string") headers = [headers] + + if (!secure && opts && opts.secure) { + throw new Error('Cannot send secure cookie over unencrypted connection') + } + + cookie.secure = opts && opts.secure !== undefined + ? opts.secure + : secure + + if (opts && "secureProxy" in opts) { + deprecate('"secureProxy" option; use "secure" option, provide "secure" to constructor if needed') + cookie.secure = opts.secureProxy + } + + pushCookie(headers, cookie) + + if (opts && signed) { + if (!this.keys) throw new Error('.keys required for signed cookies'); + cookie.value = this.keys.sign(cookie.toString()) + cookie.name += ".sig" + pushCookie(headers, cookie) + } + + var setHeader = res.set ? http.OutgoingMessage.prototype.setHeader : res.setHeader + setHeader.call(res, 'Set-Cookie', headers) + return this +}; + +function Cookie(name, value, attrs) { + if (!fieldContentRegExp.test(name)) { + throw new TypeError('argument name is invalid'); + } + + if (value && !fieldContentRegExp.test(value)) { + throw new TypeError('argument value is invalid'); + } + + this.name = name + this.value = value || "" + + for (var name in attrs) { + this[name] = attrs[name] + } + + if (!this.value) { + this.expires = new Date(0) + this.maxAge = null + } + + if (this.path && !fieldContentRegExp.test(this.path)) { + throw new TypeError('option path is invalid'); + } + + if (this.domain && !fieldContentRegExp.test(this.domain)) { + throw new TypeError('option domain is invalid'); + } + + if (this.sameSite && this.sameSite !== true && !SAME_SITE_REGEXP.test(this.sameSite)) { + throw new TypeError('option sameSite is invalid') + } +} + +Cookie.prototype.path = "/"; +Cookie.prototype.expires = undefined; +Cookie.prototype.domain = undefined; +Cookie.prototype.httpOnly = true; +Cookie.prototype.sameSite = false; +Cookie.prototype.secure = false; +Cookie.prototype.overwrite = false; + +Cookie.prototype.toString = function() { + return this.name + "=" + this.value +}; + +Cookie.prototype.toHeader = function() { + var header = this.toString() + + if (this.maxAge) this.expires = new Date(Date.now() + this.maxAge); + + if (this.path ) header += "; path=" + this.path + if (this.expires ) header += "; expires=" + this.expires.toUTCString() + if (this.domain ) header += "; domain=" + this.domain + if (this.sameSite ) header += "; samesite=" + (this.sameSite === true ? 'strict' : this.sameSite.toLowerCase()) + if (this.secure ) header += "; secure" + if (this.httpOnly ) header += "; httponly" + + return header +}; + +// back-compat so maxage mirrors maxAge +Object.defineProperty(Cookie.prototype, 'maxage', { + configurable: true, + enumerable: true, + get: function () { return this.maxAge }, + set: function (val) { return this.maxAge = val } +}); +deprecate.property(Cookie.prototype, 'maxage', '"maxage"; use "maxAge" instead') + +function getPattern(name) { + if (cache[name]) return cache[name] + + return cache[name] = new RegExp( + "(?:^|;) *" + + name.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") + + "=([^;]*)" + ) +} + +function pushCookie(headers, cookie) { + if (cookie.overwrite) { + for (var i = headers.length - 1; i >= 0; i--) { + if (headers[i].indexOf(cookie.name + '=') === 0) { + headers.splice(i, 1) + } + } + } + + headers.push(cookie.toHeader()) +} + +Cookies.connect = Cookies.express = function(keys) { + return function(req, res, next) { + req.cookies = res.cookies = new Cookies(req, res, { + keys: keys + }) + + next() + } +} + +Cookies.Cookie = Cookie + +module.exports = Cookies diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/History.md new file mode 100644 index 00000000..cd9ebaaa --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/History.md @@ -0,0 +1,103 @@ +2.0.0 / 2018-10-26 +================== + + * Drop support for Node.js 0.6 + * Replace internal `eval` usage with `Function` constructor + * Use instance methods on `process` to check for listeners + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/LICENSE new file mode 100644 index 00000000..248de7af --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014-2018 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/Readme.md new file mode 100644 index 00000000..043d1ca2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/Readme.md @@ -0,0 +1,280 @@ +# 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) + +[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/nodejs-depd/master?label=windows +[appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd +[coveralls-image]: https://badgen.net/coveralls/c/github/dougwilson/nodejs-depd/master +[coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master +[node-image]: https://badgen.net/npm/node/depd +[node-url]: https://nodejs.org/en/download/ +[npm-downloads-image]: https://badgen.net/npm/dm/depd +[npm-url]: https://npmjs.org/package/depd +[npm-version-image]: https://badgen.net/npm/v/depd +[travis-image]: https://badgen.net/travis/dougwilson/nodejs-depd/master?label=linux +[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/index.js new file mode 100644 index 00000000..1bf2fcfd --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/index.js @@ -0,0 +1,538 @@ +/*! + * depd + * Copyright(c) 2014-2018 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +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 ' + stack[i].toString() + } + + 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 event 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 eehaslisteners (emitter, type) { + var count = typeof emitter.listenerCount !== 'function' + ? emitter.listeners(type).length + : emitter.listenerCount(type) + + return count > 0 +} + +/** + * Determine if namespace is ignored. + */ + +function isignored (namespace) { + 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) { + 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 = eehaslisteners(process, 'deprecation') + + // 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 ' + stack[i].toString() + } + + 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 ' + stack[i].toString() + '\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 stack = getStack() + var site = callSiteLocation(stack[1]) + + site.name = fn.name + + // eslint-disable-next-line no-new-func + var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site', + '"use strict"\n' + + 'return function (' + args + ') {' + + 'log.call(deprecate, message, site)\n' + + 'return fn.apply(this, arguments)\n' + + '}')(fn, log, this, message, site) + + 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/lib/browser/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/lib/browser/index.js new file mode 100644 index 00000000..6be45cc2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/lib/browser/index.js @@ -0,0 +1,77 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/package.json new file mode 100644 index 00000000..f3d281b8 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/node_modules/depd/package.json @@ -0,0 +1,83 @@ +{ + "_args": [ + [ + "depd@2.0.0", + "/tmp/repository/main" + ] + ], + "_from": "depd@2.0.0", + "_id": "depd@2.0.0", + "_inBundle": false, + "_integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "_location": "/cookies/depd", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "depd@2.0.0", + "name": "depd", + "escapedName": "depd", + "rawSpec": "2.0.0", + "saveSpec": null, + "fetchSpec": "2.0.0" + }, + "_requiredBy": [ + "/cookies" + ], + "_resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "_spec": "2.0.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "browser": "lib/browser/index.js", + "bugs": { + "url": "https://github.com/dougwilson/nodejs-depd/issues" + }, + "description": "Deprecate all the things", + "devDependencies": { + "beautify-benchmark": "0.2.4", + "benchmark": "2.1.4", + "eslint": "5.7.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.14.0", + "eslint-plugin-markdown": "1.0.0-beta.7", + "eslint-plugin-node": "7.0.1", + "eslint-plugin-promise": "4.0.1", + "eslint-plugin-standard": "4.0.0", + "istanbul": "0.4.5", + "mocha": "5.2.0", + "safe-buffer": "5.1.2", + "uid-safe": "2.1.5" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "lib/", + "History.md", + "LICENSE", + "index.js", + "Readme.md" + ], + "homepage": "https://github.com/dougwilson/nodejs-depd#readme", + "keywords": [ + "deprecate", + "deprecated" + ], + "license": "MIT", + "name": "depd", + "repository": { + "type": "git", + "url": "git+https://github.com/dougwilson/nodejs-depd.git" + }, + "scripts": { + "bench": "node benchmark/index.js", + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --bail test/", + "test-ci": "istanbul cover --print=none node_modules/mocha/bin/_mocha -- --reporter spec test/ && istanbul report lcovonly text-summary", + "test-cov": "istanbul cover --print=none node_modules/mocha/bin/_mocha -- --reporter dot test/ && istanbul report lcov text-summary" + }, + "version": "2.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/package.json new file mode 100644 index 00000000..bd1f807b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/cookies/package.json @@ -0,0 +1,80 @@ +{ + "_args": [ + [ + "cookies@0.8.0", + "/tmp/repository/main" + ] + ], + "_from": "cookies@0.8.0", + "_id": "cookies@0.8.0", + "_inBundle": false, + "_integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "_location": "/cookies", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "cookies@0.8.0", + "name": "cookies", + "escapedName": "cookies", + "rawSpec": "0.8.0", + "saveSpec": null, + "fetchSpec": "0.8.0" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "_spec": "0.8.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Jed Schmidt", + "email": "tr@nslator.jp", + "url": "http://jed.is" + }, + "bugs": { + "url": "https://github.com/pillarjs/cookies/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "description": "Cookies, optionally signed using Keygrip.", + "devDependencies": { + "eslint": "4.19.1", + "express": "4.17.1", + "mocha": "6.2.1", + "nyc": "14.1.1", + "restify": "8.4.0", + "supertest": "4.0.2" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js" + ], + "homepage": "https://github.com/pillarjs/cookies#readme", + "license": "MIT", + "name": "cookies", + "repository": { + "type": "git", + "url": "git+https://github.com/pillarjs/cookies.git" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/", + "test-ci": "nyc --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + }, + "version": "0.8.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/LICENSE new file mode 100644 index 00000000..d8d7f943 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/LICENSE @@ -0,0 +1,19 @@ +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. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/README.md new file mode 100644 index 00000000..5a76b414 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/README.md @@ -0,0 +1,3 @@ +# core-util-is + +The `util.is*` functions introduced in Node v0.12. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/lib/util.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/lib/util.js new file mode 100644 index 00000000..6e5a20d7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/lib/util.js @@ -0,0 +1,107 @@ +// 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. + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. + +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('buffer').Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/package.json new file mode 100644 index 00000000..68eb79ea --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/core-util-is/package.json @@ -0,0 +1,71 @@ +{ + "_args": [ + [ + "core-util-is@1.0.3", + "/tmp/repository/main" + ] + ], + "_from": "core-util-is@1.0.3", + "_id": "core-util-is@1.0.3", + "_inBundle": false, + "_integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "_location": "/core-util-is", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "core-util-is@1.0.3", + "name": "core-util-is", + "escapedName": "core-util-is", + "rawSpec": "1.0.3", + "saveSpec": null, + "fetchSpec": "1.0.3" + }, + "_requiredBy": [ + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "_spec": "1.0.3", + "_where": "/tmp/repository/main", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/core-util-is/issues" + }, + "description": "The `util.is*` functions introduced in Node v0.12.", + "devDependencies": { + "tap": "^15.0.9" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/isaacs/core-util-is#readme", + "keywords": [ + "util", + "isBuffer", + "isArray", + "isNumber", + "isString", + "isRegExp", + "isThis", + "isThat", + "polyfill" + ], + "license": "MIT", + "main": "lib/util.js", + "name": "core-util-is", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/core-util-is.git" + }, + "scripts": { + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "preversion": "npm test", + "test": "tap test.js" + }, + "version": "1.0.3" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/LICENSE new file mode 100644 index 00000000..1a9820e2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/LICENSE @@ -0,0 +1,20 @@ +(The MIT License) + +Copyright (c) 2014-2017 TJ Holowaychuk +Copyright (c) 2018-2021 Josh Junon + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/README.md new file mode 100644 index 00000000..5ea4cd27 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/README.md @@ -0,0 +1,478 @@ +# debug +[![Build Status](https://travis-ci.org/debug-js/debug.svg?branch=master)](https://travis-ci.org/debug-js/debug) [![Coverage Status](https://coveralls.io/repos/github/debug-js/debug/badge.svg?branch=master)](https://coveralls.io/github/debug-js/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) + + + +A tiny JavaScript debugging utility modelled after Node.js core's debugging +technique. Works in Node.js and web browsers. + +## Installation + +```bash +$ npm install debug +``` + +## Usage + +`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. + +Example [_app.js_](./examples/node/app.js): + +```js +var debug = require('debug')('http') + , http = require('http') + , name = 'My App'; + +// fake app + +debug('booting %o', name); + +http.createServer(function(req, res){ + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, function(){ + debug('listening'); +}); + +// fake worker of some kind + +require('./worker'); +``` + +Example [_worker.js_](./examples/node/worker.js): + +```js +var a = require('debug')('worker:a') + , b = require('debug')('worker:b'); + +function work() { + a('doing lots of uninteresting work'); + setTimeout(work, Math.random() * 1000); +} + +work(); + +function workb() { + b('doing some work'); + setTimeout(workb, Math.random() * 2000); +} + +workb(); +``` + +The `DEBUG` environment variable is then used to enable these based on space or +comma-delimited names. + +Here are some examples: + +screen shot 2017-08-08 at 12 53 04 pm +screen shot 2017-08-08 at 12 53 38 pm +screen shot 2017-08-08 at 12 53 25 pm + +#### Windows command prompt notes + +##### CMD + +On Windows the environment variable is set using the `set` command. + +```cmd +set DEBUG=*,-not_this +``` + +Example: + +```cmd +set DEBUG=* & node app.js +``` + +##### PowerShell (VS Code default) + +PowerShell uses different syntax to set environment variables. + +```cmd +$env:DEBUG = "*,-not_this" +``` + +Example: + +```cmd +$env:DEBUG='app';node app.js +``` + +Then, run the program to be debugged as usual. + +npm script example: +```js + "windowsDebug": "@powershell -Command $env:DEBUG='*';node app.js", +``` + +## Namespace Colors + +Every debug instance has a color generated for it based on its namespace name. +This helps when visually parsing the debug output to identify which debug instance +a debug line belongs to. + +#### Node.js + +In Node.js, colors are enabled when stderr is a TTY. You also _should_ install +the [`supports-color`](https://npmjs.org/supports-color) module alongside debug, +otherwise debug will only use a small handful of basic colors. + + + +#### Web Browser + +Colors are also enabled on "Web Inspectors" that understand the `%c` formatting +option. These are WebKit web inspectors, Firefox ([since version +31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) +and the Firebug plugin for Firefox (any version). + + + + +## Millisecond diff + +When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. + + + +When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: + + + + +## Conventions + +If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable. You can then use it for normal output as well as debug output. + +## Wildcards + +The `*` character may be used as a wildcard. Suppose for example your library has +debuggers named "connect:bodyParser", "connect:compress", "connect:session", +instead of listing all three with +`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do +`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. + +You can also exclude specific debuggers by prefixing them with a "-" character. +For example, `DEBUG=*,-connect:*` would include all debuggers except those +starting with "connect:". + +## Environment Variables + +When running through Node.js, you can set a few environment variables that will +change the behavior of the debug logging: + +| Name | Purpose | +|-----------|-------------------------------------------------| +| `DEBUG` | Enables/disables specific debugging namespaces. | +| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY). | +| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | +| `DEBUG_DEPTH` | Object inspection depth. | +| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | + + +__Note:__ The environment variables beginning with `DEBUG_` end up being +converted into an Options object that gets used with `%o`/`%O` formatters. +See the Node.js documentation for +[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) +for the complete list. + +## Formatters + +Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. +Below are the officially supported formatters: + +| Formatter | Representation | +|-----------|----------------| +| `%O` | Pretty-print an Object on multiple lines. | +| `%o` | Pretty-print an Object all on a single line. | +| `%s` | String. | +| `%d` | Number (both integer and float). | +| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | +| `%%` | Single percent sign ('%'). This does not consume an argument. | + + +### Custom formatters + +You can add custom formatters by extending the `debug.formatters` object. +For example, if you wanted to add support for rendering a Buffer as hex with +`%h`, you could do something like: + +```js +const createDebug = require('debug') +createDebug.formatters.h = (v) => { + return v.toString('hex') +} + +// …elsewhere +const debug = createDebug('foo') +debug('this is hex: %h', new Buffer('hello world')) +// foo this is hex: 68656c6c6f20776f726c6421 +0ms +``` + + +## Browser Support + +You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), +or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), +if you don't want to build it yourself. + +Debug's enable state is currently persisted by `localStorage`. +Consider the situation shown below where you have `worker:a` and `worker:b`, +and wish to debug both. You can enable this using `localStorage.debug`: + +```js +localStorage.debug = 'worker:*' +``` + +And then refresh the page. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + b('doing some work'); +}, 1200); +``` + + +## Output streams + + By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: + +Example [_stdout.js_](./examples/node/stdout.js): + +```js +var debug = require('debug'); +var error = debug('app:error'); + +// by default stderr is used +error('goes to stderr!'); + +var log = debug('app:log'); +// set this namespace to log via console.log +log.log = console.log.bind(console); // don't forget to bind to console! +log('goes to stdout'); +error('still goes to stderr!'); + +// set all output to go via console.info +// overrides all per-namespace log settings +debug.log = console.info.bind(console); +error('now goes to stdout via console.info'); +log('still goes to stdout, but via console.info now'); +``` + +## Extend +You can simply extend debugger +```js +const log = require('debug')('auth'); + +//creates new debug instance with extended namespace +const logSign = log.extend('sign'); +const logLogin = log.extend('login'); + +log('hello'); // auth hello +logSign('hello'); //auth:sign hello +logLogin('hello'); //auth:login hello +``` + +## Set dynamically + +You can also enable debug dynamically by calling the `enable()` method : + +```js +let debug = require('debug'); + +console.log(1, debug.enabled('test')); + +debug.enable('test'); +console.log(2, debug.enabled('test')); + +debug.disable(); +console.log(3, debug.enabled('test')); + +``` + +print : +``` +1 false +2 true +3 false +``` + +Usage : +`enable(namespaces)` +`namespaces` can include modes separated by a colon and wildcards. + +Note that calling `enable()` completely overrides previously set DEBUG variable : + +``` +$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' +=> false +``` + +`disable()` + +Will disable all namespaces. The functions returns the namespaces currently +enabled (and skipped). This can be useful if you want to disable debugging +temporarily without knowing what was enabled to begin with. + +For example: + +```js +let debug = require('debug'); +debug.enable('foo:*,-foo:bar'); +let namespaces = debug.disable(); +debug.enable(namespaces); +``` + +Note: There is no guarantee that the string will be identical to the initial +enable string, but semantically they will be identical. + +## Checking whether a debug target is enabled + +After you've created a debug instance, you can determine whether or not it is +enabled by checking the `enabled` property: + +```javascript +const debug = require('debug')('http'); + +if (debug.enabled) { + // do stuff... +} +``` + +You can also manually toggle this property to force the debug instance to be +enabled or disabled. + +## Usage in child processes + +Due to the way `debug` detects if the output is a TTY or not, colors are not shown in child processes when `stderr` is piped. A solution is to pass the `DEBUG_COLORS=1` environment variable to the child process. +For example: + +```javascript +worker = fork(WORKER_WRAP_PATH, [workerPath], { + stdio: [ + /* stdin: */ 0, + /* stdout: */ 'pipe', + /* stderr: */ 'pipe', + 'ipc', + ], + env: Object.assign({}, process.env, { + DEBUG_COLORS: 1 // without this settings, colors won't be shown + }), +}); + +worker.stderr.pipe(process.stderr, { end: false }); +``` + + +## Authors + + - TJ Holowaychuk + - Nathan Rajlich + - Andrew Rhyne + - Josh Junon + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## License + +(The MIT License) + +Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca> +Copyright (c) 2018-2021 Josh Junon + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/package.json new file mode 100644 index 00000000..311db7e2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/package.json @@ -0,0 +1,118 @@ +{ + "_args": [ + [ + "debug@4.3.3", + "/tmp/repository/main" + ] + ], + "_from": "debug@4.3.3", + "_id": "debug@4.3.3", + "_inBundle": false, + "_integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "_location": "/debug", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "debug@4.3.3", + "name": "debug", + "escapedName": "debug", + "rawSpec": "4.3.3", + "saveSpec": null, + "fetchSpec": "4.3.3" + }, + "_requiredBy": [ + "/@eslint/eslintrc", + "/@humanwhocodes/config-array", + "/@koa/router", + "/@typescript-eslint/eslint-plugin", + "/@typescript-eslint/parser", + "/@typescript-eslint/typescript-estree", + "/agent-base", + "/eslint", + "/extract-zip", + "/http-proxy-agent", + "/https-proxy-agent", + "/koa-mount", + "/koa-send", + "/mocha", + "/playwright" + ], + "_resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "_spec": "4.3.3", + "_where": "/tmp/repository/main", + "author": { + "name": "Josh Junon", + "email": "josh.junon@protonmail.com" + }, + "browser": "./src/browser.js", + "bugs": { + "url": "https://github.com/debug-js/debug/issues" + }, + "contributors": [ + { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io" + }, + { + "name": "Andrew Rhyne", + "email": "rhyneandrew@gmail.com" + } + ], + "dependencies": { + "ms": "2.1.2" + }, + "description": "Lightweight debugging utility for Node.js and the browser", + "devDependencies": { + "brfs": "^2.0.1", + "browserify": "^16.2.3", + "coveralls": "^3.0.2", + "istanbul": "^0.4.5", + "karma": "^3.1.4", + "karma-browserify": "^6.0.0", + "karma-chrome-launcher": "^2.2.0", + "karma-mocha": "^1.3.0", + "mocha": "^5.2.0", + "mocha-lcov-reporter": "^1.2.0", + "xo": "^0.23.0" + }, + "engines": { + "node": ">=6.0" + }, + "files": [ + "src", + "LICENSE", + "README.md" + ], + "homepage": "https://github.com/debug-js/debug#readme", + "keywords": [ + "debug", + "log", + "debugger" + ], + "license": "MIT", + "main": "./src/index.js", + "name": "debug", + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + }, + "repository": { + "type": "git", + "url": "git://github.com/debug-js/debug.git" + }, + "scripts": { + "lint": "xo", + "test": "npm run test:node && npm run test:browser && npm run lint", + "test:browser": "karma start --single-run", + "test:coverage": "cat ./coverage/lcov.info | coveralls", + "test:node": "istanbul cover _mocha -- test.js" + }, + "version": "4.3.3" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/browser.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/browser.js new file mode 100644 index 00000000..cd0fc35d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/browser.js @@ -0,0 +1,269 @@ +/* eslint-env browser */ + +/** + * This is the web browser implementation of `debug()`. + */ + +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = localstorage(); +exports.destroy = (() => { + let warned = false; + + return () => { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; +})(); + +/** + * Colors. + */ + +exports.colors = [ + '#0000CC', + '#0000FF', + '#0033CC', + '#0033FF', + '#0066CC', + '#0066FF', + '#0099CC', + '#0099FF', + '#00CC00', + '#00CC33', + '#00CC66', + '#00CC99', + '#00CCCC', + '#00CCFF', + '#3300CC', + '#3300FF', + '#3333CC', + '#3333FF', + '#3366CC', + '#3366FF', + '#3399CC', + '#3399FF', + '#33CC00', + '#33CC33', + '#33CC66', + '#33CC99', + '#33CCCC', + '#33CCFF', + '#6600CC', + '#6600FF', + '#6633CC', + '#6633FF', + '#66CC00', + '#66CC33', + '#9900CC', + '#9900FF', + '#9933CC', + '#9933FF', + '#99CC00', + '#99CC33', + '#CC0000', + '#CC0033', + '#CC0066', + '#CC0099', + '#CC00CC', + '#CC00FF', + '#CC3300', + '#CC3333', + '#CC3366', + '#CC3399', + '#CC33CC', + '#CC33FF', + '#CC6600', + '#CC6633', + '#CC9900', + '#CC9933', + '#CCCC00', + '#CCCC33', + '#FF0000', + '#FF0033', + '#FF0066', + '#FF0099', + '#FF00CC', + '#FF00FF', + '#FF3300', + '#FF3333', + '#FF3366', + '#FF3399', + '#FF33CC', + '#FF33FF', + '#FF6600', + '#FF6633', + '#FF9900', + '#FF9933', + '#FFCC00', + '#FFCC33' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +// eslint-disable-next-line complexity +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } + + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } + + // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // Is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // Double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + const c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); + + // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + let index = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, match => { + if (match === '%%') { + return; + } + index++; + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. + * + * @api public + */ +exports.log = console.debug || console.log || (() => {}); + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ +function load() { + let r; + try { + r = exports.storage.getItem('debug'); + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +module.exports = require('./common')(exports); + +const {formatters} = module.exports; + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/common.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/common.js new file mode 100644 index 00000000..6d571d28 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/common.js @@ -0,0 +1,274 @@ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + +function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = require('ms'); + createDebug.destroy = destroy; + + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); + + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; + + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; + + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + let enableOverride = null; + let namespacesCache; + let enabledCache; + + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } + + const self = debug; + + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } + + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return '%'; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); + + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); + + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.useColors = createDebug.useColors(); + debug.color = createDebug.selectColor(namespace); + debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. + + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + + return enabledCache; + }, + set: v => { + enableOverride = v; + } + }); + + // Env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + return debug; + } + + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.namespaces = namespaces; + + createDebug.names = []; + createDebug.skips = []; + + let i; + const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + const len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + } + + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); + createDebug.enable(''); + return namespaces; + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + let i; + let len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } + + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + + createDebug.enable(createDebug.load()); + + return createDebug; +} + +module.exports = setup; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/index.js new file mode 100644 index 00000000..bf4c57f2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/index.js @@ -0,0 +1,10 @@ +/** + * Detect Electron renderer / nwjs process, which is node, but we should + * treat as a browser. + */ + +if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/node.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/node.js new file mode 100644 index 00000000..79bc085c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/debug/src/node.js @@ -0,0 +1,263 @@ +/** + * Module dependencies. + */ + +const tty = require('tty'); +const util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + */ + +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.destroy = util.deprecate( + () => {}, + 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' +); + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +try { + // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) + // eslint-disable-next-line import/no-extraneous-dependencies + const supportsColor = require('supports-color'); + + if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { + exports.colors = [ + 20, + 21, + 26, + 27, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 56, + 57, + 62, + 63, + 68, + 69, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 92, + 93, + 98, + 99, + 112, + 113, + 128, + 129, + 134, + 135, + 148, + 149, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 178, + 179, + 184, + 185, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 214, + 215, + 220, + 221 + ]; + } +} catch (error) { + // Swallow - we only care if `supports-color` is available; it doesn't have to be. +} + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(key => { + return /^debug_/i.test(key); +}).reduce((obj, key) => { + // Camel-case + const prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, (_, k) => { + return k.toUpperCase(); + }); + + // Coerce string value into JS value + let val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) { + val = true; + } else if (/^(no|off|false|disabled)$/i.test(val)) { + val = false; + } else if (val === 'null') { + val = null; + } else { + val = Number(val); + } + + obj[prop] = val; + return obj; +}, {}); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts ? + Boolean(exports.inspectOpts.colors) : + tty.isatty(process.stderr.fd); +} + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + const {namespace: name, useColors} = this; + + if (useColors) { + const c = this.color; + const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); + const prefix = ` ${colorCode};1m${name} \u001B[0m`; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); + } else { + args[0] = getDate() + name + ' ' + args[0]; + } +} + +function getDate() { + if (exports.inspectOpts.hideDate) { + return ''; + } + return new Date().toISOString() + ' '; +} + +/** + * Invokes `util.format()` with the specified arguments and writes to stderr. + */ + +function log(...args) { + return process.stderr.write(util.format(...args) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + if (namespaces) { + process.env.DEBUG = namespaces; + } else { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init(debug) { + debug.inspectOpts = {}; + + const keys = Object.keys(exports.inspectOpts); + for (let i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +module.exports = require('./common')(exports); + +const {formatters} = module.exports; + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +formatters.o = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n') + .map(str => str.trim()) + .join(' '); +}; + +/** + * Map %O to `util.inspect()`, allowing multiple lines if needed. + */ + +formatters.O = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/index.js new file mode 100644 index 00000000..721b48cc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/index.js @@ -0,0 +1,59 @@ +'use strict'; +const fileType = require('file-type'); +const isStream = require('is-stream'); +const tarStream = require('tar-stream'); + +module.exports = () => input => { + if (!Buffer.isBuffer(input) && !isStream(input)) { + return Promise.reject(new TypeError(`Expected a Buffer or Stream, got ${typeof input}`)); + } + + if (Buffer.isBuffer(input) && (!fileType(input) || fileType(input).ext !== 'tar')) { + return Promise.resolve([]); + } + + const extract = tarStream.extract(); + const files = []; + + extract.on('entry', (header, stream, cb) => { + const chunk = []; + + stream.on('data', data => chunk.push(data)); + stream.on('end', () => { + const file = { + data: Buffer.concat(chunk), + mode: header.mode, + mtime: header.mtime, + path: header.name, + type: header.type + }; + + if (header.type === 'symlink' || header.type === 'link') { + file.linkname = header.linkname; + } + + files.push(file); + cb(); + }); + }); + + const promise = new Promise((resolve, reject) => { + if (!Buffer.isBuffer(input)) { + input.on('error', reject); + } + + extract.on('finish', () => resolve(files)); + extract.on('error', reject); + }); + + extract.then = promise.then.bind(promise); + extract.catch = promise.catch.bind(promise); + + if (Buffer.isBuffer(input)) { + extract.end(input); + } else { + input.pipe(extract); + } + + return extract; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/license new file mode 100644 index 00000000..db6bc32c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Kevin Mårtensson (github.com/kevva) + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/package.json new file mode 100644 index 00000000..989aaeb3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/package.json @@ -0,0 +1,75 @@ +{ + "_args": [ + [ + "decompress-tar@4.1.1", + "/tmp/repository/main" + ] + ], + "_from": "decompress-tar@4.1.1", + "_id": "decompress-tar@4.1.1", + "_inBundle": false, + "_integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "_location": "/decompress-tar", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "decompress-tar@4.1.1", + "name": "decompress-tar", + "escapedName": "decompress-tar", + "rawSpec": "4.1.1", + "saveSpec": null, + "fetchSpec": "4.1.1" + }, + "_requiredBy": [ + "/decompress", + "/decompress-tarbz2", + "/decompress-targz" + ], + "_resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "_spec": "4.1.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Kevin Mårtensson", + "email": "kevinmartensson@gmail.com", + "url": "https://github.com/kevva" + }, + "bugs": { + "url": "https://github.com/kevva/decompress-tar/issues" + }, + "dependencies": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "description": "decompress tar plugin", + "devDependencies": { + "ava": "*", + "is-jpg": "^1.0.0", + "pify": "^3.0.0", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/kevva/decompress-tar#readme", + "keywords": [ + "decompress", + "decompressplugin", + "extract", + "tar" + ], + "license": "MIT", + "name": "decompress-tar", + "repository": { + "type": "git", + "url": "git+https://github.com/kevva/decompress-tar.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "4.1.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/readme.md new file mode 100644 index 00000000..92730439 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tar/readme.md @@ -0,0 +1,44 @@ +# decompress-tar [![Build Status](https://travis-ci.org/kevva/decompress-tar.svg?branch=master)](https://travis-ci.org/kevva/decompress-tar) + +> tar decompress plugin + + +## Install + +``` +$ npm install decompress-tar +``` + + +## Usage + +```js +const decompress = require('decompress'); +const decompressTar = require('decompress-tar'); + +decompress('unicorn.tar', 'dist', { + plugins: [ + decompressTar() + ] +}).then(() => { + console.log('Files decompressed'); +}); +``` + + +## API + +### decompressTar()(input) + +Returns both a Promise for a Buffer and a [Duplex stream](https://nodejs.org/api/stream.html#stream_class_stream_duplex). + +#### input + +Type: `Buffer` `Stream` + +Buffer or stream to decompress. + + +## License + +MIT © [Kevin Mårtensson](https://github.com/kevva) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/index.js new file mode 100644 index 00000000..9ce7c41b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/index.js @@ -0,0 +1,22 @@ +'use strict'; +const decompressTar = require('decompress-tar'); +const fileType = require('file-type'); +const isStream = require('is-stream'); +const seekBzip = require('seek-bzip'); +const unbzip2Stream = require('unbzip2-stream'); + +module.exports = () => input => { + if (!Buffer.isBuffer(input) && !isStream(input)) { + return Promise.reject(new TypeError(`Expected a Buffer or Stream, got ${typeof input}`)); + } + + if (Buffer.isBuffer(input) && (!fileType(input) || fileType(input).ext !== 'bz2')) { + return Promise.resolve([]); + } + + if (Buffer.isBuffer(input)) { + return decompressTar()(seekBzip.decode(input)); + } + + return decompressTar()(input.pipe(unbzip2Stream())); +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/license new file mode 100644 index 00000000..db6bc32c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Kevin Mårtensson (github.com/kevva) + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/index.js new file mode 100644 index 00000000..347cfa3f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/index.js @@ -0,0 +1,599 @@ +'use strict'; +const toBytes = s => Array.from(s).map(c => c.charCodeAt(0)); +const xpiZipFilename = toBytes('META-INF/mozilla.rsa'); +const oxmlContentTypes = toBytes('[Content_Types].xml'); +const oxmlRels = toBytes('_rels/.rels'); + +module.exports = input => { + const buf = new Uint8Array(input); + + if (!(buf && buf.length > 1)) { + return null; + } + + const check = (header, opts) => { + opts = Object.assign({ + offset: 0 + }, opts); + + for (let i = 0; i < header.length; i++) { + // If a bitmask is set + if (opts.mask) { + // If header doesn't equal `buf` with bits masked off + if (header[i] !== (opts.mask[i] & buf[i + opts.offset])) { + return false; + } + } else if (header[i] !== buf[i + opts.offset]) { + return false; + } + } + + return true; + }; + + if (check([0xFF, 0xD8, 0xFF])) { + return { + ext: 'jpg', + mime: 'image/jpeg' + }; + } + + if (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) { + return { + ext: 'png', + mime: 'image/png' + }; + } + + if (check([0x47, 0x49, 0x46])) { + return { + ext: 'gif', + mime: 'image/gif' + }; + } + + if (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) { + return { + ext: 'webp', + mime: 'image/webp' + }; + } + + if (check([0x46, 0x4C, 0x49, 0x46])) { + return { + ext: 'flif', + mime: 'image/flif' + }; + } + + // Needs to be before `tif` check + if ( + (check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) && + check([0x43, 0x52], {offset: 8}) + ) { + return { + ext: 'cr2', + mime: 'image/x-canon-cr2' + }; + } + + if ( + check([0x49, 0x49, 0x2A, 0x0]) || + check([0x4D, 0x4D, 0x0, 0x2A]) + ) { + return { + ext: 'tif', + mime: 'image/tiff' + }; + } + + if (check([0x42, 0x4D])) { + return { + ext: 'bmp', + mime: 'image/bmp' + }; + } + + if (check([0x49, 0x49, 0xBC])) { + return { + ext: 'jxr', + mime: 'image/vnd.ms-photo' + }; + } + + if (check([0x38, 0x42, 0x50, 0x53])) { + return { + ext: 'psd', + mime: 'image/vnd.adobe.photoshop' + }; + } + + // Zip-based file formats + // Need to be before the `zip` check + if (check([0x50, 0x4B, 0x3, 0x4])) { + if ( + check([0x6D, 0x69, 0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x65, 0x70, 0x75, 0x62, 0x2B, 0x7A, 0x69, 0x70], {offset: 30}) + ) { + return { + ext: 'epub', + mime: 'application/epub+zip' + }; + } + + // Assumes signed `.xpi` from addons.mozilla.org + if (check(xpiZipFilename, {offset: 30})) { + return { + ext: 'xpi', + mime: 'application/x-xpinstall' + }; + } + + // https://github.com/file/file/blob/master/magic/Magdir/msooxml + if (check(oxmlContentTypes, {offset: 30}) || check(oxmlRels, {offset: 30})) { + const sliced = buf.subarray(4, 4 + 2000); + const nextZipHeaderIndex = arr => arr.findIndex((el, i, arr) => arr[i] === 0x50 && arr[i + 1] === 0x4B && arr[i + 2] === 0x3 && arr[i + 3] === 0x4); + const header2Pos = nextZipHeaderIndex(sliced); + + if (header2Pos !== -1) { + const slicedAgain = buf.subarray(header2Pos + 8, header2Pos + 8 + 1000); + const header3Pos = nextZipHeaderIndex(slicedAgain); + + if (header3Pos !== -1) { + const offset = 8 + header2Pos + header3Pos + 30; + + if (check(toBytes('word/'), {offset})) { + return { + ext: 'docx', + mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + }; + } + + if (check(toBytes('ppt/'), {offset})) { + return { + ext: 'pptx', + mime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' + }; + } + + if (check(toBytes('xl/'), {offset})) { + return { + ext: 'xlsx', + mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + }; + } + } + } + } + } + + if ( + check([0x50, 0x4B]) && + (buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) && + (buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8) + ) { + return { + ext: 'zip', + mime: 'application/zip' + }; + } + + if (check([0x75, 0x73, 0x74, 0x61, 0x72], {offset: 257})) { + return { + ext: 'tar', + mime: 'application/x-tar' + }; + } + + if ( + check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) && + (buf[6] === 0x0 || buf[6] === 0x1) + ) { + return { + ext: 'rar', + mime: 'application/x-rar-compressed' + }; + } + + if (check([0x1F, 0x8B, 0x8])) { + return { + ext: 'gz', + mime: 'application/gzip' + }; + } + + if (check([0x42, 0x5A, 0x68])) { + return { + ext: 'bz2', + mime: 'application/x-bzip2' + }; + } + + if (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) { + return { + ext: '7z', + mime: 'application/x-7z-compressed' + }; + } + + if (check([0x78, 0x01])) { + return { + ext: 'dmg', + mime: 'application/x-apple-diskimage' + }; + } + + if (check([0x33, 0x67, 0x70, 0x35]) || // 3gp5 + ( + check([0x0, 0x0, 0x0]) && check([0x66, 0x74, 0x79, 0x70], {offset: 4}) && + ( + check([0x6D, 0x70, 0x34, 0x31], {offset: 8}) || // MP41 + check([0x6D, 0x70, 0x34, 0x32], {offset: 8}) || // MP42 + check([0x69, 0x73, 0x6F, 0x6D], {offset: 8}) || // ISOM + check([0x69, 0x73, 0x6F, 0x32], {offset: 8}) || // ISO2 + check([0x6D, 0x6D, 0x70, 0x34], {offset: 8}) || // MMP4 + check([0x4D, 0x34, 0x56], {offset: 8}) || // M4V + check([0x64, 0x61, 0x73, 0x68], {offset: 8}) // DASH + ) + )) { + return { + ext: 'mp4', + mime: 'video/mp4' + }; + } + + if (check([0x4D, 0x54, 0x68, 0x64])) { + return { + ext: 'mid', + mime: 'audio/midi' + }; + } + + // https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska + if (check([0x1A, 0x45, 0xDF, 0xA3])) { + const sliced = buf.subarray(4, 4 + 4096); + const idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82); + + if (idPos !== -1) { + const docTypePos = idPos + 3; + const findDocType = type => Array.from(type).every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0)); + + if (findDocType('matroska')) { + return { + ext: 'mkv', + mime: 'video/x-matroska' + }; + } + + if (findDocType('webm')) { + return { + ext: 'webm', + mime: 'video/webm' + }; + } + } + } + + if (check([0x0, 0x0, 0x0, 0x14, 0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]) || + check([0x66, 0x72, 0x65, 0x65], {offset: 4}) || + check([0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20], {offset: 4}) || + check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // MJPEG + check([0x77, 0x69, 0x64, 0x65], {offset: 4})) { + return { + ext: 'mov', + mime: 'video/quicktime' + }; + } + + if ( + check([0x52, 0x49, 0x46, 0x46]) && + check([0x41, 0x56, 0x49], {offset: 8}) + ) { + return { + ext: 'avi', + mime: 'video/x-msvideo' + }; + } + + if (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) { + return { + ext: 'wmv', + mime: 'video/x-ms-wmv' + }; + } + + if (check([0x0, 0x0, 0x1, 0xBA])) { + return { + ext: 'mpg', + mime: 'video/mpeg' + }; + } + + // Check for MP3 header at different starting offsets + for (let start = 0; start < 2 && start < (buf.length - 16); start++) { + if ( + check([0x49, 0x44, 0x33], {offset: start}) || // ID3 header + check([0xFF, 0xE2], {offset: start, mask: [0xFF, 0xE2]}) // MPEG 1 or 2 Layer 3 header + ) { + return { + ext: 'mp3', + mime: 'audio/mpeg' + }; + } + } + + if ( + check([0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41], {offset: 4}) || + check([0x4D, 0x34, 0x41, 0x20]) + ) { + return { + ext: 'm4a', + mime: 'audio/m4a' + }; + } + + // Needs to be before `ogg` check + if (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) { + return { + ext: 'opus', + mime: 'audio/opus' + }; + } + + if (check([0x4F, 0x67, 0x67, 0x53])) { + return { + ext: 'ogg', + mime: 'audio/ogg' + }; + } + + if (check([0x66, 0x4C, 0x61, 0x43])) { + return { + ext: 'flac', + mime: 'audio/x-flac' + }; + } + + if ( + check([0x52, 0x49, 0x46, 0x46]) && + check([0x57, 0x41, 0x56, 0x45], {offset: 8}) + ) { + return { + ext: 'wav', + mime: 'audio/x-wav' + }; + } + + if (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) { + return { + ext: 'amr', + mime: 'audio/amr' + }; + } + + if (check([0x25, 0x50, 0x44, 0x46])) { + return { + ext: 'pdf', + mime: 'application/pdf' + }; + } + + if (check([0x4D, 0x5A])) { + return { + ext: 'exe', + mime: 'application/x-msdownload' + }; + } + + if ( + (buf[0] === 0x43 || buf[0] === 0x46) && + check([0x57, 0x53], {offset: 1}) + ) { + return { + ext: 'swf', + mime: 'application/x-shockwave-flash' + }; + } + + if (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) { + return { + ext: 'rtf', + mime: 'application/rtf' + }; + } + + if (check([0x00, 0x61, 0x73, 0x6D])) { + return { + ext: 'wasm', + mime: 'application/wasm' + }; + } + + if ( + check([0x77, 0x4F, 0x46, 0x46]) && + ( + check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || + check([0x4F, 0x54, 0x54, 0x4F], {offset: 4}) + ) + ) { + return { + ext: 'woff', + mime: 'font/woff' + }; + } + + if ( + check([0x77, 0x4F, 0x46, 0x32]) && + ( + check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || + check([0x4F, 0x54, 0x54, 0x4F], {offset: 4}) + ) + ) { + return { + ext: 'woff2', + mime: 'font/woff2' + }; + } + + if ( + check([0x4C, 0x50], {offset: 34}) && + ( + check([0x00, 0x00, 0x01], {offset: 8}) || + check([0x01, 0x00, 0x02], {offset: 8}) || + check([0x02, 0x00, 0x02], {offset: 8}) + ) + ) { + return { + ext: 'eot', + mime: 'application/octet-stream' + }; + } + + if (check([0x00, 0x01, 0x00, 0x00, 0x00])) { + return { + ext: 'ttf', + mime: 'font/ttf' + }; + } + + if (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) { + return { + ext: 'otf', + mime: 'font/otf' + }; + } + + if (check([0x00, 0x00, 0x01, 0x00])) { + return { + ext: 'ico', + mime: 'image/x-icon' + }; + } + + if (check([0x46, 0x4C, 0x56, 0x01])) { + return { + ext: 'flv', + mime: 'video/x-flv' + }; + } + + if (check([0x25, 0x21])) { + return { + ext: 'ps', + mime: 'application/postscript' + }; + } + + if (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) { + return { + ext: 'xz', + mime: 'application/x-xz' + }; + } + + if (check([0x53, 0x51, 0x4C, 0x69])) { + return { + ext: 'sqlite', + mime: 'application/x-sqlite3' + }; + } + + if (check([0x4E, 0x45, 0x53, 0x1A])) { + return { + ext: 'nes', + mime: 'application/x-nintendo-nes-rom' + }; + } + + if (check([0x43, 0x72, 0x32, 0x34])) { + return { + ext: 'crx', + mime: 'application/x-google-chrome-extension' + }; + } + + if ( + check([0x4D, 0x53, 0x43, 0x46]) || + check([0x49, 0x53, 0x63, 0x28]) + ) { + return { + ext: 'cab', + mime: 'application/vnd.ms-cab-compressed' + }; + } + + // Needs to be before `ar` check + if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) { + return { + ext: 'deb', + mime: 'application/x-deb' + }; + } + + if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) { + return { + ext: 'ar', + mime: 'application/x-unix-archive' + }; + } + + if (check([0xED, 0xAB, 0xEE, 0xDB])) { + return { + ext: 'rpm', + mime: 'application/x-rpm' + }; + } + + if ( + check([0x1F, 0xA0]) || + check([0x1F, 0x9D]) + ) { + return { + ext: 'Z', + mime: 'application/x-compress' + }; + } + + if (check([0x4C, 0x5A, 0x49, 0x50])) { + return { + ext: 'lz', + mime: 'application/x-lzip' + }; + } + + if (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) { + return { + ext: 'msi', + mime: 'application/x-msi' + }; + } + + if (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) { + return { + ext: 'mxf', + mime: 'application/mxf' + }; + } + + if (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) { + return { + ext: 'mts', + mime: 'video/mp2t' + }; + } + + if (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) { + return { + ext: 'blend', + mime: 'application/x-blender' + }; + } + + if (check([0x42, 0x50, 0x47, 0xFB])) { + return { + ext: 'bpg', + mime: 'image/bpg' + }; + } + + return null; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/license @@ -0,0 +1,9 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/package.json new file mode 100644 index 00000000..975db509 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/package.json @@ -0,0 +1,145 @@ +{ + "_args": [ + [ + "file-type@6.2.0", + "/tmp/repository/main" + ] + ], + "_from": "file-type@6.2.0", + "_id": "file-type@6.2.0", + "_inBundle": false, + "_integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "_location": "/decompress-tarbz2/file-type", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "file-type@6.2.0", + "name": "file-type", + "escapedName": "file-type", + "rawSpec": "6.2.0", + "saveSpec": null, + "fetchSpec": "6.2.0" + }, + "_requiredBy": [ + "/decompress-tarbz2" + ], + "_resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "_spec": "6.2.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/file-type/issues" + }, + "description": "Detect the file type of a Buffer/Uint8Array", + "devDependencies": { + "ava": "*", + "read-chunk": "^2.0.0", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/file-type#readme", + "keywords": [ + "mime", + "file", + "type", + "archive", + "image", + "img", + "pic", + "picture", + "flash", + "photo", + "video", + "detect", + "check", + "is", + "exif", + "exe", + "binary", + "buffer", + "uint8array", + "jpg", + "png", + "gif", + "webp", + "flif", + "cr2", + "tif", + "bmp", + "jxr", + "psd", + "zip", + "tar", + "rar", + "gz", + "bz2", + "7z", + "dmg", + "mp4", + "m4v", + "mid", + "mkv", + "webm", + "mov", + "avi", + "mpg", + "mp3", + "m4a", + "ogg", + "opus", + "flac", + "wav", + "amr", + "pdf", + "epub", + "swf", + "rtf", + "woff", + "woff2", + "eot", + "ttf", + "otf", + "ico", + "flv", + "ps", + "xz", + "sqlite", + "xpi", + "cab", + "deb", + "ar", + "rpm", + "Z", + "lz", + "msi", + "mxf", + "mts", + "wasm", + "webassembly", + "blend", + "bpg", + "docx", + "pptx", + "xlsx" + ], + "license": "MIT", + "name": "file-type", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/file-type.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "6.2.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/readme.md new file mode 100644 index 00000000..0cc734f3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/node_modules/file-type/readme.md @@ -0,0 +1,165 @@ +# file-type [![Build Status](https://travis-ci.org/sindresorhus/file-type.svg?branch=master)](https://travis-ci.org/sindresorhus/file-type) + +> Detect the file type of a Buffer/Uint8Array + +The file type is detected by checking the [magic number](http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files) of the buffer. + + +## Install + +``` +$ npm install file-type +``` + + +## Usage + +##### Node.js + +```js +const readChunk = require('read-chunk'); +const fileType = require('file-type'); +const buffer = readChunk.sync('unicorn.png', 0, 4100); + +fileType(buffer); +//=> {ext: 'png', mime: 'image/png'} +``` + +Or from a remote location: + +```js +const http = require('http'); +const fileType = require('file-type'); +const url = 'http://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif'; + +http.get(url, res => { + res.once('data', chunk => { + res.destroy(); + console.log(fileType(chunk)); + //=> {ext: 'gif', mime: 'image/gif'} + }); +}); +``` + +##### Browser + +```js +const xhr = new XMLHttpRequest(); +xhr.open('GET', 'unicorn.png'); +xhr.responseType = 'arraybuffer'; + +xhr.onload = () => { + fileType(new Uint8Array(this.response)); + //=> {ext: 'png', mime: 'image/png'} +}; + +xhr.send(); +``` + + +## API + +### fileType(input) + +Returns an `Object` with: + +- `ext` - One of the [supported file types](#supported-file-types) +- `mime` - The [MIME type](http://en.wikipedia.org/wiki/Internet_media_type) + +Or `null` when no match. + +#### input + +Type: `Buffer` `Uint8Array` + +It only needs the first 4100 bytes. + + +## Supported file types + +- [`jpg`](https://en.wikipedia.org/wiki/JPEG) +- [`png`](https://en.wikipedia.org/wiki/Portable_Network_Graphics) +- [`gif`](https://en.wikipedia.org/wiki/GIF) +- [`webp`](https://en.wikipedia.org/wiki/WebP) +- [`flif`](https://en.wikipedia.org/wiki/Free_Lossless_Image_Format) +- [`cr2`](http://fileinfo.com/extension/cr2) +- [`tif`](https://en.wikipedia.org/wiki/Tagged_Image_File_Format) +- [`bmp`](https://en.wikipedia.org/wiki/BMP_file_format) +- [`jxr`](https://en.wikipedia.org/wiki/JPEG_XR) +- [`psd`](https://en.wikipedia.org/wiki/Adobe_Photoshop#File_format) +- [`zip`](https://en.wikipedia.org/wiki/Zip_(file_format)) +- [`tar`](https://en.wikipedia.org/wiki/Tar_(computing)#File_format) +- [`rar`](https://en.wikipedia.org/wiki/RAR_(file_format)) +- [`gz`](https://en.wikipedia.org/wiki/Gzip) +- [`bz2`](https://en.wikipedia.org/wiki/Bzip2) +- [`7z`](https://en.wikipedia.org/wiki/7z) +- [`dmg`](https://en.wikipedia.org/wiki/Apple_Disk_Image) +- [`mp4`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#Filename_extensions) +- [`m4v`](https://en.wikipedia.org/wiki/M4V) +- [`mid`](https://en.wikipedia.org/wiki/MIDI) +- [`mkv`](https://en.wikipedia.org/wiki/Matroska) +- [`webm`](https://en.wikipedia.org/wiki/WebM) +- [`mov`](https://en.wikipedia.org/wiki/QuickTime_File_Format) +- [`avi`](https://en.wikipedia.org/wiki/Audio_Video_Interleave) +- [`wmv`](https://en.wikipedia.org/wiki/Windows_Media_Video) +- [`mpg`](https://en.wikipedia.org/wiki/MPEG-1) +- [`mp3`](https://en.wikipedia.org/wiki/MP3) +- [`m4a`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#.MP4_versus_.M4A) +- [`ogg`](https://en.wikipedia.org/wiki/Ogg) +- [`opus`](https://en.wikipedia.org/wiki/Opus_(audio_format)) +- [`flac`](https://en.wikipedia.org/wiki/FLAC) +- [`wav`](https://en.wikipedia.org/wiki/WAV) +- [`amr`](https://en.wikipedia.org/wiki/Adaptive_Multi-Rate_audio_codec) +- [`pdf`](https://en.wikipedia.org/wiki/Portable_Document_Format) +- [`epub`](https://en.wikipedia.org/wiki/EPUB) +- [`exe`](https://en.wikipedia.org/wiki/.exe) +- [`swf`](https://en.wikipedia.org/wiki/SWF) +- [`rtf`](https://en.wikipedia.org/wiki/Rich_Text_Format) +- [`woff`](https://en.wikipedia.org/wiki/Web_Open_Font_Format) +- [`woff2`](https://en.wikipedia.org/wiki/Web_Open_Font_Format) +- [`eot`](https://en.wikipedia.org/wiki/Embedded_OpenType) +- [`ttf`](https://en.wikipedia.org/wiki/TrueType) +- [`otf`](https://en.wikipedia.org/wiki/OpenType) +- [`ico`](https://en.wikipedia.org/wiki/ICO_(file_format)) +- [`flv`](https://en.wikipedia.org/wiki/Flash_Video) +- [`ps`](https://en.wikipedia.org/wiki/Postscript) +- [`xz`](https://en.wikipedia.org/wiki/Xz) +- [`sqlite`](https://www.sqlite.org/fileformat2.html) +- [`nes`](http://fileinfo.com/extension/nes) +- [`crx`](https://developer.chrome.com/extensions/crx) +- [`xpi`](https://en.wikipedia.org/wiki/XPInstall) +- [`cab`](https://en.wikipedia.org/wiki/Cabinet_(file_format)) +- [`deb`](https://en.wikipedia.org/wiki/Deb_(file_format)) +- [`ar`](https://en.wikipedia.org/wiki/Ar_(Unix)) +- [`rpm`](http://fileinfo.com/extension/rpm) +- [`Z`](http://fileinfo.com/extension/z) +- [`lz`](https://en.wikipedia.org/wiki/Lzip) +- [`msi`](https://en.wikipedia.org/wiki/Windows_Installer) +- [`mxf`](https://en.wikipedia.org/wiki/Material_Exchange_Format) +- [`mts`](https://en.wikipedia.org/wiki/.m2ts) +- [`wasm`](https://en.wikipedia.org/wiki/WebAssembly) +- [`blend`](https://wiki.blender.org/index.php/Dev:Source/Architecture/File_Format) +- [`bpg`](https://bellard.org/bpg/) +- [`docx`](https://en.wikipedia.org/wiki/Office_Open_XML) +- [`pptx`](https://en.wikipedia.org/wiki/Office_Open_XML) +- [`xlsx`](https://en.wikipedia.org/wiki/Office_Open_XML) + +*SVG isn't included as it requires the whole file to be read, but you can get it [here](https://github.com/sindresorhus/is-svg).* + +*Pull request welcome for additional commonly used file types.* + + +## Related + +- [file-type-cli](https://github.com/sindresorhus/file-type-cli) - CLI for this module + + +## Created by + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Mikael Finstad](https://github.com/mifi) + + +## License + +MIT diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/package.json new file mode 100644 index 00000000..43ff67e6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/package.json @@ -0,0 +1,77 @@ +{ + "_args": [ + [ + "decompress-tarbz2@4.1.1", + "/tmp/repository/main" + ] + ], + "_from": "decompress-tarbz2@4.1.1", + "_id": "decompress-tarbz2@4.1.1", + "_inBundle": false, + "_integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "_location": "/decompress-tarbz2", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "decompress-tarbz2@4.1.1", + "name": "decompress-tarbz2", + "escapedName": "decompress-tarbz2", + "rawSpec": "4.1.1", + "saveSpec": null, + "fetchSpec": "4.1.1" + }, + "_requiredBy": [ + "/decompress" + ], + "_resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "_spec": "4.1.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Kevin Mårtensson", + "email": "kevinmartensson@gmail.com", + "url": "github.com/kevva" + }, + "bugs": { + "url": "https://github.com/kevva/decompress-tarbz2/issues" + }, + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "description": "decompress tar.bz2 plugin", + "devDependencies": { + "ava": "*", + "is-jpg": "^1.0.0", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/kevva/decompress-tarbz2#readme", + "keywords": [ + "bz2", + "decompress", + "decompressplugin", + "extract", + "tar", + "tar.bz2", + "tarbz2" + ], + "license": "MIT", + "name": "decompress-tarbz2", + "repository": { + "type": "git", + "url": "git+https://github.com/kevva/decompress-tarbz2.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "4.1.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/readme.md new file mode 100644 index 00000000..6fa0727b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-tarbz2/readme.md @@ -0,0 +1,44 @@ +# decompress-tarbz2 [![Build Status](https://travis-ci.org/kevva/decompress-tarbz2.svg?branch=master)](https://travis-ci.org/kevva/decompress-tarbz2) + +> tar.bz2 decompress plugin + + +## Install + +``` +$ npm install decompress-tarbz2 +``` + + +## Usage + +```js +const decompress = require('decompress'); +const decompressTarbz = require('decompress-tarbz2'); + +decompress('unicorn.tar.gz', 'dist', { + plugins: [ + decompressTarbz() + ] +}).then(() => { + console.log('Files decompressed'); +}); +``` + + +## API + +### decompressTarbz()(input) + +Returns both a `Promise` for a `Buffer` and a [`Duplex stream`](https://nodejs.org/api/stream.html#stream_class_stream_duplex). + +#### input + +Type: `Buffer` `Stream` + +Buffer to decompress. + + +## License + +MIT © [Kevin Mårtensson](https://github.com/kevva) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/index.js new file mode 100644 index 00000000..d67769c1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/index.js @@ -0,0 +1,26 @@ +'use strict'; +const zlib = require('zlib'); +const decompressTar = require('decompress-tar'); +const fileType = require('file-type'); +const isStream = require('is-stream'); + +module.exports = () => input => { + if (!Buffer.isBuffer(input) && !isStream(input)) { + return Promise.reject(new TypeError(`Expected a Buffer or Stream, got ${typeof input}`)); + } + + if (Buffer.isBuffer(input) && (!fileType(input) || fileType(input).ext !== 'gz')) { + return Promise.resolve([]); + } + + const unzip = zlib.createGunzip(); + const result = decompressTar()(unzip); + + if (Buffer.isBuffer(input)) { + unzip.end(input); + } else { + input.pipe(unzip); + } + + return result; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/license new file mode 100644 index 00000000..db6bc32c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Kevin Mårtensson (github.com/kevva) + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/package.json new file mode 100644 index 00000000..bfe99892 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/package.json @@ -0,0 +1,75 @@ +{ + "_args": [ + [ + "decompress-targz@4.1.1", + "/tmp/repository/main" + ] + ], + "_from": "decompress-targz@4.1.1", + "_id": "decompress-targz@4.1.1", + "_inBundle": false, + "_integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "_location": "/decompress-targz", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "decompress-targz@4.1.1", + "name": "decompress-targz", + "escapedName": "decompress-targz", + "rawSpec": "4.1.1", + "saveSpec": null, + "fetchSpec": "4.1.1" + }, + "_requiredBy": [ + "/@vscode/test-web", + "/decompress" + ], + "_resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "_spec": "4.1.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Kevin Mårtensson", + "email": "kevinmartensson@gmail.com", + "url": "https://github.com/kevva" + }, + "bugs": { + "url": "https://github.com/kevva/decompress-targz/issues" + }, + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "description": "decompress tar.gz plugin", + "devDependencies": { + "ava": "*", + "is-jpg": "^1.0.0", + "pify": "^3.0.0", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/kevva/decompress-targz#readme", + "keywords": [ + "decompress", + "decompressplugin", + "extract", + "tar.gz", + "targz" + ], + "license": "MIT", + "name": "decompress-targz", + "repository": { + "type": "git", + "url": "git+https://github.com/kevva/decompress-targz.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "4.1.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/readme.md new file mode 100644 index 00000000..a05c8f9d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-targz/readme.md @@ -0,0 +1,44 @@ +# decompress-targz [![Build Status](https://travis-ci.org/kevva/decompress-targz.svg?branch=master)](https://travis-ci.org/kevva/decompress-targz) + +> tar.gz decompress plugin + + +## Install + +``` +$ npm install decompress-targz +``` + + +## Usage + +```js +const decompress = require('decompress'); +const decompressTargz = require('decompress-targz'); + +decompress('unicorn.tar.gz', 'dist', { + plugins: [ + decompressTargz() + ] +}).then(() => { + console.log('Files decompressed'); +}); +``` + + +## API + +### decompressTargz()(input) + +Returns both a Promise for a Buffer and a [Duplex stream](https://nodejs.org/api/stream.html#stream_class_stream_duplex). + +#### input + +Type: `Buffer` `Stream` + +Buffer or stream to decompress. + + +## License + +MIT © [Kevin Mårtensson](https://github.com/kevva) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/index.js new file mode 100644 index 00000000..3c1f9431 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/index.js @@ -0,0 +1,86 @@ +'use strict'; +const fileType = require('file-type'); +const getStream = require('get-stream'); +const pify = require('pify'); +const yauzl = require('yauzl'); + +const getType = (entry, mode) => { + const IFMT = 61440; + const IFDIR = 16384; + const IFLNK = 40960; + const madeBy = entry.versionMadeBy >> 8; + + if ((mode & IFMT) === IFLNK) { + return 'symlink'; + } + + if ((mode & IFMT) === IFDIR || (madeBy === 0 && entry.externalFileAttributes === 16)) { + return 'directory'; + } + + return 'file'; +}; + +const extractEntry = (entry, zip) => { + const file = { + mode: (entry.externalFileAttributes >> 16) & 0xFFFF, + mtime: entry.getLastModDate(), + path: entry.fileName + }; + + file.type = getType(entry, file.mode); + + if (file.mode === 0 && file.type === 'directory') { + file.mode = 493; + } + + if (file.mode === 0) { + file.mode = 420; + } + + return pify(zip.openReadStream.bind(zip))(entry) + .then(getStream.buffer) + .then(buf => { + file.data = buf; + + if (file.type === 'symlink') { + file.linkname = buf.toString(); + } + + return file; + }) + .catch(err => { + zip.close(); + throw err; + }); +}; + +const extractFile = zip => new Promise((resolve, reject) => { + const files = []; + + zip.readEntry(); + + zip.on('entry', entry => { + extractEntry(entry, zip) + .catch(reject) + .then(file => { + files.push(file); + zip.readEntry(); + }); + }); + + zip.on('error', reject); + zip.on('end', () => resolve(files)); +}); + +module.exports = () => buf => { + if (!Buffer.isBuffer(buf)) { + return Promise.reject(new TypeError(`Expected a Buffer, got ${typeof buf}`)); + } + + if (!fileType(buf) || fileType(buf).ext !== 'zip') { + return Promise.resolve([]); + } + + return pify(yauzl.fromBuffer)(buf, {lazyEntries: true}).then(extractFile); +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/license new file mode 100644 index 00000000..a8ecbbe9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Kevin Mårtensson + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/index.js new file mode 100644 index 00000000..f498c10b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/index.js @@ -0,0 +1,452 @@ +'use strict'; +module.exports = function (buf) { + if (!(buf && buf.length > 1)) { + return null; + } + + if (buf[0] === 0xFF && buf[1] === 0xD8 && buf[2] === 0xFF) { + return { + ext: 'jpg', + mime: 'image/jpeg' + }; + } + + if (buf[0] === 0x89 && buf[1] === 0x50 && buf[2] === 0x4E && buf[3] === 0x47) { + return { + ext: 'png', + mime: 'image/png' + }; + } + + if (buf[0] === 0x47 && buf[1] === 0x49 && buf[2] === 0x46) { + return { + ext: 'gif', + mime: 'image/gif' + }; + } + + if (buf[8] === 0x57 && buf[9] === 0x45 && buf[10] === 0x42 && buf[11] === 0x50) { + return { + ext: 'webp', + mime: 'image/webp' + }; + } + + if (buf[0] === 0x46 && buf[1] === 0x4C && buf[2] === 0x49 && buf[3] === 0x46) { + return { + ext: 'flif', + mime: 'image/flif' + }; + } + + // needs to be before `tif` check + if (((buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0x2A && buf[3] === 0x0) || (buf[0] === 0x4D && buf[1] === 0x4D && buf[2] === 0x0 && buf[3] === 0x2A)) && buf[8] === 0x43 && buf[9] === 0x52) { + return { + ext: 'cr2', + mime: 'image/x-canon-cr2' + }; + } + + if ((buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0x2A && buf[3] === 0x0) || (buf[0] === 0x4D && buf[1] === 0x4D && buf[2] === 0x0 && buf[3] === 0x2A)) { + return { + ext: 'tif', + mime: 'image/tiff' + }; + } + + if (buf[0] === 0x42 && buf[1] === 0x4D) { + return { + ext: 'bmp', + mime: 'image/bmp' + }; + } + + if (buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0xBC) { + return { + ext: 'jxr', + mime: 'image/vnd.ms-photo' + }; + } + + if (buf[0] === 0x38 && buf[1] === 0x42 && buf[2] === 0x50 && buf[3] === 0x53) { + return { + ext: 'psd', + mime: 'image/vnd.adobe.photoshop' + }; + } + + // needs to be before `zip` check + if (buf[0] === 0x50 && buf[1] === 0x4B && buf[2] === 0x3 && buf[3] === 0x4 && buf[30] === 0x6D && buf[31] === 0x69 && buf[32] === 0x6D && buf[33] === 0x65 && buf[34] === 0x74 && buf[35] === 0x79 && buf[36] === 0x70 && buf[37] === 0x65 && buf[38] === 0x61 && buf[39] === 0x70 && buf[40] === 0x70 && buf[41] === 0x6C && buf[42] === 0x69 && buf[43] === 0x63 && buf[44] === 0x61 && buf[45] === 0x74 && buf[46] === 0x69 && buf[47] === 0x6F && buf[48] === 0x6E && buf[49] === 0x2F && buf[50] === 0x65 && buf[51] === 0x70 && buf[52] === 0x75 && buf[53] === 0x62 && buf[54] === 0x2B && buf[55] === 0x7A && buf[56] === 0x69 && buf[57] === 0x70) { + return { + ext: 'epub', + mime: 'application/epub+zip' + }; + } + + // needs to be before `zip` check + // assumes signed .xpi from addons.mozilla.org + if (buf[0] === 0x50 && buf[1] === 0x4B && buf[2] === 0x3 && buf[3] === 0x4 && buf[30] === 0x4D && buf[31] === 0x45 && buf[32] === 0x54 && buf[33] === 0x41 && buf[34] === 0x2D && buf[35] === 0x49 && buf[36] === 0x4E && buf[37] === 0x46 && buf[38] === 0x2F && buf[39] === 0x6D && buf[40] === 0x6F && buf[41] === 0x7A && buf[42] === 0x69 && buf[43] === 0x6C && buf[44] === 0x6C && buf[45] === 0x61 && buf[46] === 0x2E && buf[47] === 0x72 && buf[48] === 0x73 && buf[49] === 0x61) { + return { + ext: 'xpi', + mime: 'application/x-xpinstall' + }; + } + + if (buf[0] === 0x50 && buf[1] === 0x4B && (buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) && (buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8)) { + return { + ext: 'zip', + mime: 'application/zip' + }; + } + + if (buf[257] === 0x75 && buf[258] === 0x73 && buf[259] === 0x74 && buf[260] === 0x61 && buf[261] === 0x72) { + return { + ext: 'tar', + mime: 'application/x-tar' + }; + } + + if (buf[0] === 0x52 && buf[1] === 0x61 && buf[2] === 0x72 && buf[3] === 0x21 && buf[4] === 0x1A && buf[5] === 0x7 && (buf[6] === 0x0 || buf[6] === 0x1)) { + return { + ext: 'rar', + mime: 'application/x-rar-compressed' + }; + } + + if (buf[0] === 0x1F && buf[1] === 0x8B && buf[2] === 0x8) { + return { + ext: 'gz', + mime: 'application/gzip' + }; + } + + if (buf[0] === 0x42 && buf[1] === 0x5A && buf[2] === 0x68) { + return { + ext: 'bz2', + mime: 'application/x-bzip2' + }; + } + + if (buf[0] === 0x37 && buf[1] === 0x7A && buf[2] === 0xBC && buf[3] === 0xAF && buf[4] === 0x27 && buf[5] === 0x1C) { + return { + ext: '7z', + mime: 'application/x-7z-compressed' + }; + } + + if (buf[0] === 0x78 && buf[1] === 0x01) { + return { + ext: 'dmg', + mime: 'application/x-apple-diskimage' + }; + } + + if ( + (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && (buf[3] === 0x18 || buf[3] === 0x20) && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70) || + (buf[0] === 0x33 && buf[1] === 0x67 && buf[2] === 0x70 && buf[3] === 0x35) || + (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1C && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x6D && buf[9] === 0x70 && buf[10] === 0x34 && buf[11] === 0x32 && buf[16] === 0x6D && buf[17] === 0x70 && buf[18] === 0x34 && buf[19] === 0x31 && buf[20] === 0x6D && buf[21] === 0x70 && buf[22] === 0x34 && buf[23] === 0x32 && buf[24] === 0x69 && buf[25] === 0x73 && buf[26] === 0x6F && buf[27] === 0x6D) || + (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1C && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x69 && buf[9] === 0x73 && buf[10] === 0x6F && buf[11] === 0x6D) || + (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1c && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x6D && buf[9] === 0x70 && buf[10] === 0x34 && buf[11] === 0x32 && buf[12] === 0x0 && buf[13] === 0x0 && buf[14] === 0x0 && buf[15] === 0x0) + ) { + return { + ext: 'mp4', + mime: 'video/mp4' + }; + } + + if ((buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1C && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x4D && buf[9] === 0x34 && buf[10] === 0x56)) { + return { + ext: 'm4v', + mime: 'video/x-m4v' + }; + } + + if (buf[0] === 0x4D && buf[1] === 0x54 && buf[2] === 0x68 && buf[3] === 0x64) { + return { + ext: 'mid', + mime: 'audio/midi' + }; + } + + // needs to be before the `webm` check + if (buf[31] === 0x6D && buf[32] === 0x61 && buf[33] === 0x74 && buf[34] === 0x72 && buf[35] === 0x6f && buf[36] === 0x73 && buf[37] === 0x6B && buf[38] === 0x61) { + return { + ext: 'mkv', + mime: 'video/x-matroska' + }; + } + + if (buf[0] === 0x1A && buf[1] === 0x45 && buf[2] === 0xDF && buf[3] === 0xA3) { + return { + ext: 'webm', + mime: 'video/webm' + }; + } + + if (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x14 && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70) { + return { + ext: 'mov', + mime: 'video/quicktime' + }; + } + + if (buf[0] === 0x52 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x46 && buf[8] === 0x41 && buf[9] === 0x56 && buf[10] === 0x49) { + return { + ext: 'avi', + mime: 'video/x-msvideo' + }; + } + + if (buf[0] === 0x30 && buf[1] === 0x26 && buf[2] === 0xB2 && buf[3] === 0x75 && buf[4] === 0x8E && buf[5] === 0x66 && buf[6] === 0xCF && buf[7] === 0x11 && buf[8] === 0xA6 && buf[9] === 0xD9) { + return { + ext: 'wmv', + mime: 'video/x-ms-wmv' + }; + } + + if (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x1 && buf[3].toString(16)[0] === 'b') { + return { + ext: 'mpg', + mime: 'video/mpeg' + }; + } + + if ((buf[0] === 0x49 && buf[1] === 0x44 && buf[2] === 0x33) || (buf[0] === 0xFF && buf[1] === 0xfb)) { + return { + ext: 'mp3', + mime: 'audio/mpeg' + }; + } + + if ((buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x4D && buf[9] === 0x34 && buf[10] === 0x41) || (buf[0] === 0x4D && buf[1] === 0x34 && buf[2] === 0x41 && buf[3] === 0x20)) { + return { + ext: 'm4a', + mime: 'audio/m4a' + }; + } + + // needs to be before `ogg` check + if (buf[28] === 0x4F && buf[29] === 0x70 && buf[30] === 0x75 && buf[31] === 0x73 && buf[32] === 0x48 && buf[33] === 0x65 && buf[34] === 0x61 && buf[35] === 0x64) { + return { + ext: 'opus', + mime: 'audio/opus' + }; + } + + if (buf[0] === 0x4F && buf[1] === 0x67 && buf[2] === 0x67 && buf[3] === 0x53) { + return { + ext: 'ogg', + mime: 'audio/ogg' + }; + } + + if (buf[0] === 0x66 && buf[1] === 0x4C && buf[2] === 0x61 && buf[3] === 0x43) { + return { + ext: 'flac', + mime: 'audio/x-flac' + }; + } + + if (buf[0] === 0x52 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x46 && buf[8] === 0x57 && buf[9] === 0x41 && buf[10] === 0x56 && buf[11] === 0x45) { + return { + ext: 'wav', + mime: 'audio/x-wav' + }; + } + + if (buf[0] === 0x23 && buf[1] === 0x21 && buf[2] === 0x41 && buf[3] === 0x4D && buf[4] === 0x52 && buf[5] === 0x0A) { + return { + ext: 'amr', + mime: 'audio/amr' + }; + } + + if (buf[0] === 0x25 && buf[1] === 0x50 && buf[2] === 0x44 && buf[3] === 0x46) { + return { + ext: 'pdf', + mime: 'application/pdf' + }; + } + + if (buf[0] === 0x4D && buf[1] === 0x5A) { + return { + ext: 'exe', + mime: 'application/x-msdownload' + }; + } + + if ((buf[0] === 0x43 || buf[0] === 0x46) && buf[1] === 0x57 && buf[2] === 0x53) { + return { + ext: 'swf', + mime: 'application/x-shockwave-flash' + }; + } + + if (buf[0] === 0x7B && buf[1] === 0x5C && buf[2] === 0x72 && buf[3] === 0x74 && buf[4] === 0x66) { + return { + ext: 'rtf', + mime: 'application/rtf' + }; + } + + if ( + (buf[0] === 0x77 && buf[1] === 0x4F && buf[2] === 0x46 && buf[3] === 0x46) && + ( + (buf[4] === 0x00 && buf[5] === 0x01 && buf[6] === 0x00 && buf[7] === 0x00) || + (buf[4] === 0x4F && buf[5] === 0x54 && buf[6] === 0x54 && buf[7] === 0x4F) + ) + ) { + return { + ext: 'woff', + mime: 'application/font-woff' + }; + } + + if ( + (buf[0] === 0x77 && buf[1] === 0x4F && buf[2] === 0x46 && buf[3] === 0x32) && + ( + (buf[4] === 0x00 && buf[5] === 0x01 && buf[6] === 0x00 && buf[7] === 0x00) || + (buf[4] === 0x4F && buf[5] === 0x54 && buf[6] === 0x54 && buf[7] === 0x4F) + ) + ) { + return { + ext: 'woff2', + mime: 'application/font-woff' + }; + } + + if ( + (buf[34] === 0x4C && buf[35] === 0x50) && + ( + (buf[8] === 0x00 && buf[9] === 0x00 && buf[10] === 0x01) || + (buf[8] === 0x01 && buf[9] === 0x00 && buf[10] === 0x02) || + (buf[8] === 0x02 && buf[9] === 0x00 && buf[10] === 0x02) + ) + ) { + return { + ext: 'eot', + mime: 'application/octet-stream' + }; + } + + if (buf[0] === 0x00 && buf[1] === 0x01 && buf[2] === 0x00 && buf[3] === 0x00 && buf[4] === 0x00) { + return { + ext: 'ttf', + mime: 'application/font-sfnt' + }; + } + + if (buf[0] === 0x4F && buf[1] === 0x54 && buf[2] === 0x54 && buf[3] === 0x4F && buf[4] === 0x00) { + return { + ext: 'otf', + mime: 'application/font-sfnt' + }; + } + + if (buf[0] === 0x00 && buf[1] === 0x00 && buf[2] === 0x01 && buf[3] === 0x00) { + return { + ext: 'ico', + mime: 'image/x-icon' + }; + } + + if (buf[0] === 0x46 && buf[1] === 0x4C && buf[2] === 0x56 && buf[3] === 0x01) { + return { + ext: 'flv', + mime: 'video/x-flv' + }; + } + + if (buf[0] === 0x25 && buf[1] === 0x21) { + return { + ext: 'ps', + mime: 'application/postscript' + }; + } + + if (buf[0] === 0xFD && buf[1] === 0x37 && buf[2] === 0x7A && buf[3] === 0x58 && buf[4] === 0x5A && buf[5] === 0x00) { + return { + ext: 'xz', + mime: 'application/x-xz' + }; + } + + if (buf[0] === 0x53 && buf[1] === 0x51 && buf[2] === 0x4C && buf[3] === 0x69) { + return { + ext: 'sqlite', + mime: 'application/x-sqlite3' + }; + } + + if (buf[0] === 0x4E && buf[1] === 0x45 && buf[2] === 0x53 && buf[3] === 0x1A) { + return { + ext: 'nes', + mime: 'application/x-nintendo-nes-rom' + }; + } + + if (buf[0] === 0x43 && buf[1] === 0x72 && buf[2] === 0x32 && buf[3] === 0x34) { + return { + ext: 'crx', + mime: 'application/x-google-chrome-extension' + }; + } + + if ( + (buf[0] === 0x4D && buf[1] === 0x53 && buf[2] === 0x43 && buf[3] === 0x46) || + (buf[0] === 0x49 && buf[1] === 0x53 && buf[2] === 0x63 && buf[3] === 0x28) + ) { + return { + ext: 'cab', + mime: 'application/vnd.ms-cab-compressed' + }; + } + + // needs to be before `ar` check + if (buf[0] === 0x21 && buf[1] === 0x3C && buf[2] === 0x61 && buf[3] === 0x72 && buf[4] === 0x63 && buf[5] === 0x68 && buf[6] === 0x3E && buf[7] === 0x0A && buf[8] === 0x64 && buf[9] === 0x65 && buf[10] === 0x62 && buf[11] === 0x69 && buf[12] === 0x61 && buf[13] === 0x6E && buf[14] === 0x2D && buf[15] === 0x62 && buf[16] === 0x69 && buf[17] === 0x6E && buf[18] === 0x61 && buf[19] === 0x72 && buf[20] === 0x79) { + return { + ext: 'deb', + mime: 'application/x-deb' + }; + } + + if (buf[0] === 0x21 && buf[1] === 0x3C && buf[2] === 0x61 && buf[3] === 0x72 && buf[4] === 0x63 && buf[5] === 0x68 && buf[6] === 0x3E) { + return { + ext: 'ar', + mime: 'application/x-unix-archive' + }; + } + + if (buf[0] === 0xED && buf[1] === 0xAB && buf[2] === 0xEE && buf[3] === 0xDB) { + return { + ext: 'rpm', + mime: 'application/x-rpm' + }; + } + + if ( + (buf[0] === 0x1F && buf[1] === 0xA0) || + (buf[0] === 0x1F && buf[1] === 0x9D) + ) { + return { + ext: 'Z', + mime: 'application/x-compress' + }; + } + + if (buf[0] === 0x4C && buf[1] === 0x5A && buf[2] === 0x49 && buf[3] === 0x50) { + return { + ext: 'lz', + mime: 'application/x-lzip' + }; + } + + if (buf[0] === 0xD0 && buf[1] === 0xCF && buf[2] === 0x11 && buf[3] === 0xE0 && buf[4] === 0xA1 && buf[5] === 0xB1 && buf[6] === 0x1A && buf[7] === 0xE1) { + return { + ext: 'msi', + mime: 'application/x-msi' + }; + } + + return null; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/license @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/package.json new file mode 100644 index 00000000..38c454bf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/package.json @@ -0,0 +1,138 @@ +{ + "_args": [ + [ + "file-type@3.9.0", + "/tmp/repository/main" + ] + ], + "_from": "file-type@3.9.0", + "_id": "file-type@3.9.0", + "_inBundle": false, + "_integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "_location": "/decompress-unzip/file-type", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "file-type@3.9.0", + "name": "file-type", + "escapedName": "file-type", + "rawSpec": "3.9.0", + "saveSpec": null, + "fetchSpec": "3.9.0" + }, + "_requiredBy": [ + "/decompress-unzip" + ], + "_resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "_spec": "3.9.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/file-type/issues" + }, + "description": "Detect the file type of a Buffer/Uint8Array", + "devDependencies": { + "ava": "*", + "read-chunk": "^2.0.0", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/file-type#readme", + "keywords": [ + "mime", + "file", + "type", + "archive", + "image", + "img", + "pic", + "picture", + "flash", + "photo", + "video", + "type", + "detect", + "check", + "is", + "exif", + "exe", + "binary", + "buffer", + "uint8array", + "jpg", + "png", + "gif", + "webp", + "flif", + "cr2", + "tif", + "bmp", + "jxr", + "psd", + "zip", + "tar", + "rar", + "gz", + "bz2", + "7z", + "dmg", + "mp4", + "m4v", + "mid", + "mkv", + "webm", + "mov", + "avi", + "mpg", + "mp3", + "m4a", + "ogg", + "opus", + "flac", + "wav", + "amr", + "pdf", + "epub", + "exe", + "swf", + "rtf", + "woff", + "woff2", + "eot", + "ttf", + "otf", + "ico", + "flv", + "ps", + "xz", + "sqlite", + "xpi", + "cab", + "deb", + "ar", + "rpm", + "Z", + "lz", + "msi" + ], + "license": "MIT", + "name": "file-type", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/file-type.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "3.9.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/readme.md new file mode 100644 index 00000000..32ecf09d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/node_modules/file-type/readme.md @@ -0,0 +1,149 @@ +# file-type [![Build Status](https://travis-ci.org/sindresorhus/file-type.svg?branch=master)](https://travis-ci.org/sindresorhus/file-type) + +> Detect the file type of a Buffer/Uint8Array + +The file type is detected by checking the [magic number](http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files) of the buffer. + + +## Install + +``` +$ npm install --save file-type +``` + + +## Usage + +##### Node.js + +```js +const readChunk = require('read-chunk'); // npm install read-chunk +const fileType = require('file-type'); +const buffer = readChunk.sync('unicorn.png', 0, 262); + +fileType(buffer); +//=> {ext: 'png', mime: 'image/png'} +``` + +or from a remote location: + +```js +const http = require('http'); +const fileType = require('file-type'); +const url = 'http://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif'; + +http.get(url, res => { + res.once('data', chunk => { + res.destroy(); + console.log(fileType(chunk)); + //=> {ext: 'gif', mime: 'image/gif'} + }); +}); +``` + +##### Browser + +```js +const xhr = new XMLHttpRequest(); +xhr.open('GET', 'unicorn.png'); +xhr.responseType = 'arraybuffer'; + +xhr.onload = () => { + fileType(new Uint8Array(this.response)); + //=> {ext: 'png', mime: 'image/png'} +}; + +xhr.send(); +``` + + +## API + +### fileType(buffer) + +Returns an `Object` (or `null` when no match) with: + +- `ext` - one of the [supported file types](#supported-file-types) +- `mime` - the [MIME type](http://en.wikipedia.org/wiki/Internet_media_type) + +#### buffer + +Type: `Buffer` `Uint8Array` + +It only needs the first 262 bytes. + + +## Supported file types + +- [`jpg`](https://en.wikipedia.org/wiki/JPEG) +- [`png`](https://en.wikipedia.org/wiki/Portable_Network_Graphics) +- [`gif`](https://en.wikipedia.org/wiki/GIF) +- [`webp`](https://en.wikipedia.org/wiki/WebP) +- [`flif`](https://en.wikipedia.org/wiki/Free_Lossless_Image_Format) +- [`cr2`](http://fileinfo.com/extension/cr2) +- [`tif`](https://en.wikipedia.org/wiki/Tagged_Image_File_Format) +- [`bmp`](https://en.wikipedia.org/wiki/BMP_file_format) +- [`jxr`](https://en.wikipedia.org/wiki/JPEG_XR) +- [`psd`](https://en.wikipedia.org/wiki/Adobe_Photoshop#File_format) +- [`zip`](https://en.wikipedia.org/wiki/Zip_(file_format)) +- [`tar`](https://en.wikipedia.org/wiki/Tar_(computing)#File_format) +- [`rar`](https://en.wikipedia.org/wiki/RAR_(file_format)) +- [`gz`](https://en.wikipedia.org/wiki/Gzip) +- [`bz2`](https://en.wikipedia.org/wiki/Bzip2) +- [`7z`](https://en.wikipedia.org/wiki/7z) +- [`dmg`](https://en.wikipedia.org/wiki/Apple_Disk_Image) +- [`mp4`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#Filename_extensions) +- [`m4v`](https://en.wikipedia.org/wiki/M4V) +- [`mid`](https://en.wikipedia.org/wiki/MIDI) +- [`mkv`](https://en.wikipedia.org/wiki/Matroska) +- [`webm`](https://en.wikipedia.org/wiki/WebM) +- [`mov`](https://en.wikipedia.org/wiki/QuickTime_File_Format) +- [`avi`](https://en.wikipedia.org/wiki/Audio_Video_Interleave) +- [`wmv`](https://en.wikipedia.org/wiki/Windows_Media_Video) +- [`mpg`](https://en.wikipedia.org/wiki/MPEG-1) +- [`mp3`](https://en.wikipedia.org/wiki/MP3) +- [`m4a`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#.MP4_versus_.M4A) +- [`ogg`](https://en.wikipedia.org/wiki/Ogg) +- [`opus`](https://en.wikipedia.org/wiki/Opus_(audio_format)) +- [`flac`](https://en.wikipedia.org/wiki/FLAC) +- [`wav`](https://en.wikipedia.org/wiki/WAV) +- [`amr`](https://en.wikipedia.org/wiki/Adaptive_Multi-Rate_audio_codec) +- [`pdf`](https://en.wikipedia.org/wiki/Portable_Document_Format) +- [`epub`](https://en.wikipedia.org/wiki/EPUB) +- [`exe`](https://en.wikipedia.org/wiki/.exe) +- [`swf`](https://en.wikipedia.org/wiki/SWF) +- [`rtf`](https://en.wikipedia.org/wiki/Rich_Text_Format) +- [`woff`](https://en.wikipedia.org/wiki/Web_Open_Font_Format) +- [`woff2`](https://en.wikipedia.org/wiki/Web_Open_Font_Format) +- [`eot`](https://en.wikipedia.org/wiki/Embedded_OpenType) +- [`ttf`](https://en.wikipedia.org/wiki/TrueType) +- [`otf`](https://en.wikipedia.org/wiki/OpenType) +- [`ico`](https://en.wikipedia.org/wiki/ICO_(file_format)) +- [`flv`](https://en.wikipedia.org/wiki/Flash_Video) +- [`ps`](https://en.wikipedia.org/wiki/Postscript) +- [`xz`](https://en.wikipedia.org/wiki/Xz) +- [`sqlite`](https://www.sqlite.org/fileformat2.html) +- [`nes`](http://fileinfo.com/extension/nes) +- [`crx`](https://developer.chrome.com/extensions/crx) +- [`xpi`](https://en.wikipedia.org/wiki/XPInstall) +- [`cab`](https://en.wikipedia.org/wiki/Cabinet_(file_format)) +- [`deb`](https://en.wikipedia.org/wiki/Deb_(file_format)) +- [`ar`](https://en.wikipedia.org/wiki/Ar_(Unix)) +- [`rpm`](http://fileinfo.com/extension/rpm) +- [`Z`](http://fileinfo.com/extension/z) +- [`lz`](https://en.wikipedia.org/wiki/Lzip) +- [`msi`](https://en.wikipedia.org/wiki/Windows_Installer) + +*SVG isn't included as it requires the whole file to be read, but you can get it [here](https://github.com/sindresorhus/is-svg).* + +*PR welcome for additional commonly used file types.* + + +## Related + +- [file-type-cli](https://github.com/sindresorhus/file-type-cli) - CLI for this module + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/package.json new file mode 100644 index 00000000..b1dea177 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/package.json @@ -0,0 +1,76 @@ +{ + "_args": [ + [ + "decompress-unzip@4.0.1", + "/tmp/repository/main" + ] + ], + "_from": "decompress-unzip@4.0.1", + "_id": "decompress-unzip@4.0.1", + "_inBundle": false, + "_integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "_location": "/decompress-unzip", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "decompress-unzip@4.0.1", + "name": "decompress-unzip", + "escapedName": "decompress-unzip", + "rawSpec": "4.0.1", + "saveSpec": null, + "fetchSpec": "4.0.1" + }, + "_requiredBy": [ + "/decompress" + ], + "_resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "_spec": "4.0.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Kevin Mårtensson", + "email": "kevinmartensson@gmail.com", + "url": "https://github.com/kevva" + }, + "bugs": { + "url": "https://github.com/kevva/decompress-unzip/issues" + }, + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "description": "decompress zip plugin", + "devDependencies": { + "ava": "*", + "is-jpg": "^1.0.0", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/kevva/decompress-unzip#readme", + "keywords": [ + "decompress", + "decompressplugin", + "extract", + "zip" + ], + "license": "MIT", + "name": "decompress-unzip", + "repository": { + "type": "git", + "url": "git+https://github.com/kevva/decompress-unzip.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "4.0.1", + "xo": { + "esnext": true + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/readme.md new file mode 100644 index 00000000..b03f25f9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress-unzip/readme.md @@ -0,0 +1,42 @@ +# decompress-unzip [![Build Status](https://travis-ci.org/kevva/decompress-unzip.svg?branch=master)](https://travis-ci.org/kevva/decompress-unzip) + +> zip decompress plugin + + +## Install + +``` +$ npm install --save decompress-unzip +``` + + +## Usage + +```js +const decompress = require('decompress'); +const decompressUnzip = require('decompress-unzip'); + +decompress('unicorn.zip', 'dist', { + plugins: [ + decompressUnzip() + ] +}).then(() => { + console.log('Files decompressed'); +}); +``` + + +## API + +### decompressUnzip()(buf) + +#### buf + +Type: `Buffer` + +Buffer to decompress. + + +## License + +MIT © [Kevin Mårtensson](https://github.com/kevva) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/index.js new file mode 100644 index 00000000..6aa67ca9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/index.js @@ -0,0 +1,151 @@ +'use strict'; +const path = require('path'); +const fs = require('graceful-fs'); +const decompressTar = require('decompress-tar'); +const decompressTarbz2 = require('decompress-tarbz2'); +const decompressTargz = require('decompress-targz'); +const decompressUnzip = require('decompress-unzip'); +const makeDir = require('make-dir'); +const pify = require('pify'); +const stripDirs = require('strip-dirs'); + +const fsP = pify(fs); + +const runPlugins = (input, opts) => { + if (opts.plugins.length === 0) { + return Promise.resolve([]); + } + + return Promise.all(opts.plugins.map(x => x(input, opts))).then(files => files.reduce((a, b) => a.concat(b))); +}; + +const safeMakeDir = (dir, realOutputPath) => { + return fsP.realpath(dir) + .catch(_ => { + const parent = path.dirname(dir); + return safeMakeDir(parent, realOutputPath); + }) + .then(realParentPath => { + if (realParentPath.indexOf(realOutputPath) !== 0) { + throw (new Error('Refusing to create a directory outside the output path.')); + } + + return makeDir(dir).then(fsP.realpath); + }); +}; + +const preventWritingThroughSymlink = (destination, realOutputPath) => { + return fsP.readlink(destination) + .catch(_ => { + // Either no file exists, or it's not a symlink. In either case, this is + // not an escape we need to worry about in this phase. + return null; + }) + .then(symlinkPointsTo => { + if (symlinkPointsTo) { + throw new Error('Refusing to write into a symlink'); + } + + // No symlink exists at `destination`, so we can continue + return realOutputPath; + }); +}; + +const extractFile = (input, output, opts) => runPlugins(input, opts).then(files => { + if (opts.strip > 0) { + files = files + .map(x => { + x.path = stripDirs(x.path, opts.strip); + return x; + }) + .filter(x => x.path !== '.'); + } + + if (typeof opts.filter === 'function') { + files = files.filter(opts.filter); + } + + if (typeof opts.map === 'function') { + files = files.map(opts.map); + } + + if (!output) { + return files; + } + + return Promise.all(files.map(x => { + const dest = path.join(output, x.path); + const mode = x.mode & ~process.umask(); + const now = new Date(); + + if (x.type === 'directory') { + return makeDir(output) + .then(outputPath => fsP.realpath(outputPath)) + .then(realOutputPath => safeMakeDir(dest, realOutputPath)) + .then(() => fsP.utimes(dest, now, x.mtime)) + .then(() => x); + } + + return makeDir(output) + .then(outputPath => fsP.realpath(outputPath)) + .then(realOutputPath => { + // Attempt to ensure parent directory exists (failing if it's outside the output dir) + return safeMakeDir(path.dirname(dest), realOutputPath) + .then(() => realOutputPath); + }) + .then(realOutputPath => { + if (x.type === 'file') { + return preventWritingThroughSymlink(dest, realOutputPath); + } + + return realOutputPath; + }) + .then(realOutputPath => { + return fsP.realpath(path.dirname(dest)) + .then(realDestinationDir => { + if (realDestinationDir.indexOf(realOutputPath) !== 0) { + throw (new Error('Refusing to write outside output directory: ' + realDestinationDir)); + } + }); + }) + .then(() => { + if (x.type === 'link') { + return fsP.link(x.linkname, dest); + } + + if (x.type === 'symlink' && process.platform === 'win32') { + return fsP.link(x.linkname, dest); + } + + if (x.type === 'symlink') { + return fsP.symlink(x.linkname, dest); + } + + return fsP.writeFile(dest, x.data, {mode}); + }) + .then(() => x.type === 'file' && fsP.utimes(dest, now, x.mtime)) + .then(() => x); + })); +}); + +module.exports = (input, output, opts) => { + if (typeof input !== 'string' && !Buffer.isBuffer(input)) { + return Promise.reject(new TypeError('Input file required')); + } + + if (typeof output === 'object') { + opts = output; + output = null; + } + + opts = Object.assign({plugins: [ + decompressTar(), + decompressTarbz2(), + decompressTargz(), + decompressUnzip() + ]}, opts); + + const read = typeof input === 'string' ? fsP.readFile(input) : Promise.resolve(input); + + return read.then(buf => extractFile(buf, output, opts)); +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/license new file mode 100644 index 00000000..db6bc32c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Kevin Mårtensson (github.com/kevva) + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/package.json new file mode 100644 index 00000000..67739a38 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/package.json @@ -0,0 +1,96 @@ +{ + "_args": [ + [ + "decompress@4.2.1", + "/tmp/repository/main" + ] + ], + "_from": "decompress@4.2.1", + "_id": "decompress@4.2.1", + "_inBundle": false, + "_integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "_location": "/decompress", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "decompress@4.2.1", + "name": "decompress", + "escapedName": "decompress", + "rawSpec": "4.2.1", + "saveSpec": null, + "fetchSpec": "4.2.1" + }, + "_requiredBy": [ + "/@vscode/test-web" + ], + "_resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "_spec": "4.2.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Kevin Mårtensson", + "email": "kevinmartensson@gmail.com", + "url": "github.com/kevva" + }, + "ava": { + "require": [ + "esm" + ] + }, + "bugs": { + "url": "https://github.com/kevva/decompress/issues" + }, + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "description": "Extracting archives made easy", + "devDependencies": { + "ava": "*", + "esm": "^3.2.25", + "is-jpg": "^1.0.0", + "path-exists": "^3.0.0", + "pify": "^2.3.0", + "rimraf": "^3.0.2", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/kevva/decompress#readme", + "keywords": [ + "bz2", + "bzip2", + "decompress", + "extract", + "tar", + "tar.bz", + "tar.gz", + "zip", + "unzip" + ], + "license": "MIT", + "name": "decompress", + "repository": { + "type": "git", + "url": "git+https://github.com/kevva/decompress.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "4.2.1", + "xo": { + "rules": { + "promise/prefer-await-to-then": "off" + } + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/readme.md new file mode 100644 index 00000000..fd23f916 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/decompress/readme.md @@ -0,0 +1,105 @@ +# decompress [![Build Status](https://travis-ci.org/kevva/decompress.svg?branch=master)](https://travis-ci.org/kevva/decompress) + +> Extracting archives made easy + +*See [decompress-cli](https://github.com/kevva/decompress-cli) for the command-line version.* + +## Install + +``` +$ npm install decompress +``` + + +## Usage + +```js +const decompress = require('decompress'); + +decompress('unicorn.zip', 'dist').then(files => { + console.log('done!'); +}); +``` + + +## API + +### decompress(input, [output], [options]) + +Returns a Promise for an array of files in the following format: + +```js +{ + data: Buffer, + mode: Number, + mtime: String, + path: String, + type: String +} +``` + +#### input + +Type: `string` `Buffer` + +File to decompress. + +#### output + +Type: `string` + +Output directory. + +#### options + +##### filter + +Type: `Function` + +Filter out files before extracting. E.g: + +```js +decompress('unicorn.zip', 'dist', { + filter: file => path.extname(file.path) !== '.exe' +}).then(files => { + console.log('done!'); +}); +``` + +*Note that in the current implementation, **`filter` is only applied after fully reading all files from the archive in memory**. Do not rely on this option to limit the amount of memory used by `decompress` to the size of the files included by `filter`. `decompress` will read the entire compressed file into memory regardless.* + +##### map + +Type: `Function` + +Map files before extracting: E.g: + +```js +decompress('unicorn.zip', 'dist', { + map: file => { + file.path = `unicorn-${file.path}`; + return file; + } +}).then(files => { + console.log('done!'); +}); +``` + +##### plugins + +Type: `Array`
+Default: `[decompressTar(), decompressTarbz2(), decompressTargz(), decompressUnzip()]` + +Array of [plugins](https://www.npmjs.com/browse/keyword/decompressplugin) to use. + +##### strip + +Type: `number`
+Default: `0` + +Remove leading directory components from extracted files. + + +## License + +MIT © [Kevin Mårtensson](https://github.com/kevva) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/.travis.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/.travis.yml new file mode 100644 index 00000000..4af02b3d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - '0.8' + - '0.10' + - '0.12' + - 'iojs' +before_install: + - npm install -g npm@latest diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/LICENSE new file mode 100644 index 00000000..ee27ba4b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/LICENSE @@ -0,0 +1,18 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/example/cmp.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/example/cmp.js new file mode 100644 index 00000000..67014b88 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/example/cmp.js @@ -0,0 +1,11 @@ +var equal = require('../'); +console.dir([ + equal( + { a : [ 2, 3 ], b : [ 4 ] }, + { a : [ 2, 3 ], b : [ 4 ] } + ), + equal( + { x : 5, y : [6] }, + { x : 5, y : 6 } + ) +]); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/index.js new file mode 100644 index 00000000..0772f8c7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/index.js @@ -0,0 +1,94 @@ +var pSlice = Array.prototype.slice; +var objectKeys = require('./lib/keys.js'); +var isArguments = require('./lib/is_arguments.js'); + +var deepEqual = module.exports = function (actual, expected, opts) { + if (!opts) opts = {}; + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + + } else if (actual instanceof Date && expected instanceof Date) { + return actual.getTime() === expected.getTime(); + + // 7.3. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') { + return opts.strict ? actual === expected : actual == expected; + + // 7.4. For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else { + return objEquiv(actual, expected, opts); + } +} + +function isUndefinedOrNull(value) { + return value === null || value === undefined; +} + +function isBuffer (x) { + if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false; + if (typeof x.copy !== 'function' || typeof x.slice !== 'function') { + return false; + } + if (x.length > 0 && typeof x[0] !== 'number') return false; + return true; +} + +function objEquiv(a, b, opts) { + var i, key; + if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) + return false; + // an identical 'prototype' property. + if (a.prototype !== b.prototype) return false; + //~~~I've managed to break Object.keys through screwy arguments passing. + // Converting to array solves the problem. + if (isArguments(a)) { + if (!isArguments(b)) { + return false; + } + a = pSlice.call(a); + b = pSlice.call(b); + return deepEqual(a, b, opts); + } + if (isBuffer(a)) { + if (!isBuffer(b)) { + return false; + } + if (a.length !== b.length) return false; + for (i = 0; i < a.length; i++) { + if (a[i] !== b[i]) return false; + } + return true; + } + try { + var ka = objectKeys(a), + kb = objectKeys(b); + } catch (e) {//happens when one is a string literal and the other isn't + return false; + } + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length != kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] != kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!deepEqual(a[key], b[key], opts)) return false; + } + return typeof a === typeof b; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/lib/is_arguments.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/lib/is_arguments.js new file mode 100644 index 00000000..1ff150fc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/lib/is_arguments.js @@ -0,0 +1,20 @@ +var supportsArgumentsClass = (function(){ + return Object.prototype.toString.call(arguments) +})() == '[object Arguments]'; + +exports = module.exports = supportsArgumentsClass ? supported : unsupported; + +exports.supported = supported; +function supported(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; +}; + +exports.unsupported = unsupported; +function unsupported(object){ + return object && + typeof object == 'object' && + typeof object.length == 'number' && + Object.prototype.hasOwnProperty.call(object, 'callee') && + !Object.prototype.propertyIsEnumerable.call(object, 'callee') || + false; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/lib/keys.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/lib/keys.js new file mode 100644 index 00000000..13af263f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/lib/keys.js @@ -0,0 +1,9 @@ +exports = module.exports = typeof Object.keys === 'function' + ? Object.keys : shim; + +exports.shim = shim; +function shim (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/package.json new file mode 100644 index 00000000..c0b17ce9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/package.json @@ -0,0 +1,90 @@ +{ + "_args": [ + [ + "deep-equal@1.0.1", + "/tmp/repository/main" + ] + ], + "_from": "deep-equal@1.0.1", + "_id": "deep-equal@1.0.1", + "_inBundle": false, + "_integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "_location": "/deep-equal", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "deep-equal@1.0.1", + "name": "deep-equal", + "escapedName": "deep-equal", + "rawSpec": "1.0.1", + "saveSpec": null, + "fetchSpec": "1.0.1" + }, + "_requiredBy": [ + "/http-assert" + ], + "_resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "_spec": "1.0.1", + "_where": "/tmp/repository/main", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/node-deep-equal/issues" + }, + "description": "node's assert.deepEqual algorithm", + "devDependencies": { + "tape": "^3.5.0" + }, + "directories": { + "lib": ".", + "example": "example", + "test": "test" + }, + "homepage": "https://github.com/substack/node-deep-equal#readme", + "keywords": [ + "equality", + "equal", + "compare" + ], + "license": "MIT", + "main": "index.js", + "name": "deep-equal", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/substack/node-deep-equal.git" + }, + "scripts": { + "test": "tape test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": { + "ie": [ + 6, + 7, + 8, + 9 + ], + "ff": [ + 3.5, + 10, + 15 + ], + "chrome": [ + 10, + 22 + ], + "safari": [ + 5.1 + ], + "opera": [ + 12 + ] + } + }, + "version": "1.0.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/readme.markdown b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/readme.markdown new file mode 100644 index 00000000..f489c2a3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/readme.markdown @@ -0,0 +1,61 @@ +# deep-equal + +Node's `assert.deepEqual() algorithm` as a standalone module. + +This module is around [5 times faster](https://gist.github.com/2790507) +than wrapping `assert.deepEqual()` in a `try/catch`. + +[![browser support](https://ci.testling.com/substack/node-deep-equal.png)](https://ci.testling.com/substack/node-deep-equal) + +[![build status](https://secure.travis-ci.org/substack/node-deep-equal.png)](https://travis-ci.org/substack/node-deep-equal) + +# example + +``` js +var equal = require('deep-equal'); +console.dir([ + equal( + { a : [ 2, 3 ], b : [ 4 ] }, + { a : [ 2, 3 ], b : [ 4 ] } + ), + equal( + { x : 5, y : [6] }, + { x : 5, y : 6 } + ) +]); +``` + +# methods + +``` js +var deepEqual = require('deep-equal') +``` + +## deepEqual(a, b, opts) + +Compare objects `a` and `b`, returning whether they are equal according to a +recursive equality algorithm. + +If `opts.strict` is `true`, use strict equality (`===`) to compare leaf nodes. +The default is to use coercive equality (`==`) because that's how +`assert.deepEqual()` works by default. + +# install + +With [npm](http://npmjs.org) do: + +``` +npm install deep-equal +``` + +# test + +With [npm](http://npmjs.org) do: + +``` +npm test +``` + +# license + +MIT. Derived largely from node's assert module. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/test/cmp.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/test/cmp.js new file mode 100644 index 00000000..2aab5f96 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/deep-equal/test/cmp.js @@ -0,0 +1,95 @@ +var test = require('tape'); +var equal = require('../'); +var isArguments = require('../lib/is_arguments.js'); +var objectKeys = require('../lib/keys.js'); + +test('equal', function (t) { + t.ok(equal( + { a : [ 2, 3 ], b : [ 4 ] }, + { a : [ 2, 3 ], b : [ 4 ] } + )); + t.end(); +}); + +test('not equal', function (t) { + t.notOk(equal( + { x : 5, y : [6] }, + { x : 5, y : 6 } + )); + t.end(); +}); + +test('nested nulls', function (t) { + t.ok(equal([ null, null, null ], [ null, null, null ])); + t.end(); +}); + +test('strict equal', function (t) { + t.notOk(equal( + [ { a: 3 }, { b: 4 } ], + [ { a: '3' }, { b: '4' } ], + { strict: true } + )); + t.end(); +}); + +test('non-objects', function (t) { + t.ok(equal(3, 3)); + t.ok(equal('beep', 'beep')); + t.ok(equal('3', 3)); + t.notOk(equal('3', 3, { strict: true })); + t.notOk(equal('3', [3])); + t.end(); +}); + +test('arguments class', function (t) { + t.ok(equal( + (function(){return arguments})(1,2,3), + (function(){return arguments})(1,2,3), + "compares arguments" + )); + t.notOk(equal( + (function(){return arguments})(1,2,3), + [1,2,3], + "differenciates array and arguments" + )); + t.end(); +}); + +test('test the arguments shim', function (t) { + t.ok(isArguments.supported((function(){return arguments})())); + t.notOk(isArguments.supported([1,2,3])); + + t.ok(isArguments.unsupported((function(){return arguments})())); + t.notOk(isArguments.unsupported([1,2,3])); + + t.end(); +}); + +test('test the keys shim', function (t) { + t.deepEqual(objectKeys.shim({ a: 1, b : 2 }), [ 'a', 'b' ]); + t.end(); +}); + +test('dates', function (t) { + var d0 = new Date(1387585278000); + var d1 = new Date('Fri Dec 20 2013 16:21:18 GMT-0800 (PST)'); + t.ok(equal(d0, d1)); + t.end(); +}); + +test('buffers', function (t) { + t.ok(equal(Buffer('xyz'), Buffer('xyz'))); + t.end(); +}); + +test('booleans and arrays', function (t) { + t.notOk(equal(true, [])); + t.end(); +}) + +test('null == undefined', function (t) { + t.ok(equal(null, undefined)) + t.notOk(equal(null, undefined, { strict: true })) + t.end() +}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/.npmignore b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/.npmignore new file mode 100644 index 00000000..c2658d7d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/.npmignore @@ -0,0 +1 @@ +node_modules/ diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/History.md new file mode 100644 index 00000000..25959eab --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/History.md @@ -0,0 +1,22 @@ + +1.0.0 / 2015-12-14 +================== + + * Merge pull request #12 from kasicka/master + * Add license text + +0.1.0 / 2014-10-17 +================== + + * adds `.fluent()` to api + +0.0.3 / 2014-01-13 +================== + + * fix receiver for .method() + +0.0.2 / 2014-01-13 +================== + + * Object.defineProperty() sucks + * Initial commit diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/License b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/License new file mode 100644 index 00000000..60de60ad --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/License @@ -0,0 +1,20 @@ +Copyright (c) 2015 TJ Holowaychuk + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/Makefile b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/Makefile new file mode 100644 index 00000000..a9dcfd50 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/Makefile @@ -0,0 +1,8 @@ + +test: + @./node_modules/.bin/mocha \ + --require should \ + --reporter spec \ + --bail + +.PHONY: test \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/Readme.md new file mode 100644 index 00000000..ab8cf4ac --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/Readme.md @@ -0,0 +1,94 @@ + +# delegates + + Node method and accessor delegation utilty. + +## Installation + +``` +$ npm install delegates +``` + +## Example + +```js +var delegate = require('delegates'); + +... + +delegate(proto, 'request') + .method('acceptsLanguages') + .method('acceptsEncodings') + .method('acceptsCharsets') + .method('accepts') + .method('is') + .access('querystring') + .access('idempotent') + .access('socket') + .access('length') + .access('query') + .access('search') + .access('status') + .access('method') + .access('path') + .access('body') + .access('host') + .access('url') + .getter('subdomains') + .getter('protocol') + .getter('header') + .getter('stale') + .getter('fresh') + .getter('secure') + .getter('ips') + .getter('ip') +``` + +# API + +## Delegate(proto, prop) + +Creates a delegator instance used to configure using the `prop` on the given +`proto` object. (which is usually a prototype) + +## Delegate#method(name) + +Allows the given method `name` to be accessed on the host. + +## Delegate#getter(name) + +Creates a "getter" for the property with the given `name` on the delegated +object. + +## Delegate#setter(name) + +Creates a "setter" for the property with the given `name` on the delegated +object. + +## Delegate#access(name) + +Creates an "accessor" (ie: both getter *and* setter) for the property with the +given `name` on the delegated object. + +## Delegate#fluent(name) + +A unique type of "accessor" that works for a "fluent" API. When called as a +getter, the method returns the expected value. However, if the method is called +with a value, it will return itself so it can be chained. For example: + +```js +delegate(proto, 'request') + .fluent('query') + +// getter +var q = request.query(); + +// setter (chainable) +request + .query({ a: 1 }) + .query({ b: 2 }); +``` + +# License + + MIT diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/index.js new file mode 100644 index 00000000..17c222d5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/index.js @@ -0,0 +1,121 @@ + +/** + * Expose `Delegator`. + */ + +module.exports = Delegator; + +/** + * Initialize a delegator. + * + * @param {Object} proto + * @param {String} target + * @api public + */ + +function Delegator(proto, target) { + if (!(this instanceof Delegator)) return new Delegator(proto, target); + this.proto = proto; + this.target = target; + this.methods = []; + this.getters = []; + this.setters = []; + this.fluents = []; +} + +/** + * Delegate method `name`. + * + * @param {String} name + * @return {Delegator} self + * @api public + */ + +Delegator.prototype.method = function(name){ + var proto = this.proto; + var target = this.target; + this.methods.push(name); + + proto[name] = function(){ + return this[target][name].apply(this[target], arguments); + }; + + return this; +}; + +/** + * Delegator accessor `name`. + * + * @param {String} name + * @return {Delegator} self + * @api public + */ + +Delegator.prototype.access = function(name){ + return this.getter(name).setter(name); +}; + +/** + * Delegator getter `name`. + * + * @param {String} name + * @return {Delegator} self + * @api public + */ + +Delegator.prototype.getter = function(name){ + var proto = this.proto; + var target = this.target; + this.getters.push(name); + + proto.__defineGetter__(name, function(){ + return this[target][name]; + }); + + return this; +}; + +/** + * Delegator setter `name`. + * + * @param {String} name + * @return {Delegator} self + * @api public + */ + +Delegator.prototype.setter = function(name){ + var proto = this.proto; + var target = this.target; + this.setters.push(name); + + proto.__defineSetter__(name, function(val){ + return this[target][name] = val; + }); + + return this; +}; + +/** + * Delegator fluent accessor + * + * @param {String} name + * @return {Delegator} self + * @api public + */ + +Delegator.prototype.fluent = function (name) { + var proto = this.proto; + var target = this.target; + this.fluents.push(name); + + proto[name] = function(val){ + if ('undefined' != typeof val) { + this[target][name] = val; + return this; + } else { + return this[target][name]; + } + }; + + return this; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/package.json new file mode 100644 index 00000000..8996b845 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/package.json @@ -0,0 +1,51 @@ +{ + "_args": [ + [ + "delegates@1.0.0", + "/tmp/repository/main" + ] + ], + "_from": "delegates@1.0.0", + "_id": "delegates@1.0.0", + "_inBundle": false, + "_integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "_location": "/delegates", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "delegates@1.0.0", + "name": "delegates", + "escapedName": "delegates", + "rawSpec": "1.0.0", + "saveSpec": null, + "fetchSpec": "1.0.0" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "_spec": "1.0.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/visionmedia/node-delegates/issues" + }, + "dependencies": {}, + "description": "delegate methods and accessors to another property", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "homepage": "https://github.com/visionmedia/node-delegates#readme", + "keywords": [ + "delegate", + "delegation" + ], + "license": "MIT", + "name": "delegates", + "repository": { + "type": "git", + "url": "git+https://github.com/visionmedia/node-delegates.git" + }, + "version": "1.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/test/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/test/index.js new file mode 100644 index 00000000..7b6e3d4d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/delegates/test/index.js @@ -0,0 +1,94 @@ + +var assert = require('assert'); +var delegate = require('..'); + +describe('.method(name)', function(){ + it('should delegate methods', function(){ + var obj = {}; + + obj.request = { + foo: function(bar){ + assert(this == obj.request); + return bar; + } + }; + + delegate(obj, 'request').method('foo'); + + obj.foo('something').should.equal('something'); + }) +}) + +describe('.getter(name)', function(){ + it('should delegate getters', function(){ + var obj = {}; + + obj.request = { + get type() { + return 'text/html'; + } + } + + delegate(obj, 'request').getter('type'); + + obj.type.should.equal('text/html'); + }) +}) + +describe('.setter(name)', function(){ + it('should delegate setters', function(){ + var obj = {}; + + obj.request = { + get type() { + return this._type.toUpperCase(); + }, + + set type(val) { + this._type = val; + } + } + + delegate(obj, 'request').setter('type'); + + obj.type = 'hey'; + obj.request.type.should.equal('HEY'); + }) +}) + +describe('.access(name)', function(){ + it('should delegate getters and setters', function(){ + var obj = {}; + + obj.request = { + get type() { + return this._type.toUpperCase(); + }, + + set type(val) { + this._type = val; + } + } + + delegate(obj, 'request').access('type'); + + obj.type = 'hey'; + obj.type.should.equal('HEY'); + }) +}) + +describe('.fluent(name)', function () { + it('should delegate in a fluent fashion', function () { + var obj = { + settings: { + env: 'development' + } + }; + + delegate(obj, 'settings').fluent('env'); + + obj.env().should.equal('development'); + obj.env('production').should.equal(obj); + obj.settings.env.should.equal('production'); + }) +}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/History.md new file mode 100644 index 00000000..507ecb8d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/History.md @@ -0,0 +1,96 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/LICENSE new file mode 100644 index 00000000..84441fbb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/LICENSE @@ -0,0 +1,22 @@ +(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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/Readme.md new file mode 100644 index 00000000..77906702 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/Readme.md @@ -0,0 +1,280 @@ +# 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/index.js new file mode 100644 index 00000000..d758d3c8 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/index.js @@ -0,0 +1,522 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/browser/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/browser/index.js new file mode 100644 index 00000000..6be45cc2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/browser/index.js @@ -0,0 +1,77 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/compat/callsite-tostring.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/compat/callsite-tostring.js new file mode 100644 index 00000000..73186dc6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/compat/callsite-tostring.js @@ -0,0 +1,103 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/compat/event-listener-count.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/compat/event-listener-count.js new file mode 100644 index 00000000..3a8925d1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/compat/event-listener-count.js @@ -0,0 +1,22 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/compat/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/compat/index.js new file mode 100644 index 00000000..955b3336 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/lib/compat/index.js @@ -0,0 +1,79 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/package.json new file mode 100644 index 00000000..3daf7791 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/depd/package.json @@ -0,0 +1,80 @@ +{ + "_args": [ + [ + "depd@1.1.2", + "/tmp/repository/main" + ] + ], + "_from": "depd@1.1.2", + "_id": "depd@1.1.2", + "_inBundle": false, + "_integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "_location": "/depd", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "depd@1.1.2", + "name": "depd", + "escapedName": "depd", + "rawSpec": "1.1.2", + "saveSpec": null, + "fetchSpec": "1.1.2" + }, + "_requiredBy": [ + "/http-errors", + "/resolve-path/http-errors" + ], + "_resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "_spec": "1.1.2", + "_where": "/tmp/repository/main", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "browser": "lib/browser/index.js", + "bugs": { + "url": "https://github.com/dougwilson/nodejs-depd/issues" + }, + "description": "Deprecate all the things", + "devDependencies": { + "beautify-benchmark": "0.2.4", + "benchmark": "2.1.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" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "lib/", + "History.md", + "LICENSE", + "index.js", + "Readme.md" + ], + "homepage": "https://github.com/dougwilson/nodejs-depd#readme", + "keywords": [ + "deprecate", + "deprecated" + ], + "license": "MIT", + "name": "depd", + "repository": { + "type": "git", + "url": "git+https://github.com/dougwilson/nodejs-depd.git" + }, + "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/" + }, + "version": "1.1.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/LICENSE new file mode 100644 index 00000000..a7ae8ee9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/README.md new file mode 100644 index 00000000..6474bc3c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/README.md @@ -0,0 +1,60 @@ +# Destroy + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] +[![Gittip][gittip-image]][gittip-url] + +Destroy a stream. + +This module is meant to ensure a stream gets destroyed, handling different APIs +and Node.js bugs. + +## API + +```js +var destroy = require('destroy') +``` + +### destroy(stream) + +Destroy the given stream. In most cases, this is identical to a simple +`stream.destroy()` call. The rules are as follows for a given stream: + + 1. If the `stream` is an instance of `ReadStream`, then call `stream.destroy()` + and add a listener to the `open` event to call `stream.close()` if it is + fired. This is for a Node.js bug that will leak a file descriptor if + `.destroy()` is called before `open`. + 2. If the `stream` is not an instance of `Stream`, then nothing happens. + 3. If the `stream` has a `.destroy()` method, then call it. + +The function returns the `stream` passed in as the argument. + +## Example + +```js +var destroy = require('destroy') + +var fs = require('fs') +var stream = fs.createReadStream('package.json') + +// ... and later +destroy(stream) +``` + +[npm-image]: https://img.shields.io/npm/v/destroy.svg?style=flat-square +[npm-url]: https://npmjs.org/package/destroy +[github-tag]: http://img.shields.io/github/tag/stream-utils/destroy.svg?style=flat-square +[github-url]: https://github.com/stream-utils/destroy/tags +[travis-image]: https://img.shields.io/travis/stream-utils/destroy.svg?style=flat-square +[travis-url]: https://travis-ci.org/stream-utils/destroy +[coveralls-image]: https://img.shields.io/coveralls/stream-utils/destroy.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/stream-utils/destroy?branch=master +[license-image]: http://img.shields.io/npm/l/destroy.svg?style=flat-square +[license-url]: LICENSE.md +[downloads-image]: http://img.shields.io/npm/dm/destroy.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/destroy +[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square +[gittip-url]: https://www.gittip.com/jonathanong/ diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/index.js new file mode 100644 index 00000000..6da2d26e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/index.js @@ -0,0 +1,75 @@ +/*! + * destroy + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var ReadStream = require('fs').ReadStream +var Stream = require('stream') + +/** + * Module exports. + * @public + */ + +module.exports = destroy + +/** + * Destroy a stream. + * + * @param {object} stream + * @public + */ + +function destroy(stream) { + if (stream instanceof ReadStream) { + return destroyReadStream(stream) + } + + if (!(stream instanceof Stream)) { + return stream + } + + if (typeof stream.destroy === 'function') { + stream.destroy() + } + + return stream +} + +/** + * Destroy a ReadStream. + * + * @param {object} stream + * @private + */ + +function destroyReadStream(stream) { + stream.destroy() + + if (typeof stream.close === 'function') { + // node.js core bug work-around + stream.on('open', onOpenClose) + } + + return stream +} + +/** + * On open handler to close stream. + * @private + */ + +function onOpenClose() { + if (typeof this.fd === 'number') { + // actually close down the fd + this.close() + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/package.json new file mode 100644 index 00000000..38beeb63 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/destroy/package.json @@ -0,0 +1,74 @@ +{ + "_args": [ + [ + "destroy@1.0.4", + "/tmp/repository/main" + ] + ], + "_from": "destroy@1.0.4", + "_id": "destroy@1.0.4", + "_inBundle": false, + "_integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "_location": "/destroy", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "destroy@1.0.4", + "name": "destroy", + "escapedName": "destroy", + "rawSpec": "1.0.4", + "saveSpec": null, + "fetchSpec": "1.0.4" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "_spec": "1.0.4", + "_where": "/tmp/repository/main", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "bugs": { + "url": "https://github.com/stream-utils/destroy/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "description": "destroy a stream if possible", + "devDependencies": { + "istanbul": "0.4.2", + "mocha": "2.3.4" + }, + "files": [ + "index.js", + "LICENSE" + ], + "homepage": "https://github.com/stream-utils/destroy#readme", + "keywords": [ + "stream", + "streams", + "destroy", + "cleanup", + "leak", + "fd" + ], + "license": "MIT", + "name": "destroy", + "repository": { + "type": "git", + "url": "git+https://github.com/stream-utils/destroy.git" + }, + "scripts": { + "test": "mocha --reporter spec", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" + }, + "version": "1.0.4" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/LICENSE new file mode 100644 index 00000000..a7ae8ee9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/README.md new file mode 100644 index 00000000..cbd2478b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/README.md @@ -0,0 +1,80 @@ +# EE First + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] +[![Gittip][gittip-image]][gittip-url] + +Get the first event in a set of event emitters and event pairs, +then clean up after itself. + +## Install + +```sh +$ npm install ee-first +``` + +## API + +```js +var first = require('ee-first') +``` + +### first(arr, listener) + +Invoke `listener` on the first event from the list specified in `arr`. `arr` is +an array of arrays, with each array in the format `[ee, ...event]`. `listener` +will be called only once, the first time any of the given events are emitted. If +`error` is one of the listened events, then if that fires first, the `listener` +will be given the `err` argument. + +The `listener` is invoked as `listener(err, ee, event, args)`, where `err` is the +first argument emitted from an `error` event, if applicable; `ee` is the event +emitter that fired; `event` is the string event name that fired; and `args` is an +array of the arguments that were emitted on the event. + +```js +var ee1 = new EventEmitter() +var ee2 = new EventEmitter() + +first([ + [ee1, 'close', 'end', 'error'], + [ee2, 'error'] +], function (err, ee, event, args) { + // listener invoked +}) +``` + +#### .cancel() + +The group of listeners can be cancelled before being invoked and have all the event +listeners removed from the underlying event emitters. + +```js +var thunk = first([ + [ee1, 'close', 'end', 'error'], + [ee2, 'error'] +], function (err, ee, event, args) { + // listener invoked +}) + +// cancel and clean up +thunk.cancel() +``` + +[npm-image]: https://img.shields.io/npm/v/ee-first.svg?style=flat-square +[npm-url]: https://npmjs.org/package/ee-first +[github-tag]: http://img.shields.io/github/tag/jonathanong/ee-first.svg?style=flat-square +[github-url]: https://github.com/jonathanong/ee-first/tags +[travis-image]: https://img.shields.io/travis/jonathanong/ee-first.svg?style=flat-square +[travis-url]: https://travis-ci.org/jonathanong/ee-first +[coveralls-image]: https://img.shields.io/coveralls/jonathanong/ee-first.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/jonathanong/ee-first?branch=master +[license-image]: http://img.shields.io/npm/l/ee-first.svg?style=flat-square +[license-url]: LICENSE.md +[downloads-image]: http://img.shields.io/npm/dm/ee-first.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/ee-first +[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square +[gittip-url]: https://www.gittip.com/jonathanong/ diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/index.js new file mode 100644 index 00000000..501287cd --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/index.js @@ -0,0 +1,95 @@ +/*! + * ee-first + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + * @public + */ + +module.exports = first + +/** + * Get the first event in a set of event emitters and event pairs. + * + * @param {array} stuff + * @param {function} done + * @public + */ + +function first(stuff, done) { + if (!Array.isArray(stuff)) + throw new TypeError('arg must be an array of [ee, events...] arrays') + + var cleanups = [] + + for (var i = 0; i < stuff.length; i++) { + var arr = stuff[i] + + if (!Array.isArray(arr) || arr.length < 2) + throw new TypeError('each array member must be [ee, events...]') + + var ee = arr[0] + + for (var j = 1; j < arr.length; j++) { + var event = arr[j] + var fn = listener(event, callback) + + // listen to the event + ee.on(event, fn) + // push this listener to the list of cleanups + cleanups.push({ + ee: ee, + event: event, + fn: fn, + }) + } + } + + function callback() { + cleanup() + done.apply(null, arguments) + } + + function cleanup() { + var x + for (var i = 0; i < cleanups.length; i++) { + x = cleanups[i] + x.ee.removeListener(x.event, x.fn) + } + } + + function thunk(fn) { + done = fn + } + + thunk.cancel = cleanup + + return thunk +} + +/** + * Create the event listener. + * @private + */ + +function listener(event, done) { + return function onevent(arg1) { + var args = new Array(arguments.length) + var ee = this + var err = event === 'error' + ? arg1 + : null + + // copy args to prevent arguments escaping scope + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + + done(err, ee, event, args) + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/package.json new file mode 100644 index 00000000..c3e4cd1d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ee-first/package.json @@ -0,0 +1,66 @@ +{ + "_args": [ + [ + "ee-first@1.1.1", + "/tmp/repository/main" + ] + ], + "_from": "ee-first@1.1.1", + "_id": "ee-first@1.1.1", + "_inBundle": false, + "_integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "_location": "/ee-first", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "ee-first@1.1.1", + "name": "ee-first", + "escapedName": "ee-first", + "rawSpec": "1.1.1", + "saveSpec": null, + "fetchSpec": "1.1.1" + }, + "_requiredBy": [ + "/on-finished" + ], + "_resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "_spec": "1.1.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "bugs": { + "url": "https://github.com/jonathanong/ee-first/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "description": "return the first event in a set of ee/event pairs", + "devDependencies": { + "istanbul": "0.3.9", + "mocha": "2.2.5" + }, + "files": [ + "index.js", + "LICENSE" + ], + "homepage": "https://github.com/jonathanong/ee-first#readme", + "license": "MIT", + "name": "ee-first", + "repository": { + "type": "git", + "url": "git+https://github.com/jonathanong/ee-first.git" + }, + "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/" + }, + "version": "1.1.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/HISTORY.md new file mode 100644 index 00000000..41313b2b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/HISTORY.md @@ -0,0 +1,14 @@ +1.0.2 / 2018-01-21 +================== + + * Fix encoding `%` as last character + +1.0.1 / 2016-06-09 +================== + + * Fix encoding unpaired surrogates at start/end of string + +1.0.0 / 2016-06-08 +================== + + * Initial release diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/LICENSE new file mode 100644 index 00000000..8812229b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/LICENSE @@ -0,0 +1,22 @@ +(The 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/README.md new file mode 100644 index 00000000..127c5a0d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/README.md @@ -0,0 +1,128 @@ +# encodeurl + +[![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] + +Encode a URL to a percent-encoded form, excluding already-encoded sequences + +## 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 encodeurl +``` + +## API + +```js +var encodeUrl = require('encodeurl') +``` + +### encodeUrl(url) + +Encode a URL to a percent-encoded form, excluding already-encoded sequences. + +This function will take an already-encoded URL and encode all the non-URL +code points (as UTF-8 byte sequences). This function will not encode the +"%" character unless it is not part of a valid sequence (`%20` will be +left as-is, but `%foo` will be encoded as `%25foo`). + +This encode is meant to be "safe" and does not throw errors. It will try as +hard as it can to properly encode the given URL, including replacing any raw, +unpaired surrogate pairs with the Unicode replacement character prior to +encoding. + +This function is _similar_ to the intrinsic function `encodeURI`, except it +will not encode the `%` character if that is part of a valid sequence, will +not encode `[` and `]` (for IPv6 hostnames) and will replace raw, unpaired +surrogate pairs with the Unicode replacement character (instead of throwing). + +## Examples + +### Encode a URL containing user-controled data + +```js +var encodeUrl = require('encodeurl') +var escapeHtml = require('escape-html') + +http.createServer(function onRequest (req, res) { + // get encoded form of inbound url + var url = encodeUrl(req.url) + + // create html message + var body = '

Location ' + escapeHtml(url) + ' not found

' + + // send a 404 + res.statusCode = 404 + res.setHeader('Content-Type', 'text/html; charset=UTF-8') + res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8'))) + res.end(body, 'utf-8') +}) +``` + +### Encode a URL for use in a header field + +```js +var encodeUrl = require('encodeurl') +var escapeHtml = require('escape-html') +var url = require('url') + +http.createServer(function onRequest (req, res) { + // parse inbound url + var href = url.parse(req) + + // set new host for redirect + href.host = 'localhost' + href.protocol = 'https:' + href.slashes = true + + // create location header + var location = encodeUrl(url.format(href)) + + // create html message + var body = '

Redirecting to new site: ' + escapeHtml(location) + '

' + + // send a 301 + res.statusCode = 301 + res.setHeader('Content-Type', 'text/html; charset=UTF-8') + res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8'))) + res.setHeader('Location', location) + res.end(body, 'utf-8') +}) +``` + +## Testing + +```sh +$ npm test +$ npm run lint +``` + +## References + +- [RFC 3986: Uniform Resource Identifier (URI): Generic Syntax][rfc-3986] +- [WHATWG URL Living Standard][whatwg-url] + +[rfc-3986]: https://tools.ietf.org/html/rfc3986 +[whatwg-url]: https://url.spec.whatwg.org/ + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/encodeurl.svg +[npm-url]: https://npmjs.org/package/encodeurl +[node-version-image]: https://img.shields.io/node/v/encodeurl.svg +[node-version-url]: https://nodejs.org/en/download +[travis-image]: https://img.shields.io/travis/pillarjs/encodeurl.svg +[travis-url]: https://travis-ci.org/pillarjs/encodeurl +[coveralls-image]: https://img.shields.io/coveralls/pillarjs/encodeurl.svg +[coveralls-url]: https://coveralls.io/r/pillarjs/encodeurl?branch=master +[downloads-image]: https://img.shields.io/npm/dm/encodeurl.svg +[downloads-url]: https://npmjs.org/package/encodeurl diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/index.js new file mode 100644 index 00000000..fc4906c6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/index.js @@ -0,0 +1,60 @@ +/*! + * encodeurl + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + * @public + */ + +module.exports = encodeUrl + +/** + * RegExp to match non-URL code points, *after* encoding (i.e. not including "%") + * and including invalid escape sequences. + * @private + */ + +var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g + +/** + * RegExp to match unmatched surrogate pair. + * @private + */ + +var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g + +/** + * String to replace unmatched surrogate pair with. + * @private + */ + +var UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\uFFFD$2' + +/** + * Encode a URL to a percent-encoded form, excluding already-encoded sequences. + * + * This function will take an already-encoded URL and encode all the non-URL + * code points. This function will not encode the "%" character unless it is + * not part of a valid sequence (`%20` will be left as-is, but `%foo` will + * be encoded as `%25foo`). + * + * This encode is meant to be "safe" and does not throw errors. It will try as + * hard as it can to properly encode the given URL, including replacing any raw, + * unpaired surrogate pairs with the Unicode replacement character prior to + * encoding. + * + * @param {string} url + * @return {string} + * @public + */ + +function encodeUrl (url) { + return String(url) + .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE) + .replace(ENCODE_CHARS_REGEXP, encodeURI) +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/package.json new file mode 100644 index 00000000..976e41e6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/encodeurl/package.json @@ -0,0 +1,78 @@ +{ + "_args": [ + [ + "encodeurl@1.0.2", + "/tmp/repository/main" + ] + ], + "_from": "encodeurl@1.0.2", + "_id": "encodeurl@1.0.2", + "_inBundle": false, + "_integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "_location": "/encodeurl", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "encodeurl@1.0.2", + "name": "encodeurl", + "escapedName": "encodeurl", + "rawSpec": "1.0.2", + "saveSpec": null, + "fetchSpec": "1.0.2" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "_spec": "1.0.2", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/pillarjs/encodeurl/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "description": "Encode a URL to a percent-encoded form, excluding already-encoded sequences", + "devDependencies": { + "eslint": "3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-plugin-import": "2.8.0", + "eslint-plugin-node": "5.2.1", + "eslint-plugin-promise": "3.6.0", + "eslint-plugin-standard": "3.0.1", + "istanbul": "0.4.5", + "mocha": "2.5.3" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "README.md", + "index.js" + ], + "homepage": "https://github.com/pillarjs/encodeurl#readme", + "keywords": [ + "encode", + "encodeurl", + "url" + ], + "license": "MIT", + "name": "encodeurl", + "repository": { + "type": "git", + "url": "git+https://github.com/pillarjs/encodeurl.git" + }, + "scripts": { + "lint": "eslint .", + "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": "1.0.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/LICENSE new file mode 100644 index 00000000..757562ec --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/README.md new file mode 100644 index 00000000..857b14bd --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/README.md @@ -0,0 +1,54 @@ +# end-of-stream + +A node module that calls a callback when a readable/writable/duplex stream has completed or failed. + + npm install end-of-stream + +[![Build status](https://travis-ci.org/mafintosh/end-of-stream.svg?branch=master)](https://travis-ci.org/mafintosh/end-of-stream) + +## Usage + +Simply pass a stream and a callback to the `eos`. +Both legacy streams, streams2 and stream3 are supported. + +``` js +var eos = require('end-of-stream'); + +eos(readableStream, function(err) { + // this will be set to the stream instance + if (err) return console.log('stream had an error or closed early'); + console.log('stream has ended', this === readableStream); +}); + +eos(writableStream, function(err) { + if (err) return console.log('stream had an error or closed early'); + console.log('stream has finished', this === writableStream); +}); + +eos(duplexStream, function(err) { + if (err) return console.log('stream had an error or closed early'); + console.log('stream has ended and finished', this === duplexStream); +}); + +eos(duplexStream, {readable:false}, function(err) { + if (err) return console.log('stream had an error or closed early'); + console.log('stream has finished but might still be readable'); +}); + +eos(duplexStream, {writable:false}, function(err) { + if (err) return console.log('stream had an error or closed early'); + console.log('stream has ended but might still be writable'); +}); + +eos(readableStream, {error:false}, function(err) { + // do not treat emit('error', err) as a end-of-stream +}); +``` + +## License + +MIT + +## Related + +`end-of-stream` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/index.js new file mode 100644 index 00000000..c77f0d5d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/index.js @@ -0,0 +1,94 @@ +var once = require('once'); + +var noop = function() {}; + +var isRequest = function(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +}; + +var isChildProcess = function(stream) { + return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3 +}; + +var eos = function(stream, opts, callback) { + if (typeof opts === 'function') return eos(stream, null, opts); + if (!opts) opts = {}; + + callback = once(callback || noop); + + var ws = stream._writableState; + var rs = stream._readableState; + var readable = opts.readable || (opts.readable !== false && stream.readable); + var writable = opts.writable || (opts.writable !== false && stream.writable); + var cancelled = false; + + var onlegacyfinish = function() { + if (!stream.writable) onfinish(); + }; + + var onfinish = function() { + writable = false; + if (!readable) callback.call(stream); + }; + + var onend = function() { + readable = false; + if (!writable) callback.call(stream); + }; + + var onexit = function(exitCode) { + callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null); + }; + + var onerror = function(err) { + callback.call(stream, err); + }; + + var onclose = function() { + process.nextTick(onclosenexttick); + }; + + var onclosenexttick = function() { + if (cancelled) return; + if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close')); + if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close')); + }; + + var onrequest = function() { + stream.req.on('finish', onfinish); + }; + + if (isRequest(stream)) { + stream.on('complete', onfinish); + stream.on('abort', onclose); + if (stream.req) onrequest(); + else stream.on('request', onrequest); + } else if (writable && !ws) { // legacy streams + stream.on('end', onlegacyfinish); + stream.on('close', onlegacyfinish); + } + + if (isChildProcess(stream)) stream.on('exit', onexit); + + stream.on('end', onend); + stream.on('finish', onfinish); + if (opts.error !== false) stream.on('error', onerror); + stream.on('close', onclose); + + return function() { + cancelled = true; + stream.removeListener('complete', onfinish); + stream.removeListener('abort', onclose); + stream.removeListener('request', onrequest); + if (stream.req) stream.req.removeListener('finish', onfinish); + stream.removeListener('end', onlegacyfinish); + stream.removeListener('close', onlegacyfinish); + stream.removeListener('finish', onfinish); + stream.removeListener('exit', onexit); + stream.removeListener('end', onend); + stream.removeListener('error', onerror); + stream.removeListener('close', onclose); + }; +}; + +module.exports = eos; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/package.json new file mode 100644 index 00000000..77b05b7a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/end-of-stream/package.json @@ -0,0 +1,69 @@ +{ + "_args": [ + [ + "end-of-stream@1.4.4", + "/tmp/repository/main" + ] + ], + "_from": "end-of-stream@1.4.4", + "_id": "end-of-stream@1.4.4", + "_inBundle": false, + "_integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "_location": "/end-of-stream", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "end-of-stream@1.4.4", + "name": "end-of-stream", + "escapedName": "end-of-stream", + "rawSpec": "1.4.4", + "saveSpec": null, + "fetchSpec": "1.4.4" + }, + "_requiredBy": [ + "/pump", + "/tar-stream" + ], + "_resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "_spec": "1.4.4", + "_where": "/tmp/repository/main", + "author": { + "name": "Mathias Buus", + "email": "mathiasbuus@gmail.com" + }, + "bugs": { + "url": "https://github.com/mafintosh/end-of-stream/issues" + }, + "dependencies": { + "once": "^1.4.0" + }, + "description": "Call a callback when a readable/writable/duplex stream has completed or failed.", + "devDependencies": { + "tape": "^4.11.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/mafintosh/end-of-stream", + "keywords": [ + "stream", + "streams", + "callback", + "finish", + "close", + "end", + "wait" + ], + "license": "MIT", + "main": "index.js", + "name": "end-of-stream", + "repository": { + "type": "git", + "url": "git://github.com/mafintosh/end-of-stream.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "1.4.4" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/LICENSE new file mode 100644 index 00000000..2e70de97 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2012-2013 TJ Holowaychuk +Copyright (c) 2015 Andreas Lubbe +Copyright (c) 2015 Tiancheng "Timothy" Gu + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/Readme.md new file mode 100644 index 00000000..653d9eaa --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/Readme.md @@ -0,0 +1,43 @@ + +# escape-html + + Escape string for use in HTML + +## Example + +```js +var escape = require('escape-html'); +var html = escape('foo & bar'); +// -> foo & bar +``` + +## Benchmark + +``` +$ npm run-script bench + +> escape-html@1.0.3 bench nodejs-escape-html +> node benchmark/index.js + + + http_parser@1.0 + node@0.10.33 + v8@3.14.5.9 + ares@1.9.0-DEV + uv@0.10.29 + zlib@1.2.3 + modules@11 + openssl@1.0.1j + + 1 test completed. + 2 tests completed. + 3 tests completed. + + no special characters x 19,435,271 ops/sec ±0.85% (187 runs sampled) + single special character x 6,132,421 ops/sec ±0.67% (194 runs sampled) + many special characters x 3,175,826 ops/sec ±0.65% (193 runs sampled) +``` + +## License + + MIT \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/index.js new file mode 100644 index 00000000..bf9e226f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/index.js @@ -0,0 +1,78 @@ +/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */ + +'use strict'; + +/** + * Module variables. + * @private + */ + +var matchHtmlRegExp = /["'&<>]/; + +/** + * Module exports. + * @public + */ + +module.exports = escapeHtml; + +/** + * Escape special characters in the given string of html. + * + * @param {string} string The string to escape for inserting into HTML + * @return {string} + * @public + */ + +function escapeHtml(string) { + var str = '' + string; + var match = matchHtmlRegExp.exec(str); + + if (!match) { + return str; + } + + var escape; + var html = ''; + var index = 0; + var lastIndex = 0; + + for (index = match.index; index < str.length; index++) { + switch (str.charCodeAt(index)) { + case 34: // " + escape = '"'; + break; + case 38: // & + escape = '&'; + break; + case 39: // ' + escape = '''; + break; + case 60: // < + escape = '<'; + break; + case 62: // > + escape = '>'; + break; + default: + continue; + } + + if (lastIndex !== index) { + html += str.substring(lastIndex, index); + } + + lastIndex = index + 1; + html += escape; + } + + return lastIndex !== index + ? html + str.substring(lastIndex, index) + : html; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/package.json new file mode 100644 index 00000000..a3d28588 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/escape-html/package.json @@ -0,0 +1,59 @@ +{ + "_args": [ + [ + "escape-html@1.0.3", + "/tmp/repository/main" + ] + ], + "_from": "escape-html@1.0.3", + "_id": "escape-html@1.0.3", + "_inBundle": false, + "_integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "_location": "/escape-html", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "escape-html@1.0.3", + "name": "escape-html", + "escapedName": "escape-html", + "rawSpec": "1.0.3", + "saveSpec": null, + "fetchSpec": "1.0.3" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "_spec": "1.0.3", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/component/escape-html/issues" + }, + "description": "Escape string for use in HTML", + "devDependencies": { + "beautify-benchmark": "0.2.4", + "benchmark": "1.0.0" + }, + "files": [ + "LICENSE", + "Readme.md", + "index.js" + ], + "homepage": "https://github.com/component/escape-html#readme", + "keywords": [ + "escape", + "html", + "utility" + ], + "license": "MIT", + "name": "escape-html", + "repository": { + "type": "git", + "url": "git+https://github.com/component/escape-html.git" + }, + "scripts": { + "bench": "node benchmark/index.js" + }, + "version": "1.0.3" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/LICENSE new file mode 100644 index 00000000..29210691 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2014 Max Ogden and other 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. + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/cli.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/cli.js new file mode 100755 index 00000000..b594016c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/cli.js @@ -0,0 +1,19 @@ +#!/usr/bin/env node + +/* eslint-disable no-process-exit */ + +var extract = require('./') + +var args = process.argv.slice(2) +var source = args[0] +var dest = args[1] || process.cwd() +if (!source) { + console.error('Usage: extract-zip foo.zip ') + process.exit(1) +} + +extract(source, { dir: dest }) + .catch(function (err) { + console.error('error!', err) + process.exit(1) + }) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/index.js new file mode 100644 index 00000000..23384ea1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/index.js @@ -0,0 +1,173 @@ +const debug = require('debug')('extract-zip') +// eslint-disable-next-line node/no-unsupported-features/node-builtins +const { createWriteStream, promises: fs } = require('fs') +const getStream = require('get-stream') +const path = require('path') +const { promisify } = require('util') +const stream = require('stream') +const yauzl = require('yauzl') + +const openZip = promisify(yauzl.open) +const pipeline = promisify(stream.pipeline) + +class Extractor { + constructor (zipPath, opts) { + this.zipPath = zipPath + this.opts = opts + } + + async extract () { + debug('opening', this.zipPath, 'with opts', this.opts) + + this.zipfile = await openZip(this.zipPath, { lazyEntries: true }) + this.canceled = false + + return new Promise((resolve, reject) => { + this.zipfile.on('error', err => { + this.canceled = true + reject(err) + }) + this.zipfile.readEntry() + + this.zipfile.on('close', () => { + if (!this.canceled) { + debug('zip extraction complete') + resolve() + } + }) + + this.zipfile.on('entry', async entry => { + /* istanbul ignore if */ + if (this.canceled) { + debug('skipping entry', entry.fileName, { cancelled: this.canceled }) + return + } + + debug('zipfile entry', entry.fileName) + + if (entry.fileName.startsWith('__MACOSX/')) { + this.zipfile.readEntry() + return + } + + const destDir = path.dirname(path.join(this.opts.dir, entry.fileName)) + + try { + await fs.mkdir(destDir, { recursive: true }) + + const canonicalDestDir = await fs.realpath(destDir) + const relativeDestDir = path.relative(this.opts.dir, canonicalDestDir) + + if (relativeDestDir.split(path.sep).includes('..')) { + throw new Error(`Out of bound path "${canonicalDestDir}" found while processing file ${entry.fileName}`) + } + + await this.extractEntry(entry) + debug('finished processing', entry.fileName) + this.zipfile.readEntry() + } catch (err) { + this.canceled = true + this.zipfile.close() + reject(err) + } + }) + }) + } + + async extractEntry (entry) { + /* istanbul ignore if */ + if (this.canceled) { + debug('skipping entry extraction', entry.fileName, { cancelled: this.canceled }) + return + } + + if (this.opts.onEntry) { + this.opts.onEntry(entry, this.zipfile) + } + + const dest = path.join(this.opts.dir, entry.fileName) + + // convert external file attr int into a fs stat mode int + const mode = (entry.externalFileAttributes >> 16) & 0xFFFF + // check if it's a symlink or dir (using stat mode constants) + const IFMT = 61440 + const IFDIR = 16384 + const IFLNK = 40960 + const symlink = (mode & IFMT) === IFLNK + let isDir = (mode & IFMT) === IFDIR + + // Failsafe, borrowed from jsZip + if (!isDir && entry.fileName.endsWith('/')) { + isDir = true + } + + // check for windows weird way of specifying a directory + // https://github.com/maxogden/extract-zip/issues/13#issuecomment-154494566 + const madeBy = entry.versionMadeBy >> 8 + if (!isDir) isDir = (madeBy === 0 && entry.externalFileAttributes === 16) + + debug('extracting entry', { filename: entry.fileName, isDir: isDir, isSymlink: symlink }) + + const procMode = this.getExtractedMode(mode, isDir) & 0o777 + + // always ensure folders are created + const destDir = isDir ? dest : path.dirname(dest) + + const mkdirOptions = { recursive: true } + if (isDir) { + mkdirOptions.mode = procMode + } + debug('mkdir', { dir: destDir, ...mkdirOptions }) + await fs.mkdir(destDir, mkdirOptions) + if (isDir) return + + debug('opening read stream', dest) + const readStream = await promisify(this.zipfile.openReadStream.bind(this.zipfile))(entry) + + if (symlink) { + const link = await getStream(readStream) + debug('creating symlink', link, dest) + await fs.symlink(link, dest) + } else { + await pipeline(readStream, createWriteStream(dest, { mode: procMode })) + } + } + + getExtractedMode (entryMode, isDir) { + let mode = entryMode + // Set defaults, if necessary + if (mode === 0) { + if (isDir) { + if (this.opts.defaultDirMode) { + mode = parseInt(this.opts.defaultDirMode, 10) + } + + if (!mode) { + mode = 0o755 + } + } else { + if (this.opts.defaultFileMode) { + mode = parseInt(this.opts.defaultFileMode, 10) + } + + if (!mode) { + mode = 0o644 + } + } + } + + return mode + } +} + +module.exports = async function (zipPath, opts) { + debug('creating target directory', opts.dir) + + if (!path.isAbsolute(opts.dir)) { + throw new Error('Target directory is expected to be absolute') + } + + await fs.mkdir(opts.dir, { recursive: true }) + opts.dir = await fs.realpath(opts.dir) + return new Extractor(zipPath, opts).extract() +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/buffer-stream.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/buffer-stream.js new file mode 100644 index 00000000..2dd75745 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/buffer-stream.js @@ -0,0 +1,52 @@ +'use strict'; +const {PassThrough: PassThroughStream} = require('stream'); + +module.exports = options => { + options = {...options}; + + const {array} = options; + let {encoding} = options; + const isBuffer = encoding === 'buffer'; + let objectMode = false; + + if (array) { + objectMode = !(encoding || isBuffer); + } else { + encoding = encoding || 'utf8'; + } + + if (isBuffer) { + encoding = null; + } + + const stream = new PassThroughStream({objectMode}); + + if (encoding) { + stream.setEncoding(encoding); + } + + let length = 0; + const chunks = []; + + stream.on('data', chunk => { + chunks.push(chunk); + + if (objectMode) { + length = chunks.length; + } else { + length += chunk.length; + } + }); + + stream.getBufferedValue = () => { + if (array) { + return chunks; + } + + return isBuffer ? Buffer.concat(chunks, length) : chunks.join(''); + }; + + stream.getBufferedLength = () => length; + + return stream; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/index.js new file mode 100644 index 00000000..71f39919 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/index.js @@ -0,0 +1,60 @@ +'use strict'; +const {constants: BufferConstants} = require('buffer'); +const pump = require('pump'); +const bufferStream = require('./buffer-stream'); + +class MaxBufferError extends Error { + constructor() { + super('maxBuffer exceeded'); + this.name = 'MaxBufferError'; + } +} + +async function getStream(inputStream, options) { + if (!inputStream) { + return Promise.reject(new Error('Expected a stream')); + } + + options = { + maxBuffer: Infinity, + ...options + }; + + const {maxBuffer} = options; + + let stream; + await new Promise((resolve, reject) => { + const rejectPromise = error => { + // Don't retrieve an oversized buffer. + if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) { + error.bufferedData = stream.getBufferedValue(); + } + + reject(error); + }; + + stream = pump(inputStream, bufferStream(options), error => { + if (error) { + rejectPromise(error); + return; + } + + resolve(); + }); + + stream.on('data', () => { + if (stream.getBufferedLength() > maxBuffer) { + rejectPromise(new MaxBufferError()); + } + }); + }); + + return stream.getBufferedValue(); +} + +module.exports = getStream; +// TODO: Remove this for the next major release +module.exports.default = getStream; +module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'}); +module.exports.array = (stream, options) => getStream(stream, {...options, array: true}); +module.exports.MaxBufferError = MaxBufferError; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/package.json new file mode 100644 index 00000000..b96f06c6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/package.json @@ -0,0 +1,85 @@ +{ + "_args": [ + [ + "get-stream@5.2.0", + "/tmp/repository/main" + ] + ], + "_from": "get-stream@5.2.0", + "_id": "get-stream@5.2.0", + "_inBundle": false, + "_integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "_location": "/extract-zip/get-stream", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "get-stream@5.2.0", + "name": "get-stream", + "escapedName": "get-stream", + "rawSpec": "5.2.0", + "saveSpec": null, + "fetchSpec": "5.2.0" + }, + "_requiredBy": [ + "/extract-zip" + ], + "_resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "_spec": "5.2.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/get-stream/issues" + }, + "dependencies": { + "pump": "^3.0.0" + }, + "description": "Get a stream as a string, buffer, or array", + "devDependencies": { + "@types/node": "^12.0.7", + "ava": "^2.0.0", + "into-stream": "^5.0.0", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts", + "buffer-stream.js" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/get-stream#readme", + "keywords": [ + "get", + "stream", + "promise", + "concat", + "string", + "text", + "buffer", + "read", + "data", + "consume", + "readable", + "readablestream", + "array", + "object" + ], + "license": "MIT", + "name": "get-stream", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/get-stream.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "5.2.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/readme.md new file mode 100644 index 00000000..7d7565dc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/node_modules/get-stream/readme.md @@ -0,0 +1,124 @@ +# get-stream [![Build Status](https://travis-ci.com/sindresorhus/get-stream.svg?branch=master)](https://travis-ci.com/github/sindresorhus/get-stream) + +> Get a stream as a string, buffer, or array + +## Install + +``` +$ npm install get-stream +``` + +## Usage + +```js +const fs = require('fs'); +const getStream = require('get-stream'); + +(async () => { + const stream = fs.createReadStream('unicorn.txt'); + + console.log(await getStream(stream)); + /* + ,,))))))));, + __)))))))))))))), + \|/ -\(((((''''((((((((. + -*-==//////(('' . `)))))), + /|\ ))| o ;-. '((((( ,(, + ( `| / ) ;))))' ,_))^;(~ + | | | ,))((((_ _____------~~~-. %,;(;(>';'~ + o_); ; )))(((` ~---~ `:: \ %%~~)(v;(`('~ + ; ''''```` `: `:::|\,__,%% );`'; ~ + | _ ) / `:|`----' `-' + ______/\/~ | / / + /~;;.____/;;' / ___--,-( `;;;/ + / // _;______;'------~~~~~ /;;/\ / + // | | / ; \;;,\ + (<_ | ; /',/-----' _> + \_| ||_ //~;~~~~~~~~~ + `\_| (,~~ + \~\ + ~~ + */ +})(); +``` + +## API + +The methods returns a promise that resolves when the `end` event fires on the stream, indicating that there is no more data to be read. The stream is switched to flowing mode. + +### getStream(stream, options?) + +Get the `stream` as a string. + +#### options + +Type: `object` + +##### encoding + +Type: `string`\ +Default: `'utf8'` + +[Encoding](https://nodejs.org/api/buffer.html#buffer_buffer) of the incoming stream. + +##### maxBuffer + +Type: `number`\ +Default: `Infinity` + +Maximum length of the returned string. If it exceeds this value before the stream ends, the promise will be rejected with a `getStream.MaxBufferError` error. + +### getStream.buffer(stream, options?) + +Get the `stream` as a buffer. + +It honors the `maxBuffer` option as above, but it refers to byte length rather than string length. + +### getStream.array(stream, options?) + +Get the `stream` as an array of values. + +It honors both the `maxBuffer` and `encoding` options. The behavior changes slightly based on the encoding chosen: + +- When `encoding` is unset, it assumes an [object mode stream](https://nodesource.com/blog/understanding-object-streams/) and collects values emitted from `stream` unmodified. In this case `maxBuffer` refers to the number of items in the array (not the sum of their sizes). + +- When `encoding` is set to `buffer`, it collects an array of buffers. `maxBuffer` refers to the summed byte lengths of every buffer in the array. + +- When `encoding` is set to anything else, it collects an array of strings. `maxBuffer` refers to the summed character lengths of every string in the array. + +## Errors + +If the input stream emits an `error` event, the promise will be rejected with the error. The buffered data will be attached to the `bufferedData` property of the error. + +```js +(async () => { + try { + await getStream(streamThatErrorsAtTheEnd('unicorn')); + } catch (error) { + console.log(error.bufferedData); + //=> 'unicorn' + } +})() +``` + +## FAQ + +### How is this different from [`concat-stream`](https://github.com/maxogden/concat-stream)? + +This module accepts a stream instead of being one and returns a promise instead of using a callback. The API is simpler and it only supports returning a string, buffer, or array. It doesn't have a fragile type inference. You explicitly choose what you want. And it doesn't depend on the huge `readable-stream` package. + +## Related + +- [get-stdin](https://github.com/sindresorhus/get-stdin) - Get stdin as a string or buffer + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/package.json new file mode 100644 index 00000000..273eac9f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/package.json @@ -0,0 +1,120 @@ +{ + "_args": [ + [ + "extract-zip@2.0.1", + "/tmp/repository/main" + ] + ], + "_from": "extract-zip@2.0.1", + "_id": "extract-zip@2.0.1", + "_inBundle": false, + "_integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "_location": "/extract-zip", + "_phantomChildren": { + "pump": "3.0.0" + }, + "_requested": { + "type": "version", + "registry": true, + "raw": "extract-zip@2.0.1", + "name": "extract-zip", + "escapedName": "extract-zip", + "rawSpec": "2.0.1", + "saveSpec": null, + "fetchSpec": "2.0.1" + }, + "_requiredBy": [ + "/playwright" + ], + "_resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "_spec": "2.0.1", + "_where": "/tmp/repository/main", + "author": { + "name": "max ogden" + }, + "bin": { + "extract-zip": "cli.js" + }, + "bugs": { + "url": "https://github.com/maxogden/extract-zip/issues" + }, + "dependencies": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "description": "unzip a zip file into a directory using 100% javascript", + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^3.2.0", + "@typescript-eslint/parser": "^3.2.0", + "ava": "^3.5.1", + "eslint": "^7.2.0", + "eslint-config-standard": "^14.1.1", + "eslint-plugin-ava": "^10.2.0", + "eslint-plugin-import": "^2.20.1", + "eslint-plugin-node": "^11.0.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.1", + "fs-extra": "^9.0.0", + "husky": "^4.2.3", + "lint-staged": "^10.0.9", + "nyc": "^15.0.0", + "tsd": "^0.11.0", + "typescript": "^3.8.3" + }, + "engines": { + "node": ">= 10.17.0" + }, + "eslintConfig": { + "extends": [ + "eslint:recommended", + "plugin:ava/recommended", + "plugin:import/errors", + "plugin:import/warnings", + "plugin:node/recommended", + "plugin:promise/recommended", + "standard" + ] + }, + "files": [ + "cli.js", + "index.d.ts" + ], + "homepage": "https://github.com/maxogden/extract-zip#readme", + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "keywords": [ + "unzip", + "zip", + "extract" + ], + "license": "BSD-2-Clause", + "lint-staged": { + "*.js": "yarn lint:js --fix", + "*.ts": "yarn lint:ts --fix" + }, + "main": "index.js", + "name": "extract-zip", + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/maxogden/extract-zip.git" + }, + "scripts": { + "ava": "ava", + "coverage": "nyc ava", + "lint": "yarn lint:js && yarn lint:ts && yarn tsd", + "lint:js": "eslint .", + "lint:ts": "eslint --config .eslintrc.typescript.js --ext .ts .", + "test": "yarn lint && ava", + "tsd": "tsd" + }, + "types": "index.d.ts", + "version": "2.0.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/readme.md new file mode 100644 index 00000000..4ee71089 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/extract-zip/readme.md @@ -0,0 +1,57 @@ +# extract-zip + +Unzip written in pure JavaScript. Extracts a zip into a directory. Available as a library or a command line program. + +Uses the [`yauzl`](http://npmjs.org/yauzl) ZIP parser. + +[![NPM](https://nodei.co/npm/extract-zip.png?global=true)](https://npm.im/extract-zip) +[![Uses JS Standard Style](https://cdn.jsdelivr.net/gh/standard/standard/badge.svg)](https://github.com/standard/standard) +[![Build Status](https://github.com/maxogden/extract-zip/workflows/CI/badge.svg)](https://github.com/maxogden/extract-zip/actions?query=workflow%3ACI) + +## Installation + +Make sure you have Node 10 or greater installed. + +Get the library: + +``` +npm install extract-zip --save +``` + +Install the command line program: + +``` +npm install extract-zip -g +``` + +## JS API + +```javascript +const extract = require('extract-zip') + +async function main () { + try { + await extract(source, { dir: target }) + console.log('Extraction complete') + } catch (err) { + // handle any errors + } +} +``` + +### Options + +- `dir` (required) - the path to the directory where the extracted files are written +- `defaultDirMode` - integer - Directory Mode (permissions), defaults to `0o755` +- `defaultFileMode` - integer - File Mode (permissions), defaults to `0o644` +- `onEntry` - function - if present, will be called with `(entry, zipfile)`, entry is every entry from the zip file forwarded from the `entry` event from yauzl. `zipfile` is the `yauzl` instance + +Default modes are only used if no permissions are set in the zip file. + +## CLI Usage + +``` +extract-zip foo.zip +``` + +If not specified, `targetDirectory` will default to `process.cwd()`. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/.npmignore b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/.npmignore new file mode 100644 index 00000000..ccc29308 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/.npmignore @@ -0,0 +1,2 @@ +/coverage +/node_modules diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/.travis.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/.travis.yml new file mode 100644 index 00000000..77b72028 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: + - "0.10" +script: + - "npm run test-travis" +after_script: + - "npm install coveralls@2 && cat ./coverage/lcov.info | ./node_modules/.bin/coveralls" diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/CHANGELOG.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/CHANGELOG.md new file mode 100644 index 00000000..783042f8 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/CHANGELOG.md @@ -0,0 +1,49 @@ +### 1.0.1 + + * use `setImmediate` instead of `nextTick` + +### 1.0.0 + + * `new FdSlicer(fd, options)` must now be `fdSlicer.createFromFd(fd, options)` + * fix behavior when `end` is 0. + * fix `createWriteStream` when using `createFromBuffer` + +### 0.4.0 + + * add ability to create an FdSlicer instance from a Buffer + +### 0.3.2 + + * fix write stream and read stream destroy behavior + +### 0.3.1 + + * write stream: fix end option behavior + +### 0.3.0 + + * write stream emits 'progress' events + * write stream supports 'end' option which causes the stream to emit an error + if a maximum size is exceeded + * improve documentation + +### 0.2.1 + + * Update pend dependency to latest bugfix version. + +### 0.2.0 + + * Add read and write functions + +### 0.1.0 + + * Add `autoClose` option and `ref()` and `unref()`. + +### 0.0.2 + + * Add API documentation + * read stream: create buffer at last possible moment + +### 0.0.1 + + * Initial release diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/LICENSE new file mode 100644 index 00000000..e57596d2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/LICENSE @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/README.md new file mode 100644 index 00000000..ad7f0ec7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/README.md @@ -0,0 +1,199 @@ +# fd-slicer + +[![Build Status](https://travis-ci.org/andrewrk/node-fd-slicer.svg?branch=master)](https://travis-ci.org/andrewrk/node-fd-slicer) + +Safe `fs.ReadStream` and `fs.WriteStream` using the same fd. + +Let's say that you want to perform a parallel upload of a file to a remote +server. To do this, we want to create multiple read streams. The first thing +you might think of is to use the `{start: 0, end: 0}` API of +`fs.createReadStream`. This gives you two choices: + + 0. Use the same file descriptor for all `fs.ReadStream` objects. + 0. Open the file multiple times, resulting in a separate file descriptor + for each read stream. + +Neither of these are acceptable options. The first one is a severe bug, +because the API docs for `fs.write` state: + +> Note that it is unsafe to use `fs.write` multiple times on the same file +> without waiting for the callback. For this scenario, `fs.createWriteStream` +> is strongly recommended. + +`fs.createWriteStream` will solve the problem if you only create one of them +for the file descriptor, but it will exhibit this unsafety if you create +multiple write streams per file descriptor. + +The second option suffers from a race condition. For each additional time the +file is opened after the first, it is possible that the file is modified. So +in our parallel uploading example, we might upload a corrupt file that never +existed on the client's computer. + +This module solves this problem by providing `createReadStream` and +`createWriteStream` that operate on a shared file descriptor and provides +the convenient stream API while still allowing slicing and dicing. + +This module also gives you some additional power that the builtin +`fs.createWriteStream` do not give you. These features are: + + * Emitting a 'progress' event on write. + * Ability to set a maximum size and emit an error if this size is exceeded. + * Ability to create an `FdSlicer` instance from a `Buffer`. This enables you + to provide API for handling files as well as buffers using the same API. + +## Usage + +```js +var fdSlicer = require('fd-slicer'); +var fs = require('fs'); + +fs.open("file.txt", 'r', function(err, fd) { + if (err) throw err; + var slicer = fdSlicer.createFromFd(fd); + var firstPart = slicer.createReadStream({start: 0, end: 100}); + var secondPart = slicer.createReadStream({start: 100}); + var firstOut = fs.createWriteStream("first.txt"); + var secondOut = fs.createWriteStream("second.txt"); + firstPart.pipe(firstOut); + secondPart.pipe(secondOut); +}); +``` + +You can also create from a buffer: + +```js +var fdSlicer = require('fd-slicer'); +var slicer = FdSlicer.createFromBuffer(someBuffer); +var firstPart = slicer.createReadStream({start: 0, end: 100}); +var secondPart = slicer.createReadStream({start: 100}); +var firstOut = fs.createWriteStream("first.txt"); +var secondOut = fs.createWriteStream("second.txt"); +firstPart.pipe(firstOut); +secondPart.pipe(secondOut); +``` + +## API Documentation + +### fdSlicer.createFromFd(fd, [options]) + +```js +var fdSlicer = require('fd-slicer'); +fs.open("file.txt", 'r', function(err, fd) { + if (err) throw err; + var slicer = fdSlicer.createFromFd(fd); + // ... +}); +``` + +Make sure `fd` is a properly initialized file descriptor. If you want to +use `createReadStream` make sure you open it for reading and if you want +to use `createWriteStream` make sure you open it for writing. + +`options` is an optional object which can contain: + + * `autoClose` - if set to `true`, the file descriptor will be automatically + closed once the last stream that references it is closed. Defaults to + `false`. `ref()` and `unref()` can be used to increase or decrease the + reference count, respectively. + +### fdSlicer.createFromBuffer(buffer, [options]) + +```js +var fdSlicer = require('fd-slicer'); +var slicer = fdSlicer.createFromBuffer(someBuffer); +// ... +``` + +`options` is an optional object which can contain: + + * `maxChunkSize` - A `Number` of bytes. see `createReadStream()`. + If falsey, defaults to unlimited. + +#### Properties + +##### fd + +The file descriptor passed in. `undefined` if created from a buffer. + +#### Methods + +##### createReadStream(options) + +Available `options`: + + * `start` - Number. The offset into the file to start reading from. Defaults + to 0. + * `end` - Number. Exclusive upper bound offset into the file to stop reading + from. + * `highWaterMark` - Number. The maximum number of bytes to store in the + internal buffer before ceasing to read from the underlying resource. + Defaults to 16 KB. + * `encoding` - String. If specified, then buffers will be decoded to strings + using the specified encoding. Defaults to `null`. + +The ReadableStream that this returns has these additional methods: + + * `destroy(err)` - stop streaming. `err` is optional and is the error that + will be emitted in order to cause the streaming to stop. Defaults to + `new Error("stream destroyed")`. + +If `maxChunkSize` was specified (see `createFromBuffer()`), the read stream +will provide chunks of at most that size. Normally, the read stream provides +the entire range requested in a single chunk, but this can cause performance +problems in some circumstances. +See [thejoshwolfe/yauzl#87](https://github.com/thejoshwolfe/yauzl/issues/87). + +##### createWriteStream(options) + +Available `options`: + + * `start` - Number. The offset into the file to start writing to. Defaults to + 0. + * `end` - Number. Exclusive upper bound offset into the file. If this offset + is reached, the write stream will emit an 'error' event and stop functioning. + In this situation, `err.code === 'ETOOBIG'`. Defaults to `Infinity`. + * `highWaterMark` - Number. Buffer level when `write()` starts returning + false. Defaults to 16KB. + * `decodeStrings` - Boolean. Whether or not to decode strings into Buffers + before passing them to` _write()`. Defaults to `true`. + +The WritableStream that this returns has these additional methods: + + * `destroy()` - stop streaming + +And these additional properties: + + * `bytesWritten` - number of bytes written to the stream + +And these additional events: + + * 'progress' - emitted when `bytesWritten` changes. + +##### read(buffer, offset, length, position, callback) + +Equivalent to `fs.read`, but with concurrency protection. +`callback` must be defined. + +##### write(buffer, offset, length, position, callback) + +Equivalent to `fs.write`, but with concurrency protection. +`callback` must be defined. + +##### ref() + +Increase the `autoClose` reference count by 1. + +##### unref() + +Decrease the `autoClose` reference count by 1. + +#### Events + +##### 'error' + +Emitted if `fs.close` returns an error when auto closing. + +##### 'close' + +Emitted when fd-slicer closes the file descriptor due to `autoClose`. Never +emitted if created from a buffer. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/index.js new file mode 100644 index 00000000..65d32a3e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/index.js @@ -0,0 +1,296 @@ +var fs = require('fs'); +var util = require('util'); +var stream = require('stream'); +var Readable = stream.Readable; +var Writable = stream.Writable; +var PassThrough = stream.PassThrough; +var Pend = require('pend'); +var EventEmitter = require('events').EventEmitter; + +exports.createFromBuffer = createFromBuffer; +exports.createFromFd = createFromFd; +exports.BufferSlicer = BufferSlicer; +exports.FdSlicer = FdSlicer; + +util.inherits(FdSlicer, EventEmitter); +function FdSlicer(fd, options) { + options = options || {}; + EventEmitter.call(this); + + this.fd = fd; + this.pend = new Pend(); + this.pend.max = 1; + this.refCount = 0; + this.autoClose = !!options.autoClose; +} + +FdSlicer.prototype.read = function(buffer, offset, length, position, callback) { + var self = this; + self.pend.go(function(cb) { + fs.read(self.fd, buffer, offset, length, position, function(err, bytesRead, buffer) { + cb(); + callback(err, bytesRead, buffer); + }); + }); +}; + +FdSlicer.prototype.write = function(buffer, offset, length, position, callback) { + var self = this; + self.pend.go(function(cb) { + fs.write(self.fd, buffer, offset, length, position, function(err, written, buffer) { + cb(); + callback(err, written, buffer); + }); + }); +}; + +FdSlicer.prototype.createReadStream = function(options) { + return new ReadStream(this, options); +}; + +FdSlicer.prototype.createWriteStream = function(options) { + return new WriteStream(this, options); +}; + +FdSlicer.prototype.ref = function() { + this.refCount += 1; +}; + +FdSlicer.prototype.unref = function() { + var self = this; + self.refCount -= 1; + + if (self.refCount > 0) return; + if (self.refCount < 0) throw new Error("invalid unref"); + + if (self.autoClose) { + fs.close(self.fd, onCloseDone); + } + + function onCloseDone(err) { + if (err) { + self.emit('error', err); + } else { + self.emit('close'); + } + } +}; + +util.inherits(ReadStream, Readable); +function ReadStream(context, options) { + options = options || {}; + Readable.call(this, options); + + this.context = context; + this.context.ref(); + + this.start = options.start || 0; + this.endOffset = options.end; + this.pos = this.start; + this.destroyed = false; +} + +ReadStream.prototype._read = function(n) { + var self = this; + if (self.destroyed) return; + + var toRead = Math.min(self._readableState.highWaterMark, n); + if (self.endOffset != null) { + toRead = Math.min(toRead, self.endOffset - self.pos); + } + if (toRead <= 0) { + self.destroyed = true; + self.push(null); + self.context.unref(); + return; + } + self.context.pend.go(function(cb) { + if (self.destroyed) return cb(); + var buffer = new Buffer(toRead); + fs.read(self.context.fd, buffer, 0, toRead, self.pos, function(err, bytesRead) { + if (err) { + self.destroy(err); + } else if (bytesRead === 0) { + self.destroyed = true; + self.push(null); + self.context.unref(); + } else { + self.pos += bytesRead; + self.push(buffer.slice(0, bytesRead)); + } + cb(); + }); + }); +}; + +ReadStream.prototype.destroy = function(err) { + if (this.destroyed) return; + err = err || new Error("stream destroyed"); + this.destroyed = true; + this.emit('error', err); + this.context.unref(); +}; + +util.inherits(WriteStream, Writable); +function WriteStream(context, options) { + options = options || {}; + Writable.call(this, options); + + this.context = context; + this.context.ref(); + + this.start = options.start || 0; + this.endOffset = (options.end == null) ? Infinity : +options.end; + this.bytesWritten = 0; + this.pos = this.start; + this.destroyed = false; + + this.on('finish', this.destroy.bind(this)); +} + +WriteStream.prototype._write = function(buffer, encoding, callback) { + var self = this; + if (self.destroyed) return; + + if (self.pos + buffer.length > self.endOffset) { + var err = new Error("maximum file length exceeded"); + err.code = 'ETOOBIG'; + self.destroy(); + callback(err); + return; + } + self.context.pend.go(function(cb) { + if (self.destroyed) return cb(); + fs.write(self.context.fd, buffer, 0, buffer.length, self.pos, function(err, bytes) { + if (err) { + self.destroy(); + cb(); + callback(err); + } else { + self.bytesWritten += bytes; + self.pos += bytes; + self.emit('progress'); + cb(); + callback(); + } + }); + }); +}; + +WriteStream.prototype.destroy = function() { + if (this.destroyed) return; + this.destroyed = true; + this.context.unref(); +}; + +util.inherits(BufferSlicer, EventEmitter); +function BufferSlicer(buffer, options) { + EventEmitter.call(this); + + options = options || {}; + this.refCount = 0; + this.buffer = buffer; + this.maxChunkSize = options.maxChunkSize || Number.MAX_SAFE_INTEGER; +} + +BufferSlicer.prototype.read = function(buffer, offset, length, position, callback) { + var end = position + length; + var delta = end - this.buffer.length; + var written = (delta > 0) ? delta : length; + this.buffer.copy(buffer, offset, position, end); + setImmediate(function() { + callback(null, written); + }); +}; + +BufferSlicer.prototype.write = function(buffer, offset, length, position, callback) { + buffer.copy(this.buffer, position, offset, offset + length); + setImmediate(function() { + callback(null, length, buffer); + }); +}; + +BufferSlicer.prototype.createReadStream = function(options) { + options = options || {}; + var readStream = new PassThrough(options); + readStream.destroyed = false; + readStream.start = options.start || 0; + readStream.endOffset = options.end; + // by the time this function returns, we'll be done. + readStream.pos = readStream.endOffset || this.buffer.length; + + // respect the maxChunkSize option to slice up the chunk into smaller pieces. + var entireSlice = this.buffer.slice(readStream.start, readStream.pos); + var offset = 0; + while (true) { + var nextOffset = offset + this.maxChunkSize; + if (nextOffset >= entireSlice.length) { + // last chunk + if (offset < entireSlice.length) { + readStream.write(entireSlice.slice(offset, entireSlice.length)); + } + break; + } + readStream.write(entireSlice.slice(offset, nextOffset)); + offset = nextOffset; + } + + readStream.end(); + readStream.destroy = function() { + readStream.destroyed = true; + }; + return readStream; +}; + +BufferSlicer.prototype.createWriteStream = function(options) { + var bufferSlicer = this; + options = options || {}; + var writeStream = new Writable(options); + writeStream.start = options.start || 0; + writeStream.endOffset = (options.end == null) ? this.buffer.length : +options.end; + writeStream.bytesWritten = 0; + writeStream.pos = writeStream.start; + writeStream.destroyed = false; + writeStream._write = function(buffer, encoding, callback) { + if (writeStream.destroyed) return; + + var end = writeStream.pos + buffer.length; + if (end > writeStream.endOffset) { + var err = new Error("maximum file length exceeded"); + err.code = 'ETOOBIG'; + writeStream.destroyed = true; + callback(err); + return; + } + buffer.copy(bufferSlicer.buffer, writeStream.pos, 0, buffer.length); + + writeStream.bytesWritten += buffer.length; + writeStream.pos = end; + writeStream.emit('progress'); + callback(); + }; + writeStream.destroy = function() { + writeStream.destroyed = true; + }; + return writeStream; +}; + +BufferSlicer.prototype.ref = function() { + this.refCount += 1; +}; + +BufferSlicer.prototype.unref = function() { + this.refCount -= 1; + + if (this.refCount < 0) { + throw new Error("invalid unref"); + } +}; + +function createFromBuffer(buffer, options) { + return new BufferSlicer(buffer, options); +} + +function createFromFd(fd, options) { + return new FdSlicer(fd, options); +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/package.json new file mode 100644 index 00000000..cc1b5403 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/package.json @@ -0,0 +1,68 @@ +{ + "_args": [ + [ + "fd-slicer@1.1.0", + "/tmp/repository/main" + ] + ], + "_from": "fd-slicer@1.1.0", + "_id": "fd-slicer@1.1.0", + "_inBundle": false, + "_integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "_location": "/fd-slicer", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "fd-slicer@1.1.0", + "name": "fd-slicer", + "escapedName": "fd-slicer", + "rawSpec": "1.1.0", + "saveSpec": null, + "fetchSpec": "1.1.0" + }, + "_requiredBy": [ + "/yauzl" + ], + "_resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "_spec": "1.1.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Andrew Kelley", + "email": "superjoe30@gmail.com" + }, + "bugs": { + "url": "https://github.com/andrewrk/node-fd-slicer/issues" + }, + "dependencies": { + "pend": "~1.2.0" + }, + "description": "safely create multiple ReadStream or WriteStream objects from the same file descriptor", + "devDependencies": { + "istanbul": "~0.3.3", + "mocha": "~2.0.1", + "stream-equal": "~0.1.5", + "streamsink": "~1.2.0" + }, + "directories": { + "test": "test" + }, + "homepage": "https://github.com/andrewrk/node-fd-slicer#readme", + "keywords": [ + "createReadStream", + "createWriteStream" + ], + "license": "MIT", + "main": "index.js", + "name": "fd-slicer", + "repository": { + "type": "git", + "url": "git://github.com/andrewrk/node-fd-slicer.git" + }, + "scripts": { + "test": "mocha --reporter spec --check-leaks", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/test.js", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --timeout 10000 --reporter spec --check-leaks test/test.js" + }, + "version": "1.1.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/test/test.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/test/test.js new file mode 100644 index 00000000..d05ab003 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fd-slicer/test/test.js @@ -0,0 +1,350 @@ +var fdSlicer = require('../'); +var fs = require('fs'); +var crypto = require('crypto'); +var path = require('path'); +var streamEqual = require('stream-equal'); +var assert = require('assert'); +var Pend = require('pend'); +var StreamSink = require('streamsink'); + +var describe = global.describe; +var it = global.it; +var before = global.before; +var beforeEach = global.beforeEach; +var after = global.after; + +var testBlobFile = path.join(__dirname, "test-blob.bin"); +var testBlobFileSize = 20 * 1024 * 1024; +var testOutBlobFile = path.join(__dirname, "test-blob-out.bin"); + +describe("FdSlicer", function() { + before(function(done) { + var out = fs.createWriteStream(testBlobFile); + for (var i = 0; i < testBlobFileSize / 1024; i += 1) { + out.write(crypto.pseudoRandomBytes(1024)); + } + out.end(); + out.on('close', done); + }); + beforeEach(function() { + try { + fs.unlinkSync(testOutBlobFile); + } catch (err) { + } + }); + after(function() { + try { + fs.unlinkSync(testBlobFile); + fs.unlinkSync(testOutBlobFile); + } catch (err) { + } + }); + it("reads a 20MB file (autoClose on)", function(done) { + fs.open(testBlobFile, 'r', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); + var actualStream = slicer.createReadStream(); + var expectedStream = fs.createReadStream(testBlobFile); + + var pend = new Pend(); + pend.go(function(cb) { + slicer.on('close', cb); + }); + pend.go(function(cb) { + streamEqual(expectedStream, actualStream, function(err, equal) { + if (err) return done(err); + assert.ok(equal); + cb(); + }); + }); + pend.wait(done); + }); + }); + it("reads 4 chunks simultaneously", function(done) { + fs.open(testBlobFile, 'r', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd); + var actualPart1 = slicer.createReadStream({start: testBlobFileSize * 0/4, end: testBlobFileSize * 1/4}); + var actualPart2 = slicer.createReadStream({start: testBlobFileSize * 1/4, end: testBlobFileSize * 2/4}); + var actualPart3 = slicer.createReadStream({start: testBlobFileSize * 2/4, end: testBlobFileSize * 3/4}); + var actualPart4 = slicer.createReadStream({start: testBlobFileSize * 3/4, end: testBlobFileSize * 4/4}); + var expectedPart1 = slicer.createReadStream({start: testBlobFileSize * 0/4, end: testBlobFileSize * 1/4}); + var expectedPart2 = slicer.createReadStream({start: testBlobFileSize * 1/4, end: testBlobFileSize * 2/4}); + var expectedPart3 = slicer.createReadStream({start: testBlobFileSize * 2/4, end: testBlobFileSize * 3/4}); + var expectedPart4 = slicer.createReadStream({start: testBlobFileSize * 3/4, end: testBlobFileSize * 4/4}); + var pend = new Pend(); + pend.go(function(cb) { + streamEqual(expectedPart1, actualPart1, function(err, equal) { + assert.ok(equal); + cb(err); + }); + }); + pend.go(function(cb) { + streamEqual(expectedPart2, actualPart2, function(err, equal) { + assert.ok(equal); + cb(err); + }); + }); + pend.go(function(cb) { + streamEqual(expectedPart3, actualPart3, function(err, equal) { + assert.ok(equal); + cb(err); + }); + }); + pend.go(function(cb) { + streamEqual(expectedPart4, actualPart4, function(err, equal) { + assert.ok(equal); + cb(err); + }); + }); + pend.wait(function(err) { + if (err) return done(err); + fs.close(fd, done); + }); + }); + }); + + it("writes a 20MB file (autoClose on)", function(done) { + fs.open(testOutBlobFile, 'w', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); + var actualStream = slicer.createWriteStream(); + var inStream = fs.createReadStream(testBlobFile); + + slicer.on('close', function() { + var expected = fs.createReadStream(testBlobFile); + var actual = fs.createReadStream(testOutBlobFile); + + streamEqual(expected, actual, function(err, equal) { + if (err) return done(err); + assert.ok(equal); + done(); + }); + }); + inStream.pipe(actualStream); + }); + }); + + it("writes 4 chunks simultaneously", function(done) { + fs.open(testOutBlobFile, 'w', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd); + var actualPart1 = slicer.createWriteStream({start: testBlobFileSize * 0/4}); + var actualPart2 = slicer.createWriteStream({start: testBlobFileSize * 1/4}); + var actualPart3 = slicer.createWriteStream({start: testBlobFileSize * 2/4}); + var actualPart4 = slicer.createWriteStream({start: testBlobFileSize * 3/4}); + var in1 = fs.createReadStream(testBlobFile, {start: testBlobFileSize * 0/4, end: testBlobFileSize * 1/4}); + var in2 = fs.createReadStream(testBlobFile, {start: testBlobFileSize * 1/4, end: testBlobFileSize * 2/4}); + var in3 = fs.createReadStream(testBlobFile, {start: testBlobFileSize * 2/4, end: testBlobFileSize * 3/4}); + var in4 = fs.createReadStream(testBlobFile, {start: testBlobFileSize * 3/4, end: testBlobFileSize * 4/4}); + var pend = new Pend(); + pend.go(function(cb) { + actualPart1.on('finish', cb); + }); + pend.go(function(cb) { + actualPart2.on('finish', cb); + }); + pend.go(function(cb) { + actualPart3.on('finish', cb); + }); + pend.go(function(cb) { + actualPart4.on('finish', cb); + }); + in1.pipe(actualPart1); + in2.pipe(actualPart2); + in3.pipe(actualPart3); + in4.pipe(actualPart4); + pend.wait(function() { + fs.close(fd, function(err) { + if (err) return done(err); + var expected = fs.createReadStream(testBlobFile); + var actual = fs.createReadStream(testOutBlobFile); + streamEqual(expected, actual, function(err, equal) { + if (err) return done(err); + assert.ok(equal); + done(); + }); + }); + }); + }); + }); + + it("throws on invalid ref", function(done) { + fs.open(testOutBlobFile, 'w', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); + assert.throws(function() { + slicer.unref(); + }, /invalid unref/); + fs.close(fd, done); + }); + }); + + it("write stream emits error when max size exceeded", function(done) { + fs.open(testOutBlobFile, 'w', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); + var ws = slicer.createWriteStream({start: 0, end: 1000}); + ws.on('error', function(err) { + assert.strictEqual(err.code, 'ETOOBIG'); + slicer.on('close', done); + }); + ws.end(new Buffer(1001)); + }); + }); + + it("write stream does not emit error when max size not exceeded", function(done) { + fs.open(testOutBlobFile, 'w', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); + var ws = slicer.createWriteStream({end: 1000}); + slicer.on('close', done); + ws.end(new Buffer(1000)); + }); + }); + + it("write stream start and end work together", function(done) { + fs.open(testOutBlobFile, 'w', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); + var ws = slicer.createWriteStream({start: 1, end: 1000}); + ws.on('error', function(err) { + assert.strictEqual(err.code, 'ETOOBIG'); + slicer.on('close', done); + }); + ws.end(new Buffer(1000)); + }); + }); + + it("write stream emits progress events", function(done) { + fs.open(testOutBlobFile, 'w', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); + var ws = slicer.createWriteStream(); + var progressEventCount = 0; + var prevBytesWritten = 0; + ws.on('progress', function() { + progressEventCount += 1; + assert.ok(ws.bytesWritten > prevBytesWritten); + prevBytesWritten = ws.bytesWritten; + }); + slicer.on('close', function() { + assert.ok(progressEventCount > 5); + done(); + }); + for (var i = 0; i < 10; i += 1) { + ws.write(new Buffer(16 * 1024 * 2)); + } + ws.end(); + }); + }); + + it("write stream unrefs when destroyed", function(done) { + fs.open(testOutBlobFile, 'w', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); + var ws = slicer.createWriteStream(); + slicer.on('close', done); + ws.write(new Buffer(1000)); + ws.destroy(); + }); + }); + + it("read stream unrefs when destroyed", function(done) { + fs.open(testBlobFile, 'r', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); + var rs = slicer.createReadStream(); + rs.on('error', function(err) { + assert.strictEqual(err.message, "stream destroyed"); + slicer.on('close', done); + }); + rs.destroy(); + }); + }); + + it("fdSlicer.read", function(done) { + fs.open(testBlobFile, 'r', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd); + var outBuf = new Buffer(1024); + slicer.read(outBuf, 0, 10, 0, function(err, bytesRead, buf) { + assert.strictEqual(bytesRead, 10); + fs.close(fd, done); + }); + }); + }); + + it("fdSlicer.write", function(done) { + fs.open(testOutBlobFile, 'w', function(err, fd) { + if (err) return done(err); + var slicer = fdSlicer.createFromFd(fd); + slicer.write(new Buffer("blah\n"), 0, 5, 0, function() { + if (err) return done(err); + fs.close(fd, done); + }); + }); + }); +}); + +describe("BufferSlicer", function() { + it("invalid ref", function() { + var slicer = fdSlicer.createFromBuffer(new Buffer(16)); + slicer.ref(); + slicer.unref(); + assert.throws(function() { + slicer.unref(); + }, /invalid unref/); + }); + it("read and write", function(done) { + var buf = new Buffer("through the tangled thread the needle finds its way"); + var slicer = fdSlicer.createFromBuffer(buf); + var outBuf = new Buffer(1024); + slicer.read(outBuf, 10, 11, 8, function(err) { + if (err) return done(err); + assert.strictEqual(outBuf.toString('utf8', 10, 21), "the tangled"); + slicer.write(new Buffer("derp"), 0, 4, 7, function(err) { + if (err) return done(err); + assert.strictEqual(buf.toString('utf8', 7, 19), "derp tangled"); + done(); + }); + }); + }); + it("createReadStream", function(done) { + var str = "I never conquered rarely came, 16 just held such better days"; + var buf = new Buffer(str); + var slicer = fdSlicer.createFromBuffer(buf); + var inStream = slicer.createReadStream(); + var sink = new StreamSink(); + inStream.pipe(sink); + sink.on('finish', function() { + assert.strictEqual(sink.toString(), str); + inStream.destroy(); + done(); + }); + }); + it("createWriteStream exceed buffer size", function(done) { + var slicer = fdSlicer.createFromBuffer(new Buffer(4)); + var outStream = slicer.createWriteStream(); + outStream.on('error', function(err) { + assert.strictEqual(err.code, 'ETOOBIG'); + done(); + }); + outStream.write("hi!\n"); + outStream.write("it warked\n"); + outStream.end(); + }); + it("createWriteStream ok", function(done) { + var buf = new Buffer(1024); + var slicer = fdSlicer.createFromBuffer(buf); + var outStream = slicer.createWriteStream(); + outStream.on('finish', function() { + assert.strictEqual(buf.toString('utf8', 0, "hi!\nit warked\n".length), "hi!\nit warked\n"); + outStream.destroy(); + done(); + }); + outStream.write("hi!\n"); + outStream.write("it warked\n"); + outStream.end(); + }); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/index.js new file mode 100644 index 00000000..095dc938 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/index.js @@ -0,0 +1,559 @@ +'use strict'; + +module.exports = input => { + const buf = new Uint8Array(input); + + if (!(buf && buf.length > 1)) { + return null; + } + + const check = (header, opts) => { + opts = Object.assign({ + offset: 0 + }, opts); + + for (let i = 0; i < header.length; i++) { + if (header[i] !== buf[i + opts.offset]) { + return false; + } + } + + return true; + }; + + if (check([0xFF, 0xD8, 0xFF])) { + return { + ext: 'jpg', + mime: 'image/jpeg' + }; + } + + if (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) { + return { + ext: 'png', + mime: 'image/png' + }; + } + + if (check([0x47, 0x49, 0x46])) { + return { + ext: 'gif', + mime: 'image/gif' + }; + } + + if (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) { + return { + ext: 'webp', + mime: 'image/webp' + }; + } + + if (check([0x46, 0x4C, 0x49, 0x46])) { + return { + ext: 'flif', + mime: 'image/flif' + }; + } + + // Needs to be before `tif` check + if ( + (check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) && + check([0x43, 0x52], {offset: 8}) + ) { + return { + ext: 'cr2', + mime: 'image/x-canon-cr2' + }; + } + + if ( + check([0x49, 0x49, 0x2A, 0x0]) || + check([0x4D, 0x4D, 0x0, 0x2A]) + ) { + return { + ext: 'tif', + mime: 'image/tiff' + }; + } + + if (check([0x42, 0x4D])) { + return { + ext: 'bmp', + mime: 'image/bmp' + }; + } + + if (check([0x49, 0x49, 0xBC])) { + return { + ext: 'jxr', + mime: 'image/vnd.ms-photo' + }; + } + + if (check([0x38, 0x42, 0x50, 0x53])) { + return { + ext: 'psd', + mime: 'image/vnd.adobe.photoshop' + }; + } + + // Needs to be before the `zip` check + if ( + check([0x50, 0x4B, 0x3, 0x4]) && + check([0x6D, 0x69, 0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x65, 0x70, 0x75, 0x62, 0x2B, 0x7A, 0x69, 0x70], {offset: 30}) + ) { + return { + ext: 'epub', + mime: 'application/epub+zip' + }; + } + + // Needs to be before `zip` check + // Assumes signed `.xpi` from addons.mozilla.org + if ( + check([0x50, 0x4B, 0x3, 0x4]) && + check([0x4D, 0x45, 0x54, 0x41, 0x2D, 0x49, 0x4E, 0x46, 0x2F, 0x6D, 0x6F, 0x7A, 0x69, 0x6C, 0x6C, 0x61, 0x2E, 0x72, 0x73, 0x61], {offset: 30}) + ) { + return { + ext: 'xpi', + mime: 'application/x-xpinstall' + }; + } + + if ( + check([0x50, 0x4B]) && + (buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) && + (buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8) + ) { + return { + ext: 'zip', + mime: 'application/zip' + }; + } + + if (check([0x75, 0x73, 0x74, 0x61, 0x72], {offset: 257})) { + return { + ext: 'tar', + mime: 'application/x-tar' + }; + } + + if ( + check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) && + (buf[6] === 0x0 || buf[6] === 0x1) + ) { + return { + ext: 'rar', + mime: 'application/x-rar-compressed' + }; + } + + if (check([0x1F, 0x8B, 0x8])) { + return { + ext: 'gz', + mime: 'application/gzip' + }; + } + + if (check([0x42, 0x5A, 0x68])) { + return { + ext: 'bz2', + mime: 'application/x-bzip2' + }; + } + + if (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) { + return { + ext: '7z', + mime: 'application/x-7z-compressed' + }; + } + + if (check([0x78, 0x01])) { + return { + ext: 'dmg', + mime: 'application/x-apple-diskimage' + }; + } + + if ( + ( + check([0x0, 0x0, 0x0]) && + (buf[3] === 0x18 || buf[3] === 0x20) && + check([0x66, 0x74, 0x79, 0x70], {offset: 4}) + ) || + check([0x33, 0x67, 0x70, 0x35]) || + ( + check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34, 0x32]) && + check([0x6D, 0x70, 0x34, 0x31, 0x6D, 0x70, 0x34, 0x32, 0x69, 0x73, 0x6F, 0x6D], {offset: 16}) + ) || + check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6F, 0x6D]) || + check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34, 0x32, 0x0, 0x0, 0x0, 0x0]) + ) { + return { + ext: 'mp4', + mime: 'video/mp4' + }; + } + + if (check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x56])) { + return { + ext: 'm4v', + mime: 'video/x-m4v' + }; + } + + if (check([0x4D, 0x54, 0x68, 0x64])) { + return { + ext: 'mid', + mime: 'audio/midi' + }; + } + + // https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska + if (check([0x1A, 0x45, 0xDF, 0xA3])) { + const sliced = buf.subarray(4, 4 + 4096); + const idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82); + + if (idPos >= 0) { + const docTypePos = idPos + 3; + const findDocType = type => Array.from(type).every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0)); + + if (findDocType('matroska')) { + return { + ext: 'mkv', + mime: 'video/x-matroska' + }; + } + + if (findDocType('webm')) { + return { + ext: 'webm', + mime: 'video/webm' + }; + } + } + } + + if (check([0x0, 0x0, 0x0, 0x14, 0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]) || + check([0x66, 0x72, 0x65, 0x65], {offset: 4}) || + check([0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20], {offset: 4}) || + check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // MJPEG + check([0x77, 0x69, 0x64, 0x65], {offset: 4})) { + return { + ext: 'mov', + mime: 'video/quicktime' + }; + } + + if ( + check([0x52, 0x49, 0x46, 0x46]) && + check([0x41, 0x56, 0x49], {offset: 8}) + ) { + return { + ext: 'avi', + mime: 'video/x-msvideo' + }; + } + + if (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) { + return { + ext: 'wmv', + mime: 'video/x-ms-wmv' + }; + } + + if (check([0x0, 0x0, 0x1, 0xBA])) { + return { + ext: 'mpg', + mime: 'video/mpeg' + }; + } + + if ( + check([0x49, 0x44, 0x33]) || + check([0xFF, 0xFB]) + ) { + return { + ext: 'mp3', + mime: 'audio/mpeg' + }; + } + + if ( + check([0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41], {offset: 4}) || + check([0x4D, 0x34, 0x41, 0x20]) + ) { + return { + ext: 'm4a', + mime: 'audio/m4a' + }; + } + + // Needs to be before `ogg` check + if (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) { + return { + ext: 'opus', + mime: 'audio/opus' + }; + } + + if (check([0x4F, 0x67, 0x67, 0x53])) { + return { + ext: 'ogg', + mime: 'audio/ogg' + }; + } + + if (check([0x66, 0x4C, 0x61, 0x43])) { + return { + ext: 'flac', + mime: 'audio/x-flac' + }; + } + + if ( + check([0x52, 0x49, 0x46, 0x46]) && + check([0x57, 0x41, 0x56, 0x45], {offset: 8}) + ) { + return { + ext: 'wav', + mime: 'audio/x-wav' + }; + } + + if (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) { + return { + ext: 'amr', + mime: 'audio/amr' + }; + } + + if (check([0x25, 0x50, 0x44, 0x46])) { + return { + ext: 'pdf', + mime: 'application/pdf' + }; + } + + if (check([0x4D, 0x5A])) { + return { + ext: 'exe', + mime: 'application/x-msdownload' + }; + } + + if ( + (buf[0] === 0x43 || buf[0] === 0x46) && + check([0x57, 0x53], {offset: 1}) + ) { + return { + ext: 'swf', + mime: 'application/x-shockwave-flash' + }; + } + + if (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) { + return { + ext: 'rtf', + mime: 'application/rtf' + }; + } + + if (check([0x00, 0x61, 0x73, 0x6D])) { + return { + ext: 'wasm', + mime: 'application/wasm' + }; + } + + if ( + check([0x77, 0x4F, 0x46, 0x46]) && + ( + check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || + check([0x4F, 0x54, 0x54, 0x4F], {offset: 4}) + ) + ) { + return { + ext: 'woff', + mime: 'font/woff' + }; + } + + if ( + check([0x77, 0x4F, 0x46, 0x32]) && + ( + check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || + check([0x4F, 0x54, 0x54, 0x4F], {offset: 4}) + ) + ) { + return { + ext: 'woff2', + mime: 'font/woff2' + }; + } + + if ( + check([0x4C, 0x50], {offset: 34}) && + ( + check([0x00, 0x00, 0x01], {offset: 8}) || + check([0x01, 0x00, 0x02], {offset: 8}) || + check([0x02, 0x00, 0x02], {offset: 8}) + ) + ) { + return { + ext: 'eot', + mime: 'application/octet-stream' + }; + } + + if (check([0x00, 0x01, 0x00, 0x00, 0x00])) { + return { + ext: 'ttf', + mime: 'font/ttf' + }; + } + + if (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) { + return { + ext: 'otf', + mime: 'font/otf' + }; + } + + if (check([0x00, 0x00, 0x01, 0x00])) { + return { + ext: 'ico', + mime: 'image/x-icon' + }; + } + + if (check([0x46, 0x4C, 0x56, 0x01])) { + return { + ext: 'flv', + mime: 'video/x-flv' + }; + } + + if (check([0x25, 0x21])) { + return { + ext: 'ps', + mime: 'application/postscript' + }; + } + + if (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) { + return { + ext: 'xz', + mime: 'application/x-xz' + }; + } + + if (check([0x53, 0x51, 0x4C, 0x69])) { + return { + ext: 'sqlite', + mime: 'application/x-sqlite3' + }; + } + + if (check([0x4E, 0x45, 0x53, 0x1A])) { + return { + ext: 'nes', + mime: 'application/x-nintendo-nes-rom' + }; + } + + if (check([0x43, 0x72, 0x32, 0x34])) { + return { + ext: 'crx', + mime: 'application/x-google-chrome-extension' + }; + } + + if ( + check([0x4D, 0x53, 0x43, 0x46]) || + check([0x49, 0x53, 0x63, 0x28]) + ) { + return { + ext: 'cab', + mime: 'application/vnd.ms-cab-compressed' + }; + } + + // Needs to be before `ar` check + if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) { + return { + ext: 'deb', + mime: 'application/x-deb' + }; + } + + if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) { + return { + ext: 'ar', + mime: 'application/x-unix-archive' + }; + } + + if (check([0xED, 0xAB, 0xEE, 0xDB])) { + return { + ext: 'rpm', + mime: 'application/x-rpm' + }; + } + + if ( + check([0x1F, 0xA0]) || + check([0x1F, 0x9D]) + ) { + return { + ext: 'Z', + mime: 'application/x-compress' + }; + } + + if (check([0x4C, 0x5A, 0x49, 0x50])) { + return { + ext: 'lz', + mime: 'application/x-lzip' + }; + } + + if (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) { + return { + ext: 'msi', + mime: 'application/x-msi' + }; + } + + if (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) { + return { + ext: 'mxf', + mime: 'application/mxf' + }; + } + + if (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) { + return { + ext: 'mts', + mime: 'video/mp2t' + }; + } + + if (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) { + return { + ext: 'blend', + mime: 'application/x-blender' + }; + } + + if (check([0x42, 0x50, 0x47, 0xFB])) { + return { + ext: 'bpg', + mime: 'image/bpg' + }; + } + + return null; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/license @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/package.json new file mode 100644 index 00000000..796a0b9e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/package.json @@ -0,0 +1,145 @@ +{ + "_args": [ + [ + "file-type@5.2.0", + "/tmp/repository/main" + ] + ], + "_from": "file-type@5.2.0", + "_id": "file-type@5.2.0", + "_inBundle": false, + "_integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "_location": "/file-type", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "file-type@5.2.0", + "name": "file-type", + "escapedName": "file-type", + "rawSpec": "5.2.0", + "saveSpec": null, + "fetchSpec": "5.2.0" + }, + "_requiredBy": [ + "/decompress-tar", + "/decompress-targz" + ], + "_resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "_spec": "5.2.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/file-type/issues" + }, + "description": "Detect the file type of a Buffer/Uint8Array", + "devDependencies": { + "ava": "*", + "read-chunk": "^2.0.0", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/file-type#readme", + "keywords": [ + "mime", + "file", + "type", + "archive", + "image", + "img", + "pic", + "picture", + "flash", + "photo", + "video", + "type", + "detect", + "check", + "is", + "exif", + "exe", + "binary", + "buffer", + "uint8array", + "jpg", + "png", + "gif", + "webp", + "flif", + "cr2", + "tif", + "bmp", + "jxr", + "psd", + "zip", + "tar", + "rar", + "gz", + "bz2", + "7z", + "dmg", + "mp4", + "m4v", + "mid", + "mkv", + "webm", + "mov", + "avi", + "mpg", + "mp3", + "m4a", + "ogg", + "opus", + "flac", + "wav", + "amr", + "pdf", + "epub", + "exe", + "swf", + "rtf", + "woff", + "woff2", + "eot", + "ttf", + "otf", + "ico", + "flv", + "ps", + "xz", + "sqlite", + "xpi", + "cab", + "deb", + "ar", + "rpm", + "Z", + "lz", + "msi", + "mxf", + "mts", + "wasm", + "webassembly", + "blend", + "bpg" + ], + "license": "MIT", + "name": "file-type", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/file-type.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "5.2.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/readme.md new file mode 100644 index 00000000..2b9d250f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/file-type/readme.md @@ -0,0 +1,156 @@ +# file-type [![Build Status](https://travis-ci.org/sindresorhus/file-type.svg?branch=master)](https://travis-ci.org/sindresorhus/file-type) + +> Detect the file type of a Buffer/Uint8Array + +The file type is detected by checking the [magic number](http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files) of the buffer. + + +## Install + +``` +$ npm install --save file-type +``` + + +## Usage + +##### Node.js + +```js +const readChunk = require('read-chunk'); +const fileType = require('file-type'); +const buffer = readChunk.sync('unicorn.png', 0, 4100); + +fileType(buffer); +//=> {ext: 'png', mime: 'image/png'} +``` + +Or from a remote location: + +```js +const http = require('http'); +const fileType = require('file-type'); +const url = 'http://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif'; + +http.get(url, res => { + res.once('data', chunk => { + res.destroy(); + console.log(fileType(chunk)); + //=> {ext: 'gif', mime: 'image/gif'} + }); +}); +``` + +##### Browser + +```js +const xhr = new XMLHttpRequest(); +xhr.open('GET', 'unicorn.png'); +xhr.responseType = 'arraybuffer'; + +xhr.onload = () => { + fileType(new Uint8Array(this.response)); + //=> {ext: 'png', mime: 'image/png'} +}; + +xhr.send(); +``` + + +## API + +### fileType(input) + +Returns an `Object` with: + +- `ext` - One of the [supported file types](#supported-file-types) +- `mime` - The [MIME type](http://en.wikipedia.org/wiki/Internet_media_type) + +Or `null` when no match. + +#### input + +Type: `Buffer` `Uint8Array` + +It only needs the first 4100 bytes. + + +## Supported file types + +- [`jpg`](https://en.wikipedia.org/wiki/JPEG) +- [`png`](https://en.wikipedia.org/wiki/Portable_Network_Graphics) +- [`gif`](https://en.wikipedia.org/wiki/GIF) +- [`webp`](https://en.wikipedia.org/wiki/WebP) +- [`flif`](https://en.wikipedia.org/wiki/Free_Lossless_Image_Format) +- [`cr2`](http://fileinfo.com/extension/cr2) +- [`tif`](https://en.wikipedia.org/wiki/Tagged_Image_File_Format) +- [`bmp`](https://en.wikipedia.org/wiki/BMP_file_format) +- [`jxr`](https://en.wikipedia.org/wiki/JPEG_XR) +- [`psd`](https://en.wikipedia.org/wiki/Adobe_Photoshop#File_format) +- [`zip`](https://en.wikipedia.org/wiki/Zip_(file_format)) +- [`tar`](https://en.wikipedia.org/wiki/Tar_(computing)#File_format) +- [`rar`](https://en.wikipedia.org/wiki/RAR_(file_format)) +- [`gz`](https://en.wikipedia.org/wiki/Gzip) +- [`bz2`](https://en.wikipedia.org/wiki/Bzip2) +- [`7z`](https://en.wikipedia.org/wiki/7z) +- [`dmg`](https://en.wikipedia.org/wiki/Apple_Disk_Image) +- [`mp4`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#Filename_extensions) +- [`m4v`](https://en.wikipedia.org/wiki/M4V) +- [`mid`](https://en.wikipedia.org/wiki/MIDI) +- [`mkv`](https://en.wikipedia.org/wiki/Matroska) +- [`webm`](https://en.wikipedia.org/wiki/WebM) +- [`mov`](https://en.wikipedia.org/wiki/QuickTime_File_Format) +- [`avi`](https://en.wikipedia.org/wiki/Audio_Video_Interleave) +- [`wmv`](https://en.wikipedia.org/wiki/Windows_Media_Video) +- [`mpg`](https://en.wikipedia.org/wiki/MPEG-1) +- [`mp3`](https://en.wikipedia.org/wiki/MP3) +- [`m4a`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#.MP4_versus_.M4A) +- [`ogg`](https://en.wikipedia.org/wiki/Ogg) +- [`opus`](https://en.wikipedia.org/wiki/Opus_(audio_format)) +- [`flac`](https://en.wikipedia.org/wiki/FLAC) +- [`wav`](https://en.wikipedia.org/wiki/WAV) +- [`amr`](https://en.wikipedia.org/wiki/Adaptive_Multi-Rate_audio_codec) +- [`pdf`](https://en.wikipedia.org/wiki/Portable_Document_Format) +- [`epub`](https://en.wikipedia.org/wiki/EPUB) +- [`exe`](https://en.wikipedia.org/wiki/.exe) +- [`swf`](https://en.wikipedia.org/wiki/SWF) +- [`rtf`](https://en.wikipedia.org/wiki/Rich_Text_Format) +- [`woff`](https://en.wikipedia.org/wiki/Web_Open_Font_Format) +- [`woff2`](https://en.wikipedia.org/wiki/Web_Open_Font_Format) +- [`eot`](https://en.wikipedia.org/wiki/Embedded_OpenType) +- [`ttf`](https://en.wikipedia.org/wiki/TrueType) +- [`otf`](https://en.wikipedia.org/wiki/OpenType) +- [`ico`](https://en.wikipedia.org/wiki/ICO_(file_format)) +- [`flv`](https://en.wikipedia.org/wiki/Flash_Video) +- [`ps`](https://en.wikipedia.org/wiki/Postscript) +- [`xz`](https://en.wikipedia.org/wiki/Xz) +- [`sqlite`](https://www.sqlite.org/fileformat2.html) +- [`nes`](http://fileinfo.com/extension/nes) +- [`crx`](https://developer.chrome.com/extensions/crx) +- [`xpi`](https://en.wikipedia.org/wiki/XPInstall) +- [`cab`](https://en.wikipedia.org/wiki/Cabinet_(file_format)) +- [`deb`](https://en.wikipedia.org/wiki/Deb_(file_format)) +- [`ar`](https://en.wikipedia.org/wiki/Ar_(Unix)) +- [`rpm`](http://fileinfo.com/extension/rpm) +- [`Z`](http://fileinfo.com/extension/z) +- [`lz`](https://en.wikipedia.org/wiki/Lzip) +- [`msi`](https://en.wikipedia.org/wiki/Windows_Installer) +- [`mxf`](https://en.wikipedia.org/wiki/Material_Exchange_Format) +- [`mts`](https://en.wikipedia.org/wiki/.m2ts) +- [`wasm`](https://en.wikipedia.org/wiki/WebAssembly) +- [`blend`](https://wiki.blender.org/index.php/Dev:Source/Architecture/File_Format) +- [`bpg`](https://bellard.org/bpg/) + +*SVG isn't included as it requires the whole file to be read, but you can get it [here](https://github.com/sindresorhus/is-svg).* + +*Pull request welcome for additional commonly used file types.* + + +## Related + +- [file-type-cli](https://github.com/sindresorhus/file-type-cli) - CLI for this module + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/HISTORY.md new file mode 100644 index 00000000..4586996a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/HISTORY.md @@ -0,0 +1,70 @@ +0.5.2 / 2017-09-13 +================== + + * Fix regression matching multiple ETags in `If-None-Match` + * perf: improve `If-None-Match` token parsing + +0.5.1 / 2017-09-11 +================== + + * Fix handling of modified headers with invalid dates + * perf: improve ETag match loop + +0.5.0 / 2017-02-21 +================== + + * 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: 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` + +0.4.0 / 2017-02-05 +================== + + * Fix false detection of `no-cache` request directive + * perf: enable strict mode + * perf: hoist regular expressions + * perf: remove duplicate conditional + * perf: remove unnecessary boolean coercions + +0.3.0 / 2015-05-12 +================== + + * Add weak `ETag` matching support + +0.2.4 / 2014-09-07 +================== + + * Support Node.js 0.6 + +0.2.3 / 2014-09-07 +================== + + * Move repository to jshttp + +0.2.2 / 2014-02-19 +================== + + * Revert "Fix for blank page on Safari reload" + +0.2.1 / 2014-01-29 +================== + + * Fix for blank page on Safari reload + +0.2.0 / 2013-08-11 +================== + + * Return stale for `Cache-Control: no-cache` + +0.1.0 / 2012-06-15 +================== + + * Add `If-None-Match: *` support + +0.0.1 / 2012-06-10 +================== + + * Initial release diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/LICENSE new file mode 100644 index 00000000..1434ade7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2012 TJ Holowaychuk +Copyright (c) 2016-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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/README.md new file mode 100644 index 00000000..1c1c680d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/README.md @@ -0,0 +1,119 @@ +# fresh + +[![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 response freshness testing + +## 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): + +``` +$ npm install fresh +``` + +## API + + + +```js +var fresh = require('fresh') +``` + +### fresh(reqHeaders, resHeaders) + +Check freshness of the response using request and response headers. + +When the response is still "fresh" in the client's cache `true` is +returned, otherwise `false` is returned to indicate that the client +cache is now stale and the full response should be sent. + +When a client sends the `Cache-Control: no-cache` request header to +indicate an end-to-end reload request, this module will return `false` +to make handling these requests transparent. + +## Known Issues + +This module is designed to only follow the HTTP specifications, not +to work-around all kinda of client bugs (especially since this module +typically does not recieve enough information to understand what the +client actually is). + +There is a known issue that in certain versions of Safari, Safari +will incorrectly make a request that allows this module to validate +freshness of the resource even when Safari does not have a +representation of the resource in the cache. The module +[jumanji](https://www.npmjs.com/package/jumanji) can be used in +an Express application to work-around this issue and also provides +links to further reading on this Safari bug. + +## Example + +### API usage + + + +```js +var reqHeaders = { 'if-none-match': '"foo"' } +var resHeaders = { 'etag': '"bar"' } +fresh(reqHeaders, resHeaders) +// => false + +var reqHeaders = { 'if-none-match': '"foo"' } +var resHeaders = { 'etag': '"foo"' } +fresh(reqHeaders, resHeaders) +// => true +``` + +### Using with Node.js http server + +```js +var fresh = require('fresh') +var http = require('http') + +var server = http.createServer(function (req, res) { + // perform server logic + // ... including adding ETag / Last-Modified response headers + + if (isFresh(req, res)) { + // client has a fresh copy of resource + res.statusCode = 304 + res.end() + return + } + + // send the resource + res.statusCode = 200 + res.end('hello, world!') +}) + +function isFresh (req, res) { + return fresh(req.headers, { + 'etag': res.getHeader('ETag'), + 'last-modified': res.getHeader('Last-Modified') + }) +} + +server.listen(3000) +``` + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/fresh.svg +[npm-url]: https://npmjs.org/package/fresh +[node-version-image]: https://img.shields.io/node/v/fresh.svg +[node-version-url]: https://nodejs.org/en/ +[travis-image]: https://img.shields.io/travis/jshttp/fresh/master.svg +[travis-url]: https://travis-ci.org/jshttp/fresh +[coveralls-image]: https://img.shields.io/coveralls/jshttp/fresh/master.svg +[coveralls-url]: https://coveralls.io/r/jshttp/fresh?branch=master +[downloads-image]: https://img.shields.io/npm/dm/fresh.svg +[downloads-url]: https://npmjs.org/package/fresh diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/index.js new file mode 100644 index 00000000..d154f5a7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/index.js @@ -0,0 +1,137 @@ +/*! + * fresh + * Copyright(c) 2012 TJ Holowaychuk + * Copyright(c) 2016-2017 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * RegExp to check for no-cache token in Cache-Control. + * @private + */ + +var CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/ + +/** + * Module exports. + * @public + */ + +module.exports = fresh + +/** + * Check freshness of the response using request and response headers. + * + * @param {Object} reqHeaders + * @param {Object} resHeaders + * @return {Boolean} + * @public + */ + +function fresh (reqHeaders, resHeaders) { + // fields + var modifiedSince = reqHeaders['if-modified-since'] + var noneMatch = reqHeaders['if-none-match'] + + // unconditional request + if (!modifiedSince && !noneMatch) { + return false + } + + // Always return stale when Cache-Control: no-cache + // to support end-to-end reload requests + // https://tools.ietf.org/html/rfc2616#section-14.9.4 + var cacheControl = reqHeaders['cache-control'] + if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) { + return false + } + + // if-none-match + if (noneMatch && noneMatch !== '*') { + var etag = resHeaders['etag'] + + if (!etag) { + return false + } + + var etagStale = true + var matches = parseTokenList(noneMatch) + for (var i = 0; i < matches.length; i++) { + var match = matches[i] + if (match === etag || match === 'W/' + etag || 'W/' + match === etag) { + etagStale = false + break + } + } + + if (etagStale) { + return false + } + } + + // if-modified-since + if (modifiedSince) { + var lastModified = resHeaders['last-modified'] + var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince)) + + if (modifiedStale) { + return false + } + } + + return true +} + +/** + * Parse an HTTP Date into a number. + * + * @param {string} date + * @private + */ + +function parseHttpDate (date) { + var timestamp = date && Date.parse(date) + + // istanbul ignore next: guard against date.js Date.parse patching + return typeof timestamp === 'number' + ? timestamp + : NaN +} + +/** + * Parse a HTTP token list. + * + * @param {string} str + * @private + */ + +function parseTokenList (str) { + var end = 0 + var list = [] + var start = 0 + + // gather tokens + for (var i = 0, len = str.length; i < len; i++) { + switch (str.charCodeAt(i)) { + case 0x20: /* */ + if (start === end) { + start = end = i + 1 + } + break + case 0x2c: /* , */ + list.push(str.substring(start, end)) + start = end = i + 1 + break + default: + end = i + 1 + break + } + } + + // final token + list.push(str.substring(start, end)) + + return list +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/package.json new file mode 100644 index 00000000..3df6a721 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fresh/package.json @@ -0,0 +1,92 @@ +{ + "_args": [ + [ + "fresh@0.5.2", + "/tmp/repository/main" + ] + ], + "_from": "fresh@0.5.2", + "_id": "fresh@0.5.2", + "_inBundle": false, + "_integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "_location": "/fresh", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "fresh@0.5.2", + "name": "fresh", + "escapedName": "fresh", + "rawSpec": "0.5.2", + "saveSpec": null, + "fetchSpec": "0.5.2" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "_spec": "0.5.2", + "_where": "/tmp/repository/main", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "bugs": { + "url": "https://github.com/jshttp/fresh/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "description": "HTTP response freshness testing", + "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": "1.21.5" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "homepage": "https://github.com/jshttp/fresh#readme", + "keywords": [ + "fresh", + "http", + "conditional", + "cache" + ], + "license": "MIT", + "name": "fresh", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/fresh.git" + }, + "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/" + }, + "version": "0.5.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/LICENSE new file mode 100644 index 00000000..cb757e5d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Mathias Buus + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/README.md new file mode 100644 index 00000000..62b33742 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/README.md @@ -0,0 +1,26 @@ +# fs-constants + +Small module that allows you to get the fs constants across +Node and the browser. + +``` +npm install fs-constants +``` + +Previously you would use `require('constants')` for this in node but that has been +deprecated and changed to `require('fs').constants` which does not browserify. + +This module uses `require('constants')` in the browser and `require('fs').constants` in node to work around this + + +## Usage + +``` js +var constants = require('fs-constants') + +console.log('constants:', constants) +``` + +## License + +MIT diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/browser.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/browser.js new file mode 100644 index 00000000..3c87638d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/browser.js @@ -0,0 +1 @@ +module.exports = require('constants') diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/index.js new file mode 100644 index 00000000..2a3aadf3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/index.js @@ -0,0 +1 @@ +module.exports = require('fs').constants || require('constants') diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/package.json new file mode 100644 index 00000000..c0d5262a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs-constants/package.json @@ -0,0 +1,50 @@ +{ + "_args": [ + [ + "fs-constants@1.0.0", + "/tmp/repository/main" + ] + ], + "_from": "fs-constants@1.0.0", + "_id": "fs-constants@1.0.0", + "_inBundle": false, + "_integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "_location": "/fs-constants", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "fs-constants@1.0.0", + "name": "fs-constants", + "escapedName": "fs-constants", + "rawSpec": "1.0.0", + "saveSpec": null, + "fetchSpec": "1.0.0" + }, + "_requiredBy": [ + "/tar-stream" + ], + "_resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "_spec": "1.0.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Mathias Buus", + "url": "@mafintosh" + }, + "browser": "browser.js", + "bugs": { + "url": "https://github.com/mafintosh/fs-constants/issues" + }, + "dependencies": {}, + "description": "Require constants across node and the browser", + "devDependencies": {}, + "homepage": "https://github.com/mafintosh/fs-constants", + "license": "MIT", + "main": "index.js", + "name": "fs-constants", + "repository": { + "type": "git", + "url": "git+https://github.com/mafintosh/fs-constants.git" + }, + "version": "1.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/LICENSE new file mode 100644 index 00000000..5bd884c2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/LICENSE @@ -0,0 +1,43 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +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. + +---- + +This library bundles a version of the `fs.realpath` and `fs.realpathSync` +methods from Node.js v0.10 under the terms of the Node.js MIT license. + +Node's license follows, also included at the header of `old.js` which contains +the licensed code: + + 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. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/README.md new file mode 100644 index 00000000..a42ceac6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/README.md @@ -0,0 +1,33 @@ +# fs.realpath + +A backwards-compatible fs.realpath for Node v6 and above + +In Node v6, the JavaScript implementation of fs.realpath was replaced +with a faster (but less resilient) native implementation. That raises +new and platform-specific errors and cannot handle long or excessively +symlink-looping paths. + +This module handles those cases by detecting the new errors and +falling back to the JavaScript implementation. On versions of Node +prior to v6, it has no effect. + +## USAGE + +```js +var rp = require('fs.realpath') + +// async version +rp.realpath(someLongAndLoopingPath, function (er, real) { + // the ELOOP was handled, but it was a bit slower +}) + +// sync version +var real = rp.realpathSync(someLongAndLoopingPath) + +// monkeypatch at your own risk! +// This replaces the fs.realpath/fs.realpathSync builtins +rp.monkeypatch() + +// un-do the monkeypatching +rp.unmonkeypatch() +``` diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/index.js new file mode 100644 index 00000000..b09c7c7e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/index.js @@ -0,0 +1,66 @@ +module.exports = realpath +realpath.realpath = realpath +realpath.sync = realpathSync +realpath.realpathSync = realpathSync +realpath.monkeypatch = monkeypatch +realpath.unmonkeypatch = unmonkeypatch + +var fs = require('fs') +var origRealpath = fs.realpath +var origRealpathSync = fs.realpathSync + +var version = process.version +var ok = /^v[0-5]\./.test(version) +var old = require('./old.js') + +function newError (er) { + return er && er.syscall === 'realpath' && ( + er.code === 'ELOOP' || + er.code === 'ENOMEM' || + er.code === 'ENAMETOOLONG' + ) +} + +function realpath (p, cache, cb) { + if (ok) { + return origRealpath(p, cache, cb) + } + + if (typeof cache === 'function') { + cb = cache + cache = null + } + origRealpath(p, cache, function (er, result) { + if (newError(er)) { + old.realpath(p, cache, cb) + } else { + cb(er, result) + } + }) +} + +function realpathSync (p, cache) { + if (ok) { + return origRealpathSync(p, cache) + } + + try { + return origRealpathSync(p, cache) + } catch (er) { + if (newError(er)) { + return old.realpathSync(p, cache) + } else { + throw er + } + } +} + +function monkeypatch () { + fs.realpath = realpath + fs.realpathSync = realpathSync +} + +function unmonkeypatch () { + fs.realpath = origRealpath + fs.realpathSync = origRealpathSync +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/old.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/old.js new file mode 100644 index 00000000..b40305e7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/old.js @@ -0,0 +1,303 @@ +// 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. + +var pathModule = require('path'); +var isWindows = process.platform === 'win32'; +var fs = require('fs'); + +// JavaScript implementation of realpath, ported from node pre-v6 + +var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG); + +function rethrow() { + // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and + // is fairly slow to generate. + var callback; + if (DEBUG) { + var backtrace = new Error; + callback = debugCallback; + } else + callback = missingCallback; + + return callback; + + function debugCallback(err) { + if (err) { + backtrace.message = err.message; + err = backtrace; + missingCallback(err); + } + } + + function missingCallback(err) { + if (err) { + if (process.throwDeprecation) + throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs + else if (!process.noDeprecation) { + var msg = 'fs: missing callback ' + (err.stack || err.message); + if (process.traceDeprecation) + console.trace(msg); + else + console.error(msg); + } + } + } +} + +function maybeCallback(cb) { + return typeof cb === 'function' ? cb : rethrow(); +} + +var normalize = pathModule.normalize; + +// Regexp that finds the next partion of a (partial) path +// result is [base_with_slash, base], e.g. ['somedir/', 'somedir'] +if (isWindows) { + var nextPartRe = /(.*?)(?:[\/\\]+|$)/g; +} else { + var nextPartRe = /(.*?)(?:[\/]+|$)/g; +} + +// Regex to find the device root, including trailing slash. E.g. 'c:\\'. +if (isWindows) { + var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/; +} else { + var splitRootRe = /^[\/]*/; +} + +exports.realpathSync = function realpathSync(p, cache) { + // make p is absolute + p = pathModule.resolve(p); + + if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { + return cache[p]; + } + + var original = p, + seenLinks = {}, + knownHard = {}; + + // current character position in p + var pos; + // the partial path so far, including a trailing slash if any + var current; + // the partial path without a trailing slash (except when pointing at a root) + var base; + // the partial path scanned in the previous round, with slash + var previous; + + start(); + + function start() { + // Skip over roots + var m = splitRootRe.exec(p); + pos = m[0].length; + current = m[0]; + base = m[0]; + previous = ''; + + // On windows, check that the root exists. On unix there is no need. + if (isWindows && !knownHard[base]) { + fs.lstatSync(base); + knownHard[base] = true; + } + } + + // walk down the path, swapping out linked pathparts for their real + // values + // NB: p.length changes. + while (pos < p.length) { + // find the next part + nextPartRe.lastIndex = pos; + var result = nextPartRe.exec(p); + previous = current; + current += result[0]; + base = previous + result[1]; + pos = nextPartRe.lastIndex; + + // continue if not a symlink + if (knownHard[base] || (cache && cache[base] === base)) { + continue; + } + + var resolvedLink; + if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { + // some known symbolic link. no need to stat again. + resolvedLink = cache[base]; + } else { + var stat = fs.lstatSync(base); + if (!stat.isSymbolicLink()) { + knownHard[base] = true; + if (cache) cache[base] = base; + continue; + } + + // read the link if it wasn't read before + // dev/ino always return 0 on windows, so skip the check. + var linkTarget = null; + if (!isWindows) { + var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); + if (seenLinks.hasOwnProperty(id)) { + linkTarget = seenLinks[id]; + } + } + if (linkTarget === null) { + fs.statSync(base); + linkTarget = fs.readlinkSync(base); + } + resolvedLink = pathModule.resolve(previous, linkTarget); + // track this, if given a cache. + if (cache) cache[base] = resolvedLink; + if (!isWindows) seenLinks[id] = linkTarget; + } + + // resolve the link, then start over + p = pathModule.resolve(resolvedLink, p.slice(pos)); + start(); + } + + if (cache) cache[original] = p; + + return p; +}; + + +exports.realpath = function realpath(p, cache, cb) { + if (typeof cb !== 'function') { + cb = maybeCallback(cache); + cache = null; + } + + // make p is absolute + p = pathModule.resolve(p); + + if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { + return process.nextTick(cb.bind(null, null, cache[p])); + } + + var original = p, + seenLinks = {}, + knownHard = {}; + + // current character position in p + var pos; + // the partial path so far, including a trailing slash if any + var current; + // the partial path without a trailing slash (except when pointing at a root) + var base; + // the partial path scanned in the previous round, with slash + var previous; + + start(); + + function start() { + // Skip over roots + var m = splitRootRe.exec(p); + pos = m[0].length; + current = m[0]; + base = m[0]; + previous = ''; + + // On windows, check that the root exists. On unix there is no need. + if (isWindows && !knownHard[base]) { + fs.lstat(base, function(err) { + if (err) return cb(err); + knownHard[base] = true; + LOOP(); + }); + } else { + process.nextTick(LOOP); + } + } + + // walk down the path, swapping out linked pathparts for their real + // values + function LOOP() { + // stop if scanned past end of path + if (pos >= p.length) { + if (cache) cache[original] = p; + return cb(null, p); + } + + // find the next part + nextPartRe.lastIndex = pos; + var result = nextPartRe.exec(p); + previous = current; + current += result[0]; + base = previous + result[1]; + pos = nextPartRe.lastIndex; + + // continue if not a symlink + if (knownHard[base] || (cache && cache[base] === base)) { + return process.nextTick(LOOP); + } + + if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { + // known symbolic link. no need to stat again. + return gotResolvedLink(cache[base]); + } + + return fs.lstat(base, gotStat); + } + + function gotStat(err, stat) { + if (err) return cb(err); + + // if not a symlink, skip to the next path part + if (!stat.isSymbolicLink()) { + knownHard[base] = true; + if (cache) cache[base] = base; + return process.nextTick(LOOP); + } + + // stat & read the link if not read before + // call gotTarget as soon as the link target is known + // dev/ino always return 0 on windows, so skip the check. + if (!isWindows) { + var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); + if (seenLinks.hasOwnProperty(id)) { + return gotTarget(null, seenLinks[id], base); + } + } + fs.stat(base, function(err) { + if (err) return cb(err); + + fs.readlink(base, function(err, target) { + if (!isWindows) seenLinks[id] = target; + gotTarget(err, target); + }); + }); + } + + function gotTarget(err, target, base) { + if (err) return cb(err); + + var resolvedLink = pathModule.resolve(previous, target); + if (cache) cache[base] = resolvedLink; + gotResolvedLink(resolvedLink); + } + + function gotResolvedLink(resolvedLink) { + // resolve the link, then start over + p = pathModule.resolve(resolvedLink, p.slice(pos)); + start(); + } +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/package.json new file mode 100644 index 00000000..bcac6e28 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/fs.realpath/package.json @@ -0,0 +1,62 @@ +{ + "_args": [ + [ + "fs.realpath@1.0.0", + "/tmp/repository/main" + ] + ], + "_from": "fs.realpath@1.0.0", + "_id": "fs.realpath@1.0.0", + "_inBundle": false, + "_integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "_location": "/fs.realpath", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "fs.realpath@1.0.0", + "name": "fs.realpath", + "escapedName": "fs.realpath", + "rawSpec": "1.0.0", + "saveSpec": null, + "fetchSpec": "1.0.0" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "_spec": "1.0.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/fs.realpath/issues" + }, + "dependencies": {}, + "description": "Use node's fs.realpath, but fall back to the JS implementation if the native one fails", + "devDependencies": {}, + "files": [ + "old.js", + "index.js" + ], + "homepage": "https://github.com/isaacs/fs.realpath#readme", + "keywords": [ + "realpath", + "fs", + "polyfill" + ], + "license": "ISC", + "main": "index.js", + "name": "fs.realpath", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/fs.realpath.git" + }, + "scripts": { + "test": "tap test/*.js --cov" + }, + "version": "1.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/buffer-stream.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/buffer-stream.js new file mode 100644 index 00000000..cc834c4d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/buffer-stream.js @@ -0,0 +1,54 @@ +var PassThrough = require('stream').PassThrough; +var objectAssign = require('object-assign'); + +module.exports = function (opts) { + opts = objectAssign({}, opts); + + var array = opts.array; + var encoding = opts.encoding; + + var buffer = encoding === 'buffer'; + var objectMode = false; + + if (array) { + objectMode = !(encoding || buffer); + } else { + encoding = encoding || 'utf8'; + } + + if (buffer) { + encoding = null; + } + + var len = 0; + var ret = []; + + var stream = new PassThrough({objectMode: objectMode}); + + if (encoding) { + stream.setEncoding(encoding); + } + + stream.on('data', function (chunk) { + ret.push(chunk); + + if (objectMode) { + len = ret.length; + } else { + len += chunk.length; + } + }); + + stream.getBufferedValue = function () { + if (array) { + return ret; + } + return buffer ? Buffer.concat(ret, len) : ret.join(''); + }; + + stream.getBufferedLength = function () { + return len; + }; + + return stream; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/index.js new file mode 100644 index 00000000..aa60cf03 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/index.js @@ -0,0 +1,59 @@ +'use strict'; +var Promise = require('pinkie-promise'); +var objectAssign = require('object-assign'); +var bufferStream = require('./buffer-stream'); + +function getStream(inputStream, opts) { + if (!inputStream) { + return Promise.reject(new Error('Expected a stream')); + } + + opts = objectAssign({maxBuffer: Infinity}, opts); + var maxBuffer = opts.maxBuffer; + var stream; + var clean; + + var p = new Promise(function (resolve, reject) { + stream = bufferStream(opts); + inputStream.once('error', error); + inputStream.pipe(stream); + + stream.on('data', function () { + if (stream.getBufferedLength() > maxBuffer) { + reject(new Error('maxBuffer exceeded')); + } + }); + stream.once('error', error); + stream.on('end', resolve); + + clean = function () { + // some streams doesn't implement the stream.Readable interface correctly + if (inputStream.unpipe) { + inputStream.unpipe(stream); + } + }; + + function error(err) { + if (err) { // null check + err.bufferedData = stream.getBufferedValue(); + } + reject(err); + } + }); + + p.then(clean, clean); + + return p.then(function () { + return stream.getBufferedValue(); + }); +} + +module.exports = getStream; + +module.exports.buffer = function (stream, opts) { + return getStream(stream, objectAssign({}, opts, {encoding: 'buffer'})); +}; + +module.exports.array = function (stream, opts) { + return getStream(stream, objectAssign({}, opts, {array: true})); +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/license @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/package.json new file mode 100644 index 00000000..e2a8637f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/package.json @@ -0,0 +1,84 @@ +{ + "_args": [ + [ + "get-stream@2.3.1", + "/tmp/repository/main" + ] + ], + "_from": "get-stream@2.3.1", + "_id": "get-stream@2.3.1", + "_inBundle": false, + "_integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "_location": "/get-stream", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "get-stream@2.3.1", + "name": "get-stream", + "escapedName": "get-stream", + "rawSpec": "2.3.1", + "saveSpec": null, + "fetchSpec": "2.3.1" + }, + "_requiredBy": [ + "/decompress-unzip" + ], + "_resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "_spec": "2.3.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/get-stream/issues" + }, + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "description": "Get a stream as a string, buffer, or array", + "devDependencies": { + "ava": "*", + "buffer-equals": "^1.0.3", + "into-stream": "^2.0.1", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js", + "buffer-stream.js" + ], + "homepage": "https://github.com/sindresorhus/get-stream#readme", + "keywords": [ + "get", + "stream", + "promise", + "concat", + "string", + "str", + "text", + "buffer", + "read", + "data", + "readable", + "readablestream", + "array", + "object", + "obj" + ], + "license": "MIT", + "name": "get-stream", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/get-stream.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.3.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/readme.md new file mode 100644 index 00000000..a74866bb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/get-stream/readme.md @@ -0,0 +1,115 @@ +# get-stream [![Build Status](https://travis-ci.org/sindresorhus/get-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/get-stream) + +> Get a stream as a string, buffer, or array + + +## Install + +``` +$ npm install --save get-stream +``` + + +## Usage + +```js +const fs = require('fs'); +const getStream = require('get-stream'); +const stream = fs.createReadStream('unicorn.txt'); + +getStream(stream).then(str => { + console.log(str); + /* + ,,))))))));, + __)))))))))))))), + \|/ -\(((((''''((((((((. + -*-==//////(('' . `)))))), + /|\ ))| o ;-. '((((( ,(, + ( `| / ) ;))))' ,_))^;(~ + | | | ,))((((_ _____------~~~-. %,;(;(>';'~ + o_); ; )))(((` ~---~ `:: \ %%~~)(v;(`('~ + ; ''''```` `: `:::|\,__,%% );`'; ~ + | _ ) / `:|`----' `-' + ______/\/~ | / / + /~;;.____/;;' / ___--,-( `;;;/ + / // _;______;'------~~~~~ /;;/\ / + // | | / ; \;;,\ + (<_ | ; /',/-----' _> + \_| ||_ //~;~~~~~~~~~ + `\_| (,~~ + \~\ + ~~ + */ +}); +``` + + +## API + +The methods returns a promise that is resolved when the `end` event fires on the stream, indicating that there is no more data to be read. The stream is switched to flowing mode. + +### getStream(stream, [options]) + +Get the `stream` as a string. + +#### options + +##### encoding + +Type: `string`
+Default: `utf8` + +[Encoding](https://nodejs.org/api/buffer.html#buffer_buffer) of the incoming stream. + +##### maxBuffer + +Type: `number`
+Default: `Infinity` + +Maximum length of the returned string. If it exceeds this value before the stream ends, the promise will be rejected. + +### getStream.buffer(stream, [options]) + +Get the `stream` as a buffer. + +It honors the `maxBuffer` option as above, but it refers to byte length rather than string length. + +### getStream.array(stream, [options]) + +Get the `stream` as an array of values. + +It honors both the `maxBuffer` and `encoding` options. The behavior changes slightly based on the encoding chosen: + +- When `encoding` is unset, it assumes an [object mode stream](https://nodesource.com/blog/understanding-object-streams/) and collects values emitted from `stream` unmodified. In this case `maxBuffer` refers to the number of items in the array (not the sum of their sizes). + +- When `encoding` is set to `buffer`, it collects an array of buffers. `maxBuffer` refers to the summed byte lengths of every buffer in the array. + +- When `encoding` is set to anything else, it collects an array of strings. `maxBuffer` refers to the summed character lengths of every string in the array. + + +## Errors + +If the input stream emits an `error` event, the promise will be rejected with the error. The buffered data will be attached to the `bufferedData` property of the error. + +```js +getStream(streamThatErrorsAtTheEnd('unicorn')) + .catch(err => console.log(err.bufferedData)); +// unicorn +``` + + +## FAQ + +### How is this different from [`concat-stream`](https://github.com/maxogden/concat-stream)? + +This module accepts a stream instead of being one and returns a promise instead of using a callback. The API is simpler and it only supports returning a string, buffer, or array. It doesn't have a fragile type inference. You explicitly choose what you want. And it doesn't depend on the huge `readable-stream` package. + + +## Related + +- [get-stdin](https://github.com/sindresorhus/get-stdin) - Get stdin as a string or buffer + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/LICENSE new file mode 100644 index 00000000..42ca266d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/LICENSE @@ -0,0 +1,21 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +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. + +## Glob Logo + +Glob's logo created by Tanya Brassie , licensed +under a Creative Commons Attribution-ShareAlike 4.0 International License +https://creativecommons.org/licenses/by-sa/4.0/ diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/README.md new file mode 100644 index 00000000..83f0c83a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/README.md @@ -0,0 +1,378 @@ +# Glob + +Match files using the patterns the shell uses, like stars and stuff. + +[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master) + +This is a glob implementation in JavaScript. It uses the `minimatch` +library to do its matching. + +![a fun cartoon logo made of glob characters](logo/glob.png) + +## Usage + +Install with npm + +``` +npm i glob +``` + +```javascript +var glob = require("glob") + +// options is optional +glob("**/*.js", options, function (er, files) { + // files is an array of filenames. + // If the `nonull` option is set, and nothing + // was found, then files is ["**/*.js"] + // er is an error object or null. +}) +``` + +## Glob Primer + +"Globs" are the patterns you type when you do stuff like `ls *.js` on +the command line, or put `build/*` in a `.gitignore` file. + +Before parsing the path part patterns, braced sections are expanded +into a set. Braced sections start with `{` and end with `}`, with any +number of comma-delimited sections within. Braced sections may contain +slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`. + +The following characters have special magic meaning when used in a +path portion: + +* `*` Matches 0 or more characters in a single path portion +* `?` Matches 1 character +* `[...]` Matches a range of characters, similar to a RegExp range. + If the first character of the range is `!` or `^` then it matches + any character not in the range. +* `!(pattern|pattern|pattern)` Matches anything that does not match + any of the patterns provided. +* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the + patterns provided. +* `+(pattern|pattern|pattern)` Matches one or more occurrences of the + patterns provided. +* `*(a|b|c)` Matches zero or more occurrences of the patterns provided +* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns + provided +* `**` If a "globstar" is alone in a path portion, then it matches + zero or more directories and subdirectories searching for matches. + It does not crawl symlinked directories. + +### Dots + +If a file or directory path portion has a `.` as the first character, +then it will not match any glob pattern unless that pattern's +corresponding path part also has a `.` as its first character. + +For example, the pattern `a/.*/c` would match the file at `a/.b/c`. +However the pattern `a/*/c` would not, because `*` does not start with +a dot character. + +You can make glob treat dots as normal characters by setting +`dot:true` in the options. + +### Basename Matching + +If you set `matchBase:true` in the options, and the pattern has no +slashes in it, then it will seek for any file anywhere in the tree +with a matching basename. For example, `*.js` would match +`test/simple/basic.js`. + +### Empty Sets + +If no matching files are found, then an empty array is returned. This +differs from the shell, where the pattern itself is returned. For +example: + + $ echo a*s*d*f + a*s*d*f + +To get the bash-style behavior, set the `nonull:true` in the options. + +### See Also: + +* `man sh` +* `man bash` (Search for "Pattern Matching") +* `man 3 fnmatch` +* `man 5 gitignore` +* [minimatch documentation](https://github.com/isaacs/minimatch) + +## glob.hasMagic(pattern, [options]) + +Returns `true` if there are any special characters in the pattern, and +`false` otherwise. + +Note that the options affect the results. If `noext:true` is set in +the options object, then `+(a|b)` will not be considered a magic +pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}` +then that is considered magical, unless `nobrace:true` is set in the +options. + +## glob(pattern, [options], cb) + +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* `cb` `{Function}` + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern + +Perform an asynchronous glob search. + +## glob.sync(pattern, [options]) + +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* return: `{Array}` filenames found matching the pattern + +Perform a synchronous glob search. + +## Class: glob.Glob + +Create a Glob object by instantiating the `glob.Glob` class. + +```javascript +var Glob = require("glob").Glob +var mg = new Glob(pattern, options, cb) +``` + +It's an EventEmitter, and starts walking the filesystem to find matches +immediately. + +### new glob.Glob(pattern, [options], [cb]) + +* `pattern` `{String}` pattern to search for +* `options` `{Object}` +* `cb` `{Function}` Called when an error occurs, or matches are found + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern + +Note that if the `sync` flag is set in the options, then matches will +be immediately available on the `g.found` member. + +### Properties + +* `minimatch` The minimatch object that the glob uses. +* `options` The options object passed in. +* `aborted` Boolean which is set to true when calling `abort()`. There + is no way at this time to continue a glob search after aborting, but + you can re-use the statCache to avoid having to duplicate syscalls. +* `cache` Convenience object. Each field has the following possible + values: + * `false` - Path does not exist + * `true` - Path exists + * `'FILE'` - Path exists, and is not a directory + * `'DIR'` - Path exists, and is a directory + * `[file, entries, ...]` - Path exists, is a directory, and the + array value is the results of `fs.readdir` +* `statCache` Cache of `fs.stat` results, to prevent statting the same + path multiple times. +* `symlinks` A record of which paths are symbolic links, which is + relevant in resolving `**` patterns. +* `realpathCache` An optional object which is passed to `fs.realpath` + to minimize unnecessary syscalls. It is stored on the instantiated + Glob object, and may be re-used. + +### Events + +* `end` When the matching is finished, this is emitted with all the + matches found. If the `nonull` option is set, and no match was found, + then the `matches` list contains the original pattern. The matches + are sorted, unless the `nosort` flag is set. +* `match` Every time a match is found, this is emitted with the specific + thing that matched. It is not deduplicated or resolved to a realpath. +* `error` Emitted when an unexpected error is encountered, or whenever + any fs error occurs if `options.strict` is set. +* `abort` When `abort()` is called, this event is raised. + +### Methods + +* `pause` Temporarily stop the search +* `resume` Resume the search +* `abort` Stop the search forever + +### Options + +All the options that can be passed to Minimatch can also be passed to +Glob to change pattern matching behavior. Also, some have been added, +or have glob-specific ramifications. + +All options are false by default, unless otherwise noted. + +All options are added to the Glob object, as well. + +If you are running many `glob` operations, you can pass a Glob object +as the `options` argument to a subsequent operation to shortcut some +`stat` and `readdir` calls. At the very least, you may pass in shared +`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that +parallel glob operations will be sped up by sharing information about +the filesystem. + +* `cwd` The current working directory in which to search. Defaults + to `process.cwd()`. +* `root` The place where patterns starting with `/` will be mounted + onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix + systems, and `C:\` or some such on Windows.) +* `dot` Include `.dot` files in normal matches and `globstar` matches. + Note that an explicit dot in a portion of the pattern will always + match dot files. +* `nomount` By default, a pattern starting with a forward-slash will be + "mounted" onto the root setting, so that a valid filesystem path is + returned. Set this flag to disable that behavior. +* `mark` Add a `/` character to directory matches. Note that this + requires additional stat calls. +* `nosort` Don't sort the results. +* `stat` Set to true to stat *all* results. This reduces performance + somewhat, and is completely unnecessary, unless `readdir` is presumed + to be an untrustworthy indicator of file existence. +* `silent` When an unusual error is encountered when attempting to + read a directory, a warning will be printed to stderr. Set the + `silent` option to true to suppress these warnings. +* `strict` When an unusual error is encountered when attempting to + read a directory, the process will just continue on in search of + other matches. Set the `strict` option to raise an error in these + cases. +* `cache` See `cache` property above. Pass in a previously generated + cache object to save some fs calls. +* `statCache` A cache of results of filesystem information, to prevent + unnecessary stat calls. While it should not normally be necessary + to set this, you may pass the statCache from one glob() call to the + options object of another, if you know that the filesystem will not + change between calls. (See "Race Conditions" below.) +* `symlinks` A cache of known symbolic links. You may pass in a + previously generated `symlinks` object to save `lstat` calls when + resolving `**` matches. +* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead. +* `nounique` In some cases, brace-expanded patterns can result in the + same file showing up multiple times in the result set. By default, + this implementation prevents duplicates in the result set. Set this + flag to disable that behavior. +* `nonull` Set to never return an empty set, instead returning a set + containing the pattern itself. This is the default in glob(3). +* `debug` Set to enable debug logging in minimatch and glob. +* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. +* `noglobstar` Do not match `**` against multiple filenames. (Ie, + treat it as a normal `*` instead.) +* `noext` Do not match `+(a|b)` "extglob" patterns. +* `nocase` Perform a case-insensitive match. Note: on + case-insensitive filesystems, non-magic patterns will match by + default, since `stat` and `readdir` will not raise errors. +* `matchBase` Perform a basename-only match if the pattern does not + contain any slash characters. That is, `*.js` would be treated as + equivalent to `**/*.js`, matching all js files in all directories. +* `nodir` Do not match directories, only files. (Note: to match + *only* directories, simply put a `/` at the end of the pattern.) +* `ignore` Add a pattern or an array of glob patterns to exclude matches. + Note: `ignore` patterns are *always* in `dot:true` mode, regardless + of any other settings. +* `follow` Follow symlinked directories when expanding `**` patterns. + Note that this can result in a lot of duplicate references in the + presence of cyclic links. +* `realpath` Set to true to call `fs.realpath` on all of the results. + In the case of a symlink that cannot be resolved, the full absolute + path to the matched entry is returned (though it will usually be a + broken symlink) +* `absolute` Set to true to always receive absolute paths for matched + files. Unlike `realpath`, this also affects the values returned in + the `match` event. +* `fs` File-system object with Node's `fs` API. By default, the built-in + `fs` module will be used. Set to a volume provided by a library like + `memfs` to avoid using the "real" file-system. + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between node-glob and other +implementations, and are intentional. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.3, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +Note that symlinked directories are not crawled as part of a `**`, +though their contents may match against subsequent portions of the +pattern. This prevents infinite loops and duplicates and the like. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then glob returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. + +### Comments and Negation + +Previously, this module let you mark a pattern as a "comment" if it +started with a `#` character, or a "negated" pattern if it started +with a `!` character. + +These options were deprecated in version 5, and removed in version 6. + +To specify things that should not match, use the `ignore` option. + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only `/` +characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes will always +be interpreted as escape characters, not path separators. + +Results from absolute patterns such as `/foo/*` are mounted onto the +root setting using `path.join`. On windows, this will by default result +in `/foo/*` matching `C:\foo\bar.txt`. + +## Race Conditions + +Glob searching, by its very nature, is susceptible to race conditions, +since it relies on directory walking and such. + +As a result, it is possible that a file that exists when glob looks for +it may have been deleted or modified by the time it returns the result. + +As part of its internal implementation, this program caches all stat +and readdir calls that it makes, in order to cut down on system +overhead. However, this also makes it even more susceptible to races, +especially if the cache or statCache objects are reused between glob +calls. + +Users are thus advised not to use a glob result as a guarantee of +filesystem state in the face of rapid changes. For the vast majority +of operations, this is never a problem. + +## Glob Logo +Glob's logo was created by [Tanya Brassie](http://tanyabrassie.com/). Logo files can be found [here](https://github.com/isaacs/node-glob/tree/master/logo). + +The logo is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/). + +## Contributing + +Any change to behavior (including bugfixes) must come with a test. + +Patches that fail tests or reduce performance will be rejected. + +``` +# to run tests +npm test + +# to re-generate test fixtures +npm run test-regen + +# to benchmark against bash/zsh +npm run bench + +# to profile javascript +npm run prof +``` + +![](oh-my-glob.gif) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/common.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/common.js new file mode 100644 index 00000000..8e363b6c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/common.js @@ -0,0 +1,236 @@ +exports.setopts = setopts +exports.ownProp = ownProp +exports.makeAbs = makeAbs +exports.finish = finish +exports.mark = mark +exports.isIgnored = isIgnored +exports.childrenIgnored = childrenIgnored + +function ownProp (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} + +var fs = require("fs") +var path = require("path") +var minimatch = require("minimatch") +var isAbsolute = require("path-is-absolute") +var Minimatch = minimatch.Minimatch + +function alphasort (a, b) { + return a.localeCompare(b, 'en') +} + +function setupIgnores (self, options) { + self.ignore = options.ignore || [] + + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore] + + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap) + } +} + +// ignore patterns are always in dot:true mode. +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern, { dot: true }) + } + + return { + matcher: new Minimatch(pattern, { dot: true }), + gmatcher: gmatcher + } +} + +function setopts (self, pattern, options) { + if (!options) + options = {} + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + self.silent = !!options.silent + self.pattern = pattern + self.strict = options.strict !== false + self.realpath = !!options.realpath + self.realpathCache = options.realpathCache || Object.create(null) + self.follow = !!options.follow + self.dot = !!options.dot + self.mark = !!options.mark + self.nodir = !!options.nodir + if (self.nodir) + self.mark = true + self.sync = !!options.sync + self.nounique = !!options.nounique + self.nonull = !!options.nonull + self.nosort = !!options.nosort + self.nocase = !!options.nocase + self.stat = !!options.stat + self.noprocess = !!options.noprocess + self.absolute = !!options.absolute + self.fs = options.fs || fs + + self.maxLength = options.maxLength || Infinity + self.cache = options.cache || Object.create(null) + self.statCache = options.statCache || Object.create(null) + self.symlinks = options.symlinks || Object.create(null) + + setupIgnores(self, options) + + self.changedCwd = false + var cwd = process.cwd() + if (!ownProp(options, "cwd")) + self.cwd = cwd + else { + self.cwd = path.resolve(options.cwd) + self.changedCwd = self.cwd !== cwd + } + + self.root = options.root || path.resolve(self.cwd, "/") + self.root = path.resolve(self.root) + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/") + + // TODO: is an absolute `cwd` supposed to be resolved against `root`? + // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test') + self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd) + if (process.platform === "win32") + self.cwdAbs = self.cwdAbs.replace(/\\/g, "/") + self.nomount = !!options.nomount + + // disable comments and negation in Minimatch. + // Note that they are not supported in Glob itself anyway. + options.nonegate = true + options.nocomment = true + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +function finish (self) { + var nou = self.nounique + var all = nou ? [] : Object.create(null) + + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i] + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i] + if (nou) + all.push(literal) + else + all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) + all.push.apply(all, m) + else + m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) + all = Object.keys(all) + + if (!self.nosort) + all = all.sort(alphasort) + + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]) + } + if (self.nodir) { + all = all.filter(function (e) { + var notDir = !(/\/$/.test(e)) + var c = self.cache[e] || self.cache[makeAbs(self, e)] + if (notDir && c) + notDir = c !== 'DIR' && !Array.isArray(c) + return notDir + }) + } + } + + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored(self, m) + }) + + self.found = all +} + +function mark (self, p) { + var abs = makeAbs(self, p) + var c = self.cache[abs] + var m = p + if (c) { + var isDir = c === 'DIR' || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + var mabs = makeAbs(self, m) + self.statCache[mabs] = self.statCache[abs] + self.cache[mabs] = self.cache[abs] + } + } + + return m +} + +// lotta situps... +function makeAbs (self, f) { + var abs = f + if (f.charAt(0) === '/') { + abs = path.join(self.root, f) + } else if (isAbsolute(f) || f === '') { + abs = f + } else if (self.changedCwd) { + abs = path.resolve(self.cwd, f) + } else { + abs = path.resolve(f) + } + + if (process.platform === 'win32') + abs = abs.replace(/\\/g, '/') + + return abs +} + + +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +function childrenIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/glob.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/glob.js new file mode 100644 index 00000000..afcf8275 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/glob.js @@ -0,0 +1,787 @@ +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern, false) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern, inGlobStar) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// +// If inGlobStar and PREFIX is symlink and points to dir +// set ENTRIES = [] +// else readdir(PREFIX) as ENTRIES +// If fail, END +// +// with ENTRIES +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// // Mark that this entry is a globstar match +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. + +module.exports = glob + +var rp = require('fs.realpath') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var inherits = require('inherits') +var EE = require('events').EventEmitter +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var globSync = require('./sync.js') +var common = require('./common.js') +var setopts = common.setopts +var ownProp = common.ownProp +var inflight = require('inflight') +var util = require('util') +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +var once = require('once') + +function glob (pattern, options, cb) { + if (typeof options === 'function') cb = options, options = {} + if (!options) options = {} + + if (options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return globSync(pattern, options) + } + + return new Glob(pattern, options, cb) +} + +glob.sync = globSync +var GlobSync = glob.GlobSync = globSync.GlobSync + +// old api surface +glob.glob = glob + +function extend (origin, add) { + if (add === null || typeof add !== 'object') { + return origin + } + + var keys = Object.keys(add) + var i = keys.length + while (i--) { + origin[keys[i]] = add[keys[i]] + } + return origin +} + +glob.hasMagic = function (pattern, options_) { + var options = extend({}, options_) + options.noprocess = true + + var g = new Glob(pattern, options) + var set = g.minimatch.set + + if (!pattern) + return false + + if (set.length > 1) + return true + + for (var j = 0; j < set[0].length; j++) { + if (typeof set[0][j] !== 'string') + return true + } + + return false +} + +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (typeof options === 'function') { + cb = options + options = null + } + + if (options && options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return new GlobSync(pattern, options) + } + + if (!(this instanceof Glob)) + return new Glob(pattern, options, cb) + + setopts(this, pattern, options) + this._didRealPath = false + + // process each pattern in the minimatch set + var n = this.minimatch.set.length + + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n) + + if (typeof cb === 'function') { + cb = once(cb) + this.on('error', cb) + this.on('end', function (matches) { + cb(null, matches) + }) + } + + var self = this + this._processing = 0 + + this._emitQueue = [] + this._processQueue = [] + this.paused = false + + if (this.noprocess) + return this + + if (n === 0) + return done() + + var sync = true + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done) + } + sync = false + + function done () { + --self._processing + if (self._processing <= 0) { + if (sync) { + process.nextTick(function () { + self._finish() + }) + } else { + self._finish() + } + } + } +} + +Glob.prototype._finish = function () { + assert(this instanceof Glob) + if (this.aborted) + return + + if (this.realpath && !this._didRealpath) + return this._realpath() + + common.finish(this) + this.emit('end', this.found) +} + +Glob.prototype._realpath = function () { + if (this._didRealpath) + return + + this._didRealpath = true + + var n = this.matches.length + if (n === 0) + return this._finish() + + var self = this + for (var i = 0; i < this.matches.length; i++) + this._realpathSet(i, next) + + function next () { + if (--n === 0) + self._finish() + } +} + +Glob.prototype._realpathSet = function (index, cb) { + var matchset = this.matches[index] + if (!matchset) + return cb() + + var found = Object.keys(matchset) + var self = this + var n = found.length + + if (n === 0) + return cb() + + var set = this.matches[index] = Object.create(null) + found.forEach(function (p, i) { + // If there's a problem with the stat, then it means that + // one or more of the links in the realpath couldn't be + // resolved. just return the abs value in that case. + p = self._makeAbs(p) + rp.realpath(p, self.realpathCache, function (er, real) { + if (!er) + set[real] = true + else if (er.syscall === 'stat') + set[p] = true + else + self.emit('error', er) // srsly wtf right here + + if (--n === 0) { + self.matches[index] = set + cb() + } + }) + }) +} + +Glob.prototype._mark = function (p) { + return common.mark(this, p) +} + +Glob.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + +Glob.prototype.abort = function () { + this.aborted = true + this.emit('abort') +} + +Glob.prototype.pause = function () { + if (!this.paused) { + this.paused = true + this.emit('pause') + } +} + +Glob.prototype.resume = function () { + if (this.paused) { + this.emit('resume') + this.paused = false + if (this._emitQueue.length) { + var eq = this._emitQueue.slice(0) + this._emitQueue.length = 0 + for (var i = 0; i < eq.length; i ++) { + var e = eq[i] + this._emitMatch(e[0], e[1]) + } + } + if (this._processQueue.length) { + var pq = this._processQueue.slice(0) + this._processQueue.length = 0 + for (var i = 0; i < pq.length; i ++) { + var p = pq[i] + this._processing-- + this._process(p[0], p[1], p[2], p[3]) + } + } + } +} + +Glob.prototype._process = function (pattern, index, inGlobStar, cb) { + assert(this instanceof Glob) + assert(typeof cb === 'function') + + if (this.aborted) + return + + this._processing++ + if (this.paused) { + this._processQueue.push([pattern, index, inGlobStar, cb]) + return + } + + //console.error('PROCESS %d', this._processing, pattern) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // see if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index, cb) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip _processing + if (childrenIgnored(this, read)) + return cb() + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) +} + +Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + +Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return cb() + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return cb() + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return cb() + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + this._process([e].concat(remain), index, inGlobStar, cb) + } + cb() +} + +Glob.prototype._emitMatch = function (index, e) { + if (this.aborted) + return + + if (isIgnored(this, e)) + return + + if (this.paused) { + this._emitQueue.push([index, e]) + return + } + + var abs = isAbsolute(e) ? e : this._makeAbs(e) + + if (this.mark) + e = this._mark(e) + + if (this.absolute) + e = abs + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + + var st = this.statCache[abs] + if (st) + this.emit('stat', e, st) + + this.emit('match', e) +} + +Glob.prototype._readdirInGlobStar = function (abs, cb) { + if (this.aborted) + return + + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false, cb) + + var lstatkey = 'lstat\0' + abs + var self = this + var lstatcb = inflight(lstatkey, lstatcb_) + + if (lstatcb) + self.fs.lstat(abs, lstatcb) + + function lstatcb_ (er, lstat) { + if (er && er.code === 'ENOENT') + return cb() + + var isSym = lstat && lstat.isSymbolicLink() + self.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && lstat && !lstat.isDirectory()) { + self.cache[abs] = 'FILE' + cb() + } else + self._readdir(abs, false, cb) + } +} + +Glob.prototype._readdir = function (abs, inGlobStar, cb) { + if (this.aborted) + return + + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) + if (!cb) + return + + //console.error('RD %j %j', +inGlobStar, abs) + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs, cb) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return cb() + + if (Array.isArray(c)) + return cb(null, c) + } + + var self = this + self.fs.readdir(abs, readdirCb(this, abs, cb)) +} + +function readdirCb (self, abs, cb) { + return function (er, entries) { + if (er) + self._readdirError(abs, er, cb) + else + self._readdirEntries(abs, entries, cb) + } +} + +Glob.prototype._readdirEntries = function (abs, entries, cb) { + if (this.aborted) + return + + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + return cb(null, entries) +} + +Glob.prototype._readdirError = function (f, er, cb) { + if (this.aborted) + return + + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + this.emit('error', error) + this.abort() + } + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) { + this.emit('error', er) + // If the error is handled, then we abort + // if not, we threw out of here + this.abort() + } + if (!this.silent) + console.error('glob error', er) + break + } + + return cb() +} + +Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + + +Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + //console.error('pgs2', prefix, remain[0], entries) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return cb() + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false, cb) + + var isSym = this.symlinks[abs] + var len = entries.length + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return cb() + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true, cb) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true, cb) + } + + cb() +} + +Glob.prototype._processSimple = function (prefix, index, cb) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var self = this + this._stat(prefix, function (er, exists) { + self._processSimple2(prefix, index, er, exists, cb) + }) +} +Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { + + //console.error('ps2', prefix, exists) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return cb() + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) + cb() +} + +// Returns either 'DIR', 'FILE', or false +Glob.prototype._stat = function (f, cb) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return cb() + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return cb(null, c) + + if (needDir && c === 'FILE') + return cb() + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (stat !== undefined) { + if (stat === false) + return cb(null, stat) + else { + var type = stat.isDirectory() ? 'DIR' : 'FILE' + if (needDir && type === 'FILE') + return cb() + else + return cb(null, type, stat) + } + } + + var self = this + var statcb = inflight('stat\0' + abs, lstatcb_) + if (statcb) + self.fs.lstat(abs, statcb) + + function lstatcb_ (er, lstat) { + if (lstat && lstat.isSymbolicLink()) { + // If it's a symlink, then treat it as the target, unless + // the target does not exist, then treat it as a file. + return self.fs.stat(abs, function (er, stat) { + if (er) + self._stat2(f, abs, null, lstat, cb) + else + self._stat2(f, abs, er, stat, cb) + }) + } else { + self._stat2(f, abs, er, lstat, cb) + } + } +} + +Glob.prototype._stat2 = function (f, abs, er, stat, cb) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false + return cb() + } + + var needDir = f.slice(-1) === '/' + this.statCache[abs] = stat + + if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) + return cb(null, false, stat) + + var c = true + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c === 'FILE') + return cb() + + return cb(null, c, stat) +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/package.json new file mode 100644 index 00000000..3aa34eac --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/package.json @@ -0,0 +1,91 @@ +{ + "_args": [ + [ + "glob@7.2.0", + "/tmp/repository/main" + ] + ], + "_from": "glob@7.2.0", + "_id": "glob@7.2.0", + "_inBundle": false, + "_integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "_location": "/glob", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "glob@7.2.0", + "name": "glob", + "escapedName": "glob", + "rawSpec": "7.2.0", + "saveSpec": null, + "fetchSpec": "7.2.0" + }, + "_requiredBy": [ + "#DEV:/", + "/fstream/rimraf", + "/mocha", + "/rimraf" + ], + "_resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "_spec": "7.2.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/node-glob/issues" + }, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "description": "a little globber", + "devDependencies": { + "memfs": "^3.2.0", + "mkdirp": "0", + "rimraf": "^2.2.8", + "tap": "^15.0.6", + "tick": "0.0.6" + }, + "engines": { + "node": "*" + }, + "files": [ + "glob.js", + "sync.js", + "common.js" + ], + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "homepage": "https://github.com/isaacs/node-glob#readme", + "license": "ISC", + "main": "glob.js", + "name": "glob", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-glob.git" + }, + "scripts": { + "bench": "bash benchmark.sh", + "benchclean": "node benchclean.js", + "prepublish": "npm run benchclean", + "prof": "bash prof.sh && cat profile.txt", + "profclean": "rm -f v8.log profile.txt", + "test": "tap", + "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js" + }, + "tap": { + "before": "test/00-setup.js", + "after": "test/zz-cleanup.js", + "jobs": 1 + }, + "version": "7.2.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/sync.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/sync.js new file mode 100644 index 00000000..4f46f905 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/glob/sync.js @@ -0,0 +1,483 @@ +module.exports = globSync +globSync.GlobSync = GlobSync + +var rp = require('fs.realpath') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var Glob = require('./glob.js').Glob +var util = require('util') +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var common = require('./common.js') +var setopts = common.setopts +var ownProp = common.ownProp +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +function globSync (pattern, options) { + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + return new GlobSync(pattern, options).found +} + +function GlobSync (pattern, options) { + if (!pattern) + throw new Error('must provide pattern') + + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + if (!(this instanceof GlobSync)) + return new GlobSync(pattern, options) + + setopts(this, pattern, options) + + if (this.noprocess) + return this + + var n = this.minimatch.set.length + this.matches = new Array(n) + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false) + } + this._finish() +} + +GlobSync.prototype._finish = function () { + assert(this instanceof GlobSync) + if (this.realpath) { + var self = this + this.matches.forEach(function (matchset, index) { + var set = self.matches[index] = Object.create(null) + for (var p in matchset) { + try { + p = self._makeAbs(p) + var real = rp.realpathSync(p, self.realpathCache) + set[real] = true + } catch (er) { + if (er.syscall === 'stat') + set[self._makeAbs(p)] = true + else + throw er + } + } + }) + } + common.finish(this) +} + + +GlobSync.prototype._process = function (pattern, index, inGlobStar) { + assert(this instanceof GlobSync) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // See if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip processing + if (childrenIgnored(this, read)) + return + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar) +} + + +GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { + var entries = this._readdir(abs, inGlobStar) + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix.slice(-1) !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) + newPattern = [prefix, e] + else + newPattern = [e] + this._process(newPattern.concat(remain), index, inGlobStar) + } +} + + +GlobSync.prototype._emitMatch = function (index, e) { + if (isIgnored(this, e)) + return + + var abs = this._makeAbs(e) + + if (this.mark) + e = this._mark(e) + + if (this.absolute) { + e = abs + } + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + + if (this.stat) + this._stat(e) +} + + +GlobSync.prototype._readdirInGlobStar = function (abs) { + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false) + + var entries + var lstat + var stat + try { + lstat = this.fs.lstatSync(abs) + } catch (er) { + if (er.code === 'ENOENT') { + // lstat failed, doesn't exist + return null + } + } + + var isSym = lstat && lstat.isSymbolicLink() + this.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && lstat && !lstat.isDirectory()) + this.cache[abs] = 'FILE' + else + entries = this._readdir(abs, false) + + return entries +} + +GlobSync.prototype._readdir = function (abs, inGlobStar) { + var entries + + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return null + + if (Array.isArray(c)) + return c + } + + try { + return this._readdirEntries(abs, this.fs.readdirSync(abs)) + } catch (er) { + this._readdirError(abs, er) + return null + } +} + +GlobSync.prototype._readdirEntries = function (abs, entries) { + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + + // mark and cache dir-ness + return entries +} + +GlobSync.prototype._readdirError = function (f, er) { + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + throw error + } + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) + throw er + if (!this.silent) + console.error('glob error', er) + break + } +} + +GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { + + var entries = this._readdir(abs, inGlobStar) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false) + + var len = entries.length + var isSym = this.symlinks[abs] + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true) + } +} + +GlobSync.prototype._processSimple = function (prefix, index) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var exists = this._stat(prefix) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) +} + +// Returns either 'DIR', 'FILE', or false +GlobSync.prototype._stat = function (f) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return false + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return c + + if (needDir && c === 'FILE') + return false + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (!stat) { + var lstat + try { + lstat = this.fs.lstatSync(abs) + } catch (er) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false + return false + } + } + + if (lstat && lstat.isSymbolicLink()) { + try { + stat = this.fs.statSync(abs) + } catch (er) { + stat = lstat + } + } else { + stat = lstat + } + } + + this.statCache[abs] = stat + + var c = true + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE' + + this.cache[abs] = this.cache[abs] || c + + if (needDir && c === 'FILE') + return false + + return c +} + +GlobSync.prototype._mark = function (p) { + return common.mark(this, p) +} + +GlobSync.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/LICENSE new file mode 100644 index 00000000..9d2c8036 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter, Ben Noordhuis, and Contributors + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/README.md new file mode 100644 index 00000000..82d6e4da --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/README.md @@ -0,0 +1,143 @@ +# graceful-fs + +graceful-fs functions as a drop-in replacement for the fs module, +making various improvements. + +The improvements are meant to normalize behavior across different +platforms and environments, and to make filesystem access more +resilient to errors. + +## Improvements over [fs module](https://nodejs.org/api/fs.html) + +* Queues up `open` and `readdir` calls, and retries them once + something closes if there is an EMFILE error from too many file + descriptors. +* fixes `lchmod` for Node versions prior to 0.6.2. +* implements `fs.lutimes` if possible. Otherwise it becomes a noop. +* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or + `lchown` if the user isn't root. +* makes `lchmod` and `lchown` become noops, if not available. +* retries reading a file if `read` results in EAGAIN error. + +On Windows, it retries renaming a file for up to one second if `EACCESS` +or `EPERM` error occurs, likely because antivirus software has locked +the directory. + +## USAGE + +```javascript +// use just like fs +var fs = require('graceful-fs') + +// now go and do stuff with it... +fs.readFile('some-file-or-whatever', (err, data) => { + // Do stuff here. +}) +``` + +## Sync methods + +This module cannot intercept or handle `EMFILE` or `ENFILE` errors from sync +methods. If you use sync methods which open file descriptors then you are +responsible for dealing with any errors. + +This is a known limitation, not a bug. + +## Global Patching + +If you want to patch the global fs module (or any other fs-like +module) you can do this: + +```javascript +// Make sure to read the caveat below. +var realFs = require('fs') +var gracefulFs = require('graceful-fs') +gracefulFs.gracefulify(realFs) +``` + +This should only ever be done at the top-level application layer, in +order to delay on EMFILE errors from any fs-using dependencies. You +should **not** do this in a library, because it can cause unexpected +delays in other parts of the program. + +## Changes + +This module is fairly stable at this point, and used by a lot of +things. That being said, because it implements a subtle behavior +change in a core part of the node API, even modest changes can be +extremely breaking, and the versioning is thus biased towards +bumping the major when in doubt. + +The main change between major versions has been switching between +providing a fully-patched `fs` module vs monkey-patching the node core +builtin, and the approach by which a non-monkey-patched `fs` was +created. + +The goal is to trade `EMFILE` errors for slower fs operations. So, if +you try to open a zillion files, rather than crashing, `open` +operations will be queued up and wait for something else to `close`. + +There are advantages to each approach. Monkey-patching the fs means +that no `EMFILE` errors can possibly occur anywhere in your +application, because everything is using the same core `fs` module, +which is patched. However, it can also obviously cause undesirable +side-effects, especially if the module is loaded multiple times. + +Implementing a separate-but-identical patched `fs` module is more +surgical (and doesn't run the risk of patching multiple times), but +also imposes the challenge of keeping in sync with the core module. + +The current approach loads the `fs` module, and then creates a +lookalike object that has all the same methods, except a few that are +patched. It is safe to use in all versions of Node from 0.8 through +7.0. + +### v4 + +* Do not monkey-patch the fs module. This module may now be used as a + drop-in dep, and users can opt into monkey-patching the fs builtin + if their app requires it. + +### v3 + +* Monkey-patch fs, because the eval approach no longer works on recent + node. +* fixed possible type-error throw if rename fails on windows +* verify that we *never* get EMFILE errors +* Ignore ENOSYS from chmod/chown +* clarify that graceful-fs must be used as a drop-in + +### v2.1.0 + +* Use eval rather than monkey-patching fs. +* readdir: Always sort the results +* win32: requeue a file if error has an OK status + +### v2.0 + +* A return to monkey patching +* wrap process.cwd + +### v1.1 + +* wrap readFile +* Wrap fs.writeFile. +* readdir protection +* Don't clobber the fs builtin +* Handle fs.read EAGAIN errors by trying again +* Expose the curOpen counter +* No-op lchown/lchmod if not implemented +* fs.rename patch only for win32 +* Patch fs.rename to handle AV software on Windows +* Close #4 Chown should not fail on einval or eperm if non-root +* Fix isaacs/fstream#1 Only wrap fs one time +* Fix #3 Start at 1024 max files, then back off on EMFILE +* lutimes that doens't blow up on Linux +* A full on-rewrite using a queue instead of just swallowing the EMFILE error +* Wrap Read/Write streams as well + +### 1.0 + +* Update engines for node 0.6 +* Be lstat-graceful on Windows +* first diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/clone.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/clone.js new file mode 100644 index 00000000..dff3cc8c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/clone.js @@ -0,0 +1,23 @@ +'use strict' + +module.exports = clone + +var getPrototypeOf = Object.getPrototypeOf || function (obj) { + return obj.__proto__ +} + +function clone (obj) { + if (obj === null || typeof obj !== 'object') + return obj + + if (obj instanceof Object) + var copy = { __proto__: getPrototypeOf(obj) } + else + var copy = Object.create(null) + + Object.getOwnPropertyNames(obj).forEach(function (key) { + Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key)) + }) + + return copy +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/graceful-fs.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/graceful-fs.js new file mode 100644 index 00000000..947cd94b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/graceful-fs.js @@ -0,0 +1,429 @@ +var fs = require('fs') +var polyfills = require('./polyfills.js') +var legacy = require('./legacy-streams.js') +var clone = require('./clone.js') + +var util = require('util') + +/* istanbul ignore next - node 0.x polyfill */ +var gracefulQueue +var previousSymbol + +/* istanbul ignore else - node 0.x polyfill */ +if (typeof Symbol === 'function' && typeof Symbol.for === 'function') { + gracefulQueue = Symbol.for('graceful-fs.queue') + // This is used in testing by future versions + previousSymbol = Symbol.for('graceful-fs.previous') +} else { + gracefulQueue = '___graceful-fs.queue' + previousSymbol = '___graceful-fs.previous' +} + +function noop () {} + +function publishQueue(context, queue) { + Object.defineProperty(context, gracefulQueue, { + get: function() { + return queue + } + }) +} + +var debug = noop +if (util.debuglog) + debug = util.debuglog('gfs4') +else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) + debug = function() { + var m = util.format.apply(util, arguments) + m = 'GFS4: ' + m.split(/\n/).join('\nGFS4: ') + console.error(m) + } + +// Once time initialization +if (!fs[gracefulQueue]) { + // This queue can be shared by multiple loaded instances + var queue = global[gracefulQueue] || [] + publishQueue(fs, queue) + + // Patch fs.close/closeSync to shared queue version, because we need + // to retry() whenever a close happens *anywhere* in the program. + // This is essential when multiple graceful-fs instances are + // in play at the same time. + fs.close = (function (fs$close) { + function close (fd, cb) { + return fs$close.call(fs, fd, function (err) { + // This function uses the graceful-fs shared queue + if (!err) { + resetQueue() + } + + if (typeof cb === 'function') + cb.apply(this, arguments) + }) + } + + Object.defineProperty(close, previousSymbol, { + value: fs$close + }) + return close + })(fs.close) + + fs.closeSync = (function (fs$closeSync) { + function closeSync (fd) { + // This function uses the graceful-fs shared queue + fs$closeSync.apply(fs, arguments) + resetQueue() + } + + Object.defineProperty(closeSync, previousSymbol, { + value: fs$closeSync + }) + return closeSync + })(fs.closeSync) + + if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) { + process.on('exit', function() { + debug(fs[gracefulQueue]) + require('assert').equal(fs[gracefulQueue].length, 0) + }) + } +} + +if (!global[gracefulQueue]) { + publishQueue(global, fs[gracefulQueue]); +} + +module.exports = patch(clone(fs)) +if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) { + module.exports = patch(fs) + fs.__patched = true; +} + +function patch (fs) { + // Everything that references the open() function needs to be in here + polyfills(fs) + fs.gracefulify = patch + + fs.createReadStream = createReadStream + fs.createWriteStream = createWriteStream + var fs$readFile = fs.readFile + fs.readFile = readFile + function readFile (path, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$readFile(path, options, cb) + + function go$readFile (path, options, cb, startTime) { + return fs$readFile(path, options, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + var fs$writeFile = fs.writeFile + fs.writeFile = writeFile + function writeFile (path, data, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$writeFile(path, data, options, cb) + + function go$writeFile (path, data, options, cb, startTime) { + return fs$writeFile(path, data, options, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + var fs$appendFile = fs.appendFile + if (fs$appendFile) + fs.appendFile = appendFile + function appendFile (path, data, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$appendFile(path, data, options, cb) + + function go$appendFile (path, data, options, cb, startTime) { + return fs$appendFile(path, data, options, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + var fs$copyFile = fs.copyFile + if (fs$copyFile) + fs.copyFile = copyFile + function copyFile (src, dest, flags, cb) { + if (typeof flags === 'function') { + cb = flags + flags = 0 + } + return go$copyFile(src, dest, flags, cb) + + function go$copyFile (src, dest, flags, cb, startTime) { + return fs$copyFile(src, dest, flags, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + var fs$readdir = fs.readdir + fs.readdir = readdir + function readdir (path, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$readdir(path, options, cb) + + function go$readdir (path, options, cb, startTime) { + return fs$readdir(path, options, function (err, files) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$readdir, [path, options, cb], err, startTime || Date.now(), Date.now()]) + else { + if (files && files.sort) + files.sort() + + if (typeof cb === 'function') + cb.call(this, err, files) + } + }) + } + } + + if (process.version.substr(0, 4) === 'v0.8') { + var legStreams = legacy(fs) + ReadStream = legStreams.ReadStream + WriteStream = legStreams.WriteStream + } + + var fs$ReadStream = fs.ReadStream + if (fs$ReadStream) { + ReadStream.prototype = Object.create(fs$ReadStream.prototype) + ReadStream.prototype.open = ReadStream$open + } + + var fs$WriteStream = fs.WriteStream + if (fs$WriteStream) { + WriteStream.prototype = Object.create(fs$WriteStream.prototype) + WriteStream.prototype.open = WriteStream$open + } + + Object.defineProperty(fs, 'ReadStream', { + get: function () { + return ReadStream + }, + set: function (val) { + ReadStream = val + }, + enumerable: true, + configurable: true + }) + Object.defineProperty(fs, 'WriteStream', { + get: function () { + return WriteStream + }, + set: function (val) { + WriteStream = val + }, + enumerable: true, + configurable: true + }) + + // legacy names + var FileReadStream = ReadStream + Object.defineProperty(fs, 'FileReadStream', { + get: function () { + return FileReadStream + }, + set: function (val) { + FileReadStream = val + }, + enumerable: true, + configurable: true + }) + var FileWriteStream = WriteStream + Object.defineProperty(fs, 'FileWriteStream', { + get: function () { + return FileWriteStream + }, + set: function (val) { + FileWriteStream = val + }, + enumerable: true, + configurable: true + }) + + function ReadStream (path, options) { + if (this instanceof ReadStream) + return fs$ReadStream.apply(this, arguments), this + else + return ReadStream.apply(Object.create(ReadStream.prototype), arguments) + } + + function ReadStream$open () { + var that = this + open(that.path, that.flags, that.mode, function (err, fd) { + if (err) { + if (that.autoClose) + that.destroy() + + that.emit('error', err) + } else { + that.fd = fd + that.emit('open', fd) + that.read() + } + }) + } + + function WriteStream (path, options) { + if (this instanceof WriteStream) + return fs$WriteStream.apply(this, arguments), this + else + return WriteStream.apply(Object.create(WriteStream.prototype), arguments) + } + + function WriteStream$open () { + var that = this + open(that.path, that.flags, that.mode, function (err, fd) { + if (err) { + that.destroy() + that.emit('error', err) + } else { + that.fd = fd + that.emit('open', fd) + } + }) + } + + function createReadStream (path, options) { + return new fs.ReadStream(path, options) + } + + function createWriteStream (path, options) { + return new fs.WriteStream(path, options) + } + + var fs$open = fs.open + fs.open = open + function open (path, flags, mode, cb) { + if (typeof mode === 'function') + cb = mode, mode = null + + return go$open(path, flags, mode, cb) + + function go$open (path, flags, mode, cb, startTime) { + return fs$open(path, flags, mode, function (err, fd) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + return fs +} + +function enqueue (elem) { + debug('ENQUEUE', elem[0].name, elem[1]) + fs[gracefulQueue].push(elem) + retry() +} + +// keep track of the timeout between retry() calls +var retryTimer + +// reset the startTime and lastTime to now +// this resets the start of the 60 second overall timeout as well as the +// delay between attempts so that we'll retry these jobs sooner +function resetQueue () { + var now = Date.now() + for (var i = 0; i < fs[gracefulQueue].length; ++i) { + // entries that are only a length of 2 are from an older version, don't + // bother modifying those since they'll be retried anyway. + if (fs[gracefulQueue][i].length > 2) { + fs[gracefulQueue][i][3] = now // startTime + fs[gracefulQueue][i][4] = now // lastTime + } + } + // call retry to make sure we're actively processing the queue + retry() +} + +function retry () { + // clear the timer and remove it to help prevent unintended concurrency + clearTimeout(retryTimer) + retryTimer = undefined + + if (fs[gracefulQueue].length === 0) + return + + var elem = fs[gracefulQueue].shift() + var fn = elem[0] + var args = elem[1] + // these items may be unset if they were added by an older graceful-fs + var err = elem[2] + var startTime = elem[3] + var lastTime = elem[4] + + // if we don't have a startTime we have no way of knowing if we've waited + // long enough, so go ahead and retry this item now + if (startTime === undefined) { + debug('RETRY', fn.name, args) + fn.apply(null, args) + } else if (Date.now() - startTime >= 60000) { + // it's been more than 60 seconds total, bail now + debug('TIMEOUT', fn.name, args) + var cb = args.pop() + if (typeof cb === 'function') + cb.call(null, err) + } else { + // the amount of time between the last attempt and right now + var sinceAttempt = Date.now() - lastTime + // the amount of time between when we first tried, and when we last tried + // rounded up to at least 1 + var sinceStart = Math.max(lastTime - startTime, 1) + // backoff. wait longer than the total time we've been retrying, but only + // up to a maximum of 100ms + var desiredDelay = Math.min(sinceStart * 1.2, 100) + // it's been long enough since the last retry, do it again + if (sinceAttempt >= desiredDelay) { + debug('RETRY', fn.name, args) + fn.apply(null, args.concat([startTime])) + } else { + // if we can't do this job yet, push it to the end of the queue + // and let the next iteration check again + fs[gracefulQueue].push(elem) + } + } + + // schedule our next run if one isn't already scheduled + if (retryTimer === undefined) { + retryTimer = setTimeout(retry, 0) + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/legacy-streams.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/legacy-streams.js new file mode 100644 index 00000000..d617b50f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/legacy-streams.js @@ -0,0 +1,118 @@ +var Stream = require('stream').Stream + +module.exports = legacy + +function legacy (fs) { + return { + ReadStream: ReadStream, + WriteStream: WriteStream + } + + function ReadStream (path, options) { + if (!(this instanceof ReadStream)) return new ReadStream(path, options); + + Stream.call(this); + + var self = this; + + this.path = path; + this.fd = null; + this.readable = true; + this.paused = false; + + this.flags = 'r'; + this.mode = 438; /*=0666*/ + this.bufferSize = 64 * 1024; + + options = options || {}; + + // Mixin options into this + var keys = Object.keys(options); + for (var index = 0, length = keys.length; index < length; index++) { + var key = keys[index]; + this[key] = options[key]; + } + + if (this.encoding) this.setEncoding(this.encoding); + + if (this.start !== undefined) { + if ('number' !== typeof this.start) { + throw TypeError('start must be a Number'); + } + if (this.end === undefined) { + this.end = Infinity; + } else if ('number' !== typeof this.end) { + throw TypeError('end must be a Number'); + } + + if (this.start > this.end) { + throw new Error('start must be <= end'); + } + + this.pos = this.start; + } + + if (this.fd !== null) { + process.nextTick(function() { + self._read(); + }); + return; + } + + fs.open(this.path, this.flags, this.mode, function (err, fd) { + if (err) { + self.emit('error', err); + self.readable = false; + return; + } + + self.fd = fd; + self.emit('open', fd); + self._read(); + }) + } + + function WriteStream (path, options) { + if (!(this instanceof WriteStream)) return new WriteStream(path, options); + + Stream.call(this); + + this.path = path; + this.fd = null; + this.writable = true; + + this.flags = 'w'; + this.encoding = 'binary'; + this.mode = 438; /*=0666*/ + this.bytesWritten = 0; + + options = options || {}; + + // Mixin options into this + var keys = Object.keys(options); + for (var index = 0, length = keys.length; index < length; index++) { + var key = keys[index]; + this[key] = options[key]; + } + + if (this.start !== undefined) { + if ('number' !== typeof this.start) { + throw TypeError('start must be a Number'); + } + if (this.start < 0) { + throw new Error('start must be >= zero'); + } + + this.pos = this.start; + } + + this.busy = false; + this._queue = []; + + if (this.fd === null) { + this._open = fs.open; + this._queue.push([this._open, this.path, this.flags, this.mode, undefined]); + this.flush(); + } + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/package.json new file mode 100644 index 00000000..072b9912 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/package.json @@ -0,0 +1,88 @@ +{ + "_args": [ + [ + "graceful-fs@4.2.8", + "/tmp/repository/main" + ] + ], + "_from": "graceful-fs@4.2.8", + "_id": "graceful-fs@4.2.8", + "_inBundle": false, + "_integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "_location": "/graceful-fs", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "graceful-fs@4.2.8", + "name": "graceful-fs", + "escapedName": "graceful-fs", + "rawSpec": "4.2.8", + "saveSpec": null, + "fetchSpec": "4.2.8" + }, + "_requiredBy": [ + "/decompress", + "/enhanced-resolve", + "/fstream", + "/proper-lockfile", + "/unzipper", + "/watchpack", + "/webpack" + ], + "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "_spec": "4.2.8", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/isaacs/node-graceful-fs/issues" + }, + "description": "A drop-in replacement for fs, making various improvements.", + "devDependencies": { + "import-fresh": "^2.0.0", + "mkdirp": "^0.5.0", + "rimraf": "^2.2.8", + "tap": "^12.7.0" + }, + "directories": { + "test": "test" + }, + "files": [ + "fs.js", + "graceful-fs.js", + "legacy-streams.js", + "polyfills.js", + "clone.js" + ], + "homepage": "https://github.com/isaacs/node-graceful-fs#readme", + "keywords": [ + "fs", + "module", + "reading", + "retry", + "retries", + "queue", + "error", + "errors", + "handling", + "EMFILE", + "EAGAIN", + "EINVAL", + "EPERM", + "EACCESS" + ], + "license": "ISC", + "main": "graceful-fs.js", + "name": "graceful-fs", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/node-graceful-fs.git" + }, + "scripts": { + "postpublish": "git push origin --follow-tags", + "posttest": "nyc report", + "postversion": "npm publish", + "preversion": "npm test", + "test": "nyc --silent node test.js | tap -c -" + }, + "version": "4.2.8" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/polyfills.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/polyfills.js new file mode 100644 index 00000000..1287da1a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/graceful-fs/polyfills.js @@ -0,0 +1,346 @@ +var constants = require('constants') + +var origCwd = process.cwd +var cwd = null + +var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform + +process.cwd = function() { + if (!cwd) + cwd = origCwd.call(process) + return cwd +} +try { + process.cwd() +} catch (er) {} + +// This check is needed until node.js 12 is required +if (typeof process.chdir === 'function') { + var chdir = process.chdir + process.chdir = function (d) { + cwd = null + chdir.call(process, d) + } + if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir) +} + +module.exports = patch + +function patch (fs) { + // (re-)implement some things that are known busted or missing. + + // lchmod, broken prior to 0.6.2 + // back-port the fix here. + if (constants.hasOwnProperty('O_SYMLINK') && + process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) { + patchLchmod(fs) + } + + // lutimes implementation, or no-op + if (!fs.lutimes) { + patchLutimes(fs) + } + + // https://github.com/isaacs/node-graceful-fs/issues/4 + // Chown should not fail on einval or eperm if non-root. + // It should not fail on enosys ever, as this just indicates + // that a fs doesn't support the intended operation. + + fs.chown = chownFix(fs.chown) + fs.fchown = chownFix(fs.fchown) + fs.lchown = chownFix(fs.lchown) + + fs.chmod = chmodFix(fs.chmod) + fs.fchmod = chmodFix(fs.fchmod) + fs.lchmod = chmodFix(fs.lchmod) + + fs.chownSync = chownFixSync(fs.chownSync) + fs.fchownSync = chownFixSync(fs.fchownSync) + fs.lchownSync = chownFixSync(fs.lchownSync) + + fs.chmodSync = chmodFixSync(fs.chmodSync) + fs.fchmodSync = chmodFixSync(fs.fchmodSync) + fs.lchmodSync = chmodFixSync(fs.lchmodSync) + + fs.stat = statFix(fs.stat) + fs.fstat = statFix(fs.fstat) + fs.lstat = statFix(fs.lstat) + + fs.statSync = statFixSync(fs.statSync) + fs.fstatSync = statFixSync(fs.fstatSync) + fs.lstatSync = statFixSync(fs.lstatSync) + + // if lchmod/lchown do not exist, then make them no-ops + if (!fs.lchmod) { + fs.lchmod = function (path, mode, cb) { + if (cb) process.nextTick(cb) + } + fs.lchmodSync = function () {} + } + if (!fs.lchown) { + fs.lchown = function (path, uid, gid, cb) { + if (cb) process.nextTick(cb) + } + fs.lchownSync = function () {} + } + + // on Windows, A/V software can lock the directory, causing this + // to fail with an EACCES or EPERM if the directory contains newly + // created files. Try again on failure, for up to 60 seconds. + + // Set the timeout this long because some Windows Anti-Virus, such as Parity + // bit9, may lock files for up to a minute, causing npm package install + // failures. Also, take care to yield the scheduler. Windows scheduling gives + // CPU to a busy looping process, which can cause the program causing the lock + // contention to be starved of CPU by node, so the contention doesn't resolve. + if (platform === "win32") { + fs.rename = (function (fs$rename) { return function (from, to, cb) { + var start = Date.now() + var backoff = 0; + fs$rename(from, to, function CB (er) { + if (er + && (er.code === "EACCES" || er.code === "EPERM") + && Date.now() - start < 60000) { + setTimeout(function() { + fs.stat(to, function (stater, st) { + if (stater && stater.code === "ENOENT") + fs$rename(from, to, CB); + else + cb(er) + }) + }, backoff) + if (backoff < 100) + backoff += 10; + return; + } + if (cb) cb(er) + }) + }})(fs.rename) + } + + // if read() returns EAGAIN, then just try it again. + fs.read = (function (fs$read) { + function read (fd, buffer, offset, length, position, callback_) { + var callback + if (callback_ && typeof callback_ === 'function') { + var eagCounter = 0 + callback = function (er, _, __) { + if (er && er.code === 'EAGAIN' && eagCounter < 10) { + eagCounter ++ + return fs$read.call(fs, fd, buffer, offset, length, position, callback) + } + callback_.apply(this, arguments) + } + } + return fs$read.call(fs, fd, buffer, offset, length, position, callback) + } + + // This ensures `util.promisify` works as it does for native `fs.read`. + if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read) + return read + })(fs.read) + + fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) { + var eagCounter = 0 + while (true) { + try { + return fs$readSync.call(fs, fd, buffer, offset, length, position) + } catch (er) { + if (er.code === 'EAGAIN' && eagCounter < 10) { + eagCounter ++ + continue + } + throw er + } + } + }})(fs.readSync) + + function patchLchmod (fs) { + fs.lchmod = function (path, mode, callback) { + fs.open( path + , constants.O_WRONLY | constants.O_SYMLINK + , mode + , function (err, fd) { + if (err) { + if (callback) callback(err) + return + } + // prefer to return the chmod error, if one occurs, + // but still try to close, and report closing errors if they occur. + fs.fchmod(fd, mode, function (err) { + fs.close(fd, function(err2) { + if (callback) callback(err || err2) + }) + }) + }) + } + + fs.lchmodSync = function (path, mode) { + var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode) + + // prefer to return the chmod error, if one occurs, + // but still try to close, and report closing errors if they occur. + var threw = true + var ret + try { + ret = fs.fchmodSync(fd, mode) + threw = false + } finally { + if (threw) { + try { + fs.closeSync(fd) + } catch (er) {} + } else { + fs.closeSync(fd) + } + } + return ret + } + } + + function patchLutimes (fs) { + if (constants.hasOwnProperty("O_SYMLINK")) { + fs.lutimes = function (path, at, mt, cb) { + fs.open(path, constants.O_SYMLINK, function (er, fd) { + if (er) { + if (cb) cb(er) + return + } + fs.futimes(fd, at, mt, function (er) { + fs.close(fd, function (er2) { + if (cb) cb(er || er2) + }) + }) + }) + } + + fs.lutimesSync = function (path, at, mt) { + var fd = fs.openSync(path, constants.O_SYMLINK) + var ret + var threw = true + try { + ret = fs.futimesSync(fd, at, mt) + threw = false + } finally { + if (threw) { + try { + fs.closeSync(fd) + } catch (er) {} + } else { + fs.closeSync(fd) + } + } + return ret + } + + } else { + fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) } + fs.lutimesSync = function () {} + } + } + + function chmodFix (orig) { + if (!orig) return orig + return function (target, mode, cb) { + return orig.call(fs, target, mode, function (er) { + if (chownErOk(er)) er = null + if (cb) cb.apply(this, arguments) + }) + } + } + + function chmodFixSync (orig) { + if (!orig) return orig + return function (target, mode) { + try { + return orig.call(fs, target, mode) + } catch (er) { + if (!chownErOk(er)) throw er + } + } + } + + + function chownFix (orig) { + if (!orig) return orig + return function (target, uid, gid, cb) { + return orig.call(fs, target, uid, gid, function (er) { + if (chownErOk(er)) er = null + if (cb) cb.apply(this, arguments) + }) + } + } + + function chownFixSync (orig) { + if (!orig) return orig + return function (target, uid, gid) { + try { + return orig.call(fs, target, uid, gid) + } catch (er) { + if (!chownErOk(er)) throw er + } + } + } + + function statFix (orig) { + if (!orig) return orig + // Older versions of Node erroneously returned signed integers for + // uid + gid. + return function (target, options, cb) { + if (typeof options === 'function') { + cb = options + options = null + } + function callback (er, stats) { + if (stats) { + if (stats.uid < 0) stats.uid += 0x100000000 + if (stats.gid < 0) stats.gid += 0x100000000 + } + if (cb) cb.apply(this, arguments) + } + return options ? orig.call(fs, target, options, callback) + : orig.call(fs, target, callback) + } + } + + function statFixSync (orig) { + if (!orig) return orig + // Older versions of Node erroneously returned signed integers for + // uid + gid. + return function (target, options) { + var stats = options ? orig.call(fs, target, options) + : orig.call(fs, target) + if (stats.uid < 0) stats.uid += 0x100000000 + if (stats.gid < 0) stats.gid += 0x100000000 + return stats; + } + } + + // ENOSYS means that the fs doesn't support the op. Just ignore + // that, because it doesn't matter. + // + // if there's no getuid, or if getuid() is something other + // than 0, and the error is EINVAL or EPERM, then just ignore + // it. + // + // This specific case is a silent failure in cp, install, tar, + // and most other unix tools that manage permissions. + // + // When running as root, or if other types of errors are + // encountered, then it's strict. + function chownErOk (er) { + if (!er) + return true + + if (er.code === "ENOSYS") + return true + + var nonroot = !process.getuid || process.getuid() !== 0 + if (nonroot) { + if (er.code === "EINVAL" || er.code === "EPERM") + return true + } + + return false + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.eslintignore b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.eslintignore new file mode 100644 index 00000000..404abb22 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.eslintignore @@ -0,0 +1 @@ +coverage/ diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.eslintrc b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.eslintrc new file mode 100644 index 00000000..2d9a66a8 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.eslintrc @@ -0,0 +1,11 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "max-statements-per-line": [2, { "max": 2 }], + "no-magic-numbers": 0, + "multiline-comment-style": 0, + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.github/FUNDING.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.github/FUNDING.yml new file mode 100644 index 00000000..04cf87e6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/has-symbols +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.nycrc b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.nycrc new file mode 100644 index 00000000..1826526e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/.nycrc @@ -0,0 +1,13 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "test" + ] +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/CHANGELOG.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/CHANGELOG.md new file mode 100644 index 00000000..852ca042 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/CHANGELOG.md @@ -0,0 +1,58 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.2](https://github.com/inspect-js/has-symbols/compare/v1.0.1...v1.0.2) - 2021-02-27 + +### Fixed + +- [Fix] use a universal way to get the original Symbol [`#11`](https://github.com/inspect-js/has-symbols/issues/11) + +### Commits + +- [Tests] migrate tests to Github Actions [`90ae798`](https://github.com/inspect-js/has-symbols/commit/90ae79820bdfe7bc703d67f5f3c5e205f98556d3) +- [meta] do not publish github action workflow files [`29e60a1`](https://github.com/inspect-js/has-symbols/commit/29e60a1b7c25c7f1acf7acff4a9320d0d10c49b4) +- [Tests] run `nyc` on all tests [`8476b91`](https://github.com/inspect-js/has-symbols/commit/8476b915650d360915abe2522505abf4b0e8f0ae) +- [readme] fix repo URLs, remove defunct badges [`126288e`](https://github.com/inspect-js/has-symbols/commit/126288ecc1797c0a40247a6b78bcb2e0bc5d7036) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `core-js`, `get-own-property-symbols` [`d84bdfa`](https://github.com/inspect-js/has-symbols/commit/d84bdfa48ac5188abbb4904b42614cd6c030940a) +- [Tests] fix linting errors [`0df3070`](https://github.com/inspect-js/has-symbols/commit/0df3070b981b6c9f2ee530c09189a7f5c6def839) +- [actions] add "Allow Edits" workflow [`1e6bc29`](https://github.com/inspect-js/has-symbols/commit/1e6bc29b188f32b9648657b07eda08504be5aa9c) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`36cea2a`](https://github.com/inspect-js/has-symbols/commit/36cea2addd4e6ec435f35a2656b4e9ef82498e9b) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`1278338`](https://github.com/inspect-js/has-symbols/commit/127833801865fbc2cc8979beb9ca869c7bfe8222) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`1493254`](https://github.com/inspect-js/has-symbols/commit/1493254eda13db5fb8fc5e4a3e8324b3d196029d) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js` [`b090bf2`](https://github.com/inspect-js/has-symbols/commit/b090bf214d3679a30edc1e2d729d466ab5183e1d) +- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`4addb7a`](https://github.com/inspect-js/has-symbols/commit/4addb7ab4dc73f927ae99928d68817554fc21dc0) +- [Dev Deps] update `auto-changelog`, `tape` [`81d0baf`](https://github.com/inspect-js/has-symbols/commit/81d0baf3816096a89a8558e8043895f7a7d10d8b) +- [Dev Deps] update `auto-changelog`; add `aud` [`1a4e561`](https://github.com/inspect-js/has-symbols/commit/1a4e5612c25d91c3a03d509721d02630bc4fe3da) +- [readme] remove unused testling URLs [`3000941`](https://github.com/inspect-js/has-symbols/commit/3000941f958046e923ed8152edb1ef4a599e6fcc) +- [Tests] only audit prod deps [`692e974`](https://github.com/inspect-js/has-symbols/commit/692e9743c912410e9440207631a643a34b4741a1) +- [Dev Deps] update `@ljharb/eslint-config` [`51c946c`](https://github.com/inspect-js/has-symbols/commit/51c946c7f6baa793ec5390bb5a45cdce16b4ba76) + +## [v1.0.1](https://github.com/inspect-js/has-symbols/compare/v1.0.0...v1.0.1) - 2019-11-16 + +### Commits + +- [Tests] use shared travis-ci configs [`ce396c9`](https://github.com/inspect-js/has-symbols/commit/ce396c9419ff11c43d0da5d05cdbb79f7fb42229) +- [Tests] up to `node` `v12.4`, `v11.15`, `v10.15`, `v9.11`, `v8.15`, `v7.10`, `v6.17`, `v4.9`; use `nvm install-latest-npm` [`0690732`](https://github.com/inspect-js/has-symbols/commit/0690732801f47ab429f39ba1962f522d5c462d6b) +- [meta] add `auto-changelog` [`2163d0b`](https://github.com/inspect-js/has-symbols/commit/2163d0b7f36343076b8f947cd1667dd1750f26fc) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js`, `safe-publish-latest`, `tape` [`8e0951f`](https://github.com/inspect-js/has-symbols/commit/8e0951f1a7a2e52068222b7bb73511761e6e4d9c) +- [actions] add automatic rebasing / merge commit blocking [`b09cdb7`](https://github.com/inspect-js/has-symbols/commit/b09cdb7cd7ee39e7a769878f56e2d6066f5ccd1d) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `core-js`, `get-own-property-symbols`, `tape` [`1dd42cd`](https://github.com/inspect-js/has-symbols/commit/1dd42cd86183ed0c50f99b1062345c458babca91) +- [meta] create FUNDING.yml [`aa57a17`](https://github.com/inspect-js/has-symbols/commit/aa57a17b19708906d1927f821ea8e73394d84ca4) +- Only apps should have lockfiles [`a2d8bea`](https://github.com/inspect-js/has-symbols/commit/a2d8bea23a97d15c09eaf60f5b107fcf9a4d57aa) +- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`9e96cb7`](https://github.com/inspect-js/has-symbols/commit/9e96cb783746cbed0c10ef78e599a8eaa7ebe193) +- [meta] add `funding` field [`a0b32cf`](https://github.com/inspect-js/has-symbols/commit/a0b32cf68e803f963c1639b6d47b0a9d6440bab0) +- [Dev Deps] update `safe-publish-latest` [`cb9f0a5`](https://github.com/inspect-js/has-symbols/commit/cb9f0a521a3a1790f1064d437edd33bb6c3d6af0) + +## v1.0.0 - 2016-09-19 + +### Commits + +- Tests. [`ecb6eb9`](https://github.com/inspect-js/has-symbols/commit/ecb6eb934e4883137f3f93b965ba5e0a98df430d) +- package.json [`88a337c`](https://github.com/inspect-js/has-symbols/commit/88a337cee0864a0da35f5d19e69ff0ef0150e46a) +- Initial commit [`42e1e55`](https://github.com/inspect-js/has-symbols/commit/42e1e5502536a2b8ac529c9443984acd14836b1c) +- Initial implementation. [`33f5cc6`](https://github.com/inspect-js/has-symbols/commit/33f5cc6cdff86e2194b081ee842bfdc63caf43fb) +- read me [`01f1170`](https://github.com/inspect-js/has-symbols/commit/01f1170188ff7cb1558aa297f6ba5b516c6d7b0c) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/LICENSE new file mode 100644 index 00000000..df31cbf3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Jordan Harband + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/README.md new file mode 100644 index 00000000..3875d7e5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/README.md @@ -0,0 +1,40 @@ +# has-symbols [![Version Badge][2]][1] + +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +Determine if the JS environment has Symbol support. Supports spec, or shams. + +## Example + +```js +var hasSymbols = require('has-symbols'); + +hasSymbols() === true; // if the environment has native Symbol support. Not polyfillable, not forgeable. + +var hasSymbolsKinda = require('has-symbols/shams'); +hasSymbolsKinda() === true; // if the environment has a Symbol sham that mostly follows the spec. +``` + +## Supported Symbol shams + - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols) + - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js) + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[1]: https://npmjs.org/package/has-symbols +[2]: https://versionbadg.es/inspect-js/has-symbols.svg +[5]: https://david-dm.org/inspect-js/has-symbols.svg +[6]: https://david-dm.org/inspect-js/has-symbols +[7]: https://david-dm.org/inspect-js/has-symbols/dev-status.svg +[8]: https://david-dm.org/inspect-js/has-symbols#info=devDependencies +[11]: https://nodei.co/npm/has-symbols.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/has-symbols.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/has-symbols.svg +[downloads-url]: https://npm-stat.com/charts.html?package=has-symbols diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/index.js new file mode 100644 index 00000000..17044fa2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/index.js @@ -0,0 +1,13 @@ +'use strict'; + +var origSymbol = typeof Symbol !== 'undefined' && Symbol; +var hasSymbolSham = require('./shams'); + +module.exports = function hasNativeSymbols() { + if (typeof origSymbol !== 'function') { return false; } + if (typeof Symbol !== 'function') { return false; } + if (typeof origSymbol('foo') !== 'symbol') { return false; } + if (typeof Symbol('bar') !== 'symbol') { return false; } + + return hasSymbolSham(); +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/package.json new file mode 100644 index 00000000..e3b2aa4c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/package.json @@ -0,0 +1,128 @@ +{ + "_args": [ + [ + "has-symbols@1.0.2", + "/tmp/repository/main" + ] + ], + "_from": "has-symbols@1.0.2", + "_id": "has-symbols@1.0.2", + "_inBundle": false, + "_integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "_location": "/has-symbols", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "has-symbols@1.0.2", + "name": "has-symbols", + "escapedName": "has-symbols", + "rawSpec": "1.0.2", + "saveSpec": null, + "fetchSpec": "1.0.2" + }, + "_requiredBy": [ + "/has-tostringtag" + ], + "_resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "_spec": "1.0.2", + "_where": "/tmp/repository/main", + "author": { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "bugs": { + "url": "https://github.com/inspect-js/has-symbols/issues" + }, + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "description": "Determine if the JS environment has Symbol support. Supports spec, or shams.", + "devDependencies": { + "@ljharb/eslint-config": "^17.5.1", + "aud": "^1.1.4", + "auto-changelog": "^2.2.1", + "core-js": "^2.6.12", + "eslint": "^7.20.0", + "get-own-property-symbols": "^0.9.5", + "nyc": "^10.3.2", + "safe-publish-latest": "^1.1.4", + "tape": "^5.2.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "greenkeeper": { + "ignore": [ + "core-js" + ] + }, + "homepage": "https://github.com/inspect-js/has-symbols#readme", + "keywords": [ + "Symbol", + "symbols", + "typeof", + "sham", + "polyfill", + "native", + "core-js", + "ES6" + ], + "license": "MIT", + "main": "index.js", + "name": "has-symbols", + "repository": { + "type": "git", + "url": "git://github.com/inspect-js/has-symbols.git" + }, + "scripts": { + "lint": "eslint --ext=js,mjs .", + "posttest": "aud --production", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", + "prepublish": "safe-publish-latest", + "pretest": "npm run --silent lint", + "test": "npm run tests-only", + "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs", + "test:shams:corejs": "nyc node test/shams/core-js.js", + "test:shams:getownpropertysymbols": "nyc node test/shams/get-own-property-symbols.js", + "test:staging": "nyc node --harmony --es-staging test", + "test:stock": "nyc node test", + "tests-only": "npm run test:stock && npm run test:staging && npm run test:shams", + "version": "auto-changelog && git add CHANGELOG.md" + }, + "testling": { + "files": "test/index.js", + "browsers": [ + "iexplore/6.0..latest", + "firefox/3.0..6.0", + "firefox/15.0..latest", + "firefox/nightly", + "chrome/4.0..10.0", + "chrome/20.0..latest", + "chrome/canary", + "opera/10.0..latest", + "opera/next", + "safari/4.0..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2" + ] + }, + "version": "1.0.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/shams.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/shams.js new file mode 100644 index 00000000..1285210e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/shams.js @@ -0,0 +1,42 @@ +'use strict'; + +/* eslint complexity: [2, 18], max-statements: [2, 33] */ +module.exports = function hasSymbols() { + if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } + if (typeof Symbol.iterator === 'symbol') { return true; } + + var obj = {}; + var sym = Symbol('test'); + var symObj = Object(sym); + if (typeof sym === 'string') { return false; } + + if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } + if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } + + // temp disabled per https://github.com/ljharb/object.assign/issues/17 + // if (sym instanceof Symbol) { return false; } + // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 + // if (!(symObj instanceof Symbol)) { return false; } + + // if (typeof Symbol.prototype.toString !== 'function') { return false; } + // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } + + var symVal = 42; + obj[sym] = symVal; + for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop + if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } + + if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } + + var syms = Object.getOwnPropertySymbols(obj); + if (syms.length !== 1 || syms[0] !== sym) { return false; } + + if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } + + if (typeof Object.getOwnPropertyDescriptor === 'function') { + var descriptor = Object.getOwnPropertyDescriptor(obj, sym); + if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } + } + + return true; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/index.js new file mode 100644 index 00000000..352129ca --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/index.js @@ -0,0 +1,22 @@ +'use strict'; + +var test = require('tape'); +var hasSymbols = require('../'); +var runSymbolTests = require('./tests'); + +test('interface', function (t) { + t.equal(typeof hasSymbols, 'function', 'is a function'); + t.equal(typeof hasSymbols(), 'boolean', 'returns a boolean'); + t.end(); +}); + +test('Symbols are supported', { skip: !hasSymbols() }, function (t) { + runSymbolTests(t); + t.end(); +}); + +test('Symbols are not supported', { skip: hasSymbols() }, function (t) { + t.equal(typeof Symbol, 'undefined', 'global Symbol is undefined'); + t.equal(typeof Object.getOwnPropertySymbols, 'undefined', 'Object.getOwnPropertySymbols does not exist'); + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/shams/core-js.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/shams/core-js.js new file mode 100644 index 00000000..df5365c2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/shams/core-js.js @@ -0,0 +1,28 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') { + test('has native Symbol support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol(), 'symbol'); + t.end(); + }); + return; +} + +var hasSymbols = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbols(), false, 'hasSymbols is false before polyfilling'); + require('core-js/fn/symbol'); + require('core-js/fn/symbol/to-string-tag'); + + require('../tests')(t); + + var hasSymbolsAfter = hasSymbols(); + t.equal(hasSymbolsAfter, true, 'hasSymbols is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/shams/get-own-property-symbols.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/shams/get-own-property-symbols.js new file mode 100644 index 00000000..9191b248 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/shams/get-own-property-symbols.js @@ -0,0 +1,28 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') { + test('has native Symbol support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol(), 'symbol'); + t.end(); + }); + return; +} + +var hasSymbols = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbols(), false, 'hasSymbols is false before polyfilling'); + + require('get-own-property-symbols'); + + require('../tests')(t); + + var hasSymbolsAfter = hasSymbols(); + t.equal(hasSymbolsAfter, true, 'hasSymbols is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/tests.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/tests.js new file mode 100644 index 00000000..89edd129 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-symbols/test/tests.js @@ -0,0 +1,56 @@ +'use strict'; + +// eslint-disable-next-line consistent-return +module.exports = function runSymbolTests(t) { + t.equal(typeof Symbol, 'function', 'global Symbol is a function'); + + if (typeof Symbol !== 'function') { return false; } + + t.notEqual(Symbol(), Symbol(), 'two symbols are not equal'); + + /* + t.equal( + Symbol.prototype.toString.call(Symbol('foo')), + Symbol.prototype.toString.call(Symbol('foo')), + 'two symbols with the same description stringify the same' + ); + */ + + /* + var foo = Symbol('foo'); + + t.notEqual( + String(foo), + String(Symbol('bar')), + 'two symbols with different descriptions do not stringify the same' + ); + */ + + t.equal(typeof Symbol.prototype.toString, 'function', 'Symbol#toString is a function'); + // t.equal(String(foo), Symbol.prototype.toString.call(foo), 'Symbol#toString equals String of the same symbol'); + + t.equal(typeof Object.getOwnPropertySymbols, 'function', 'Object.getOwnPropertySymbols is a function'); + + var obj = {}; + var sym = Symbol('test'); + var symObj = Object(sym); + t.notEqual(typeof sym, 'string', 'Symbol is not a string'); + t.equal(Object.prototype.toString.call(sym), '[object Symbol]', 'symbol primitive Object#toStrings properly'); + t.equal(Object.prototype.toString.call(symObj), '[object Symbol]', 'symbol primitive Object#toStrings properly'); + + var symVal = 42; + obj[sym] = symVal; + // eslint-disable-next-line no-restricted-syntax + for (sym in obj) { t.fail('symbol property key was found in for..in of object'); } + + t.deepEqual(Object.keys(obj), [], 'no enumerable own keys on symbol-valued object'); + t.deepEqual(Object.getOwnPropertyNames(obj), [], 'no own names on symbol-valued object'); + t.deepEqual(Object.getOwnPropertySymbols(obj), [sym], 'one own symbol on symbol-valued object'); + t.equal(Object.prototype.propertyIsEnumerable.call(obj, sym), true, 'symbol is enumerable'); + t.deepEqual(Object.getOwnPropertyDescriptor(obj, sym), { + configurable: true, + enumerable: true, + value: 42, + writable: true + }, 'property descriptor is correct'); +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/.eslintrc b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/.eslintrc new file mode 100644 index 00000000..2d9a66a8 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/.eslintrc @@ -0,0 +1,11 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "max-statements-per-line": [2, { "max": 2 }], + "no-magic-numbers": 0, + "multiline-comment-style": 0, + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/.github/FUNDING.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/.github/FUNDING.yml new file mode 100644 index 00000000..7a450e70 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/has-tostringtag +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/CHANGELOG.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/CHANGELOG.md new file mode 100644 index 00000000..39fb77cf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/CHANGELOG.md @@ -0,0 +1,20 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## v1.0.0 - 2021-08-05 + +### Commits + +- Tests [`6b6f573`](https://github.com/inspect-js/has-tostringtag/commit/6b6f5734dc2058badb300ff0783efdad95fe1a65) +- Initial commit [`2f8190e`](https://github.com/inspect-js/has-tostringtag/commit/2f8190e799fac32ba9b95a076c0255e01d7ce475) +- [meta] do not publish github action workflow files [`6e08cc4`](https://github.com/inspect-js/has-tostringtag/commit/6e08cc4e0fea7ec71ef66e70734b2af2c4a8b71b) +- readme [`94bed6c`](https://github.com/inspect-js/has-tostringtag/commit/94bed6c9560cbbfda034f8d6c260bb7b0db33c1a) +- npm init [`be67840`](https://github.com/inspect-js/has-tostringtag/commit/be67840ab92ee7adb98bcc65261975543f815fa5) +- Implementation [`c4914ec`](https://github.com/inspect-js/has-tostringtag/commit/c4914ecc51ddee692c85b471ae0a5d8123030fbf) +- [meta] use `auto-changelog` [`4aaf768`](https://github.com/inspect-js/has-tostringtag/commit/4aaf76895ae01d7b739f2b19f967ef2372506cd7) +- Only apps should have lockfiles [`bc4d99e`](https://github.com/inspect-js/has-tostringtag/commit/bc4d99e4bf494afbaa235c5f098df6e642edf724) +- [meta] add `safe-publish-latest` [`6523c05`](https://github.com/inspect-js/has-tostringtag/commit/6523c05c9b87140f3ae74c9daf91633dd9ff4e1f) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/LICENSE new file mode 100644 index 00000000..7948bc02 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Inspect JS + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/README.md new file mode 100644 index 00000000..67a5e929 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/README.md @@ -0,0 +1,46 @@ +# has-tostringtag [![Version Badge][2]][1] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams. + +## Example + +```js +var hasSymbolToStringTag = require('has-tostringtag'); + +hasSymbolToStringTag() === true; // if the environment has native Symbol.toStringTag support. Not polyfillable, not forgeable. + +var hasSymbolToStringTagKinda = require('has-tostringtag/shams'); +hasSymbolToStringTagKinda() === true; // if the environment has a Symbol.toStringTag sham that mostly follows the spec. +``` + +## Supported Symbol shams + - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols) + - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js) + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[1]: https://npmjs.org/package/has-tostringtag +[2]: https://versionbadg.es/inspect-js/has-tostringtag.svg +[5]: https://david-dm.org/inspect-js/has-tostringtag.svg +[6]: https://david-dm.org/inspect-js/has-tostringtag +[7]: https://david-dm.org/inspect-js/has-tostringtag/dev-status.svg +[8]: https://david-dm.org/inspect-js/has-tostringtag#info=devDependencies +[11]: https://nodei.co/npm/has-tostringtag.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/has-tostringtag.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/has-tostringtag.svg +[downloads-url]: https://npm-stat.com/charts.html?package=has-tostringtag +[codecov-image]: https://codecov.io/gh/inspect-js/has-tostringtag/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/has-tostringtag/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-tostringtag +[actions-url]: https://github.com/inspect-js/has-tostringtag/actions diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/index.js new file mode 100644 index 00000000..d626b7a8 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/index.js @@ -0,0 +1,7 @@ +'use strict'; + +var hasSymbols = require('has-symbols'); + +module.exports = function hasToStringTag() { + return hasSymbols() && typeof Symbol.toStringTag === 'symbol'; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/package.json new file mode 100644 index 00000000..660424ff --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/package.json @@ -0,0 +1,112 @@ +{ + "_args": [ + [ + "has-tostringtag@1.0.0", + "/tmp/repository/main" + ] + ], + "_from": "has-tostringtag@1.0.0", + "_id": "has-tostringtag@1.0.0", + "_inBundle": false, + "_integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "_location": "/has-tostringtag", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "has-tostringtag@1.0.0", + "name": "has-tostringtag", + "escapedName": "has-tostringtag", + "rawSpec": "1.0.0", + "saveSpec": null, + "fetchSpec": "1.0.0" + }, + "_requiredBy": [ + "/is-generator-function" + ], + "_resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "_spec": "1.0.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "bugs": { + "url": "https://github.com/inspect-js/has-tostringtag/issues" + }, + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "dependencies": { + "has-symbols": "^1.0.2" + }, + "description": "Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams.", + "devDependencies": { + "@ljharb/eslint-config": "^17.6.0", + "aud": "^1.1.5", + "auto-changelog": "^2.3.0", + "core-js": "^2.6.12", + "eslint": "^7.32.0", + "get-own-property-symbols": "^0.9.5", + "nyc": "^10.3.2", + "safe-publish-latest": "^1.1.4", + "tape": "^5.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "exports": { + ".": "./index.js", + "./shams": "./shams.js", + "./package.json": "./package.json" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "homepage": "https://github.com/inspect-js/has-tostringtag#readme", + "keywords": [ + "javascript", + "ecmascript", + "symbol", + "symbols", + "tostringtag", + "Symbol.toStringTag" + ], + "license": "MIT", + "main": "index.js", + "name": "has-tostringtag", + "repository": { + "type": "git", + "url": "git+https://github.com/inspect-js/has-tostringtag.git" + }, + "scripts": { + "lint": "eslint --ext=js,mjs .", + "posttest": "aud --production", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "pretest": "npm run --silent lint", + "test": "npm run tests-only", + "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs", + "test:shams:corejs": "nyc node test/shams/core-js.js", + "test:shams:getownpropertysymbols": "nyc node test/shams/get-own-property-symbols.js", + "test:staging": "nyc node --harmony --es-staging test", + "test:stock": "nyc node test", + "tests-only": "npm run test:stock && npm run test:staging && npm run test:shams", + "version": "auto-changelog && git add CHANGELOG.md" + }, + "version": "1.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/shams.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/shams.js new file mode 100644 index 00000000..8b7e4011 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/shams.js @@ -0,0 +1,7 @@ +'use strict'; + +var hasSymbols = require('has-symbols/shams'); + +module.exports = function hasToStringTagShams() { + return hasSymbols() && !!Symbol.toStringTag; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/index.js new file mode 100644 index 00000000..0679afdf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/index.js @@ -0,0 +1,21 @@ +'use strict'; + +var test = require('tape'); +var hasSymbolToStringTag = require('../'); +var runSymbolTests = require('./tests'); + +test('interface', function (t) { + t.equal(typeof hasSymbolToStringTag, 'function', 'is a function'); + t.equal(typeof hasSymbolToStringTag(), 'boolean', 'returns a boolean'); + t.end(); +}); + +test('Symbol.toStringTag exists', { skip: !hasSymbolToStringTag() }, function (t) { + runSymbolTests(t); + t.end(); +}); + +test('Symbol.toStringTag does not exist', { skip: hasSymbolToStringTag() }, function (t) { + t.equal(typeof Symbol === 'undefined' ? 'undefined' : typeof Symbol.toStringTag, 'undefined', 'global Symbol.toStringTag is undefined'); + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/shams/core-js.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/shams/core-js.js new file mode 100644 index 00000000..692b86eb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/shams/core-js.js @@ -0,0 +1,28 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol') { + test('has native Symbol.toStringTag support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol.toStringTag, 'symbol'); + t.end(); + }); + return; +} + +var hasSymbolToStringTag = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbolToStringTag(), false, 'hasSymbolToStringTag is false before polyfilling'); + require('core-js/fn/symbol'); + require('core-js/fn/symbol/to-string-tag'); + + require('../tests')(t); + + var hasToStringTagAfter = hasSymbolToStringTag(); + t.equal(hasToStringTagAfter, true, 'hasSymbolToStringTag is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js new file mode 100644 index 00000000..489fe836 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js @@ -0,0 +1,28 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') { + test('has native Symbol support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol(), 'symbol'); + t.end(); + }); + return; +} + +var hasSymbolToStringTag = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbolToStringTag(), false, 'hasSymbolToStringTag is false before polyfilling'); + + require('get-own-property-symbols'); + + require('../tests')(t); + + var hasToStringTagAfter = hasSymbolToStringTag(); + t.equal(hasToStringTagAfter, true, 'hasSymbolToStringTag is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/tests.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/tests.js new file mode 100644 index 00000000..0dae885c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/has-tostringtag/test/tests.js @@ -0,0 +1,14 @@ +'use strict'; + +// eslint-disable-next-line consistent-return +module.exports = function runSymbolTests(t) { + t.equal(typeof Symbol, 'function', 'global Symbol is a function'); + t.ok(Symbol.toStringTag, 'Symbol.toStringTag exists'); + + if (typeof Symbol !== 'function' || !Symbol.toStringTag) { return false; } + + var obj = {}; + obj[Symbol.toStringTag] = 'test'; + + t.equal(Object.prototype.toString.call(obj), '[object test]'); +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/HISTORY.md new file mode 100644 index 00000000..17436efa --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/HISTORY.md @@ -0,0 +1,79 @@ +1.5.0 / 2021-08-25 +================== + + * Add `assert.fail()` + * deps: http-errors@~1.8.0 + - deps: inherits@2.0.4 + - deps: setprototypeof@1.2.0 + +1.4.1 / 2019-04-28 +================== + + * deps: http-errors@~1.7.2 + - deps: setprototypeof@1.1.1 + +1.4.0 / 2018-09-09 +================== + + * Add `assert.ok()` + * deps: http-errors@~1.7.1 + - Set constructor name when possible + - deps: depd@~1.1.2 + - deps: setprototypeof@1.1.0 + - deps: statuses@'>= 1.5.0 < 2' + +1.3.0 / 2017-05-07 +================== + + * deps: deep-equal@~1.0.1 + - Fix `null == undefined` for non-strict compares + * deps: http-errors@~1.6.1 + - Accept custom 4xx and 5xx status codes in factory + - Deprecate using non-error status codes + - Make `message` property enumerable for `HttpError`s + - Support new code `421 Misdirected Request` + - Use `setprototypeof` module to replace `__proto__` setting + - deps: inherits@2.0.3 + - deps: setprototypeof@1.0.3 + - deps: statuses@'>= 1.3.1 < 2' + - perf: enable strict mode + +1.2.0 / 2016-02-27 +================== + + * deps: http-errors@~1.4.0 + +1.1.1 / 2015-02-13 +================== + + * deps: deep-equal@~1.0.0 + * dpes: http-errors@~1.3.1 + +1.1.0 / 2014-12-10 +================== + + * Add equality methods + - `assert.deepEqual()` + - `assert.equal()` + - `assert.notDeepEqual()` + - `assert.notEqual()` + - `assert.notStrictEqual()` + - `assert.strictEqual()` + +1.0.2 / 2014-09-10 +================== + + * Fix setting `err.expose` on invalid status + * Use `http-errors` module + * perf: remove duplicate status check + +1.0.1 / 2014-01-20 +================== + + * Fix typo causing `err.message` to be `undefined` + +1.0.0 / 2014-01-20 +================== + + * Default status to 500 + * Set `err.expose` to `false` for 5xx codes diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/LICENSE new file mode 100644 index 00000000..3ee2c011 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014 + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/README.md new file mode 100644 index 00000000..b1f2f879 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/README.md @@ -0,0 +1,116 @@ +# http-assert + +[![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] + +Assert with status codes. Like ctx.throw() in Koa, but with a guard. + +## 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-assert +``` + +## Example +```js +var assert = require('http-assert') +var ok = require('assert') + +var username = 'foobar' // username from request + +try { + assert(username === 'fjodor', 401, 'authentication failed') +} catch (err) { + ok(err.status === 401) + ok(err.message === 'authentication failed') + ok(err.expose) +} +``` + +## API + +The API of this module is intended to be similar to the +[Node.js `assert` module](https://nodejs.org/dist/latest/docs/api/assert.html). + +Each function will throw an instance of `HttpError` from +[the `http-errors` module](https://www.npmjs.com/package/http-errors) +when the assertion fails. + +### assert(value, [status], [message], [properties]) + +Tests if `value` is truthy. If `value` is not truthy, an `HttpError` +is thrown that is constructed with the given `status`, `message`, +and `properties`. + +### assert.deepEqual(a, b, [status], [message], [properties]) + +Tests for deep equality between `a` and `b`. Primitive values are +compared with the Abstract Equality Comparison (`==`). If `a` and `b` +are not equal, an `HttpError` is thrown that is constructed with the +given `status`, `message`, and `properties`. + +### assert.equal(a, b, [status], [message], [properties]) + +Tests shallow, coercive equality between `a` and `b` using the Abstract +Equality Comparison (`==`). If `a` and `b` are not equal, an `HttpError` +is thrown that is constructed with the given `status`, `message`, +and `properties`. + +### assert.fail([status], [message], [properties]) + +Always throws an `HttpError` that is constructed with the given `status`, +`message`, and `properties`. + +### assert.notDeepEqual(a, b, [status], [message], [properties]) + +Tests for deep equality between `a` and `b`. Primitive values are +compared with the Abstract Equality Comparison (`==`). If `a` and `b` +are equal, an `HttpError` is thrown that is constructed with the given +`status`, `message`, and `properties`. + +### assert.notEqual(a, b, [status], [message], [properties]) + +Tests shallow, coercive equality between `a` and `b` using the Abstract +Equality Comparison (`==`). If `a` and `b` are equal, an `HttpError` is +thrown that is constructed with the given `status`, `message`, and +`properties`. + +### assert.notStrictEqual(a, b, [status], [message], [properties]) + +Tests strict equality between `a` and `b` as determined by the SameValue +Comparison (`===`). If `a` and `b` are equal, an `HttpError` is thrown +that is constructed with the given `status`, `message`, and `properties`. + +### assert.ok(value, [status], [message], [properties]) + +Tests if `value` is truthy. If `value` is not truthy, an `HttpError` +is thrown that is constructed with the given `status`, `message`, +and `properties`. + +### assert.strictEqual(a, b, [status], [message], [properties]) + +Tests strict equality between `a` and `b` as determined by the SameValue +Comparison (`===`). If `a` and `b` are not equal, an `HttpError` +is thrown that is constructed with the given `status`, `message`, +and `properties`. + +## Licence + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/jshttp/http-assert/master?label=ci +[ci-url]: https://github.com/jshttp/http-assert/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/http-assert/master +[coveralls-url]: https://coveralls.io/r/jshttp/http-assert?branch=master +[node-version-image]: https://badgen.net/npm/node/http-assert +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/http-assert +[npm-url]: https://npmjs.org/package/http-assert +[npm-version-image]: https://badgen.net/npm/v/http-assert diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/index.js new file mode 100644 index 00000000..63903152 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/index.js @@ -0,0 +1,41 @@ +var createError = require('http-errors') +var eql = require('deep-equal') + +module.exports = assert + +function assert (value, status, msg, opts) { + if (value) return + throw createError(status, msg, opts) +} + +assert.fail = function (status, msg, opts) { + assert(false, status, msg, opts) +} + +assert.equal = function (a, b, status, msg, opts) { + assert(a == b, status, msg, opts) // eslint-disable-line eqeqeq +} + +assert.notEqual = function (a, b, status, msg, opts) { + assert(a != b, status, msg, opts) // eslint-disable-line eqeqeq +} + +assert.ok = function (value, status, msg, opts) { + assert(value, status, msg, opts) +} + +assert.strictEqual = function (a, b, status, msg, opts) { + assert(a === b, status, msg, opts) +} + +assert.notStrictEqual = function (a, b, status, msg, opts) { + assert(a !== b, status, msg, opts) +} + +assert.deepEqual = function (a, b, status, msg, opts) { + assert(eql(a, b), status, msg, opts) +} + +assert.notDeepEqual = function (a, b, status, msg, opts) { + assert(!eql(a, b), status, msg, opts) +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/package.json new file mode 100644 index 00000000..a54f565a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-assert/package.json @@ -0,0 +1,76 @@ +{ + "_args": [ + [ + "http-assert@1.5.0", + "/tmp/repository/main" + ] + ], + "_from": "http-assert@1.5.0", + "_id": "http-assert@1.5.0", + "_inBundle": false, + "_integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "_location": "/http-assert", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "http-assert@1.5.0", + "name": "http-assert", + "escapedName": "http-assert", + "rawSpec": "1.5.0", + "saveSpec": null, + "fetchSpec": "1.5.0" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "_spec": "1.5.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/jshttp/http-assert/issues" + }, + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "description": "assert with status codes", + "devDependencies": { + "eslint": "7.32.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.24.2", + "eslint-plugin-markdown": "2.2.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "4.3.1", + "eslint-plugin-standard": "4.1.0", + "istanbul": "0.4.5", + "mocha": "9.1.0" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js" + ], + "homepage": "https://github.com/jshttp/http-assert#readme", + "keywords": [ + "assert", + "http" + ], + "license": "MIT", + "name": "http-assert", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/http-assert.git" + }, + "scripts": { + "lint": "eslint .", + "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/" + }, + "version": "1.5.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/HISTORY.md new file mode 100644 index 00000000..6fa6ed33 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/HISTORY.md @@ -0,0 +1,160 @@ +2020-06-29 / 1.8.0 +================== + + * Add `isHttpError` export to determine if value is an HTTP error + * deps: setprototypeof@1.2.0 + +2019-06-24 / 1.7.3 +================== + + * deps: inherits@2.0.4 + +2019-02-18 / 1.7.2 +================== + + * deps: setprototypeof@1.1.1 + +2018-09-08 / 1.7.1 +================== + + * Fix error creating objects in some environments + +2018-07-30 / 1.7.0 +================== + + * Set constructor name when possible + * Use `toidentifier` module to make class names + * deps: statuses@'>= 1.5.0 < 2' + +2018-03-29 / 1.6.3 +================== + + * deps: depd@~1.1.2 + - perf: remove argument reassignment + * deps: setprototypeof@1.1.0 + * deps: statuses@'>= 1.4.0 < 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/LICENSE new file mode 100644 index 00000000..82af4df5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/LICENSE @@ -0,0 +1,23 @@ + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/README.md new file mode 100644 index 00000000..0363bb7c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/README.md @@ -0,0 +1,171 @@ +# http-errors + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][node-url] +[![Node.js Version][node-image]][node-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. + +### 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]) + +Create a new error object with the given message `msg`. +The error object inherits from `createError.HttpError`. + + + +```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 + +### createError([status], [error], [properties]) + +Extend the given `error` object with `createError.HttpError` +properties. This will not alter the inheritance of the given +`error` object, and the modified `error` object is the +return value. + + + +```js +fs.readFile('foo.txt', function (err, buf) { + if (err) { + if (err.code === 'ENOENT') { + var httpError = createError(404, err, { expose: false }) + } else { + var httpError = createError(500, err) + } + } +}) +``` + +- `status` - the status code as a number +- `error` - the error object to extend +- `properties` - custom properties to attach to the object + +### createError.isHttpError(val) + +Determine if the provided `val` is an `HttpError`. This will return `true` +if the error inherits from the `HttpError` constructor of this module or +matches the "duck type" for an error this module creates. All outputs from +the `createError` factory will return `true` for this function, including +if an non-`HttpError` was passed into the factory. + +### new createError\[code || name\](\[msg]\)) + +Create a new error object with the given message `msg`. +The error object inherits from `createError.HttpError`. + + + +```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) + +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/http-errors/master +[coveralls-url]: https://coveralls.io/r/jshttp/http-errors?branch=master +[node-image]: https://badgen.net/npm/node/http-errors +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/http-errors +[npm-url]: https://npmjs.org/package/http-errors +[npm-version-image]: https://badgen.net/npm/v/http-errors +[travis-image]: https://badgen.net/travis/jshttp/http-errors/master +[travis-url]: https://travis-ci.org/jshttp/http-errors diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/index.js new file mode 100644 index 00000000..1a88029a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/index.js @@ -0,0 +1,299 @@ +/*! + * 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') +var toIdentifier = require('toidentifier') + +/** + * Module exports. + * @public + */ + +module.exports = createError +module.exports.HttpError = createHttpErrorConstructor() +module.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError) + +// 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 = toClassName(name) + + 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) + nameFunc(ClientError, className) + + ClientError.prototype.status = code + ClientError.prototype.statusCode = code + ClientError.prototype.expose = true + + return ClientError +} + +/** + * Create function to test is a value is a HttpError. + * @private + */ + +function createIsHttpErrorFunction (HttpError) { + return function isHttpError (val) { + if (!val || typeof val !== 'object') { + return false + } + + if (val instanceof HttpError) { + return true + } + + return val instanceof Error && + typeof val.expose === 'boolean' && + typeof val.statusCode === 'number' && val.status === val.statusCode + } +} + +/** + * Create a constructor for a server error. + * @private + */ + +function createServerErrorConstructor (HttpError, name, code) { + var className = toClassName(name) + + 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) + nameFunc(ServerError, className) + + ServerError.prototype.status = code + ServerError.prototype.statusCode = code + ServerError.prototype.expose = false + + return ServerError +} + +/** + * Set the name of a function, if possible. + * @private + */ + +function nameFunc (func, name) { + var desc = Object.getOwnPropertyDescriptor(func, 'name') + + if (desc && desc.configurable) { + desc.value = name + Object.defineProperty(func, 'name', desc) + } +} + +/** + * 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') +} + +/** + * Get a class name from a name identifier. + * @private + */ + +function toClassName (name) { + return name.substr(-5) !== 'Error' + ? name + 'Error' + : name +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/package.json new file mode 100644 index 00000000..eb979ce9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-errors/package.json @@ -0,0 +1,97 @@ +{ + "_args": [ + [ + "http-errors@1.8.0", + "/tmp/repository/main" + ] + ], + "_from": "http-errors@1.8.0", + "_id": "http-errors@1.8.0", + "_inBundle": false, + "_integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", + "_location": "/http-errors", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "http-errors@1.8.0", + "name": "http-errors", + "escapedName": "http-errors", + "rawSpec": "1.8.0", + "saveSpec": null, + "fetchSpec": "1.8.0" + }, + "_requiredBy": [ + "/@koa/router", + "/http-assert", + "/koa", + "/koa-send" + ], + "_resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", + "_spec": "1.8.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "bugs": { + "url": "https://github.com/jshttp/http-errors/issues" + }, + "contributors": [ + { + "name": "Alan Plum", + "email": "me@pluma.io" + }, + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "description": "Create HTTP error objects", + "devDependencies": { + "eslint": "6.8.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.22.0", + "eslint-plugin-markdown": "1.0.2", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "4.2.1", + "eslint-plugin-standard": "4.0.1", + "mocha": "8.0.1", + "nyc": "15.1.0" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "index.js", + "HISTORY.md", + "LICENSE", + "README.md" + ], + "homepage": "https://github.com/jshttp/http-errors#readme", + "keywords": [ + "http", + "error" + ], + "license": "MIT", + "name": "http-errors", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/http-errors.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md . && node ./scripts/lint-readme-list.js", + "test": "mocha --reporter spec --bail", + "test-ci": "nyc --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + }, + "version": "1.8.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/README.md new file mode 100644 index 00000000..d60e2066 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/README.md @@ -0,0 +1,74 @@ +http-proxy-agent +================ +### An HTTP(s) proxy `http.Agent` implementation for HTTP +[![Build Status](https://github.com/TooTallNate/node-http-proxy-agent/workflows/Node%20CI/badge.svg)](https://github.com/TooTallNate/node-http-proxy-agent/actions?workflow=Node+CI) + +This module provides an `http.Agent` implementation that connects to a specified +HTTP or HTTPS proxy server, and can be used with the built-in `http` module. + +__Note:__ For HTTP proxy usage with the `https` module, check out +[`node-https-proxy-agent`](https://github.com/TooTallNate/node-https-proxy-agent). + +Installation +------------ + +Install with `npm`: + +``` bash +$ npm install http-proxy-agent +``` + + +Example +------- + +``` js +var url = require('url'); +var http = require('http'); +var HttpProxyAgent = require('http-proxy-agent'); + +// HTTP/HTTPS proxy to connect to +var proxy = process.env.http_proxy || 'http://168.63.76.32:3128'; +console.log('using proxy server %j', proxy); + +// HTTP endpoint for the proxy to connect to +var endpoint = process.argv[2] || 'http://nodejs.org/api/'; +console.log('attempting to GET %j', endpoint); +var opts = url.parse(endpoint); + +// create an instance of the `HttpProxyAgent` class with the proxy server information +var agent = new HttpProxyAgent(proxy); +opts.agent = agent; + +http.get(opts, function (res) { + console.log('"response" event!', res.headers); + res.pipe(process.stdout); +}); +``` + + +License +------- + +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net> + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/dist/agent.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/dist/agent.js new file mode 100644 index 00000000..02528505 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/dist/agent.js @@ -0,0 +1,145 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const net_1 = __importDefault(require("net")); +const tls_1 = __importDefault(require("tls")); +const url_1 = __importDefault(require("url")); +const debug_1 = __importDefault(require("debug")); +const once_1 = __importDefault(require("@tootallnate/once")); +const agent_base_1 = require("agent-base"); +const debug = debug_1.default('http-proxy-agent'); +function isHTTPS(protocol) { + return typeof protocol === 'string' ? /^https:?$/i.test(protocol) : false; +} +/** + * The `HttpProxyAgent` implements an HTTP Agent subclass that connects + * to the specified "HTTP proxy server" in order to proxy HTTP requests. + * + * @api public + */ +class HttpProxyAgent extends agent_base_1.Agent { + constructor(_opts) { + let opts; + if (typeof _opts === 'string') { + opts = url_1.default.parse(_opts); + } + else { + opts = _opts; + } + if (!opts) { + throw new Error('an HTTP(S) proxy server `host` and `port` must be specified!'); + } + debug('Creating new HttpProxyAgent instance: %o', opts); + super(opts); + const proxy = Object.assign({}, opts); + // If `true`, then connect to the proxy server over TLS. + // Defaults to `false`. + this.secureProxy = opts.secureProxy || isHTTPS(proxy.protocol); + // Prefer `hostname` over `host`, and set the `port` if needed. + proxy.host = proxy.hostname || proxy.host; + if (typeof proxy.port === 'string') { + proxy.port = parseInt(proxy.port, 10); + } + if (!proxy.port && proxy.host) { + proxy.port = this.secureProxy ? 443 : 80; + } + if (proxy.host && proxy.path) { + // If both a `host` and `path` are specified then it's most likely + // the result of a `url.parse()` call... we need to remove the + // `path` portion so that `net.connect()` doesn't attempt to open + // that as a Unix socket file. + delete proxy.path; + delete proxy.pathname; + } + this.proxy = proxy; + } + /** + * Called when the node-core HTTP client library is creating a + * new HTTP request. + * + * @api protected + */ + callback(req, opts) { + return __awaiter(this, void 0, void 0, function* () { + const { proxy, secureProxy } = this; + const parsed = url_1.default.parse(req.path); + if (!parsed.protocol) { + parsed.protocol = 'http:'; + } + if (!parsed.hostname) { + parsed.hostname = opts.hostname || opts.host || null; + } + if (parsed.port == null && typeof opts.port) { + parsed.port = String(opts.port); + } + if (parsed.port === '80') { + // if port is 80, then we can remove the port so that the + // ":80" portion is not on the produced URL + delete parsed.port; + } + // Change the `http.ClientRequest` instance's "path" field + // to the absolute path of the URL that will be requested. + req.path = url_1.default.format(parsed); + // Inject the `Proxy-Authorization` header if necessary. + if (proxy.auth) { + req.setHeader('Proxy-Authorization', `Basic ${Buffer.from(proxy.auth).toString('base64')}`); + } + // Create a socket connection to the proxy server. + let socket; + if (secureProxy) { + debug('Creating `tls.Socket`: %o', proxy); + socket = tls_1.default.connect(proxy); + } + else { + debug('Creating `net.Socket`: %o', proxy); + socket = net_1.default.connect(proxy); + } + // At this point, the http ClientRequest's internal `_header` field + // might have already been set. If this is the case then we'll need + // to re-generate the string since we just changed the `req.path`. + if (req._header) { + let first; + let endOfHeaders; + debug('Regenerating stored HTTP header string for request'); + req._header = null; + req._implicitHeader(); + if (req.output && req.output.length > 0) { + // Node < 12 + debug('Patching connection write() output buffer with updated header'); + first = req.output[0]; + endOfHeaders = first.indexOf('\r\n\r\n') + 4; + req.output[0] = req._header + first.substring(endOfHeaders); + debug('Output buffer: %o', req.output); + } + else if (req.outputData && req.outputData.length > 0) { + // Node >= 12 + debug('Patching connection write() output buffer with updated header'); + first = req.outputData[0].data; + endOfHeaders = first.indexOf('\r\n\r\n') + 4; + req.outputData[0].data = + req._header + first.substring(endOfHeaders); + debug('Output buffer: %o', req.outputData[0].data); + } + } + // Wait for the socket's `connect` event, so that this `callback()` + // function throws instead of the `http` request machinery. This is + // important for i.e. `PacProxyAgent` which determines a failed proxy + // connection via the `callback()` function throwing. + yield once_1.default(socket, 'connect'); + return socket; + }); + } +} +exports.default = HttpProxyAgent; +//# sourceMappingURL=agent.js.map \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/dist/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/dist/index.js new file mode 100644 index 00000000..0a711805 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/dist/index.js @@ -0,0 +1,14 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +const agent_1 = __importDefault(require("./agent")); +function createHttpProxyAgent(opts) { + return new agent_1.default(opts); +} +(function (createHttpProxyAgent) { + createHttpProxyAgent.HttpProxyAgent = agent_1.default; + createHttpProxyAgent.prototype = agent_1.default.prototype; +})(createHttpProxyAgent || (createHttpProxyAgent = {})); +module.exports = createHttpProxyAgent; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/package.json new file mode 100644 index 00000000..91355216 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/http-proxy-agent/package.json @@ -0,0 +1,91 @@ +{ + "_args": [ + [ + "http-proxy-agent@4.0.1", + "/tmp/repository/main" + ] + ], + "_from": "http-proxy-agent@4.0.1", + "_id": "http-proxy-agent@4.0.1", + "_inBundle": false, + "_integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "_location": "/http-proxy-agent", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "http-proxy-agent@4.0.1", + "name": "http-proxy-agent", + "escapedName": "http-proxy-agent", + "rawSpec": "4.0.1", + "saveSpec": null, + "fetchSpec": "4.0.1" + }, + "_requiredBy": [ + "/@vscode/test-web", + "/vscode-test" + ], + "_resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "_spec": "4.0.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io/" + }, + "bugs": { + "url": "https://github.com/TooTallNate/node-http-proxy-agent/issues" + }, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "description": "An HTTP(s) proxy `http.Agent` implementation for HTTP", + "devDependencies": { + "@types/debug": "4", + "@types/node": "^12.12.11", + "@typescript-eslint/eslint-plugin": "1.6.0", + "@typescript-eslint/parser": "1.1.0", + "eslint": "5.16.0", + "eslint-config-airbnb": "17.1.0", + "eslint-config-prettier": "4.1.0", + "eslint-import-resolver-typescript": "1.1.1", + "eslint-plugin-import": "2.16.0", + "eslint-plugin-jsx-a11y": "6.2.1", + "eslint-plugin-react": "7.12.4", + "mocha": "^6.2.2", + "proxy": "1", + "rimraf": "^3.0.0", + "typescript": "^3.5.3" + }, + "engines": { + "node": ">= 6" + }, + "files": [ + "dist" + ], + "homepage": "https://github.com/TooTallNate/node-http-proxy-agent#readme", + "keywords": [ + "http", + "proxy", + "endpoint", + "agent" + ], + "license": "MIT", + "main": "./dist/index.js", + "name": "http-proxy-agent", + "repository": { + "type": "git", + "url": "git://github.com/TooTallNate/node-http-proxy-agent.git" + }, + "scripts": { + "build": "tsc", + "prebuild": "rimraf dist", + "prepublishOnly": "npm run build", + "test": "mocha", + "test-lint": "eslint src --ext .js,.ts" + }, + "types": "./dist/index.d.ts", + "version": "4.0.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/README.md new file mode 100644 index 00000000..328656a9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/README.md @@ -0,0 +1,137 @@ +https-proxy-agent +================ +### An HTTP(s) proxy `http.Agent` implementation for HTTPS +[![Build Status](https://github.com/TooTallNate/node-https-proxy-agent/workflows/Node%20CI/badge.svg)](https://github.com/TooTallNate/node-https-proxy-agent/actions?workflow=Node+CI) + +This module provides an `http.Agent` implementation that connects to a specified +HTTP or HTTPS proxy server, and can be used with the built-in `https` module. + +Specifically, this `Agent` implementation connects to an intermediary "proxy" +server and issues the [CONNECT HTTP method][CONNECT], which tells the proxy to +open a direct TCP connection to the destination server. + +Since this agent implements the CONNECT HTTP method, it also works with other +protocols that use this method when connecting over proxies (i.e. WebSockets). +See the "Examples" section below for more. + + +Installation +------------ + +Install with `npm`: + +``` bash +$ npm install https-proxy-agent +``` + + +Examples +-------- + +#### `https` module example + +``` js +var url = require('url'); +var https = require('https'); +var HttpsProxyAgent = require('https-proxy-agent'); + +// HTTP/HTTPS proxy to connect to +var proxy = process.env.http_proxy || 'http://168.63.76.32:3128'; +console.log('using proxy server %j', proxy); + +// HTTPS endpoint for the proxy to connect to +var endpoint = process.argv[2] || 'https://graph.facebook.com/tootallnate'; +console.log('attempting to GET %j', endpoint); +var options = url.parse(endpoint); + +// create an instance of the `HttpsProxyAgent` class with the proxy server information +var agent = new HttpsProxyAgent(proxy); +options.agent = agent; + +https.get(options, function (res) { + console.log('"response" event!', res.headers); + res.pipe(process.stdout); +}); +``` + +#### `ws` WebSocket connection example + +``` js +var url = require('url'); +var WebSocket = require('ws'); +var HttpsProxyAgent = require('https-proxy-agent'); + +// HTTP/HTTPS proxy to connect to +var proxy = process.env.http_proxy || 'http://168.63.76.32:3128'; +console.log('using proxy server %j', proxy); + +// WebSocket endpoint for the proxy to connect to +var endpoint = process.argv[2] || 'ws://echo.websocket.org'; +var parsed = url.parse(endpoint); +console.log('attempting to connect to WebSocket %j', endpoint); + +// create an instance of the `HttpsProxyAgent` class with the proxy server information +var options = url.parse(proxy); + +var agent = new HttpsProxyAgent(options); + +// finally, initiate the WebSocket connection +var socket = new WebSocket(endpoint, { agent: agent }); + +socket.on('open', function () { + console.log('"open" event!'); + socket.send('hello world'); +}); + +socket.on('message', function (data, flags) { + console.log('"message" event! %j %j', data, flags); + socket.close(); +}); +``` + +API +--- + +### new HttpsProxyAgent(Object options) + +The `HttpsProxyAgent` class implements an `http.Agent` subclass that connects +to the specified "HTTP(s) proxy server" in order to proxy HTTPS and/or WebSocket +requests. This is achieved by using the [HTTP `CONNECT` method][CONNECT]. + +The `options` argument may either be a string URI of the proxy server to use, or an +"options" object with more specific properties: + + * `host` - String - Proxy host to connect to (may use `hostname` as well). Required. + * `port` - Number - Proxy port to connect to. Required. + * `protocol` - String - If `https:`, then use TLS to connect to the proxy. + * `headers` - Object - Additional HTTP headers to be sent on the HTTP CONNECT method. + * Any other options given are passed to the `net.connect()`/`tls.connect()` functions. + + +License +------- + +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net> + +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. + +[CONNECT]: http://en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_Tunneling diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/dist/agent.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/dist/agent.js new file mode 100644 index 00000000..d6665259 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/dist/agent.js @@ -0,0 +1,180 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const net_1 = __importDefault(require("net")); +const tls_1 = __importDefault(require("tls")); +const url_1 = __importDefault(require("url")); +const assert_1 = __importDefault(require("assert")); +const debug_1 = __importDefault(require("debug")); +const agent_base_1 = require("agent-base"); +const parse_proxy_response_1 = __importDefault(require("./parse-proxy-response")); +const debug = debug_1.default('https-proxy-agent:agent'); +/** + * The `HttpsProxyAgent` implements an HTTP Agent subclass that connects to + * the specified "HTTP(s) proxy server" in order to proxy HTTPS requests. + * + * Outgoing HTTP requests are first tunneled through the proxy server using the + * `CONNECT` HTTP request method to establish a connection to the proxy server, + * and then the proxy server connects to the destination target and issues the + * HTTP request from the proxy server. + * + * `https:` requests have their socket connection upgraded to TLS once + * the connection to the proxy server has been established. + * + * @api public + */ +class HttpsProxyAgent extends agent_base_1.Agent { + constructor(_opts) { + let opts; + if (typeof _opts === 'string') { + opts = url_1.default.parse(_opts); + } + else { + opts = _opts; + } + if (!opts) { + throw new Error('an HTTP(S) proxy server `host` and `port` must be specified!'); + } + debug('creating new HttpsProxyAgent instance: %o', opts); + super(opts); + const proxy = Object.assign({}, opts); + // If `true`, then connect to the proxy server over TLS. + // Defaults to `false`. + this.secureProxy = opts.secureProxy || isHTTPS(proxy.protocol); + // Prefer `hostname` over `host`, and set the `port` if needed. + proxy.host = proxy.hostname || proxy.host; + if (typeof proxy.port === 'string') { + proxy.port = parseInt(proxy.port, 10); + } + if (!proxy.port && proxy.host) { + proxy.port = this.secureProxy ? 443 : 80; + } + // ALPN is supported by Node.js >= v5. + // attempt to negotiate http/1.1 for proxy servers that support http/2 + if (this.secureProxy && !('ALPNProtocols' in proxy)) { + proxy.ALPNProtocols = ['http 1.1']; + } + if (proxy.host && proxy.path) { + // If both a `host` and `path` are specified then it's most likely + // the result of a `url.parse()` call... we need to remove the + // `path` portion so that `net.connect()` doesn't attempt to open + // that as a Unix socket file. + delete proxy.path; + delete proxy.pathname; + } + this.proxy = proxy; + } + /** + * Called when the node-core HTTP client library is creating a + * new HTTP request. + * + * @api protected + */ + callback(req, opts) { + return __awaiter(this, void 0, void 0, function* () { + const { proxy, secureProxy } = this; + // Create a socket connection to the proxy server. + let socket; + if (secureProxy) { + debug('Creating `tls.Socket`: %o', proxy); + socket = tls_1.default.connect(proxy); + } + else { + debug('Creating `net.Socket`: %o', proxy); + socket = net_1.default.connect(proxy); + } + const headers = Object.assign({}, proxy.headers); + const hostname = `${opts.host}:${opts.port}`; + let payload = `CONNECT ${hostname} HTTP/1.1\r\n`; + // Inject the `Proxy-Authorization` header if necessary. + if (proxy.auth) { + headers['Proxy-Authorization'] = `Basic ${Buffer.from(proxy.auth).toString('base64')}`; + } + // The `Host` header should only include the port + // number when it is not the default port. + let { host, port, secureEndpoint } = opts; + if (!isDefaultPort(port, secureEndpoint)) { + host += `:${port}`; + } + headers.Host = host; + headers.Connection = 'close'; + for (const name of Object.keys(headers)) { + payload += `${name}: ${headers[name]}\r\n`; + } + const proxyResponsePromise = parse_proxy_response_1.default(socket); + socket.write(`${payload}\r\n`); + const { statusCode, buffered } = yield proxyResponsePromise; + if (statusCode === 200) { + req.once('socket', resume); + if (opts.secureEndpoint) { + const servername = opts.servername || opts.host; + if (!servername) { + throw new Error('Could not determine "servername"'); + } + // The proxy is connecting to a TLS server, so upgrade + // this socket connection to a TLS connection. + debug('Upgrading socket connection to TLS'); + return tls_1.default.connect(Object.assign(Object.assign({}, omit(opts, 'host', 'hostname', 'path', 'port')), { socket, + servername })); + } + return socket; + } + // Some other status code that's not 200... need to re-play the HTTP + // header "data" events onto the socket once the HTTP machinery is + // attached so that the node core `http` can parse and handle the + // error status code. + // Close the original socket, and a new "fake" socket is returned + // instead, so that the proxy doesn't get the HTTP request + // written to it (which may contain `Authorization` headers or other + // sensitive data). + // + // See: https://hackerone.com/reports/541502 + socket.destroy(); + const fakeSocket = new net_1.default.Socket(); + fakeSocket.readable = true; + // Need to wait for the "socket" event to re-play the "data" events. + req.once('socket', (s) => { + debug('replaying proxy buffer for failed request'); + assert_1.default(s.listenerCount('data') > 0); + // Replay the "buffered" Buffer onto the fake `socket`, since at + // this point the HTTP module machinery has been hooked up for + // the user. + s.push(buffered); + s.push(null); + }); + return fakeSocket; + }); + } +} +exports.default = HttpsProxyAgent; +function resume(socket) { + socket.resume(); +} +function isDefaultPort(port, secure) { + return Boolean((!secure && port === 80) || (secure && port === 443)); +} +function isHTTPS(protocol) { + return typeof protocol === 'string' ? /^https:?$/i.test(protocol) : false; +} +function omit(obj, ...keys) { + const ret = {}; + let key; + for (key in obj) { + if (!keys.includes(key)) { + ret[key] = obj[key]; + } + } + return ret; +} +//# sourceMappingURL=agent.js.map \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/dist/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/dist/index.js new file mode 100644 index 00000000..b03e7631 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/dist/index.js @@ -0,0 +1,14 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +const agent_1 = __importDefault(require("./agent")); +function createHttpsProxyAgent(opts) { + return new agent_1.default(opts); +} +(function (createHttpsProxyAgent) { + createHttpsProxyAgent.HttpsProxyAgent = agent_1.default; + createHttpsProxyAgent.prototype = agent_1.default.prototype; +})(createHttpsProxyAgent || (createHttpsProxyAgent = {})); +module.exports = createHttpsProxyAgent; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/dist/parse-proxy-response.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/dist/parse-proxy-response.js new file mode 100644 index 00000000..aa5ce3cc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/dist/parse-proxy-response.js @@ -0,0 +1,66 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const debug_1 = __importDefault(require("debug")); +const debug = debug_1.default('https-proxy-agent:parse-proxy-response'); +function parseProxyResponse(socket) { + return new Promise((resolve, reject) => { + // we need to buffer any HTTP traffic that happens with the proxy before we get + // the CONNECT response, so that if the response is anything other than an "200" + // response code, then we can re-play the "data" events on the socket once the + // HTTP parser is hooked up... + let buffersLength = 0; + const buffers = []; + function read() { + const b = socket.read(); + if (b) + ondata(b); + else + socket.once('readable', read); + } + function cleanup() { + socket.removeListener('end', onend); + socket.removeListener('error', onerror); + socket.removeListener('close', onclose); + socket.removeListener('readable', read); + } + function onclose(err) { + debug('onclose had error %o', err); + } + function onend() { + debug('onend'); + } + function onerror(err) { + cleanup(); + debug('onerror %o', err); + reject(err); + } + function ondata(b) { + buffers.push(b); + buffersLength += b.length; + const buffered = Buffer.concat(buffers, buffersLength); + const endOfHeaders = buffered.indexOf('\r\n\r\n'); + if (endOfHeaders === -1) { + // keep buffering + debug('have not received end of HTTP headers yet...'); + read(); + return; + } + const firstLine = buffered.toString('ascii', 0, buffered.indexOf('\r\n')); + const statusCode = +firstLine.split(' ')[1]; + debug('got proxy server response: %o', firstLine); + resolve({ + statusCode, + buffered + }); + } + socket.on('error', onerror); + socket.on('close', onclose); + socket.on('end', onend); + read(); + }); +} +exports.default = parseProxyResponse; +//# sourceMappingURL=parse-proxy-response.js.map \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/package.json new file mode 100644 index 00000000..f9779ca2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/https-proxy-agent/package.json @@ -0,0 +1,91 @@ +{ + "_args": [ + [ + "https-proxy-agent@5.0.0", + "/tmp/repository/main" + ] + ], + "_from": "https-proxy-agent@5.0.0", + "_id": "https-proxy-agent@5.0.0", + "_inBundle": false, + "_integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "_location": "/https-proxy-agent", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "https-proxy-agent@5.0.0", + "name": "https-proxy-agent", + "escapedName": "https-proxy-agent", + "rawSpec": "5.0.0", + "saveSpec": null, + "fetchSpec": "5.0.0" + }, + "_requiredBy": [ + "/@vscode/test-web", + "/playwright", + "/vscode-test" + ], + "_resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "_spec": "5.0.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io/" + }, + "bugs": { + "url": "https://github.com/TooTallNate/node-https-proxy-agent/issues" + }, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "description": "An HTTP(s) proxy `http.Agent` implementation for HTTPS", + "devDependencies": { + "@types/debug": "4", + "@types/node": "^12.12.11", + "@typescript-eslint/eslint-plugin": "1.6.0", + "@typescript-eslint/parser": "1.1.0", + "eslint": "5.16.0", + "eslint-config-airbnb": "17.1.0", + "eslint-config-prettier": "4.1.0", + "eslint-import-resolver-typescript": "1.1.1", + "eslint-plugin-import": "2.16.0", + "eslint-plugin-jsx-a11y": "6.2.1", + "eslint-plugin-react": "7.12.4", + "mocha": "^6.2.2", + "proxy": "1", + "rimraf": "^3.0.0", + "typescript": "^3.5.3" + }, + "engines": { + "node": ">= 6" + }, + "files": [ + "dist" + ], + "homepage": "https://github.com/TooTallNate/node-https-proxy-agent#readme", + "keywords": [ + "https", + "proxy", + "endpoint", + "agent" + ], + "license": "MIT", + "main": "dist/index", + "name": "https-proxy-agent", + "repository": { + "type": "git", + "url": "git://github.com/TooTallNate/node-https-proxy-agent.git" + }, + "scripts": { + "build": "tsc", + "prebuild": "rimraf dist", + "prepublishOnly": "npm run build", + "test": "mocha --reporter spec", + "test-lint": "eslint src --ext .js,.ts" + }, + "types": "dist/index", + "version": "5.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/LICENSE new file mode 100644 index 00000000..5aac82c7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/LICENSE @@ -0,0 +1,11 @@ +Copyright 2008 Fair Oaks Labs, Inc. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. 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. + +3. Neither the name of the copyright holder 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 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/README.md new file mode 100644 index 00000000..cb7527b3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/README.md @@ -0,0 +1,51 @@ +# ieee754 [![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/ieee754/master.svg +[travis-url]: https://travis-ci.org/feross/ieee754 +[npm-image]: https://img.shields.io/npm/v/ieee754.svg +[npm-url]: https://npmjs.org/package/ieee754 +[downloads-image]: https://img.shields.io/npm/dm/ieee754.svg +[downloads-url]: https://npmjs.org/package/ieee754 +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +[![saucelabs][saucelabs-image]][saucelabs-url] + +[saucelabs-image]: https://saucelabs.com/browser-matrix/ieee754.svg +[saucelabs-url]: https://saucelabs.com/u/ieee754 + +### Read/write IEEE754 floating point numbers from/to a Buffer or array-like object. + +## install + +``` +npm install ieee754 +``` + +## methods + +`var ieee754 = require('ieee754')` + +The `ieee754` object has the following functions: + +``` +ieee754.read = function (buffer, offset, isLE, mLen, nBytes) +ieee754.write = function (buffer, value, offset, isLE, mLen, nBytes) +``` + +The arguments mean the following: + +- buffer = the buffer +- offset = offset into the buffer +- value = value to set (only for `write`) +- isLe = is little endian? +- mLen = mantissa length +- nBytes = number of bytes + +## what is ieee754? + +The IEEE Standard for Floating-Point Arithmetic (IEEE 754) is a technical standard for floating-point computation. [Read more](http://en.wikipedia.org/wiki/IEEE_floating_point). + +## license + +BSD 3 Clause. Copyright (c) 2008, Fair Oaks Labs, Inc. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/index.js new file mode 100644 index 00000000..81d26c34 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/index.js @@ -0,0 +1,85 @@ +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/package.json new file mode 100644 index 00000000..ab5c9f66 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ieee754/package.json @@ -0,0 +1,87 @@ +{ + "_args": [ + [ + "ieee754@1.2.1", + "/tmp/repository/main" + ] + ], + "_from": "ieee754@1.2.1", + "_id": "ieee754@1.2.1", + "_inBundle": false, + "_integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "_location": "/ieee754", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "ieee754@1.2.1", + "name": "ieee754", + "escapedName": "ieee754", + "rawSpec": "1.2.1", + "saveSpec": null, + "fetchSpec": "1.2.1" + }, + "_requiredBy": [ + "/buffer" + ], + "_resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "_spec": "1.2.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "https://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/ieee754/issues" + }, + "contributors": [ + { + "name": "Romain Beauxis", + "email": "toots@rastageeks.org" + } + ], + "description": "Read/write IEEE754 floating point numbers from/to a Buffer or array-like object", + "devDependencies": { + "airtap": "^3.0.0", + "standard": "*", + "tape": "^5.0.1" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "homepage": "https://github.com/feross/ieee754#readme", + "keywords": [ + "IEEE 754", + "buffer", + "convert", + "floating point", + "ieee754" + ], + "license": "BSD-3-Clause", + "main": "index.js", + "name": "ieee754", + "repository": { + "type": "git", + "url": "git://github.com/feross/ieee754.git" + }, + "scripts": { + "test": "standard && npm run test-node && npm run test-browser", + "test-browser": "airtap -- test/*.js", + "test-browser-local": "airtap --local -- test/*.js", + "test-node": "tape test/*.js" + }, + "types": "index.d.ts", + "version": "1.2.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/LICENSE new file mode 100644 index 00000000..05eeeb88 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/LICENSE @@ -0,0 +1,15 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/README.md new file mode 100644 index 00000000..6dc89291 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/README.md @@ -0,0 +1,37 @@ +# inflight + +Add callbacks to requests in flight to avoid async duplication + +## USAGE + +```javascript +var inflight = require('inflight') + +// some request that does some stuff +function req(key, callback) { + // key is any random string. like a url or filename or whatever. + // + // will return either a falsey value, indicating that the + // request for this key is already in flight, or a new callback + // which when called will call all callbacks passed to inflightk + // with the same key + callback = inflight(key, callback) + + // If we got a falsey value back, then there's already a req going + if (!callback) return + + // this is where you'd fetch the url or whatever + // callback is also once()-ified, so it can safely be assigned + // to multiple events etc. First call wins. + setTimeout(function() { + callback(null, key) + }, 100) +} + +// only assigns a single setTimeout +// when it dings, all cbs get called +req('foo', cb1) +req('foo', cb2) +req('foo', cb3) +req('foo', cb4) +``` diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/inflight.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/inflight.js new file mode 100644 index 00000000..48202b3c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/inflight.js @@ -0,0 +1,54 @@ +var wrappy = require('wrappy') +var reqs = Object.create(null) +var once = require('once') + +module.exports = wrappy(inflight) + +function inflight (key, cb) { + if (reqs[key]) { + reqs[key].push(cb) + return null + } else { + reqs[key] = [cb] + return makeres(key) + } +} + +function makeres (key) { + return once(function RES () { + var cbs = reqs[key] + var len = cbs.length + var args = slice(arguments) + + // XXX It's somewhat ambiguous whether a new callback added in this + // pass should be queued for later execution if something in the + // list of callbacks throws, or if it should just be discarded. + // However, it's such an edge case that it hardly matters, and either + // choice is likely as surprising as the other. + // As it happens, we do go ahead and schedule it for later execution. + try { + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args) + } + } finally { + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len) + process.nextTick(function () { + RES.apply(null, args) + }) + } else { + delete reqs[key] + } + } + }) +} + +function slice (args) { + var length = args.length + var array = [] + + for (var i = 0; i < length; i++) array[i] = args[i] + return array +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/package.json new file mode 100644 index 00000000..a5e18ba5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inflight/package.json @@ -0,0 +1,61 @@ +{ + "_args": [ + [ + "inflight@1.0.6", + "/tmp/repository/main" + ] + ], + "_from": "inflight@1.0.6", + "_id": "inflight@1.0.6", + "_inBundle": false, + "_integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "_location": "/inflight", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "inflight@1.0.6", + "name": "inflight", + "escapedName": "inflight", + "rawSpec": "1.0.6", + "saveSpec": null, + "fetchSpec": "1.0.6" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "_spec": "1.0.6", + "_where": "/tmp/repository/main", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/inflight/issues" + }, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + }, + "description": "Add callbacks to requests in flight to avoid async duplication", + "devDependencies": { + "tap": "^7.1.2" + }, + "files": [ + "inflight.js" + ], + "homepage": "https://github.com/isaacs/inflight", + "license": "ISC", + "main": "inflight.js", + "name": "inflight", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/inflight.git" + }, + "scripts": { + "test": "tap test.js --100" + }, + "version": "1.0.6" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/LICENSE new file mode 100644 index 00000000..dea3013d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/LICENSE @@ -0,0 +1,16 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/README.md new file mode 100644 index 00000000..b1c56658 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/README.md @@ -0,0 +1,42 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/inherits.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/inherits.js new file mode 100644 index 00000000..f71f2d93 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/inherits.js @@ -0,0 +1,9 @@ +try { + var util = require('util'); + /* istanbul ignore next */ + if (typeof util.inherits !== 'function') throw ''; + module.exports = util.inherits; +} catch (e) { + /* istanbul ignore next */ + module.exports = require('./inherits_browser.js'); +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/inherits_browser.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/inherits_browser.js new file mode 100644 index 00000000..86bbb3dc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/inherits_browser.js @@ -0,0 +1,27 @@ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + if (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) { + if (superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/package.json new file mode 100644 index 00000000..064e546c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/inherits/package.json @@ -0,0 +1,67 @@ +{ + "_args": [ + [ + "inherits@2.0.4", + "/tmp/repository/main" + ] + ], + "_from": "inherits@2.0.4", + "_id": "inherits@2.0.4", + "_inBundle": false, + "_integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "_location": "/inherits", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "inherits@2.0.4", + "name": "inherits", + "escapedName": "inherits", + "rawSpec": "2.0.4", + "saveSpec": null, + "fetchSpec": "2.0.4" + }, + "_requiredBy": [ + "/fstream", + "/glob", + "/http-errors", + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "_spec": "2.0.4", + "_where": "/tmp/repository/main", + "browser": "./inherits_browser.js", + "bugs": { + "url": "https://github.com/isaacs/inherits/issues" + }, + "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", + "devDependencies": { + "tap": "^14.2.4" + }, + "files": [ + "inherits.js", + "inherits_browser.js" + ], + "homepage": "https://github.com/isaacs/inherits#readme", + "keywords": [ + "inheritance", + "class", + "klass", + "oop", + "object-oriented", + "inherits", + "browser", + "browserify" + ], + "license": "ISC", + "main": "./inherits.js", + "name": "inherits", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/inherits.git" + }, + "scripts": { + "test": "tap" + }, + "version": "2.0.4" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.eslintignore b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.eslintignore new file mode 100644 index 00000000..404abb22 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.eslintignore @@ -0,0 +1 @@ +coverage/ diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.eslintrc b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.eslintrc new file mode 100644 index 00000000..d7f41a52 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.eslintrc @@ -0,0 +1,9 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "no-new-func": 1 + }, +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.nvmrc b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.nvmrc new file mode 100644 index 00000000..64f5a0a6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.nvmrc @@ -0,0 +1 @@ +node diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.nycrc b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.nycrc new file mode 100644 index 00000000..bdd626ce --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/CHANGELOG.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/CHANGELOG.md new file mode 100644 index 00000000..25b705ca --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/CHANGELOG.md @@ -0,0 +1,216 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.10](https://github.com/inspect-js/is-generator-function/compare/v1.0.9...v1.0.10) - 2021-08-05 + +### Commits + +- [Dev Deps] update `eslint`, `auto-changelog`, `core-js`, `tape` [`63cd935`](https://github.com/inspect-js/is-generator-function/commit/63cd9353eead5ad5eb8cf581fc4129841641bb43) +- [Fix] use `has-tostringtag` to behave correctly in the presence of symbol shams [`8c3fe76`](https://github.com/inspect-js/is-generator-function/commit/8c3fe76b546fbc5085381df65800e4fc67e25ede) +- [Dev Deps] unpin `core-js` v3 [`ebf2885`](https://github.com/inspect-js/is-generator-function/commit/ebf2885bc202b59f37e074f28951639873c6f38e) + +## [v1.0.9](https://github.com/inspect-js/is-generator-function/compare/v1.0.8...v1.0.9) - 2021-05-05 + +### Fixed + +- [Fix] avoid calling `Function` until absolutely necessary [`#41`](https://github.com/inspect-js/is-generator-function/issues/41) + +### Commits + +- [actions] use `node/install` instead of `node/run`; use `codecov` action [`612862b`](https://github.com/inspect-js/is-generator-function/commit/612862b5fefc2dc1c7e1f5e7478563a5b53f7b23) +- [meta] do not publish github action workflow files [`c13855d`](https://github.com/inspect-js/is-generator-function/commit/c13855dc11947589ed7314840a9cc5ae04db90f4) +- [readme] fix repo URLs; remove travis badge [`bd11a2a`](https://github.com/inspect-js/is-generator-function/commit/bd11a2af1b644cfa352346dcbf6f4cec48b00b78) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`23f54d4`](https://github.com/inspect-js/is-generator-function/commit/23f54d49da035c1ca79227faee9bacfde2d46884) +- [readme] add actions and codecov badges [`9e759ef`](https://github.com/inspect-js/is-generator-function/commit/9e759ef8e8f098fe1fa3cd9cca98f79f9e8b8b22) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`6305f8d`](https://github.com/inspect-js/is-generator-function/commit/6305f8d71ccfa4656bdd280c2616e88fc5ca184b) +- [meta] remove explicit audit level config [`db4391c`](https://github.com/inspect-js/is-generator-function/commit/db4391c68cf8162245d32734685be7c73c2f03c7) +- [meta] use `prepublishOnly` script for npm 7+ [`82c5b18`](https://github.com/inspect-js/is-generator-function/commit/82c5b183a605f1d25af15ec8242c8a8f88a26bfa) +- [Dev Deps] pin `core-js` v3 to < v3.9 [`5f6cc2a`](https://github.com/inspect-js/is-generator-function/commit/5f6cc2ac94a65d7d592775bac6dce573220ccea2) +- [Tests] avoid running harmony tests on node 16+ [`c41526b`](https://github.com/inspect-js/is-generator-function/commit/c41526b8cd1d376f9ca73b56a5ee076db0f9f1c1) +- [actions] update workflows [`a348c5d`](https://github.com/inspect-js/is-generator-function/commit/a348c5d6d4b06041ae0ece9f3765dc13ec9df354) + +## [v1.0.8](https://github.com/inspect-js/is-generator-function/compare/v1.0.7...v1.0.8) - 2020-12-02 + +### Fixed + +- [Refactor] improve performance in non-toStringTag envs [`#9`](https://github.com/inspect-js/is-generator-function/issues/9) + +### Commits + +- [Tests] use shared travis-ci configs [`98c84ec`](https://github.com/inspect-js/is-generator-function/commit/98c84ecd38d7d64b2aa070fa2c240be4373be131) +- [Tests] migrate tests to Github Actions [`52ea2e2`](https://github.com/inspect-js/is-generator-function/commit/52ea2e2e14da2278c7844a18af4aaef1cc8bb3bb) +- [meta] add `auto-changelog` [`a31c8d9`](https://github.com/inspect-js/is-generator-function/commit/a31c8d9e8fe4f397e1f8da5b1297050542cd00c3) +- [Tests] remove `jscs` [`c30694e`](https://github.com/inspect-js/is-generator-function/commit/c30694e5e1739a37c455b8bfae4cc7c4347292de) +- [meta] remove unused Makefile and associated utilities [`23a8dd7`](https://github.com/inspect-js/is-generator-function/commit/23a8dd75ea554642aadb1313c1cbbd11fe69eb1d) +- [Tests] up to `node` `v11.4`, `v10.14`, `v8.14`, `v6.15` [`9711495`](https://github.com/inspect-js/is-generator-function/commit/9711495e58fa9477167d7dbc582749981c3f5ee5) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`, `make-generator-function`; add `safe-publish-latest` [`3afb4d0`](https://github.com/inspect-js/is-generator-function/commit/3afb4d033587eeddfd2dc840ff98c10f3abea48e) +- [Tests] up to `node` `v10.0`, `v9.11`, `v8.11`, `v6.14`, `v4.9` [`f1e9b0f`](https://github.com/inspect-js/is-generator-function/commit/f1e9b0f150e77357ecd4afac5873a3bd3ada7b02) +- [Tests] up to `node` `v11.13`, `v10.15`, `v8.15`, `v6.17` [`433ca64`](https://github.com/inspect-js/is-generator-function/commit/433ca64d5500371516598bebb19fc00370e7c9c7) +- [Tests] run `nyc` on all tests [`84d8e18`](https://github.com/inspect-js/is-generator-function/commit/84d8e18c441c4c181e51a339559040f95adc4d94) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`ec51a9f`](https://github.com/inspect-js/is-generator-function/commit/ec51a9f2e6f5da5ae5e8b446e0112eeaa0853954) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `replace`, `semver`, `tape` [`180fb0d`](https://github.com/inspect-js/is-generator-function/commit/180fb0dbd1a9d6975344d2deb4338c9071e865b1) +- [actions] add automatic rebasing / merge commit blocking [`7e0f94b`](https://github.com/inspect-js/is-generator-function/commit/7e0f94b055308abc8469e526980991a12a87cfaf) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape`, `replace`, `semver`, `core-js` [`75768b3`](https://github.com/inspect-js/is-generator-function/commit/75768b30b7d4c92231ed53ec72d2f4ae81274d4c) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js`, `replace`, `semver`, `tape` [`d6413cd`](https://github.com/inspect-js/is-generator-function/commit/d6413cd0bfc27c924619200efe39d9956d6fb638) +- [actions] add "Allow Edits" workflow [`e73fec7`](https://github.com/inspect-js/is-generator-function/commit/e73fec71e5d1c99246a6f905091e133860931245) +- [Dev Deps] update `core-js`, `eslint`, `nsp`, `semver`, `tape` [`6746c73`](https://github.com/inspect-js/is-generator-function/commit/6746c733fa535f724700726356a9156d491b54ae) +- [Tests] switch from `nsp` to `npm audit`; allow it to fail for now [`301aa25`](https://github.com/inspect-js/is-generator-function/commit/301aa2557b4b99962a0e48191c4719c5a95eb69b) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog` [`d978937`](https://github.com/inspect-js/is-generator-function/commit/d978937e3c86b3e239e0ceecc2324134806e0a32) +- Revert "[Refactor] improve performance in non-toStringTag envs" [`3892c18`](https://github.com/inspect-js/is-generator-function/commit/3892c18f95a8b5ea57f9893e6d8dce89fec4af30) +- [Tests] test on both core-js 3 and 2 [`fac5447`](https://github.com/inspect-js/is-generator-function/commit/fac54476693d1b8573cbd36bc3c6eb74cbeb7468) +- [Tests] use `npx aud` instead of `npm audit` with hoops [`e12897f`](https://github.com/inspect-js/is-generator-function/commit/e12897feae0185f89592dfe1a02a2a4520180313) +- [meta] add `funding` field [`60711d1`](https://github.com/inspect-js/is-generator-function/commit/60711d122a4ef7ab6a9bee6044a26352ba7f86bd) +- [Fix] `Object.getPrototypeOf` does not exist in all engines [`7484531`](https://github.com/inspect-js/is-generator-function/commit/7484531c55a61fdb7e8d819ce9aa363f29b2c704) +- [Dev Deps] update `auto-changelog`, `tape` [`fe92b74`](https://github.com/inspect-js/is-generator-function/commit/fe92b743baaf206e3ee849c551171f0a56b7fa23) +- [Dev Deps] update `eslint`, `tape` [`2f16f77`](https://github.com/inspect-js/is-generator-function/commit/2f16f77aae4c9aafe65fb29854f46b783d853c58) +- [Dev Deps] update `core-js`, `replace` [`c67825a`](https://github.com/inspect-js/is-generator-function/commit/c67825a62b7bad7911a1bdb5af237d86229aa4bc) +- [Tests] on `node` `v10.1` [`b00dbcc`](https://github.com/inspect-js/is-generator-function/commit/b00dbcce7a9f6df4fb35e99fac79560389a9a272) +- [actions] update rebase action to use checkout v2 [`85c7947`](https://github.com/inspect-js/is-generator-function/commit/85c7947d7474468a5e6dd30b00f632e43f45c21d) +- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`d2fd827`](https://github.com/inspect-js/is-generator-function/commit/d2fd827cf87a90d647d93185f6d5e332fb7b1bb4) +- [Dev Deps] update `@ljharb/eslint-config` [`791766e`](https://github.com/inspect-js/is-generator-function/commit/791766e4f12a96d3b9949128f813dadd428d0891) + +## [v1.0.7](https://github.com/inspect-js/is-generator-function/compare/v1.0.6...v1.0.7) - 2017-12-27 + +### Fixed + +- [Tests] run tests with uglify-register [`#16`](https://github.com/inspect-js/is-generator-function/issues/16) +- Exclude `testling.html` from npm package. [`#8`](https://github.com/inspect-js/is-generator-function/issues/8) + +### Commits + +- [Tests] up to `node` `v8.4`; use `nvm install-latest-npm` to ensure new npm doesn’t break old node; remove osx builds [`365004b`](https://github.com/inspect-js/is-generator-function/commit/365004b20b302dceb7bd2cee91814f0a55ae3253) +- [Tests] up to `node` `v9.2`, `v8.9`, `v6.12`; pin included builds to LTS [`33916ea`](https://github.com/inspect-js/is-generator-function/commit/33916eadddccf2a39c8cf0160f82c9a5d4a20ecb) +- [Dev Deps] update `core-js`, `eslint`, `nsp` [`b4ce014`](https://github.com/inspect-js/is-generator-function/commit/b4ce0144a8b56fc3089b96f1b8818c6e793e552f) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js`, `nsp`, `semver`, `tape` [`e4b499f`](https://github.com/inspect-js/is-generator-function/commit/e4b499fbe2e5e24593eb25bd63dfc2a1520aaa04) +- [Tests] up to `node` `v7.4`, `v4.7` [`ce642b6`](https://github.com/inspect-js/is-generator-function/commit/ce642b63f0f9c4f56ca3daefbf8b0d4cbda8c0a4) +- Only apps should have lockfiles. [`ea4dfb1`](https://github.com/inspect-js/is-generator-function/commit/ea4dfb15554de3a22656415cda985ceaf449be00) +- [Tests] on `node` `v9.3` [`307d9c1`](https://github.com/inspect-js/is-generator-function/commit/307d9c144fed8a4aec412d3e9ccc117d1c08e167) +- fix: example code missing ) after argument list [`05f62c7`](https://github.com/inspect-js/is-generator-function/commit/05f62c712a9ca08b0efcabe883affd7c0734f51c) +- [Tests] update `uglify-register` [`7376bec`](https://github.com/inspect-js/is-generator-function/commit/7376bec6c3c8ee16cf16feb285798be23e6c2c89) +- [Dev Deps] update `eslint` [`c3f5895`](https://github.com/inspect-js/is-generator-function/commit/c3f58952033c93918aa5b5ac527520b26c2460f8) + +## [v1.0.6](https://github.com/inspect-js/is-generator-function/compare/v1.0.5...v1.0.6) - 2016-12-20 + +### Fixed + +- [Fix] fix `is-generator-function` in an env without native generators, with core-js. [`#33`](https://github.com/ljharb/is-equal/issues/33) + +### Commits + +- [Tests] fix linting errors. [`9d12cdb`](https://github.com/inspect-js/is-generator-function/commit/9d12cdb4bb43c63801173635a7db92ced8f720d8) + +## [v1.0.5](https://github.com/inspect-js/is-generator-function/compare/v1.0.4...v1.0.5) - 2016-12-19 + +### Commits + +- Update `tape`, `semver`, `eslint`; use my personal shared `eslint` config. [`3a1192c`](https://github.com/inspect-js/is-generator-function/commit/3a1192cbf25ee5a1ca64e64c20d169c643ceb860) +- Add `npm run eslint` [`ae191b6`](https://github.com/inspect-js/is-generator-function/commit/ae191b61d3ec65de63bcd7b2c1ab08f2f9a94ead) +- [Tests] improve test matrix [`0d0837f`](https://github.com/inspect-js/is-generator-function/commit/0d0837fe00bed00ced94ef5a7bfdbd7e8e295656) +- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config`, `semver`, `nsp` [`6523655`](https://github.com/inspect-js/is-generator-function/commit/652365556b5f8eea69b4612a183b5026c952e776) +- Update `jscs`, `tape`, `semver` [`c185388`](https://github.com/inspect-js/is-generator-function/commit/c185388111ee6c0df1498a76d9c565167b5d20cd) +- Update `eslint` [`9959dbc`](https://github.com/inspect-js/is-generator-function/commit/9959dbc1450214658dc4789574b68de826ec33a7) +- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`5945497`](https://github.com/inspect-js/is-generator-function/commit/5945497bc564655ed5ea1bb6f12610a9afc33a33) +- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`1754eae`](https://github.com/inspect-js/is-generator-function/commit/1754eaec79e43835bd154c81fba064b558f7ad1b) +- Update `eslint`, `semver`, `nsp` [`a40f7af`](https://github.com/inspect-js/is-generator-function/commit/a40f7afab3f6ba43193e5464faf51692f6f2199d) +- Update `covert`, `jscs`, `eslint`, `semver` [`f7c3504`](https://github.com/inspect-js/is-generator-function/commit/f7c35049406adc784b23b6b0fbfdd34b4ca8c183) +- [Fix] account for Safari 10 which reports the wrong toString on generator functions. [`3a3a52b`](https://github.com/inspect-js/is-generator-function/commit/3a3a52bdba46e03ae333af9519bf471207bf6cec) +- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config`, `semver`, `nsp` [`aaab6c3`](https://github.com/inspect-js/is-generator-function/commit/aaab6c3a331c8c8793f8f43aa1d452cc12b92c0d) +- [Dev Deps] update `jscs` [`e24641c`](https://github.com/inspect-js/is-generator-function/commit/e24641ca69ae3ee232837e9153c8b43b046cfe69) +- [Tests] up to `io.js` `v3.3`, `node` `v4.1` [`c43c5ad`](https://github.com/inspect-js/is-generator-function/commit/c43c5ade8b3b62fa27fac3e5104ab3df93278878) +- Add `npm run security` via `nsp` [`24256ca`](https://github.com/inspect-js/is-generator-function/commit/24256ca5f5308930e86c3dc75b70bbfe1033e9b6) +- Test up to `io.js` `v2.3` [`730233f`](https://github.com/inspect-js/is-generator-function/commit/730233f0ca376887c698c01799b60ee54424bf9f) +- [Tests] use pretest/posttest for linting/security [`3e6b860`](https://github.com/inspect-js/is-generator-function/commit/3e6b8603453e4d127cd1acef720f1ce214d8f69a) +- [Refactor] remove useless `Object#toString` check. [`9d4d7ac`](https://github.com/inspect-js/is-generator-function/commit/9d4d7ac23f6f2f75098903b4fe4f74e1d39a2226) +- [Dev Deps] Update `tape`, `eslint` [`34673b8`](https://github.com/inspect-js/is-generator-function/commit/34673b86aecddf149284bd8bbca5ab54e6e59694) +- Test up to `io.js` `v2.1` [`1e91585`](https://github.com/inspect-js/is-generator-function/commit/1e915850246cbd691606567850f35665a650e490) +- Test on two latest `io.js` versions. [`8702608`](https://github.com/inspect-js/is-generator-function/commit/87026087a1e3b43ba9f8dc7a5b6c2b58d572ff25) +- Test on `iojs-v1.5` and `iojs-v1.6` [`c74935e`](https://github.com/inspect-js/is-generator-function/commit/c74935ec9c187e9640f862607873aa096ddcf9fc) +- Latest `node` now supports generators. [`beb3bfe`](https://github.com/inspect-js/is-generator-function/commit/beb3bfe3d425cc0ece9a02e286727e36d53f5050) +- [Dev Deps] update `tape` [`c6e6587`](https://github.com/inspect-js/is-generator-function/commit/c6e658765c94b9edc282848f13e7bce882711c8c) +- Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. [`0039875`](https://github.com/inspect-js/is-generator-function/commit/0039875e6c587255470088c7867cfa314713626b) +- Test on `io.js` `v2.5` [`0017408`](https://github.com/inspect-js/is-generator-function/commit/001740801d2a29f9a25a8824b064286910601e8c) +- Test on `io.js` `v2.4` [`bc013e2`](https://github.com/inspect-js/is-generator-function/commit/bc013e20b99a89b3f592038196d69f871b39caf0) +- Test on `io.js` `v3.0` [`e195030`](https://github.com/inspect-js/is-generator-function/commit/e1950306f4e0a107101e9aeae89cfac2c18e33de) + +## [v1.0.4](https://github.com/inspect-js/is-generator-function/compare/v1.0.3...v1.0.4) - 2015-03-03 + +### Fixed + +- Add support for detecting concise generator methods. [`#2`](https://github.com/inspect-js/is-generator-function/issues/2) + +### Commits + +- All grade A-supported `node`/`iojs` versions now ship with an `npm` that understands `^`. [`6562e80`](https://github.com/inspect-js/is-generator-function/commit/6562e8015cf318056522a39d7a8e6ad121f9cf4c) +- Run `travis-ci` tests on `iojs` and `node` v0.12; speed up builds; allow 0.8 failures. [`592f768`](https://github.com/inspect-js/is-generator-function/commit/592f76853bcc5b46351d8842df7fd1483214d870) +- Test on latest `io.js` [`edca329`](https://github.com/inspect-js/is-generator-function/commit/edca329a4b3ddc19b5ac9491f7678240a73f4e0b) +- Forgot to add `replace` in 209fac444b4bd90eaa8df279457c4a15e6bba6d2 [`3ebfb38`](https://github.com/inspect-js/is-generator-function/commit/3ebfb380c73e29447689f0924248a5c801260371) +- Update `semver` [`c21baa5`](https://github.com/inspect-js/is-generator-function/commit/c21baa5acfe51e6bbe324c13ce5d4b6770ecfb27) +- Update `jscs` [`71a68f4`](https://github.com/inspect-js/is-generator-function/commit/71a68f47044af23ed2cd819d122202a59c2e6967) +- Update `tape` [`32c03cf`](https://github.com/inspect-js/is-generator-function/commit/32c03cf5701634f47c8d47fc383c97365adb3bb3) + +## [v1.0.3](https://github.com/inspect-js/is-generator-function/compare/v1.0.2...v1.0.3) - 2015-01-31 + +### Commits + +- `make release` [`209fac4`](https://github.com/inspect-js/is-generator-function/commit/209fac444b4bd90eaa8df279457c4a15e6bba6d2) +- Run tests against a faked @@toStringTag [`c9ba1ea`](https://github.com/inspect-js/is-generator-function/commit/c9ba1ea8163bd2e7a0f537da8fbaead0efa96a24) +- Add `sudo: false` to speed up travis-ci tests. [`a4b41e1`](https://github.com/inspect-js/is-generator-function/commit/a4b41e1b9c3856c671922f64bf5b7b41eb9ec0d6) +- Bail out early when typeof is not "function" [`a62e7a5`](https://github.com/inspect-js/is-generator-function/commit/a62e7a547307f5ba62a39e374f2cc2f46705eabc) + +## [v1.0.2](https://github.com/inspect-js/is-generator-function/compare/v1.0.1...v1.0.2) - 2015-01-20 + +### Commits + +- Update `tape`, `jscs` [`354d343`](https://github.com/inspect-js/is-generator-function/commit/354d3437426c274221ad21a2a580e9f31bfb07e3) +- Update `jscs` [`e0b6203`](https://github.com/inspect-js/is-generator-function/commit/e0b620323be47b3925fe3cd660c063a06cfde4aa) +- Fix tests in newer v8 (and io.js) [`36f0545`](https://github.com/inspect-js/is-generator-function/commit/36f054590d4f5fa994af5f2e7d592840bf9f9d27) + +## [v1.0.1](https://github.com/inspect-js/is-generator-function/compare/v1.0.0...v1.0.1) - 2014-12-14 + +### Commits + +- Use my standard jscs.json file. [`7624ca3`](https://github.com/inspect-js/is-generator-function/commit/7624ca3053cacec69d9a58e40c54e6635d8f980b) +- Use `make-generator-function` instead of a local module. [`9234a57`](https://github.com/inspect-js/is-generator-function/commit/9234a5771a3237baf3fe609540e74ce982fe6932) +- Adding license and downloads badges [`9463b6a`](https://github.com/inspect-js/is-generator-function/commit/9463b6a0c6bf254e213a2f5306f37e9849c8bb1a) +- Using single quotes exclusively. [`4b4d71f`](https://github.com/inspect-js/is-generator-function/commit/4b4d71f9e0d3753b6f2bd764ae910601352ff19e) +- Use SVG badges instead of PNG [`eaaaf41`](https://github.com/inspect-js/is-generator-function/commit/eaaaf41900c2e69c801062e8c7bb247bd3d2e402) +- Updating jscs. [`780758e`](https://github.com/inspect-js/is-generator-function/commit/780758ef1ae5e6a7a422fc8e3ac1265f53e33135) +- Update `tape`, `jscs` [`6b8f959`](https://github.com/inspect-js/is-generator-function/commit/6b8f95928274d770e9b66359e38c982a2b161e74) +- Update `tape`, `jscs` [`6e1334d`](https://github.com/inspect-js/is-generator-function/commit/6e1334d12899bed116ab3c4e82994fdfc8f8c279) +- Lock covert to v1.0.0. [`3dd5c74`](https://github.com/inspect-js/is-generator-function/commit/3dd5c74921a59481d5a699444a879ef0f80ef7c5) +- Updating `tape` [`99f61a3`](https://github.com/inspect-js/is-generator-function/commit/99f61a30692b7c00d06a6d29ac3022b242d4f1d4) +- Updating jscs [`171d96d`](https://github.com/inspect-js/is-generator-function/commit/171d96deef2bff8a840b0ef9563ad9366c8fcd98) +- Updating jscs [`847795e`](https://github.com/inspect-js/is-generator-function/commit/847795e9f951f5d28195f0bdb85ec26b427d2d33) +- Updating jscs [`cad09d8`](https://github.com/inspect-js/is-generator-function/commit/cad09d88873f2595545977f0ce9ed8ccde78b625) +- Updating covert [`8617860`](https://github.com/inspect-js/is-generator-function/commit/86178604dccea5b73ad2b386b275657366735529) +- Adding an .nvmrc file. [`1fa3ea4`](https://github.com/inspect-js/is-generator-function/commit/1fa3ea4f04139fdc28e2c0e553efd917be1f5744) + +## [v1.0.0](https://github.com/inspect-js/is-generator-function/compare/v0.0.0...v1.0.0) - 2014-08-09 + +### Commits + +- Adding `npm run lint` [`ed9cf0a`](https://github.com/inspect-js/is-generator-function/commit/ed9cf0a240ae8b3c4bf682e5ff37757d9eb6cffc) +- Make sure old and unstable nodes don't break Travis [`80a7ee7`](https://github.com/inspect-js/is-generator-function/commit/80a7ee782dc832869bccf857213ef76685303738) +- Updating tape [`d5f141f`](https://github.com/inspect-js/is-generator-function/commit/d5f141f0017aefb003911a1eb9c9b615069f1cf0) +- Fix npm upgrading on node 0.8 [`2ee0f08`](https://github.com/inspect-js/is-generator-function/commit/2ee0f08a56f493fb5d4299c7bda9cd52c41a98a2) +- Updating dependencies [`accf688`](https://github.com/inspect-js/is-generator-function/commit/accf688e8c20f05d0f24c1ff8efdaa24def0882c) +- Updating covert [`38d22e6`](https://github.com/inspect-js/is-generator-function/commit/38d22e6cdc939bb3f2cbfc5fff41473a694d4fe5) +- Updating tape [`49c1f00`](https://github.com/inspect-js/is-generator-function/commit/49c1f00cf5c66c87a8678d9c78a6b411cf1af986) +- Updating tape [`75cb7df`](https://github.com/inspect-js/is-generator-function/commit/75cb7dfef5254f4a9941a3bd77471cb783bb6fbd) +- Updating tape [`4142cc0`](https://github.com/inspect-js/is-generator-function/commit/4142cc092e157b92a6107112b2c3f3dc9b154367) +- Better code coverage [`1831d64`](https://github.com/inspect-js/is-generator-function/commit/1831d64d859ae8d45cc9aea30248d8cabc3d1e1d) + +## v0.0.0 - 2014-02-09 + +### Commits + +- Tests. [`f46e936`](https://github.com/inspect-js/is-generator-function/commit/f46e9368db04e0725a56e2bd0a246ab52123ed35) +- package.json [`189db32`](https://github.com/inspect-js/is-generator-function/commit/189db324e627257de94b68d1e6005c21ba74ebad) +- Initial commit [`8096cee`](https://github.com/inspect-js/is-generator-function/commit/8096ceedf7c9caece9acfd0ff4a0bd6eafa5dfdf) +- README. [`9eda97f`](https://github.com/inspect-js/is-generator-function/commit/9eda97fbc33113a519121a6515e777985730f3f7) +- Implementation. [`c5c3a8d`](https://github.com/inspect-js/is-generator-function/commit/c5c3a8d5dccae465c69958fc38c4ceba8b1354cc) +- Adding Travis CI [`9a6503e`](https://github.com/inspect-js/is-generator-function/commit/9a6503ebce8c9521c82e8ed1ec1b79bc856d0c5c) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/LICENSE new file mode 100644 index 00000000..47b7b507 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Jordan Harband + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/README.md new file mode 100644 index 00000000..519a4235 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/README.md @@ -0,0 +1,40 @@ +# is-generator-function [![Version Badge][2]][1] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +Is this a native generator function? + +## Example + +```js +var isGeneratorFunction = require('is-generator-function'); +assert(!isGeneratorFunction(function () {})); +assert(!isGeneratorFunction(null)); +assert(isGeneratorFunction(function* () { yield 42; return Infinity; })); +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[1]: https://npmjs.org/package/is-generator-function +[2]: https://versionbadg.es/inspect-js/is-generator-function.svg +[5]: https://david-dm.org/inspect-js/is-generator-function.svg +[6]: https://david-dm.org/inspect-js/is-generator-function +[7]: https://david-dm.org/inspect-js/is-generator-function/dev-status.svg +[8]: https://david-dm.org/inspect-js/is-generator-function#info=devDependencies +[11]: https://nodei.co/npm/is-generator-function.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/is-generator-function.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/is-generator-function.svg +[downloads-url]: https://npm-stat.com/charts.html?package=is-generator-function +[codecov-image]: https://codecov.io/gh/inspect-js/is-generator-function/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/is-generator-function/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-generator-function +[actions-url]: https://github.com/inspect-js/is-generator-function/actions diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/index.js new file mode 100644 index 00000000..9064e91f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/index.js @@ -0,0 +1,38 @@ +'use strict'; + +var toStr = Object.prototype.toString; +var fnToStr = Function.prototype.toString; +var isFnRegex = /^\s*(?:function)?\*/; +var hasToStringTag = require('has-tostringtag/shams')(); +var getProto = Object.getPrototypeOf; +var getGeneratorFunc = function () { // eslint-disable-line consistent-return + if (!hasToStringTag) { + return false; + } + try { + return Function('return function*() {}')(); + } catch (e) { + } +}; +var GeneratorFunction; + +module.exports = function isGeneratorFunction(fn) { + if (typeof fn !== 'function') { + return false; + } + if (isFnRegex.test(fnToStr.call(fn))) { + return true; + } + if (!hasToStringTag) { + var str = toStr.call(fn); + return str === '[object GeneratorFunction]'; + } + if (!getProto) { + return false; + } + if (typeof GeneratorFunction === 'undefined') { + var generatorFunc = getGeneratorFunc(); + GeneratorFunction = generatorFunc ? getProto(generatorFunc) : false; + } + return getProto(fn) === GeneratorFunction; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/package.json new file mode 100644 index 00000000..99f7053c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/package.json @@ -0,0 +1,119 @@ +{ + "_args": [ + [ + "is-generator-function@1.0.10", + "/tmp/repository/main" + ] + ], + "_from": "is-generator-function@1.0.10", + "_id": "is-generator-function@1.0.10", + "_inBundle": false, + "_integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "_location": "/is-generator-function", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "is-generator-function@1.0.10", + "name": "is-generator-function", + "escapedName": "is-generator-function", + "rawSpec": "1.0.10", + "saveSpec": null, + "fetchSpec": "1.0.10" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "_spec": "1.0.10", + "_where": "/tmp/repository/main", + "author": { + "name": "Jordan Harband", + "email": "ljharb@gmail.com" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "bugs": { + "url": "https://github.com/inspect-js/is-generator-function/issues" + }, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "description": "Determine if a function is a native generator function.", + "devDependencies": { + "@ljharb/eslint-config": "^17.6.0", + "aud": "^1.1.5", + "auto-changelog": "^2.3.0", + "core-js": "^2.6.5 || ^3.16.0", + "eslint": "^7.32.0", + "make-generator-function": "^2.0.0", + "nyc": "^10.3.2", + "safe-publish-latest": "^1.1.4", + "tape": "^5.3.0", + "uglify-register": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "homepage": "https://github.com/inspect-js/is-generator-function#readme", + "keywords": [ + "generator", + "generator function", + "es6", + "es2015", + "yield", + "function", + "function*" + ], + "license": "MIT", + "main": "index.js", + "name": "is-generator-function", + "repository": { + "type": "git", + "url": "git://github.com/inspect-js/is-generator-function.git" + }, + "scripts": { + "lint": "eslint .", + "posttest": "aud --production", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "pretest": "npm run lint", + "test": "npm run tests-only", + "test:all": "npm run test:index && npm run test:corejs && npm run test:uglified", + "test:corejs": "node test/corejs", + "test:harmony": "node --es-staging --harmony test && node --es-staging --harmony test/corejs && node --es-staging --harmony test/uglified", + "test:index": "node test", + "test:uglified": "node test/uglified", + "tests-only": "nyc npm run test:all", + "version": "auto-changelog && git add CHANGELOG.md" + }, + "testling": { + "files": "test/index.js", + "browsers": [ + "iexplore/6.0..latest", + "firefox/3.0..6.0", + "firefox/15.0..latest", + "firefox/nightly", + "chrome/4.0..10.0", + "chrome/20.0..latest", + "chrome/canary", + "opera/10.0..latest", + "opera/next", + "safari/4.0..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2" + ] + }, + "version": "1.0.10" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/test/corejs.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/test/corejs.js new file mode 100644 index 00000000..73f0c89c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/test/corejs.js @@ -0,0 +1,5 @@ +'use strict'; + +require('core-js'); + +require('./'); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/test/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/test/index.js new file mode 100644 index 00000000..cbaab5da --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/test/index.js @@ -0,0 +1,83 @@ +'use strict'; + +/* globals window */ + +var test = require('tape'); +var isGeneratorFunction = require('../index'); +var generatorFuncs = require('make-generator-function')(); +var hasToStringTag = require('has-tostringtag/shams')(); + +var forEach = function (arr, func) { + var i; + for (i = 0; i < arr.length; ++i) { + func(arr[i], i, arr); + } +}; + +test('returns false for non-functions', function (t) { + var nonFuncs = [ + true, + false, + null, + undefined, + {}, + [], + /a/g, + 'string', + 42, + new Date() + ]; + t.plan(nonFuncs.length); + forEach(nonFuncs, function (nonFunc) { + t.notOk(isGeneratorFunction(nonFunc), nonFunc + ' is not a function'); + }); + t.end(); +}); + +test('returns false for non-generator functions', function (t) { + var func = function () {}; + t.notOk(isGeneratorFunction(func), 'anonymous function is not an generator function'); + + var namedFunc = function foo() {}; + t.notOk(isGeneratorFunction(namedFunc), 'named function is not an generator function'); + + if (typeof window === 'undefined') { + t.skip('window.alert is not an generator function'); + } else { + t.notOk(isGeneratorFunction(window.alert), 'window.alert is not an generator function'); + } + t.end(); +}); + +var fakeToString = function () { return 'function* () { return "TOTALLY REAL I SWEAR!"; }'; }; + +test('returns false for non-generator function with faked toString', function (t) { + var func = function () {}; + func.toString = fakeToString; + + t.notEqual(String(func), Function.prototype.toString.apply(func), 'faked toString is not real toString'); + t.notOk(isGeneratorFunction(func), 'anonymous function with faked toString is not a generator function'); + t.end(); +}); + +test('returns false for non-generator function with faked @@toStringTag', { skip: !hasToStringTag || generatorFuncs.length === 0 }, function (t) { + var generatorFunc = generatorFuncs[0]; + var fakeGenFunction = { + toString: function () { return String(generatorFunc); }, + valueOf: function () { return generatorFunc; } + }; + fakeGenFunction[Symbol.toStringTag] = 'GeneratorFunction'; + t.notOk(isGeneratorFunction(fakeGenFunction), 'fake GeneratorFunction with @@toStringTag "GeneratorFunction" is not a generator function'); + t.end(); +}); + +test('returns true for generator functions', function (t) { + if (generatorFuncs.length > 0) { + forEach(generatorFuncs, function (generatorFunc) { + t.ok(isGeneratorFunction(generatorFunc), generatorFunc + ' is generator function'); + }); + } else { + t.skip('generator function is generator function - this environment does not support ES6 generator functions. Please run `node --harmony`, or use a supporting browser.'); + } + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/test/uglified.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/test/uglified.js new file mode 100644 index 00000000..fd82b553 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-generator-function/test/uglified.js @@ -0,0 +1,8 @@ +'use strict'; + +require('uglify-register/api').register({ + exclude: [/\/node_modules\//, /\/test\//], + uglify: { mangle: true } +}); + +require('./'); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/LICENSE new file mode 100644 index 00000000..3b7a1903 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 - 2016 Shinnosuke Watanabe + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/README.md new file mode 100644 index 00000000..db13bde8 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/README.md @@ -0,0 +1,76 @@ +# is-natural-number.js + +[![NPM version](https://img.shields.io/npm/v/is-natural-number.svg)](https://www.npmjs.com/package/is-natural-number) +[![Bower version](https://img.shields.io/bower/v/is-natural-number.svg)](https://github.com/shinnn/is-natural-number.js/releases) +[![Build Status](https://travis-ci.org/shinnn/is-natural-number.js.svg)](https://travis-ci.org/shinnn/is-natural-number.js) +[![Coverage Status](https://img.shields.io/coveralls/shinnn/is-natural-number.js.svg)](https://coveralls.io/r/shinnn/is-natural-number.js?branch=master) +[![devDependency Status](https://david-dm.org/shinnn/is-natural-number.js/dev-status.svg)](https://david-dm.org/shinnn/is-natural-number.js#info=devDependencies) + +Check if a value is a [natural number](https://wikipedia.org/wiki/Natural_number) + +## Installation + +### Package managers + +#### [npm](https://www.npmjs.com/) + +``` +npm install is-natural-number +``` + +#### [Bower](http://bower.io/) + +``` +bower install is-natural-number +``` + +#### [Duo](http://duojs.org/) + +```javascript +var isNaturalNumber = require('shinnn/is-natural-number.js'); +``` + +### Standalone + +[Download the script file directly.](https://raw.githubusercontent.com/shinnn/is-natural-number.js/master/is-natural-number.js) + +## API + +### isNaturalNumber(*number*, *option*) + +*number*: `Number` +*option*: `Object` +Return: `Boolean` + +It returns `true` if the first argument is one of the natural numbers. If not, or the argument is not a number, it returns `false`. + +```javascript +isNaturalNumber(10); //=> true + +isNaturalNumber(-10); //=> false +isNaturalNumber(10.5); //=> false +isNaturalNumber(Infinity); //=> false +isNaturalNumber('10'); //=> false +``` + +*Check [the test](./test.js) for more detailed specifications.* + +#### option.includeZero + +Type: `Boolean` +Default: `false` + +By default the number `0` is not regarded as a natural number. + +Setting this option `true` makes `0` regarded as a natural number. + +```javascript +isNaturalNumber(0); //=> false +isNaturalNumber(0, {includeZero: true}); //=> true +``` + +## License + +Copyright (c) 2014 - 2016 [Shinnosuke Watanabe](https://github.com/shinnn) + +Licensed under [the MIT License](./LICENSE). diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/index.js new file mode 100644 index 00000000..6b1b3f23 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/index.js @@ -0,0 +1,31 @@ +/*! + * is-natural-number.js | MIT (c) Shinnosuke Watanabe + * https://github.com/shinnn/is-natural-number.js +*/ +'use strict'; + +module.exports = function isNaturalNumber(val, option) { + if (option) { + if (typeof option !== 'object') { + throw new TypeError( + String(option) + + ' is not an object. Expected an object that has boolean `includeZero` property.' + ); + } + + if ('includeZero' in option) { + if (typeof option.includeZero !== 'boolean') { + throw new TypeError( + String(option.includeZero) + + ' is neither true nor false. `includeZero` option must be a Boolean value.' + ); + } + + if (option.includeZero && val === 0) { + return true; + } + } + } + + return Number.isSafeInteger(val) && val >= 1; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/index.jsnext.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/index.jsnext.js new file mode 100644 index 00000000..f018bd41 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/index.jsnext.js @@ -0,0 +1,29 @@ +/*! + * is-natural-number.js | MIT (c) Shinnosuke Watanabe + * https://github.com/shinnn/is-natural-number.js +*/ +export default function isNaturalNumber(val, option) { + if (option) { + if (typeof option !== 'object') { + throw new TypeError( + String(option) + + ' is not an object. Expected an object that has boolean `includeZero` property.' + ); + } + + if ('includeZero' in option) { + if (typeof option.includeZero !== 'boolean') { + throw new TypeError( + String(option.includeZero) + + ' is neither true nor false. `includeZero` option must be a Boolean value.' + ); + } + + if (option.includeZero && val === 0) { + return true; + } + } + } + + return Number.isSafeInteger(val) && val >= 1; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/package.json new file mode 100644 index 00000000..53789897 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-natural-number/package.json @@ -0,0 +1,77 @@ +{ + "_args": [ + [ + "is-natural-number@4.0.1", + "/tmp/repository/main" + ] + ], + "_from": "is-natural-number@4.0.1", + "_id": "is-natural-number@4.0.1", + "_inBundle": false, + "_integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "_location": "/is-natural-number", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "is-natural-number@4.0.1", + "name": "is-natural-number", + "escapedName": "is-natural-number", + "rawSpec": "4.0.1", + "saveSpec": null, + "fetchSpec": "4.0.1" + }, + "_requiredBy": [ + "/strip-dirs" + ], + "_resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "_spec": "4.0.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Shinnosuke Watanabe", + "url": "https://github.com/shinnn" + }, + "bugs": { + "url": "https://github.com/shinnn/is-natural-number.js/issues" + }, + "description": "Check if a value is a natural number", + "devDependencies": { + "@shinnn/eslint-config": "^2.1.0", + "eslint": "^2.9.0", + "istanbul": "^0.4.3", + "require-from-string": "^1.2.0", + "rollup": "^0.26.3", + "tap-dot": "^1.0.5", + "tape": "^4.5.1" + }, + "files": [ + "index.js", + "index.jsnext.js" + ], + "homepage": "https://github.com/shinnn/is-natural-number.js#readme", + "jsnext:main": "index.jsnext.js", + "keywords": [ + "number", + "natural", + "check", + "int", + "integer", + "math", + "mathematics", + "range", + "browser", + "client-side" + ], + "license": "MIT", + "name": "is-natural-number", + "repository": { + "type": "git", + "url": "git+https://github.com/shinnn/is-natural-number.js.git" + }, + "scripts": { + "coverage": "node --strong_mode node_modules/.bin/istanbul cover test.js", + "pretest": "eslint --config @shinnn --ignore-path .gitignore .", + "test": "node --strong_mode --throw-deprecation --track-heap-objects test.js | tap-dot" + }, + "version": "4.0.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/index.js new file mode 100644 index 00000000..6f7ec91a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/index.js @@ -0,0 +1,21 @@ +'use strict'; + +var isStream = module.exports = function (stream) { + return stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function'; +}; + +isStream.writable = function (stream) { + return isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object'; +}; + +isStream.readable = function (stream) { + return isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object'; +}; + +isStream.duplex = function (stream) { + return isStream.writable(stream) && isStream.readable(stream); +}; + +isStream.transform = function (stream) { + return isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object'; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/license @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/package.json new file mode 100644 index 00000000..0e370e14 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/package.json @@ -0,0 +1,75 @@ +{ + "_args": [ + [ + "is-stream@1.1.0", + "/tmp/repository/main" + ] + ], + "_from": "is-stream@1.1.0", + "_id": "is-stream@1.1.0", + "_inBundle": false, + "_integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "_location": "/is-stream", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "is-stream@1.1.0", + "name": "is-stream", + "escapedName": "is-stream", + "rawSpec": "1.1.0", + "saveSpec": null, + "fetchSpec": "1.1.0" + }, + "_requiredBy": [ + "/decompress-tar", + "/decompress-tarbz2", + "/decompress-targz" + ], + "_resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "_spec": "1.1.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-stream/issues" + }, + "description": "Check if something is a Node.js stream", + "devDependencies": { + "ava": "*", + "tempfile": "^1.1.0", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/is-stream#readme", + "keywords": [ + "stream", + "type", + "streams", + "writable", + "readable", + "duplex", + "transform", + "check", + "detect", + "is" + ], + "license": "MIT", + "name": "is-stream", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-stream.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.1.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/readme.md new file mode 100644 index 00000000..d8afce81 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/is-stream/readme.md @@ -0,0 +1,42 @@ +# is-stream [![Build Status](https://travis-ci.org/sindresorhus/is-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/is-stream) + +> Check if something is a [Node.js stream](https://nodejs.org/api/stream.html) + + +## Install + +``` +$ npm install --save is-stream +``` + + +## Usage + +```js +const fs = require('fs'); +const isStream = require('is-stream'); + +isStream(fs.createReadStream('unicorn.png')); +//=> true + +isStream({}); +//=> false +``` + + +## API + +### isStream(stream) + +#### isStream.writable(stream) + +#### isStream.readable(stream) + +#### isStream.duplex(stream) + +#### isStream.transform(stream) + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/.npmignore b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/.npmignore new file mode 100644 index 00000000..3c3629e6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/.travis.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/.travis.yml new file mode 100644 index 00000000..cc4dba29 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.8" + - "0.10" diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/Makefile b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/Makefile new file mode 100644 index 00000000..787d56e1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/Makefile @@ -0,0 +1,6 @@ + +test: + @node_modules/.bin/tape test.js + +.PHONY: test + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/README.md new file mode 100644 index 00000000..16d2c59c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/README.md @@ -0,0 +1,60 @@ + +# isarray + +`Array#isArray` for older browsers. + +[![build status](https://secure.travis-ci.org/juliangruber/isarray.svg)](http://travis-ci.org/juliangruber/isarray) +[![downloads](https://img.shields.io/npm/dm/isarray.svg)](https://www.npmjs.org/package/isarray) + +[![browser support](https://ci.testling.com/juliangruber/isarray.png) +](https://ci.testling.com/juliangruber/isarray) + +## Usage + +```js +var isArray = require('isarray'); + +console.log(isArray([])); // => true +console.log(isArray({})); // => false +``` + +## Installation + +With [npm](http://npmjs.org) do + +```bash +$ npm install isarray +``` + +Then bundle for the browser with +[browserify](https://github.com/substack/browserify). + +With [component](http://component.io) do + +```bash +$ component install juliangruber/isarray +``` + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/component.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/component.json new file mode 100644 index 00000000..9e31b683 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/component.json @@ -0,0 +1,19 @@ +{ + "name" : "isarray", + "description" : "Array#isArray for older browsers", + "version" : "0.0.1", + "repository" : "juliangruber/isarray", + "homepage": "https://github.com/juliangruber/isarray", + "main" : "index.js", + "scripts" : [ + "index.js" + ], + "dependencies" : {}, + "keywords": ["browser","isarray","array"], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/index.js new file mode 100644 index 00000000..a57f6349 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/index.js @@ -0,0 +1,5 @@ +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/package.json new file mode 100644 index 00000000..eeb47652 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/package.json @@ -0,0 +1,76 @@ +{ + "_args": [ + [ + "isarray@1.0.0", + "/tmp/repository/main" + ] + ], + "_from": "isarray@1.0.0", + "_id": "isarray@1.0.0", + "_inBundle": false, + "_integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "_location": "/isarray", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "isarray@1.0.0", + "name": "isarray", + "escapedName": "isarray", + "rawSpec": "1.0.0", + "saveSpec": null, + "fetchSpec": "1.0.0" + }, + "_requiredBy": [ + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "_spec": "1.0.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/isarray/issues" + }, + "dependencies": {}, + "description": "Array#isArray for older browsers", + "devDependencies": { + "tape": "~2.13.4" + }, + "homepage": "https://github.com/juliangruber/isarray", + "keywords": [ + "browser", + "isarray", + "array" + ], + "license": "MIT", + "main": "index.js", + "name": "isarray", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/isarray.git" + }, + "scripts": { + "test": "tape test.js" + }, + "testling": { + "files": "test.js", + "browsers": [ + "ie/8..latest", + "firefox/17..latest", + "firefox/nightly", + "chrome/22..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "version": "1.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/test.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/test.js new file mode 100644 index 00000000..e0c3444d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/isarray/test.js @@ -0,0 +1,20 @@ +var isArray = require('./'); +var test = require('tape'); + +test('is array', function(t){ + t.ok(isArray([])); + t.notOk(isArray({})); + t.notOk(isArray(null)); + t.notOk(isArray(false)); + + var obj = {}; + obj[0] = true; + t.notOk(isArray(obj)); + + var arr = []; + arr.foo = 'bar'; + t.ok(isArray(arr)); + + t.end(); +}); + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/.travis.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/.travis.yml new file mode 100644 index 00000000..c9045dec --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/.travis.yml @@ -0,0 +1,6 @@ +language: node_js +node_js: + - '8' + - '10' + - '12' + - '14' diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/CONTRIBUTING.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/CONTRIBUTING.md new file mode 100644 index 00000000..1954cb56 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/CONTRIBUTING.md @@ -0,0 +1,27 @@ +# jpeg-js is an OPEN Open Source Project + +----------------------------------------- + +## What? + +Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project. + +## Rules + +There are a few basic ground-rules for contributors: + +1. **No `--force` pushes** or modifying the Git history in any way. +1. **Non-master branches** ought to be used for ongoing work. +1. **External API changes and significant modifications** ought to be subject to an **internal pull-request** to solicit feedback from other contributors. +1. Internal pull-requests to solicit feedback are *encouraged* for any other non-trivial contribution but left to the discretion of the contributor. +1. Contributors should attempt to adhere to the prevailing code-style. + +## Releases + +Declaring formal releases remains the prerogative of the project maintainer. + +## Changes to this arrangement + +This is an experiment and feedback is welcome! This document may also be subject to pull-requests or changes by contributors where you believe you have something valuable to add or change. + +----------------------------------------- diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/LICENSE new file mode 100644 index 00000000..5f122668 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2014, Eugene Ware +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. 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. +3. Neither the name of Eugene Ware 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 EUGENE WARE ''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 EUGENE WARE 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/README.md new file mode 100644 index 00000000..380176f0 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/README.md @@ -0,0 +1,176 @@ +# jpeg-js + +A pure javascript JPEG encoder and decoder for node.js + +**NOTE:** this is a _synchronous_ (i.e. CPU-blocking) library that is much slower than native alternatives. If you don't need a _pure javascript_ implementation, consider using async alternatives like [sharp](http://npmjs.com/package/sharp) in node or the [Canvas API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API) in the browser. + +[![build status](https://secure.travis-ci.org/eugeneware/jpeg-js.png)](http://travis-ci.org/eugeneware/jpeg-js) + +## Installation + +This module is installed via npm: + +```bash +$ npm install jpeg-js +``` + +## Example Usage + +### Decoding JPEGs + +Will decode a buffer or typed array into a `Buffer`; + +```js +var jpeg = require('jpeg-js'); +var jpegData = fs.readFileSync('grumpycat.jpg'); +var rawImageData = jpeg.decode(jpegData); +console.log(rawImageData); +/* +{ width: 320, + height: 180, + data: } +*/ +``` + +To decode directly into a `Uint8Array`, pass `useTArray: true` in options +`decode`: + +```js +var jpeg = require('jpeg-js'); +var jpegData = fs.readFileSync('grumpycat.jpg'); +var rawImageData = jpeg.decode(jpegData, {useTArray: true}); // return as Uint8Array +console.log(rawImageData); +/* +{ width: 320, + height: 180, + data: { '0': 91, '1': 64, ... } } // typed array +*/ +``` + +#### Decode Options + +| Option | Description | Default | +| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | +| `colorTransform` | Transform alternate colorspaces like YCbCr. `undefined` means respect the default behavior encoded in metadata. | `undefined` | +| `useTArray` | Decode pixels into a typed `Uint8Array` instead of a `Buffer`. | `false` | +| `formatAsRGBA` | Decode pixels into RGBA vs. RGB. | `true` | +| `tolerantDecoding` | Be more tolerant when encountering technically invalid JPEGs. | `true` | +| `maxResolutionInMP` | The maximum resolution image that `jpeg-js` should attempt to decode in megapixels. Images larger than this resolution will throw an error instead of decoding. | `100` | +| `maxMemoryUsageInMB` | The (approximate) maximum memory that `jpeg-js` should allocate while attempting to decode the image in mebibyte. Images requiring more memory than this will throw an error instead of decoding. | `512` | + +### Encoding JPEGs + +```js +var jpeg = require('jpeg-js'); +var width = 320, + height = 180; +var frameData = new Buffer(width * height * 4); +var i = 0; +while (i < frameData.length) { + frameData[i++] = 0xff; // red + frameData[i++] = 0x00; // green + frameData[i++] = 0x00; // blue + frameData[i++] = 0xff; // alpha - ignored in JPEGs +} +var rawImageData = { + data: frameData, + width: width, + height: height, +}; +var jpegImageData = jpeg.encode(rawImageData, 50); +console.log(jpegImageData); +/* +{ width: 320, + height: 180, + data: } +*/ +// write to file +fs.writeFileSync('image.jpg', jpegImageData.data); +``` + +## License + +### Decoding + +This library builds on the work of two other JPEG javascript libraries, +namely [jpgjs](https://github.com/notmasteryet/jpgjs) for the decoding +which is licensed under the Apache 2.0 License below: + +Copyright 2011 notmasteryet + +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](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. + +### Encoding + +The encoding is based off a port of the JPEG encoder in [as3corelib](https://code.google.com/p/as3corelib/source/browse/trunk/src/com/adobe/images/JPGEncoder.as). + +The port to Javascript was done by by Andreas Ritter, www.bytestrom.eu, 11/2009. + +The Adobe License for the encoder is: + +**Adobe** + +Copyright (c) 2008, Adobe Systems Incorporated +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 Adobe Systems Incorporated 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. + +## Contributing + +jpeg-js is an **OPEN Open Source Project**. This means that: + +> Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project. + +See the [CONTRIBUTING.md](https://github.com/eugeneware/jpeg-js/blob/master/CONTRIBUTING.md) file for more details. + +### Contributors + +jpeg-js is only possible due to the excellent work of the following contributors: + + + + + + + + + + + + +
AdobeGitHub/adobe
Yury DelendikGitHub/notmasteryet
Eugene WareGitHub/eugeneware
Michael KellyGitHub/mrkelly
Peter LiljenbergGitHub/petli
XadillaXGitHub/XadillaX
strandedcityGitHub/strandedcity
wmossmanGitHub/wmossman
Patrick HulceGitHub/patrickhulce
Ben WileyGitHub/benwiley4000
diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/index.js new file mode 100644 index 00000000..23734849 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/index.js @@ -0,0 +1,7 @@ +var encode = require('./lib/encoder'), + decode = require('./lib/decoder'); + +module.exports = { + encode: encode, + decode: decode +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/lib/decoder.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/lib/decoder.js new file mode 100644 index 00000000..44528349 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/lib/decoder.js @@ -0,0 +1,1138 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* + Copyright 2011 notmasteryet + + 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. +*/ + +// - The JPEG specification can be found in the ITU CCITT Recommendation T.81 +// (www.w3.org/Graphics/JPEG/itu-t81.pdf) +// - The JFIF specification can be found in the JPEG File Interchange Format +// (www.w3.org/Graphics/JPEG/jfif3.pdf) +// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters +// in PostScript Level 2, Technical Note #5116 +// (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf) + +var JpegImage = (function jpegImage() { + "use strict"; + var dctZigZag = new Int32Array([ + 0, + 1, 8, + 16, 9, 2, + 3, 10, 17, 24, + 32, 25, 18, 11, 4, + 5, 12, 19, 26, 33, 40, + 48, 41, 34, 27, 20, 13, 6, + 7, 14, 21, 28, 35, 42, 49, 56, + 57, 50, 43, 36, 29, 22, 15, + 23, 30, 37, 44, 51, 58, + 59, 52, 45, 38, 31, + 39, 46, 53, 60, + 61, 54, 47, + 55, 62, + 63 + ]); + + var dctCos1 = 4017 // cos(pi/16) + var dctSin1 = 799 // sin(pi/16) + var dctCos3 = 3406 // cos(3*pi/16) + var dctSin3 = 2276 // sin(3*pi/16) + var dctCos6 = 1567 // cos(6*pi/16) + var dctSin6 = 3784 // sin(6*pi/16) + var dctSqrt2 = 5793 // sqrt(2) + var dctSqrt1d2 = 2896 // sqrt(2) / 2 + + function constructor() { + } + + function buildHuffmanTable(codeLengths, values) { + var k = 0, code = [], i, j, length = 16; + while (length > 0 && !codeLengths[length - 1]) + length--; + code.push({children: [], index: 0}); + var p = code[0], q; + for (i = 0; i < length; i++) { + for (j = 0; j < codeLengths[i]; j++) { + p = code.pop(); + p.children[p.index] = values[k]; + while (p.index > 0) { + if (code.length === 0) + throw new Error('Could not recreate Huffman Table'); + p = code.pop(); + } + p.index++; + code.push(p); + while (code.length <= i) { + code.push(q = {children: [], index: 0}); + p.children[p.index] = q.children; + p = q; + } + k++; + } + if (i + 1 < length) { + // p here points to last code + code.push(q = {children: [], index: 0}); + p.children[p.index] = q.children; + p = q; + } + } + return code[0].children; + } + + function decodeScan(data, offset, + frame, components, resetInterval, + spectralStart, spectralEnd, + successivePrev, successive, opts) { + var precision = frame.precision; + var samplesPerLine = frame.samplesPerLine; + var scanLines = frame.scanLines; + var mcusPerLine = frame.mcusPerLine; + var progressive = frame.progressive; + var maxH = frame.maxH, maxV = frame.maxV; + + var startOffset = offset, bitsData = 0, bitsCount = 0; + function readBit() { + if (bitsCount > 0) { + bitsCount--; + return (bitsData >> bitsCount) & 1; + } + bitsData = data[offset++]; + if (bitsData == 0xFF) { + var nextByte = data[offset++]; + if (nextByte) { + throw new Error("unexpected marker: " + ((bitsData << 8) | nextByte).toString(16)); + } + // unstuff 0 + } + bitsCount = 7; + return bitsData >>> 7; + } + function decodeHuffman(tree) { + var node = tree, bit; + while ((bit = readBit()) !== null) { + node = node[bit]; + if (typeof node === 'number') + return node; + if (typeof node !== 'object') + throw new Error("invalid huffman sequence"); + } + return null; + } + function receive(length) { + var n = 0; + while (length > 0) { + var bit = readBit(); + if (bit === null) return; + n = (n << 1) | bit; + length--; + } + return n; + } + function receiveAndExtend(length) { + var n = receive(length); + if (n >= 1 << (length - 1)) + return n; + return n + (-1 << length) + 1; + } + function decodeBaseline(component, zz) { + var t = decodeHuffman(component.huffmanTableDC); + var diff = t === 0 ? 0 : receiveAndExtend(t); + zz[0]= (component.pred += diff); + var k = 1; + while (k < 64) { + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15, r = rs >> 4; + if (s === 0) { + if (r < 15) + break; + k += 16; + continue; + } + k += r; + var z = dctZigZag[k]; + zz[z] = receiveAndExtend(s); + k++; + } + } + function decodeDCFirst(component, zz) { + var t = decodeHuffman(component.huffmanTableDC); + var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive); + zz[0] = (component.pred += diff); + } + function decodeDCSuccessive(component, zz) { + zz[0] |= readBit() << successive; + } + var eobrun = 0; + function decodeACFirst(component, zz) { + if (eobrun > 0) { + eobrun--; + return; + } + var k = spectralStart, e = spectralEnd; + while (k <= e) { + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15, r = rs >> 4; + if (s === 0) { + if (r < 15) { + eobrun = receive(r) + (1 << r) - 1; + break; + } + k += 16; + continue; + } + k += r; + var z = dctZigZag[k]; + zz[z] = receiveAndExtend(s) * (1 << successive); + k++; + } + } + var successiveACState = 0, successiveACNextValue; + function decodeACSuccessive(component, zz) { + var k = spectralStart, e = spectralEnd, r = 0; + while (k <= e) { + var z = dctZigZag[k]; + var direction = zz[z] < 0 ? -1 : 1; + switch (successiveACState) { + case 0: // initial state + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15, r = rs >> 4; + if (s === 0) { + if (r < 15) { + eobrun = receive(r) + (1 << r); + successiveACState = 4; + } else { + r = 16; + successiveACState = 1; + } + } else { + if (s !== 1) + throw new Error("invalid ACn encoding"); + successiveACNextValue = receiveAndExtend(s); + successiveACState = r ? 2 : 3; + } + continue; + case 1: // skipping r zero items + case 2: + if (zz[z]) + zz[z] += (readBit() << successive) * direction; + else { + r--; + if (r === 0) + successiveACState = successiveACState == 2 ? 3 : 0; + } + break; + case 3: // set value for a zero item + if (zz[z]) + zz[z] += (readBit() << successive) * direction; + else { + zz[z] = successiveACNextValue << successive; + successiveACState = 0; + } + break; + case 4: // eob + if (zz[z]) + zz[z] += (readBit() << successive) * direction; + break; + } + k++; + } + if (successiveACState === 4) { + eobrun--; + if (eobrun === 0) + successiveACState = 0; + } + } + function decodeMcu(component, decode, mcu, row, col) { + var mcuRow = (mcu / mcusPerLine) | 0; + var mcuCol = mcu % mcusPerLine; + var blockRow = mcuRow * component.v + row; + var blockCol = mcuCol * component.h + col; + // If the block is missing and we're in tolerant mode, just skip it. + if (component.blocks[blockRow] === undefined && opts.tolerantDecoding) + return; + decode(component, component.blocks[blockRow][blockCol]); + } + function decodeBlock(component, decode, mcu) { + var blockRow = (mcu / component.blocksPerLine) | 0; + var blockCol = mcu % component.blocksPerLine; + // If the block is missing and we're in tolerant mode, just skip it. + if (component.blocks[blockRow] === undefined && opts.tolerantDecoding) + return; + decode(component, component.blocks[blockRow][blockCol]); + } + + var componentsLength = components.length; + var component, i, j, k, n; + var decodeFn; + if (progressive) { + if (spectralStart === 0) + decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; + else + decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; + } else { + decodeFn = decodeBaseline; + } + + var mcu = 0, marker; + var mcuExpected; + if (componentsLength == 1) { + mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn; + } else { + mcuExpected = mcusPerLine * frame.mcusPerColumn; + } + if (!resetInterval) resetInterval = mcuExpected; + + var h, v; + while (mcu < mcuExpected) { + // reset interval stuff + for (i = 0; i < componentsLength; i++) + components[i].pred = 0; + eobrun = 0; + + if (componentsLength == 1) { + component = components[0]; + for (n = 0; n < resetInterval; n++) { + decodeBlock(component, decodeFn, mcu); + mcu++; + } + } else { + for (n = 0; n < resetInterval; n++) { + for (i = 0; i < componentsLength; i++) { + component = components[i]; + h = component.h; + v = component.v; + for (j = 0; j < v; j++) { + for (k = 0; k < h; k++) { + decodeMcu(component, decodeFn, mcu, j, k); + } + } + } + mcu++; + + // If we've reached our expected MCU's, stop decoding + if (mcu === mcuExpected) break; + } + } + + if (mcu === mcuExpected) { + // Skip trailing bytes at the end of the scan - until we reach the next marker + do { + if (data[offset] === 0xFF) { + if (data[offset + 1] !== 0x00) { + break; + } + } + offset += 1; + } while (offset < data.length - 2); + } + + // find marker + bitsCount = 0; + marker = (data[offset] << 8) | data[offset + 1]; + if (marker < 0xFF00) { + throw new Error("marker was not found"); + } + + if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx + offset += 2; + } + else + break; + } + + return offset - startOffset; + } + + function buildComponentData(frame, component) { + var lines = []; + var blocksPerLine = component.blocksPerLine; + var blocksPerColumn = component.blocksPerColumn; + var samplesPerLine = blocksPerLine << 3; + // Only 1 used per invocation of this function and garbage collected after invocation, so no need to account for its memory footprint. + var R = new Int32Array(64), r = new Uint8Array(64); + + // A port of poppler's IDCT method which in turn is taken from: + // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz, + // "Practical Fast 1-D DCT Algorithms with 11 Multiplications", + // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989, + // 988-991. + function quantizeAndInverse(zz, dataOut, dataIn) { + var qt = component.quantizationTable; + var v0, v1, v2, v3, v4, v5, v6, v7, t; + var p = dataIn; + var i; + + // dequant + for (i = 0; i < 64; i++) + p[i] = zz[i] * qt[i]; + + // inverse DCT on rows + for (i = 0; i < 8; ++i) { + var row = 8 * i; + + // check for all-zero AC coefficients + if (p[1 + row] == 0 && p[2 + row] == 0 && p[3 + row] == 0 && + p[4 + row] == 0 && p[5 + row] == 0 && p[6 + row] == 0 && + p[7 + row] == 0) { + t = (dctSqrt2 * p[0 + row] + 512) >> 10; + p[0 + row] = t; + p[1 + row] = t; + p[2 + row] = t; + p[3 + row] = t; + p[4 + row] = t; + p[5 + row] = t; + p[6 + row] = t; + p[7 + row] = t; + continue; + } + + // stage 4 + v0 = (dctSqrt2 * p[0 + row] + 128) >> 8; + v1 = (dctSqrt2 * p[4 + row] + 128) >> 8; + v2 = p[2 + row]; + v3 = p[6 + row]; + v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8; + v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8; + v5 = p[3 + row] << 4; + v6 = p[5 + row] << 4; + + // stage 3 + t = (v0 - v1+ 1) >> 1; + v0 = (v0 + v1 + 1) >> 1; + v1 = t; + t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8; + v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8; + v3 = t; + t = (v4 - v6 + 1) >> 1; + v4 = (v4 + v6 + 1) >> 1; + v6 = t; + t = (v7 + v5 + 1) >> 1; + v5 = (v7 - v5 + 1) >> 1; + v7 = t; + + // stage 2 + t = (v0 - v3 + 1) >> 1; + v0 = (v0 + v3 + 1) >> 1; + v3 = t; + t = (v1 - v2 + 1) >> 1; + v1 = (v1 + v2 + 1) >> 1; + v2 = t; + t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12; + v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12; + v7 = t; + t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12; + v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12; + v6 = t; + + // stage 1 + p[0 + row] = v0 + v7; + p[7 + row] = v0 - v7; + p[1 + row] = v1 + v6; + p[6 + row] = v1 - v6; + p[2 + row] = v2 + v5; + p[5 + row] = v2 - v5; + p[3 + row] = v3 + v4; + p[4 + row] = v3 - v4; + } + + // inverse DCT on columns + for (i = 0; i < 8; ++i) { + var col = i; + + // check for all-zero AC coefficients + if (p[1*8 + col] == 0 && p[2*8 + col] == 0 && p[3*8 + col] == 0 && + p[4*8 + col] == 0 && p[5*8 + col] == 0 && p[6*8 + col] == 0 && + p[7*8 + col] == 0) { + t = (dctSqrt2 * dataIn[i+0] + 8192) >> 14; + p[0*8 + col] = t; + p[1*8 + col] = t; + p[2*8 + col] = t; + p[3*8 + col] = t; + p[4*8 + col] = t; + p[5*8 + col] = t; + p[6*8 + col] = t; + p[7*8 + col] = t; + continue; + } + + // stage 4 + v0 = (dctSqrt2 * p[0*8 + col] + 2048) >> 12; + v1 = (dctSqrt2 * p[4*8 + col] + 2048) >> 12; + v2 = p[2*8 + col]; + v3 = p[6*8 + col]; + v4 = (dctSqrt1d2 * (p[1*8 + col] - p[7*8 + col]) + 2048) >> 12; + v7 = (dctSqrt1d2 * (p[1*8 + col] + p[7*8 + col]) + 2048) >> 12; + v5 = p[3*8 + col]; + v6 = p[5*8 + col]; + + // stage 3 + t = (v0 - v1 + 1) >> 1; + v0 = (v0 + v1 + 1) >> 1; + v1 = t; + t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12; + v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12; + v3 = t; + t = (v4 - v6 + 1) >> 1; + v4 = (v4 + v6 + 1) >> 1; + v6 = t; + t = (v7 + v5 + 1) >> 1; + v5 = (v7 - v5 + 1) >> 1; + v7 = t; + + // stage 2 + t = (v0 - v3 + 1) >> 1; + v0 = (v0 + v3 + 1) >> 1; + v3 = t; + t = (v1 - v2 + 1) >> 1; + v1 = (v1 + v2 + 1) >> 1; + v2 = t; + t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12; + v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12; + v7 = t; + t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12; + v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12; + v6 = t; + + // stage 1 + p[0*8 + col] = v0 + v7; + p[7*8 + col] = v0 - v7; + p[1*8 + col] = v1 + v6; + p[6*8 + col] = v1 - v6; + p[2*8 + col] = v2 + v5; + p[5*8 + col] = v2 - v5; + p[3*8 + col] = v3 + v4; + p[4*8 + col] = v3 - v4; + } + + // convert to 8-bit integers + for (i = 0; i < 64; ++i) { + var sample = 128 + ((p[i] + 8) >> 4); + dataOut[i] = sample < 0 ? 0 : sample > 0xFF ? 0xFF : sample; + } + } + + requestMemoryAllocation(samplesPerLine * blocksPerColumn * 8); + + var i, j; + for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { + var scanLine = blockRow << 3; + for (i = 0; i < 8; i++) + lines.push(new Uint8Array(samplesPerLine)); + for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { + quantizeAndInverse(component.blocks[blockRow][blockCol], r, R); + + var offset = 0, sample = blockCol << 3; + for (j = 0; j < 8; j++) { + var line = lines[scanLine + j]; + for (i = 0; i < 8; i++) + line[sample + i] = r[offset++]; + } + } + } + return lines; + } + + function clampTo8bit(a) { + return a < 0 ? 0 : a > 255 ? 255 : a; + } + + constructor.prototype = { + load: function load(path) { + var xhr = new XMLHttpRequest(); + xhr.open("GET", path, true); + xhr.responseType = "arraybuffer"; + xhr.onload = (function() { + // TODO catch parse error + var data = new Uint8Array(xhr.response || xhr.mozResponseArrayBuffer); + this.parse(data); + if (this.onload) + this.onload(); + }).bind(this); + xhr.send(null); + }, + parse: function parse(data) { + var maxResolutionInPixels = this.opts.maxResolutionInMP * 1000 * 1000; + var offset = 0, length = data.length; + function readUint16() { + var value = (data[offset] << 8) | data[offset + 1]; + offset += 2; + return value; + } + function readDataBlock() { + var length = readUint16(); + var array = data.subarray(offset, offset + length - 2); + offset += array.length; + return array; + } + function prepareComponents(frame) { + var maxH = 0, maxV = 0; + var component, componentId; + for (componentId in frame.components) { + if (frame.components.hasOwnProperty(componentId)) { + component = frame.components[componentId]; + if (maxH < component.h) maxH = component.h; + if (maxV < component.v) maxV = component.v; + } + } + var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / maxH); + var mcusPerColumn = Math.ceil(frame.scanLines / 8 / maxV); + for (componentId in frame.components) { + if (frame.components.hasOwnProperty(componentId)) { + component = frame.components[componentId]; + var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / maxH); + var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / maxV); + var blocksPerLineForMcu = mcusPerLine * component.h; + var blocksPerColumnForMcu = mcusPerColumn * component.v; + var blocksToAllocate = blocksPerColumnForMcu * blocksPerLineForMcu; + var blocks = []; + + // Each block is a Int32Array of length 64 (4 x 64 = 256 bytes) + requestMemoryAllocation(blocksToAllocate * 256); + + for (var i = 0; i < blocksPerColumnForMcu; i++) { + var row = []; + for (var j = 0; j < blocksPerLineForMcu; j++) + row.push(new Int32Array(64)); + blocks.push(row); + } + component.blocksPerLine = blocksPerLine; + component.blocksPerColumn = blocksPerColumn; + component.blocks = blocks; + } + } + frame.maxH = maxH; + frame.maxV = maxV; + frame.mcusPerLine = mcusPerLine; + frame.mcusPerColumn = mcusPerColumn; + } + var jfif = null; + var adobe = null; + var pixels = null; + var frame, resetInterval; + var quantizationTables = [], frames = []; + var huffmanTablesAC = [], huffmanTablesDC = []; + var fileMarker = readUint16(); + var malformedDataOffset = -1; + this.comments = []; + if (fileMarker != 0xFFD8) { // SOI (Start of Image) + throw new Error("SOI not found"); + } + + fileMarker = readUint16(); + while (fileMarker != 0xFFD9) { // EOI (End of image) + var i, j, l; + switch(fileMarker) { + case 0xFF00: break; + case 0xFFE0: // APP0 (Application Specific) + case 0xFFE1: // APP1 + case 0xFFE2: // APP2 + case 0xFFE3: // APP3 + case 0xFFE4: // APP4 + case 0xFFE5: // APP5 + case 0xFFE6: // APP6 + case 0xFFE7: // APP7 + case 0xFFE8: // APP8 + case 0xFFE9: // APP9 + case 0xFFEA: // APP10 + case 0xFFEB: // APP11 + case 0xFFEC: // APP12 + case 0xFFED: // APP13 + case 0xFFEE: // APP14 + case 0xFFEF: // APP15 + case 0xFFFE: // COM (Comment) + var appData = readDataBlock(); + + if (fileMarker === 0xFFFE) { + var comment = String.fromCharCode.apply(null, appData); + this.comments.push(comment); + } + + if (fileMarker === 0xFFE0) { + if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 && + appData[3] === 0x46 && appData[4] === 0) { // 'JFIF\x00' + jfif = { + version: { major: appData[5], minor: appData[6] }, + densityUnits: appData[7], + xDensity: (appData[8] << 8) | appData[9], + yDensity: (appData[10] << 8) | appData[11], + thumbWidth: appData[12], + thumbHeight: appData[13], + thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13]) + }; + } + } + // TODO APP1 - Exif + if (fileMarker === 0xFFE1) { + if (appData[0] === 0x45 && + appData[1] === 0x78 && + appData[2] === 0x69 && + appData[3] === 0x66 && + appData[4] === 0) { // 'EXIF\x00' + this.exifBuffer = appData.subarray(5, appData.length); + } + } + + if (fileMarker === 0xFFEE) { + if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F && + appData[3] === 0x62 && appData[4] === 0x65 && appData[5] === 0) { // 'Adobe\x00' + adobe = { + version: appData[6], + flags0: (appData[7] << 8) | appData[8], + flags1: (appData[9] << 8) | appData[10], + transformCode: appData[11] + }; + } + } + break; + + case 0xFFDB: // DQT (Define Quantization Tables) + var quantizationTablesLength = readUint16(); + var quantizationTablesEnd = quantizationTablesLength + offset - 2; + while (offset < quantizationTablesEnd) { + var quantizationTableSpec = data[offset++]; + requestMemoryAllocation(64 * 4); + var tableData = new Int32Array(64); + if ((quantizationTableSpec >> 4) === 0) { // 8 bit values + for (j = 0; j < 64; j++) { + var z = dctZigZag[j]; + tableData[z] = data[offset++]; + } + } else if ((quantizationTableSpec >> 4) === 1) { //16 bit + for (j = 0; j < 64; j++) { + var z = dctZigZag[j]; + tableData[z] = readUint16(); + } + } else + throw new Error("DQT: invalid table spec"); + quantizationTables[quantizationTableSpec & 15] = tableData; + } + break; + + case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT) + case 0xFFC1: // SOF1 (Start of Frame, Extended DCT) + case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT) + readUint16(); // skip data length + frame = {}; + frame.extended = (fileMarker === 0xFFC1); + frame.progressive = (fileMarker === 0xFFC2); + frame.precision = data[offset++]; + frame.scanLines = readUint16(); + frame.samplesPerLine = readUint16(); + frame.components = {}; + frame.componentsOrder = []; + + var pixelsInFrame = frame.scanLines * frame.samplesPerLine; + if (pixelsInFrame > maxResolutionInPixels) { + var exceededAmount = Math.ceil((pixelsInFrame - maxResolutionInPixels) / 1e6); + throw new Error(`maxResolutionInMP limit exceeded by ${exceededAmount}MP`); + } + + var componentsCount = data[offset++], componentId; + var maxH = 0, maxV = 0; + for (i = 0; i < componentsCount; i++) { + componentId = data[offset]; + var h = data[offset + 1] >> 4; + var v = data[offset + 1] & 15; + var qId = data[offset + 2]; + frame.componentsOrder.push(componentId); + frame.components[componentId] = { + h: h, + v: v, + quantizationIdx: qId + }; + offset += 3; + } + prepareComponents(frame); + frames.push(frame); + break; + + case 0xFFC4: // DHT (Define Huffman Tables) + var huffmanLength = readUint16(); + for (i = 2; i < huffmanLength;) { + var huffmanTableSpec = data[offset++]; + var codeLengths = new Uint8Array(16); + var codeLengthSum = 0; + for (j = 0; j < 16; j++, offset++) { + codeLengthSum += (codeLengths[j] = data[offset]); + } + requestMemoryAllocation(16 + codeLengthSum); + var huffmanValues = new Uint8Array(codeLengthSum); + for (j = 0; j < codeLengthSum; j++, offset++) + huffmanValues[j] = data[offset]; + i += 17 + codeLengthSum; + + ((huffmanTableSpec >> 4) === 0 ? + huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = + buildHuffmanTable(codeLengths, huffmanValues); + } + break; + + case 0xFFDD: // DRI (Define Restart Interval) + readUint16(); // skip data length + resetInterval = readUint16(); + break; + + case 0xFFDC: // Number of Lines marker + readUint16() // skip data length + readUint16() // Ignore this data since it represents the image height + break; + + case 0xFFDA: // SOS (Start of Scan) + var scanLength = readUint16(); + var selectorsCount = data[offset++]; + var components = [], component; + for (i = 0; i < selectorsCount; i++) { + component = frame.components[data[offset++]]; + var tableSpec = data[offset++]; + component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; + component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; + components.push(component); + } + var spectralStart = data[offset++]; + var spectralEnd = data[offset++]; + var successiveApproximation = data[offset++]; + var processed = decodeScan(data, offset, + frame, components, resetInterval, + spectralStart, spectralEnd, + successiveApproximation >> 4, successiveApproximation & 15, this.opts); + offset += processed; + break; + + case 0xFFFF: // Fill bytes + if (data[offset] !== 0xFF) { // Avoid skipping a valid marker. + offset--; + } + break; + default: + if (data[offset - 3] == 0xFF && + data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) { + // could be incorrect encoding -- last 0xFF byte of the previous + // block was eaten by the encoder + offset -= 3; + break; + } + else if (fileMarker === 0xE0 || fileMarker == 0xE1) { + // Recover from malformed APP1 markers popular in some phone models. + // See https://github.com/eugeneware/jpeg-js/issues/82 + if (malformedDataOffset !== -1) { + throw new Error(`first unknown JPEG marker at offset ${malformedDataOffset.toString(16)}, second unknown JPEG marker ${fileMarker.toString(16)} at offset ${(offset - 1).toString(16)}`); + } + malformedDataOffset = offset - 1; + const nextOffset = readUint16(); + if (data[offset + nextOffset - 2] === 0xFF) { + offset += nextOffset - 2; + break; + } + } + throw new Error("unknown JPEG marker " + fileMarker.toString(16)); + } + fileMarker = readUint16(); + } + if (frames.length != 1) + throw new Error("only single frame JPEGs supported"); + + // set each frame's components quantization table + for (var i = 0; i < frames.length; i++) { + var cp = frames[i].components; + for (var j in cp) { + cp[j].quantizationTable = quantizationTables[cp[j].quantizationIdx]; + delete cp[j].quantizationIdx; + } + } + + this.width = frame.samplesPerLine; + this.height = frame.scanLines; + this.jfif = jfif; + this.adobe = adobe; + this.components = []; + for (var i = 0; i < frame.componentsOrder.length; i++) { + var component = frame.components[frame.componentsOrder[i]]; + this.components.push({ + lines: buildComponentData(frame, component), + scaleX: component.h / frame.maxH, + scaleY: component.v / frame.maxV + }); + } + }, + getData: function getData(width, height) { + var scaleX = this.width / width, scaleY = this.height / height; + + var component1, component2, component3, component4; + var component1Line, component2Line, component3Line, component4Line; + var x, y; + var offset = 0; + var Y, Cb, Cr, K, C, M, Ye, R, G, B; + var colorTransform; + var dataLength = width * height * this.components.length; + requestMemoryAllocation(dataLength); + var data = new Uint8Array(dataLength); + switch (this.components.length) { + case 1: + component1 = this.components[0]; + for (y = 0; y < height; y++) { + component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)]; + for (x = 0; x < width; x++) { + Y = component1Line[0 | (x * component1.scaleX * scaleX)]; + + data[offset++] = Y; + } + } + break; + case 2: + // PDF might compress two component data in custom colorspace + component1 = this.components[0]; + component2 = this.components[1]; + for (y = 0; y < height; y++) { + component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)]; + component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)]; + for (x = 0; x < width; x++) { + Y = component1Line[0 | (x * component1.scaleX * scaleX)]; + data[offset++] = Y; + Y = component2Line[0 | (x * component2.scaleX * scaleX)]; + data[offset++] = Y; + } + } + break; + case 3: + // The default transform for three components is true + colorTransform = true; + // The adobe transform marker overrides any previous setting + if (this.adobe && this.adobe.transformCode) + colorTransform = true; + else if (typeof this.opts.colorTransform !== 'undefined') + colorTransform = !!this.opts.colorTransform; + + component1 = this.components[0]; + component2 = this.components[1]; + component3 = this.components[2]; + for (y = 0; y < height; y++) { + component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)]; + component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)]; + component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)]; + for (x = 0; x < width; x++) { + if (!colorTransform) { + R = component1Line[0 | (x * component1.scaleX * scaleX)]; + G = component2Line[0 | (x * component2.scaleX * scaleX)]; + B = component3Line[0 | (x * component3.scaleX * scaleX)]; + } else { + Y = component1Line[0 | (x * component1.scaleX * scaleX)]; + Cb = component2Line[0 | (x * component2.scaleX * scaleX)]; + Cr = component3Line[0 | (x * component3.scaleX * scaleX)]; + + R = clampTo8bit(Y + 1.402 * (Cr - 128)); + G = clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128)); + B = clampTo8bit(Y + 1.772 * (Cb - 128)); + } + + data[offset++] = R; + data[offset++] = G; + data[offset++] = B; + } + } + break; + case 4: + if (!this.adobe) + throw new Error('Unsupported color mode (4 components)'); + // The default transform for four components is false + colorTransform = false; + // The adobe transform marker overrides any previous setting + if (this.adobe && this.adobe.transformCode) + colorTransform = true; + else if (typeof this.opts.colorTransform !== 'undefined') + colorTransform = !!this.opts.colorTransform; + + component1 = this.components[0]; + component2 = this.components[1]; + component3 = this.components[2]; + component4 = this.components[3]; + for (y = 0; y < height; y++) { + component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)]; + component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)]; + component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)]; + component4Line = component4.lines[0 | (y * component4.scaleY * scaleY)]; + for (x = 0; x < width; x++) { + if (!colorTransform) { + C = component1Line[0 | (x * component1.scaleX * scaleX)]; + M = component2Line[0 | (x * component2.scaleX * scaleX)]; + Ye = component3Line[0 | (x * component3.scaleX * scaleX)]; + K = component4Line[0 | (x * component4.scaleX * scaleX)]; + } else { + Y = component1Line[0 | (x * component1.scaleX * scaleX)]; + Cb = component2Line[0 | (x * component2.scaleX * scaleX)]; + Cr = component3Line[0 | (x * component3.scaleX * scaleX)]; + K = component4Line[0 | (x * component4.scaleX * scaleX)]; + + C = 255 - clampTo8bit(Y + 1.402 * (Cr - 128)); + M = 255 - clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128)); + Ye = 255 - clampTo8bit(Y + 1.772 * (Cb - 128)); + } + data[offset++] = 255-C; + data[offset++] = 255-M; + data[offset++] = 255-Ye; + data[offset++] = 255-K; + } + } + break; + default: + throw new Error('Unsupported color mode'); + } + return data; + }, + copyToImageData: function copyToImageData(imageData, formatAsRGBA) { + var width = imageData.width, height = imageData.height; + var imageDataArray = imageData.data; + var data = this.getData(width, height); + var i = 0, j = 0, x, y; + var Y, K, C, M, R, G, B; + switch (this.components.length) { + case 1: + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + Y = data[i++]; + + imageDataArray[j++] = Y; + imageDataArray[j++] = Y; + imageDataArray[j++] = Y; + if (formatAsRGBA) { + imageDataArray[j++] = 255; + } + } + } + break; + case 3: + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + R = data[i++]; + G = data[i++]; + B = data[i++]; + + imageDataArray[j++] = R; + imageDataArray[j++] = G; + imageDataArray[j++] = B; + if (formatAsRGBA) { + imageDataArray[j++] = 255; + } + } + } + break; + case 4: + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + C = data[i++]; + M = data[i++]; + Y = data[i++]; + K = data[i++]; + + R = 255 - clampTo8bit(C * (1 - K / 255) + K); + G = 255 - clampTo8bit(M * (1 - K / 255) + K); + B = 255 - clampTo8bit(Y * (1 - K / 255) + K); + + imageDataArray[j++] = R; + imageDataArray[j++] = G; + imageDataArray[j++] = B; + if (formatAsRGBA) { + imageDataArray[j++] = 255; + } + } + } + break; + default: + throw new Error('Unsupported color mode'); + } + } + }; + + + // We cap the amount of memory used by jpeg-js to avoid unexpected OOMs from untrusted content. + var totalBytesAllocated = 0; + var maxMemoryUsageBytes = 0; + function requestMemoryAllocation(increaseAmount = 0) { + var totalMemoryImpactBytes = totalBytesAllocated + increaseAmount; + if (totalMemoryImpactBytes > maxMemoryUsageBytes) { + var exceededAmount = Math.ceil((totalMemoryImpactBytes - maxMemoryUsageBytes) / 1024 / 1024); + throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${exceededAmount}MB`); + } + + totalBytesAllocated = totalMemoryImpactBytes; + } + + constructor.resetMaxMemoryUsage = function (maxMemoryUsageBytes_) { + totalBytesAllocated = 0; + maxMemoryUsageBytes = maxMemoryUsageBytes_; + }; + + constructor.getBytesAllocated = function () { + return totalBytesAllocated; + }; + + constructor.requestMemoryAllocation = requestMemoryAllocation; + + return constructor; +})(); + +if (typeof module !== 'undefined') { + module.exports = decode; +} else if (typeof window !== 'undefined') { + window['jpeg-js'] = window['jpeg-js'] || {}; + window['jpeg-js'].decode = decode; +} + +function decode(jpegData, userOpts = {}) { + var defaultOpts = { + // "undefined" means "Choose whether to transform colors based on the image’s color model." + colorTransform: undefined, + useTArray: false, + formatAsRGBA: true, + tolerantDecoding: true, + maxResolutionInMP: 100, // Don't decode more than 100 megapixels + maxMemoryUsageInMB: 512, // Don't decode if memory footprint is more than 512MB + }; + + var opts = {...defaultOpts, ...userOpts}; + var arr = new Uint8Array(jpegData); + var decoder = new JpegImage(); + decoder.opts = opts; + // If this constructor ever supports async decoding this will need to be done differently. + // Until then, treating as singleton limit is fine. + JpegImage.resetMaxMemoryUsage(opts.maxMemoryUsageInMB * 1024 * 1024); + decoder.parse(arr); + + var channels = (opts.formatAsRGBA) ? 4 : 3; + var bytesNeeded = decoder.width * decoder.height * channels; + try { + JpegImage.requestMemoryAllocation(bytesNeeded); + var image = { + width: decoder.width, + height: decoder.height, + exifBuffer: decoder.exifBuffer, + data: opts.useTArray ? + new Uint8Array(bytesNeeded) : + Buffer.alloc(bytesNeeded) + }; + if(decoder.comments.length > 0) { + image["comments"] = decoder.comments; + } + } catch (err){ + if (err instanceof RangeError){ + throw new Error("Could not allocate enough memory for the image. " + + "Required: " + bytesNeeded); + } else { + throw err; + } + } + + decoder.copyToImageData(image, opts.formatAsRGBA); + + return image; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/lib/encoder.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/lib/encoder.js new file mode 100644 index 00000000..bb17d3ba --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/lib/encoder.js @@ -0,0 +1,799 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + 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 Adobe Systems Incorporated 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. +*/ +/* +JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009 + +Basic GUI blocking jpeg encoder +*/ + +var btoa = btoa || function(buf) { + return Buffer.from(buf).toString('base64'); +}; + +function JPEGEncoder(quality) { + var self = this; + var fround = Math.round; + var ffloor = Math.floor; + var YTable = new Array(64); + var UVTable = new Array(64); + var fdtbl_Y = new Array(64); + var fdtbl_UV = new Array(64); + var YDC_HT; + var UVDC_HT; + var YAC_HT; + var UVAC_HT; + + var bitcode = new Array(65535); + var category = new Array(65535); + var outputfDCTQuant = new Array(64); + var DU = new Array(64); + var byteout = []; + var bytenew = 0; + var bytepos = 7; + + var YDU = new Array(64); + var UDU = new Array(64); + var VDU = new Array(64); + var clt = new Array(256); + var RGB_YUV_TABLE = new Array(2048); + var currentQuality; + + var ZigZag = [ + 0, 1, 5, 6,14,15,27,28, + 2, 4, 7,13,16,26,29,42, + 3, 8,12,17,25,30,41,43, + 9,11,18,24,31,40,44,53, + 10,19,23,32,39,45,52,54, + 20,22,33,38,46,51,55,60, + 21,34,37,47,50,56,59,61, + 35,36,48,49,57,58,62,63 + ]; + + var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0]; + var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11]; + var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d]; + var std_ac_luminance_values = [ + 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12, + 0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07, + 0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, + 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0, + 0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16, + 0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28, + 0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39, + 0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49, + 0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, + 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69, + 0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79, + 0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, + 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98, + 0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7, + 0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, + 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5, + 0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4, + 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2, + 0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea, + 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, + 0xf9,0xfa + ]; + + var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0]; + var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11]; + var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77]; + var std_ac_chrominance_values = [ + 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21, + 0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71, + 0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, + 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0, + 0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34, + 0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26, + 0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38, + 0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48, + 0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, + 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68, + 0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78, + 0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, + 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96, + 0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5, + 0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, + 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3, + 0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2, + 0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda, + 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9, + 0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, + 0xf9,0xfa + ]; + + function initQuantTables(sf){ + var YQT = [ + 16, 11, 10, 16, 24, 40, 51, 61, + 12, 12, 14, 19, 26, 58, 60, 55, + 14, 13, 16, 24, 40, 57, 69, 56, + 14, 17, 22, 29, 51, 87, 80, 62, + 18, 22, 37, 56, 68,109,103, 77, + 24, 35, 55, 64, 81,104,113, 92, + 49, 64, 78, 87,103,121,120,101, + 72, 92, 95, 98,112,100,103, 99 + ]; + + for (var i = 0; i < 64; i++) { + var t = ffloor((YQT[i]*sf+50)/100); + if (t < 1) { + t = 1; + } else if (t > 255) { + t = 255; + } + YTable[ZigZag[i]] = t; + } + var UVQT = [ + 17, 18, 24, 47, 99, 99, 99, 99, + 18, 21, 26, 66, 99, 99, 99, 99, + 24, 26, 56, 99, 99, 99, 99, 99, + 47, 66, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99 + ]; + for (var j = 0; j < 64; j++) { + var u = ffloor((UVQT[j]*sf+50)/100); + if (u < 1) { + u = 1; + } else if (u > 255) { + u = 255; + } + UVTable[ZigZag[j]] = u; + } + var aasf = [ + 1.0, 1.387039845, 1.306562965, 1.175875602, + 1.0, 0.785694958, 0.541196100, 0.275899379 + ]; + var k = 0; + for (var row = 0; row < 8; row++) + { + for (var col = 0; col < 8; col++) + { + fdtbl_Y[k] = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); + fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); + k++; + } + } + } + + function computeHuffmanTbl(nrcodes, std_table){ + var codevalue = 0; + var pos_in_table = 0; + var HT = new Array(); + for (var k = 1; k <= 16; k++) { + for (var j = 1; j <= nrcodes[k]; j++) { + HT[std_table[pos_in_table]] = []; + HT[std_table[pos_in_table]][0] = codevalue; + HT[std_table[pos_in_table]][1] = k; + pos_in_table++; + codevalue++; + } + codevalue*=2; + } + return HT; + } + + function initHuffmanTbl() + { + YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values); + UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values); + YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values); + UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values); + } + + function initCategoryNumber() + { + var nrlower = 1; + var nrupper = 2; + for (var cat = 1; cat <= 15; cat++) { + //Positive numbers + for (var nr = nrlower; nr>0] = 38470 * i; + RGB_YUV_TABLE[(i+ 512)>>0] = 7471 * i + 0x8000; + RGB_YUV_TABLE[(i+ 768)>>0] = -11059 * i; + RGB_YUV_TABLE[(i+1024)>>0] = -21709 * i; + RGB_YUV_TABLE[(i+1280)>>0] = 32768 * i + 0x807FFF; + RGB_YUV_TABLE[(i+1536)>>0] = -27439 * i; + RGB_YUV_TABLE[(i+1792)>>0] = - 5329 * i; + } + } + + // IO functions + function writeBits(bs) + { + var value = bs[0]; + var posval = bs[1]-1; + while ( posval >= 0 ) { + if (value & (1 << posval) ) { + bytenew |= (1 << bytepos); + } + posval--; + bytepos--; + if (bytepos < 0) { + if (bytenew == 0xFF) { + writeByte(0xFF); + writeByte(0); + } + else { + writeByte(bytenew); + } + bytepos=7; + bytenew=0; + } + } + } + + function writeByte(value) + { + //byteout.push(clt[value]); // write char directly instead of converting later + byteout.push(value); + } + + function writeWord(value) + { + writeByte((value>>8)&0xFF); + writeByte((value )&0xFF); + } + + // DCT & quantization core + function fDCTQuant(data, fdtbl) + { + var d0, d1, d2, d3, d4, d5, d6, d7; + /* Pass 1: process rows. */ + var dataOff=0; + var i; + var I8 = 8; + var I64 = 64; + for (i=0; i 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0); + //outputfDCTQuant[i] = fround(fDCTQuant); + + } + return outputfDCTQuant; + } + + function writeAPP0() + { + writeWord(0xFFE0); // marker + writeWord(16); // length + writeByte(0x4A); // J + writeByte(0x46); // F + writeByte(0x49); // I + writeByte(0x46); // F + writeByte(0); // = "JFIF",'\0' + writeByte(1); // versionhi + writeByte(1); // versionlo + writeByte(0); // xyunits + writeWord(1); // xdensity + writeWord(1); // ydensity + writeByte(0); // thumbnwidth + writeByte(0); // thumbnheight + } + + function writeAPP1(exifBuffer) { + if (!exifBuffer) return; + + writeWord(0xFFE1); // APP1 marker + + if (exifBuffer[0] === 0x45 && + exifBuffer[1] === 0x78 && + exifBuffer[2] === 0x69 && + exifBuffer[3] === 0x66) { + // Buffer already starts with EXIF, just use it directly + writeWord(exifBuffer.length + 2); // length is buffer + length itself! + } else { + // Buffer doesn't start with EXIF, write it for them + writeWord(exifBuffer.length + 5 + 2); // length is buffer + EXIF\0 + length itself! + writeByte(0x45); // E + writeByte(0x78); // X + writeByte(0x69); // I + writeByte(0x66); // F + writeByte(0); // = "EXIF",'\0' + } + + for (var i = 0; i < exifBuffer.length; i++) { + writeByte(exifBuffer[i]); + } + } + + function writeSOF0(width, height) + { + writeWord(0xFFC0); // marker + writeWord(17); // length, truecolor YUV JPG + writeByte(8); // precision + writeWord(height); + writeWord(width); + writeByte(3); // nrofcomponents + writeByte(1); // IdY + writeByte(0x11); // HVY + writeByte(0); // QTY + writeByte(2); // IdU + writeByte(0x11); // HVU + writeByte(1); // QTU + writeByte(3); // IdV + writeByte(0x11); // HVV + writeByte(1); // QTV + } + + function writeDQT() + { + writeWord(0xFFDB); // marker + writeWord(132); // length + writeByte(0); + for (var i=0; i<64; i++) { + writeByte(YTable[i]); + } + writeByte(1); + for (var j=0; j<64; j++) { + writeByte(UVTable[j]); + } + } + + function writeDHT() + { + writeWord(0xFFC4); // marker + writeWord(0x01A2); // length + + writeByte(0); // HTYDCinfo + for (var i=0; i<16; i++) { + writeByte(std_dc_luminance_nrcodes[i+1]); + } + for (var j=0; j<=11; j++) { + writeByte(std_dc_luminance_values[j]); + } + + writeByte(0x10); // HTYACinfo + for (var k=0; k<16; k++) { + writeByte(std_ac_luminance_nrcodes[k+1]); + } + for (var l=0; l<=161; l++) { + writeByte(std_ac_luminance_values[l]); + } + + writeByte(1); // HTUDCinfo + for (var m=0; m<16; m++) { + writeByte(std_dc_chrominance_nrcodes[m+1]); + } + for (var n=0; n<=11; n++) { + writeByte(std_dc_chrominance_values[n]); + } + + writeByte(0x11); // HTUACinfo + for (var o=0; o<16; o++) { + writeByte(std_ac_chrominance_nrcodes[o+1]); + } + for (var p=0; p<=161; p++) { + writeByte(std_ac_chrominance_values[p]); + } + } + + function writeSOS() + { + writeWord(0xFFDA); // marker + writeWord(12); // length + writeByte(3); // nrofcomponents + writeByte(1); // IdY + writeByte(0); // HTY + writeByte(2); // IdU + writeByte(0x11); // HTU + writeByte(3); // IdV + writeByte(0x11); // HTV + writeByte(0); // Ss + writeByte(0x3f); // Se + writeByte(0); // Bf + } + + function processDU(CDU, fdtbl, DC, HTDC, HTAC){ + var EOB = HTAC[0x00]; + var M16zeroes = HTAC[0xF0]; + var pos; + var I16 = 16; + var I63 = 63; + var I64 = 64; + var DU_DCT = fDCTQuant(CDU, fdtbl); + //ZigZag reorder + for (var j=0;j0)&&(DU[end0pos]==0); end0pos--) {}; + //end0pos = first element in reverse order !=0 + if ( end0pos == 0) { + writeBits(EOB); + return DC; + } + var i = 1; + var lng; + while ( i <= end0pos ) { + var startpos = i; + for (; (DU[i]==0) && (i<=end0pos); ++i) {} + var nrzeroes = i-startpos; + if ( nrzeroes >= I16 ) { + lng = nrzeroes>>4; + for (var nrmarker=1; nrmarker <= lng; ++nrmarker) + writeBits(M16zeroes); + nrzeroes = nrzeroes&0xF; + } + pos = 32767+DU[i]; + writeBits(HTAC[(nrzeroes<<4)+category[pos]]); + writeBits(bitcode[pos]); + i++; + } + if ( end0pos != I63 ) { + writeBits(EOB); + } + return DC; + } + + function initCharLookupTable(){ + var sfcc = String.fromCharCode; + for(var i=0; i < 256; i++){ ///// ACHTUNG // 255 + clt[i] = sfcc(i); + } + } + + this.encode = function(image,quality) // image data object + { + var time_start = new Date().getTime(); + + if(quality) setQuality(quality); + + // Initialize bit writer + byteout = new Array(); + bytenew=0; + bytepos=7; + + // Add JPEG headers + writeWord(0xFFD8); // SOI + writeAPP0(); + writeAPP1(image.exifBuffer); + writeDQT(); + writeSOF0(image.width,image.height); + writeDHT(); + writeSOS(); + + + // Encode 8x8 macroblocks + var DCY=0; + var DCU=0; + var DCV=0; + + bytenew=0; + bytepos=7; + + + this.encode.displayName = "_encode_"; + + var imageData = image.data; + var width = image.width; + var height = image.height; + + var quadWidth = width*4; + var tripleWidth = width*3; + + var x, y = 0; + var r, g, b; + var start,p, col,row,pos; + while(y < height){ + x = 0; + while(x < quadWidth){ + start = quadWidth * y + x; + p = start; + col = -1; + row = 0; + + for(pos=0; pos < 64; pos++){ + row = pos >> 3;// /8 + col = ( pos & 7 ) * 4; // %8 + p = start + ( row * quadWidth ) + col; + + if(y+row >= height){ // padding bottom + p-= (quadWidth*(y+1+row-height)); + } + + if(x+col >= quadWidth){ // padding right + p-= ((x+col) - quadWidth +4) + } + + r = imageData[ p++ ]; + g = imageData[ p++ ]; + b = imageData[ p++ ]; + + + /* // calculate YUV values dynamically + YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80 + UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b)); + VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b)); + */ + + // use lookup table (slightly faster) + YDU[pos] = ((RGB_YUV_TABLE[r] + RGB_YUV_TABLE[(g + 256)>>0] + RGB_YUV_TABLE[(b + 512)>>0]) >> 16)-128; + UDU[pos] = ((RGB_YUV_TABLE[(r + 768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128; + VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128; + + } + + DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + x+=32; + } + y+=8; + } + + + //////////////////////////////////////////////////////////////// + + // Do the bit alignment of the EOI marker + if ( bytepos >= 0 ) { + var fillbits = []; + fillbits[1] = bytepos+1; + fillbits[0] = (1<<(bytepos+1))-1; + writeBits(fillbits); + } + + writeWord(0xFFD9); //EOI + + if (typeof module === 'undefined') return new Uint8Array(byteout); + return Buffer.from(byteout); + + var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join('')); + + byteout = []; + + // benchmarking + var duration = new Date().getTime() - time_start; + //console.log('Encoding time: '+ duration + 'ms'); + // + + return jpegDataUri + } + + function setQuality(quality){ + if (quality <= 0) { + quality = 1; + } + if (quality > 100) { + quality = 100; + } + + if(currentQuality == quality) return // don't recalc if unchanged + + var sf = 0; + if (quality < 50) { + sf = Math.floor(5000 / quality); + } else { + sf = Math.floor(200 - quality*2); + } + + initQuantTables(sf); + currentQuality = quality; + //console.log('Quality set to: '+quality +'%'); + } + + function init(){ + var time_start = new Date().getTime(); + if(!quality) quality = 50; + // Create tables + initCharLookupTable() + initHuffmanTbl(); + initCategoryNumber(); + initRGBYUVTable(); + + setQuality(quality); + var duration = new Date().getTime() - time_start; + //console.log('Initialization '+ duration + 'ms'); + } + + init(); + +}; + +if (typeof module !== 'undefined') { + module.exports = encode; +} else if (typeof window !== 'undefined') { + window['jpeg-js'] = window['jpeg-js'] || {}; + window['jpeg-js'].encode = encode; +} + +function encode(imgData, qu) { + if (typeof qu === 'undefined') qu = 50; + var encoder = new JPEGEncoder(qu); + var data = encoder.encode(imgData, qu); + return { + data: data, + width: imgData.width, + height: imgData.height + }; +} + +// helper function to get the imageData of an existing image on the current page. +function getImageDataFromImage(idOrElement){ + var theImg = (typeof(idOrElement)=='string')? document.getElementById(idOrElement):idOrElement; + var cvs = document.createElement('canvas'); + cvs.width = theImg.width; + cvs.height = theImg.height; + var ctx = cvs.getContext("2d"); + ctx.drawImage(theImg,0,0); + + return (ctx.getImageData(0, 0, cvs.width, cvs.height)); +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/package.json new file mode 100644 index 00000000..b1d05bb5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/jpeg-js/package.json @@ -0,0 +1,64 @@ +{ + "_args": [ + [ + "jpeg-js@0.4.3", + "/tmp/repository/main" + ] + ], + "_from": "jpeg-js@0.4.3", + "_id": "jpeg-js@0.4.3", + "_inBundle": false, + "_integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==", + "_location": "/jpeg-js", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "jpeg-js@0.4.3", + "name": "jpeg-js", + "escapedName": "jpeg-js", + "rawSpec": "0.4.3", + "saveSpec": null, + "fetchSpec": "0.4.3" + }, + "_requiredBy": [ + "/playwright" + ], + "_resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", + "_spec": "0.4.3", + "_where": "/tmp/repository/main", + "author": { + "name": "Eugene Ware", + "email": "eugene@noblesamurai.com" + }, + "bugs": { + "url": "https://github.com/eugeneware/jpeg-js/issues" + }, + "dependencies": {}, + "description": "A pure javascript JPEG encoder and decoder", + "devDependencies": { + "jest": "^25.4.0" + }, + "homepage": "https://github.com/eugeneware/jpeg-js#readme", + "keywords": [ + "jpeg", + "jpg", + "encoder", + "decoder", + "codec", + "image", + "javascript", + "js" + ], + "license": "BSD-3-Clause", + "main": "index.js", + "name": "jpeg-js", + "repository": { + "type": "git", + "url": "git+https://github.com/eugeneware/jpeg-js.git" + }, + "scripts": { + "test": "jest --testMatch=**/test/*.js" + }, + "version": "0.4.3" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/HISTORY.md new file mode 100644 index 00000000..0f4cc31a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/HISTORY.md @@ -0,0 +1,25 @@ +1.1.0 / 2019-05-07 +================== + + * Use `tsscmp` module for timing-safe signature verification + +1.0.3 / 2018-09-12 +================== + + * perf: enable strict mode + +1.0.2 / 2017-08-26 +================== + + * perf: improve comparison speed + +1.0.1 / 2014-05-07 +================== + + * Readme changes + * Update repository for organization move + +1.0.0 / 2013-12-21 +================== + + * Remove default key generation and associated expectations diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/LICENSE new file mode 100644 index 00000000..38b64a17 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2011-2014 Jed Schmidt (http://jedschmidt.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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/README.md new file mode 100644 index 00000000..925ecef4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/README.md @@ -0,0 +1,103 @@ +# keygrip + +[![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] + +Keygrip is a [node.js](http://nodejs.org/) module for signing and verifying data (such as cookies or URLs) through a rotating credential system, in which new server keys can be added and old ones removed regularly, without invalidating client credentials. + +## Install + + $ npm install keygrip + +## API + +### keys = new Keygrip([keylist], [hmacAlgorithm], [encoding]) + +This creates a new Keygrip based on the provided keylist, an array of secret keys used for SHA1 HMAC digests. `keylist` is obligatory. `hmacAlgorithm` defaults to `'sha1'` and `encoding` defaults to `'base64'`. + +Note that the `new` operator is also optional, so all of the following will work when `Keygrip = require("keygrip")`: + +```javascript +keys = new Keygrip(["SEKRIT2", "SEKRIT1"]) +keys = Keygrip(["SEKRIT2", "SEKRIT1"]) +keys = require("keygrip")() +keys = Keygrip(["SEKRIT2", "SEKRIT1"], 'sha256', 'hex') +keys = Keygrip(["SEKRIT2", "SEKRIT1"], 'sha256') +keys = Keygrip(["SEKRIT2", "SEKRIT1"], undefined, 'hex') +``` + +The keylist is an array of all valid keys for signing, in descending order of freshness; new keys should be `unshift`ed into the array and old keys should be `pop`ped. + +The tradeoff here is that adding more keys to the keylist allows for more granular freshness for key validation, at the cost of a more expensive worst-case scenario for old or invalid hashes. + +Keygrip keeps a reference to this array to automatically reflect any changes. This reference is stored using a closure to prevent external access. + +### keys.sign(data) + +This creates a SHA1 HMAC based on the _first_ key in the keylist, and outputs it as a 27-byte url-safe base64 digest (base64 without padding, replacing `+` with `-` and `/` with `_`). + +### keys.index(data, digest) + +This loops through all of the keys currently in the keylist until the digest of the current key matches the given digest, at which point the current index is returned. If no key is matched, `-1` is returned. + +The idea is that if the index returned is greater than `0`, the data should be re-signed to prevent premature credential invalidation, and enable better performance for subsequent challenges. + +### keys.verify(data, digest) + +This uses `index` to return `true` if the digest matches any existing keys, and `false` otherwise. + +## Example + +```javascript +// ./test.js +var assert = require("assert") + , Keygrip = require("keygrip") + , keylist, keys, hash, index + +// but we're going to use our list. +// (note that the 'new' operator is optional) +keylist = ["SEKRIT3", "SEKRIT2", "SEKRIT1"] +keys = Keygrip(keylist) +// .sign returns the hash for the first key +// all hashes are SHA1 HMACs in url-safe base64 +hash = keys.sign("bieberschnitzel") +assert.ok(/^[\w\-]{27}$/.test(hash)) + +// .index returns the index of the first matching key +index = keys.index("bieberschnitzel", hash) +assert.equal(index, 0) + +// .verify returns the a boolean indicating a matched key +matched = keys.verify("bieberschnitzel", hash) +assert.ok(matched) + +index = keys.index("bieberschnitzel", "o_O") +assert.equal(index, -1) + +// rotate a new key in, and an old key out +keylist.unshift("SEKRIT4") +keylist.pop() + +// if index > 0, it's time to re-sign +index = keys.index("bieberschnitzel", hash) +assert.equal(index, 1) +hash = keys.sign("bieberschnitzel") +``` + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/keygrip.svg +[npm-url]: https://npmjs.org/package/keygrip +[travis-image]: https://img.shields.io/travis/crypto-utils/keygrip/master.svg +[travis-url]: https://travis-ci.org/crypto-utils/keygrip +[coveralls-image]: https://img.shields.io/coveralls/crypto-utils/keygrip/master.svg +[coveralls-url]: https://coveralls.io/r/crypto-utils/keygrip +[downloads-image]: https://img.shields.io/npm/dm/keygrip.svg +[downloads-url]: https://npmjs.org/package/keygrip +[node-version-image]: https://img.shields.io/node/v/keygrip.svg +[node-version-url]: https://nodejs.org/en/download/ diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/index.js new file mode 100644 index 00000000..dbdb1e74 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/index.js @@ -0,0 +1,51 @@ +/*! + * keygrip + * Copyright(c) 2011-2014 Jed Schmidt + * MIT Licensed + */ + +'use strict' + +var compare = require('tsscmp') +var crypto = require("crypto") + +function Keygrip(keys, algorithm, encoding) { + if (!algorithm) algorithm = "sha1"; + if (!encoding) encoding = "base64"; + if (!(this instanceof Keygrip)) return new Keygrip(keys, algorithm, encoding) + + if (!keys || !(0 in keys)) { + throw new Error("Keys must be provided.") + } + + function sign(data, key) { + return crypto + .createHmac(algorithm, key) + .update(data).digest(encoding) + .replace(/\/|\+|=/g, function(x) { + return ({ "/": "_", "+": "-", "=": "" })[x] + }) + } + + this.sign = function(data){ return sign(data, keys[0]) } + + this.verify = function(data, digest) { + return this.index(data, digest) > -1 + } + + this.index = function(data, digest) { + for (var i = 0, l = keys.length; i < l; i++) { + if (compare(digest, sign(data, keys[i]))) { + return i + } + } + + return -1 + } +} + +Keygrip.sign = Keygrip.verify = Keygrip.index = function() { + throw new Error("Usage: require('keygrip')()") +} + +module.exports = Keygrip diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/package.json new file mode 100644 index 00000000..73a3eb2c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/keygrip/package.json @@ -0,0 +1,63 @@ +{ + "_args": [ + [ + "keygrip@1.1.0", + "/tmp/repository/main" + ] + ], + "_from": "keygrip@1.1.0", + "_id": "keygrip@1.1.0", + "_inBundle": false, + "_integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "_location": "/keygrip", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "keygrip@1.1.0", + "name": "keygrip", + "escapedName": "keygrip", + "rawSpec": "1.1.0", + "saveSpec": null, + "fetchSpec": "1.1.0" + }, + "_requiredBy": [ + "/cookies" + ], + "_resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "_spec": "1.1.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/crypto-utils/keygrip/issues" + }, + "dependencies": { + "tsscmp": "1.0.6" + }, + "description": "Key signing and verification for rotated credentials", + "devDependencies": { + "mocha": "6.1.4", + "nyc": "14.0.0" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js" + ], + "homepage": "https://github.com/crypto-utils/keygrip#readme", + "license": "MIT", + "name": "keygrip", + "repository": { + "type": "git", + "url": "git+https://github.com/crypto-utils/keygrip.git" + }, + "scripts": { + "test": "mocha --reporter spec test/", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "test-travis": "nyc --reporter=text npm test" + }, + "version": "1.1.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/History.md new file mode 100644 index 00000000..9f01d71b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/History.md @@ -0,0 +1,60 @@ + +4.1.0 / 2018-05-22 +================== + + * improve: reduce stack trace by removing useless function call (#95) + +4.0.0 / 2017-04-12 +================== + + * remove `any-promise` as a dependency + +3.2.1 / 2016-10-26 +================== + + * revert add variadric support #65 - introduced an unintended breaking change + +3.2.0 / 2016-10-25 +================== + + * fix #60 infinite loop when calling next https://github.com/koajs/compose/pull/61 + * add variadric support https://github.com/koajs/compose/pull/65 + +3.1.0 / 2016-03-17 +================== + + * add linting w/ standard + * use `any-promise` so that the promise engine is configurable + +3.0.0 / 2015-10-19 +================== + + * change middleware signature to `async (ctx, next) => await next()` for `koa@2`. + See https://github.com/koajs/compose/pull/27 for more information. + +2.3.0 / 2014-05-01 +================== + + * remove instrumentation + +2.2.0 / 2014-01-22 +================== + + * add `fn._name` for debugging + +2.1.0 / 2013-12-22 +================== + + * add debugging support + * improve performance ~15% + +2.0.1 / 2013-12-21 +================== + + * update co to v3 + * use generator delegation + +2.0.0 / 2013-11-07 +================== + + * change middleware signature expected diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/Readme.md new file mode 100644 index 00000000..8fa6a392 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/Readme.md @@ -0,0 +1,40 @@ + +# koa-compose + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][codecov-image]][codecov-url] +[![Dependency Status][david-image]][david-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + + Compose middleware. + +## Installation + +```js +$ npm install koa-compose +``` + +## API + +### compose([a, b, c, ...]) + + Compose the given middleware and return middleware. + +## License + + MIT + +[npm-image]: https://img.shields.io/npm/v/koa-compose.svg?style=flat-square +[npm-url]: https://npmjs.org/package/koa-compose +[travis-image]: https://img.shields.io/travis/koajs/compose/next.svg?style=flat-square +[travis-url]: https://travis-ci.org/koajs/compose +[codecov-image]: https://img.shields.io/codecov/c/github/koajs/compose/next.svg?style=flat-square +[codecov-url]: https://codecov.io/github/koajs/compose +[david-image]: http://img.shields.io/david/koajs/compose.svg?style=flat-square +[david-url]: https://david-dm.org/koajs/compose +[license-image]: http://img.shields.io/npm/l/koa-compose.svg?style=flat-square +[license-url]: LICENSE +[downloads-image]: http://img.shields.io/npm/dm/koa-compose.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/koa-compose diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/index.js new file mode 100644 index 00000000..5cdc7faa --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/index.js @@ -0,0 +1,48 @@ +'use strict' + +/** + * Expose compositor. + */ + +module.exports = compose + +/** + * Compose `middleware` returning + * a fully valid middleware comprised + * of all those which are passed. + * + * @param {Array} middleware + * @return {Function} + * @api public + */ + +function compose (middleware) { + if (!Array.isArray(middleware)) throw new TypeError('Middleware stack must be an array!') + for (const fn of middleware) { + if (typeof fn !== 'function') throw new TypeError('Middleware must be composed of functions!') + } + + /** + * @param {Object} context + * @return {Promise} + * @api public + */ + + return function (context, next) { + // last called middleware # + let index = -1 + return dispatch(0) + function dispatch (i) { + if (i <= index) return Promise.reject(new Error('next() called multiple times')) + index = i + let fn = middleware[i] + if (i === middleware.length) fn = next + if (!fn) return Promise.resolve() + try { + return Promise.resolve(fn(context, dispatch.bind(null, i + 1))); + } catch (err) { + return Promise.reject(err) + } + } + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/package.json new file mode 100644 index 00000000..66633da4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-compose/package.json @@ -0,0 +1,67 @@ +{ + "_args": [ + [ + "koa-compose@4.1.0", + "/tmp/repository/main" + ] + ], + "_from": "koa-compose@4.1.0", + "_id": "koa-compose@4.1.0", + "_inBundle": false, + "_integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "_location": "/koa-compose", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "koa-compose@4.1.0", + "name": "koa-compose", + "escapedName": "koa-compose", + "rawSpec": "4.1.0", + "saveSpec": null, + "fetchSpec": "4.1.0" + }, + "_requiredBy": [ + "/@koa/router", + "/koa", + "/koa-mount" + ], + "_resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "_spec": "4.1.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/koajs/compose/issues" + }, + "dependencies": {}, + "description": "compose Koa middleware", + "devDependencies": { + "codecov": "^3.0.0", + "jest": "^21.0.0", + "matcha": "^0.7.0", + "standard": "^10.0.3" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/koajs/compose#readme", + "jest": { + "testEnvironment": "node" + }, + "keywords": [ + "koa", + "middleware", + "compose" + ], + "license": "MIT", + "name": "koa-compose", + "repository": { + "type": "git", + "url": "git+https://github.com/koajs/compose.git" + }, + "scripts": { + "bench": "matcha bench/bench.js", + "lint": "standard --fix .", + "test": "jest --forceExit --coverage" + }, + "version": "4.1.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/.npmignore b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/.npmignore new file mode 100644 index 00000000..3c3629e6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/.travis.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/.travis.yml new file mode 100644 index 00000000..82b24eeb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "4" + - "5" +script: "npm run test" diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/LICENSE new file mode 100644 index 00000000..03d4071e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 yunsong + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/README.md new file mode 100644 index 00000000..79cb65d4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/README.md @@ -0,0 +1,136 @@ + +# koa-convert + +[![npm version](https://img.shields.io/npm/v/koa-convert.svg)](https://npmjs.org/package/koa-convert) +[![build status](https://travis-ci.org/gyson/koa-convert.svg)](https://travis-ci.org/gyson/koa-convert) + +Convert koa legacy ( 0.x & 1.x ) generator middleware to modern promise middleware ( 2.x ). + +It could also convert modern promise middleware back to legacy generator middleware ( useful to help modern middleware support koa 0.x or 1.x ). + +## Note + +It should be able to convert any legacy generator middleware to modern promise middleware ( or convert it back ). + +Please let me know ( send a issue ) if you fail to do so. + +## Installation + +``` +$ npm install koa-convert +``` + +## Usage + +```js +const Koa = require('koa') // koa v2.x +const convert = require('koa-convert') +const app = new Koa() + +app.use(modernMiddleware) + +app.use(convert(legacyMiddleware)) + +app.use(convert.compose(legacyMiddleware, modernMiddleware)) + +function * legacyMiddleware (next) { + // before + yield next + // after +} + +function modernMiddleware (ctx, next) { + // before + return next().then(() => { + // after + }) +} +``` + +## Distinguish legacy and modern middleware + +In koa 0.x and 1.x ( without experimental flag ), `app.use` has an assertion that all ( legacy ) middleware must be generator function and it's tested with `fn.constructor.name == 'GeneratorFunction'` at [here](https://github.com/koajs/koa/blob/7fe29d92f1e826d9ce36029e1b9263b94cba8a7c/lib/application.js#L105). + +Therefore, we can distinguish legacy and modern middleware with `fn.constructor.name == 'GeneratorFunction'`. + +## Migration + +`app.use(legacyMiddleware)` is everywhere in 0.x and 1.x and it would be painful to manually change all of them to `app.use(convert(legacyMiddleware))`. + +You can use following snippet to make migration easier. + +```js +const _use = app.use +app.use = x => _use.call(app, convert(x)) +``` + +The above snippet will override `app.use` method and implicitly convert all legacy generator middleware to modern promise middleware. + +Therefore, you can have both `app.use(modernMiddleware)` and `app.use(legacyMiddleware)` and your 0.x or 1.x should work without modification. + +Complete example: + +```js +const Koa = require('koa') // v2.x +const convert = require('koa-convert') +const app = new Koa() + +// ---------- override app.use method ---------- + +const _use = app.use +app.use = x => _use.call(app, convert(x)) + +// ---------- end ---------- + +app.use(modernMiddleware) + +// this will be converted to modern promise middleware implicitly +app.use(legacyMiddleware) + +function * legacyMiddleware (next) { + // before + yield next + // after +} + +function modernMiddleware (ctx, next) { + // before + return next().then(() => { + // after + }) +} +``` + +## API + +#### `convert()` + +Convert legacy generator middleware to modern promise middleware. + +```js +modernMiddleware = convert(legacyMiddleware) +``` + +#### `convert.compose()` + +Convert and compose multiple middleware (could mix legacy and modern ones) and return modern promise middleware. + +```js +composedModernMiddleware = convert.compose(legacyMiddleware, modernMiddleware) +// or +composedModernMiddleware = convert.compose([legacyMiddleware, modernMiddleware]) +``` + +#### `convert.back()` + +Convert modern promise middleware back to legacy generator middleware. + +This is useful to help modern promise middleware support koa 0.x or 1.x. + +```js +legacyMiddleware = convert.back(modernMiddleware) +``` + +## License + +MIT diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/index.js new file mode 100644 index 00000000..5fff6b5c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/index.js @@ -0,0 +1,60 @@ +'use strict' + +const co = require('co') +const compose = require('koa-compose') + +module.exports = convert + +function convert (mw) { + if (typeof mw !== 'function') { + throw new TypeError('middleware must be a function') + } + if (mw.constructor.name !== 'GeneratorFunction') { + // assume it's Promise-based middleware + return mw + } + const converted = function (ctx, next) { + return co.call(ctx, mw.call(ctx, createGenerator(next))) + } + converted._name = mw._name || mw.name + return converted +} + +function * createGenerator (next) { + return yield next() +} + +// convert.compose(mw, mw, mw) +// convert.compose([mw, mw, mw]) +convert.compose = function (arr) { + if (!Array.isArray(arr)) { + arr = Array.from(arguments) + } + return compose(arr.map(convert)) +} + +convert.back = function (mw) { + if (typeof mw !== 'function') { + throw new TypeError('middleware must be a function') + } + if (mw.constructor.name === 'GeneratorFunction') { + // assume it's generator middleware + return mw + } + const converted = function * (next) { + let ctx = this + let called = false + // no need try...catch here, it's ok even `mw()` throw exception + yield Promise.resolve(mw(ctx, function () { + if (called) { + // guard against multiple next() calls + // https://github.com/koajs/compose/blob/4e3e96baf58b817d71bd44a8c0d78bb42623aa95/index.js#L36 + return Promise.reject(new Error('next() called multiple times')) + } + called = true + return co.call(ctx, next) + })) + } + converted._name = mw._name || mw.name + return converted +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/History.md new file mode 100644 index 00000000..944143c7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/History.md @@ -0,0 +1,50 @@ + +3.2.1 / 2016-10-26 +================== + + * revert add variadric support #65 - introduced an unintended breaking change + +3.2.0 / 2016-10-25 +================== + + * fix #60 infinite loop when calling next https://github.com/koajs/compose/pull/61 + * add variadric support https://github.com/koajs/compose/pull/65 + +3.1.0 / 2016-03-17 +================== + + * add linting w/ standard + * use `any-promise` so that the promise engine is configurable + +3.0.0 / 2015-10-19 +================== + + * change middleware signature to `async (ctx, next) => await next()` for `koa@2`. + See https://github.com/koajs/compose/pull/27 for more information. + +2.3.0 / 2014-05-01 +================== + + * remove instrumentation + +2.2.0 / 2014-01-22 +================== + + * add `fn._name` for debugging + +2.1.0 / 2013-12-22 +================== + + * add debugging support + * improve performance ~15% + +2.0.1 / 2013-12-21 +================== + + * update co to v3 + * use generator delegation + +2.0.0 / 2013-11-07 +================== + + * change middleware signature expected diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/Readme.md new file mode 100644 index 00000000..8fa6a392 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/Readme.md @@ -0,0 +1,40 @@ + +# koa-compose + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][codecov-image]][codecov-url] +[![Dependency Status][david-image]][david-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + + Compose middleware. + +## Installation + +```js +$ npm install koa-compose +``` + +## API + +### compose([a, b, c, ...]) + + Compose the given middleware and return middleware. + +## License + + MIT + +[npm-image]: https://img.shields.io/npm/v/koa-compose.svg?style=flat-square +[npm-url]: https://npmjs.org/package/koa-compose +[travis-image]: https://img.shields.io/travis/koajs/compose/next.svg?style=flat-square +[travis-url]: https://travis-ci.org/koajs/compose +[codecov-image]: https://img.shields.io/codecov/c/github/koajs/compose/next.svg?style=flat-square +[codecov-url]: https://codecov.io/github/koajs/compose +[david-image]: http://img.shields.io/david/koajs/compose.svg?style=flat-square +[david-url]: https://david-dm.org/koajs/compose +[license-image]: http://img.shields.io/npm/l/koa-compose.svg?style=flat-square +[license-url]: LICENSE +[downloads-image]: http://img.shields.io/npm/dm/koa-compose.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/koa-compose diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/index.js new file mode 100644 index 00000000..431c0ffd --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/index.js @@ -0,0 +1,52 @@ +'use strict' + +const Promise = require('any-promise') + +/** + * Expose compositor. + */ + +module.exports = compose + +/** + * Compose `middleware` returning + * a fully valid middleware comprised + * of all those which are passed. + * + * @param {Array} middleware + * @return {Function} + * @api public + */ + +function compose (middleware) { + if (!Array.isArray(middleware)) throw new TypeError('Middleware stack must be an array!') + for (const fn of middleware) { + if (typeof fn !== 'function') throw new TypeError('Middleware must be composed of functions!') + } + + /** + * @param {Object} context + * @return {Promise} + * @api public + */ + + return function (context, next) { + // last called middleware # + let index = -1 + return dispatch(0) + function dispatch (i) { + if (i <= index) return Promise.reject(new Error('next() called multiple times')) + index = i + let fn = middleware[i] + if (i === middleware.length) fn = next + if (!fn) return Promise.resolve() + try { + return Promise.resolve(fn(context, function next () { + return dispatch(i + 1) + })) + } catch (err) { + return Promise.reject(err) + } + } + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/package.json new file mode 100644 index 00000000..8a02cb38 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/node_modules/koa-compose/package.json @@ -0,0 +1,71 @@ +{ + "_args": [ + [ + "koa-compose@3.2.1", + "/tmp/repository/main" + ] + ], + "_from": "koa-compose@3.2.1", + "_id": "koa-compose@3.2.1", + "_inBundle": false, + "_integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "_location": "/koa-convert/koa-compose", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "koa-compose@3.2.1", + "name": "koa-compose", + "escapedName": "koa-compose", + "rawSpec": "3.2.1", + "saveSpec": null, + "fetchSpec": "3.2.1" + }, + "_requiredBy": [ + "/koa-convert" + ], + "_resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", + "_spec": "3.2.1", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/koajs/compose/issues" + }, + "dependencies": { + "any-promise": "^1.1.0" + }, + "description": "compose Koa middleware", + "devDependencies": { + "co": "^4.6.0", + "istanbul": "^0.4.2", + "matcha": "^0.7.0", + "mocha": "^3.1.2", + "should": "^2.0.0", + "standard": "^8.4.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/koajs/compose#readme", + "keywords": [ + "koa", + "middleware", + "compose" + ], + "license": "MIT", + "name": "koa-compose", + "publishConfig": { + "tag": "next" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/koajs/compose.git" + }, + "scripts": { + "bench": "matcha bench/bench.js", + "lint": "standard index.js test/*.js", + "test": "mocha --require should --reporter spec", + "test-cov": "node ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- --require should", + "test-travis": "node ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha --report lcovonly -- --require should" + }, + "version": "3.2.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/package.json new file mode 100644 index 00000000..e0661e9d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/package.json @@ -0,0 +1,71 @@ +{ + "_args": [ + [ + "koa-convert@1.2.0", + "/tmp/repository/main" + ] + ], + "_from": "koa-convert@1.2.0", + "_id": "koa-convert@1.2.0", + "_inBundle": false, + "_integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "_location": "/koa-convert", + "_phantomChildren": { + "any-promise": "1.3.0" + }, + "_requested": { + "type": "version", + "registry": true, + "raw": "koa-convert@1.2.0", + "name": "koa-convert", + "escapedName": "koa-convert", + "rawSpec": "1.2.0", + "saveSpec": null, + "fetchSpec": "1.2.0" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", + "_spec": "1.2.0", + "_where": "/tmp/repository/main", + "author": { + "name": "gyson", + "email": "eilian.yunsong@gmail.com" + }, + "bugs": { + "url": "https://github.com/gyson/koa-convert/issues" + }, + "dependencies": { + "co": "^4.6.0", + "koa-compose": "^3.0.0" + }, + "description": "convert koa legacy generator-based middleware to promise-based middleware", + "devDependencies": { + "koa": "^2.0.0-alpha.2", + "koa-v1": "^1.0.0", + "mocha": "^2.3.3", + "standard": "^5.3.1", + "supertest": "^1.1.0" + }, + "engines": { + "node": ">= 4" + }, + "homepage": "https://github.com/gyson/koa-convert#readme", + "keywords": [ + "koa", + "middleware", + "convert" + ], + "license": "MIT", + "main": "index.js", + "name": "koa-convert", + "repository": { + "type": "git", + "url": "git+https://github.com/gyson/koa-convert.git" + }, + "scripts": { + "test": "standard && mocha test.js" + }, + "version": "1.2.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/test.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/test.js new file mode 100644 index 00000000..9c1f11c0 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-convert/test.js @@ -0,0 +1,254 @@ +/* global describe, it */ + +'use strict' + +const co = require('co') +const Koa = require('koa') +const KoaV1 = require('koa-v1') +const assert = require('assert') +const convert = require('./index') +const request = require('supertest') + +describe('convert()', () => { + it('should work', () => { + let call = [] + let ctx = {} + let mw = convert(function * (next) { + assert.ok(ctx === this) + call.push(1) + }) + + return mw(ctx, function () { + call.push(2) + }).then(function () { + assert.deepEqual(call, [1]) + }) + }) + + it('should inherit the original middleware name', () => { + let mw = convert(function * testing (next) {}) + assert.strictEqual(mw._name, 'testing') + }) + + it('should work with `yield next`', () => { + let call = [] + let ctx = {} + let mw = convert(function * (next) { + assert.ok(ctx === this) + call.push(1) + yield next + call.push(3) + }) + + return mw(ctx, function () { + call.push(2) + return Promise.resolve() + }).then(function () { + assert.deepEqual(call, [1, 2, 3]) + }) + }) + + it('should work with `yield* next`', () => { + let call = [] + let ctx = {} + let mw = convert(function * (next) { + assert.ok(ctx === this) + call.push(1) + yield* next + call.push(3) + }) + + return mw(ctx, function () { + call.push(2) + return Promise.resolve() + }).then(function () { + assert.deepEqual(call, [1, 2, 3]) + }) + }) +}) + +describe('convert.compose()', () => { + it('should work', () => { + let call = [] + let context = {} + let _context + let mw = convert.compose([ + function * name (next) { + call.push(1) + yield next + call.push(11) + }, + (ctx, next) => { + call.push(2) + return next().then(() => { + call.push(10) + }) + }, + function * (next) { + call.push(3) + yield* next + call.push(9) + }, + co.wrap(function * (ctx, next) { + call.push(4) + yield next() + call.push(8) + }), + function * (next) { + try { + call.push(5) + yield next + } catch (e) { + call.push(7) + } + }, + (ctx, next) => { + _context = ctx + call.push(6) + throw new Error() + } + ]) + + return mw(context).then(() => { + assert.equal(context, _context) + assert.deepEqual(call, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) + }) + }) + + it('should work too', () => { + let call = [] + let context = {} + let _context + let mw = convert.compose( + (ctx, next) => { + call.push(1) + return next().catch(() => { + call.push(4) + }) + }, + function * (next) { + call.push(2) + yield next + call.push(-1) // should not call this + }, + function * (next) { + call.push(3) + yield* next + call.push(-1) // should not call this + }, + (ctx, next) => { + _context = ctx + return Promise.reject(new Error()) + } + ) + + return mw(context).then(() => { + assert.equal(context, _context) + assert.deepEqual(call, [1, 2, 3, 4]) + }) + }) +}) + +describe('convert.back()', () => { + it('should work with koa 1', done => { + let app = new KoaV1() + + app.use(function * (next) { + this.body = [1] + yield next + this.body.push(6) + }) + + app.use(convert.back((ctx, next) => { + ctx.body.push(2) + return next().then(() => { + ctx.body.push(5) + }) + })) + + app.use(convert.back(co.wrap(function * (ctx, next) { + ctx.body.push(3) + yield next() + ctx.body.push(4) + }))) + + request(app.callback()) + .get('/') + .expect(200, [1, 2, 3, 4, 5, 6]) + .end(done) + }) + + it('should guard multiple calls', done => { + let app = new KoaV1() + + app.use(function * (next) { + try { + this.body = [1] + yield next + } catch (e) { + this.body.push(e.message) + } + }) + + app.use(convert.back(co.wrap(function * (ctx, next) { + ctx.body.push(2) + yield next() + yield next() // this should throw new Error('next() called multiple times') + }))) + + request(app.callback()) + .get('/') + .expect(200, [1, 2, 'next() called multiple times']) + .end(done) + }) + + it('should inherit the original middleware name', () => { + let mw = convert.back(function testing (ctx, next) {}) + assert.strictEqual(mw._name, 'testing') + }) +}) + +describe('migration snippet', () => { + let app = new Koa() + + // snippet + const _use = app.use + app.use = x => _use.call(app, convert(x)) + // end + + app.use((ctx, next) => { + ctx.body = [1] + return next().then(() => { + ctx.body.push(9) + }) + }) + + app.use(function * (next) { + this.body.push(2) + yield next + this.body.push(8) + }) + + app.use(function * (next) { + this.body.push(3) + yield* next + this.body.push(7) + }) + + app.use(co.wrap(function * (ctx, next) { + ctx.body.push(4) + yield next() + ctx.body.push(6) + })) + + app.use(ctx => { + ctx.body.push(5) + }) + + it('should work', done => { + request(app.callback()) + .get('/') + .expect(200, [1, 2, 3, 4, 5, 6, 7, 8, 9]) + .end(done) + }) +}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/History.md new file mode 100644 index 00000000..68222df5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/History.md @@ -0,0 +1,5 @@ + +1.0.0 / 2015-11-24 +================== + +* update to promise-based middleware diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/LICENSE new file mode 100644 index 00000000..8976b5e7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2015 Fangdun Cai <cfddream@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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/README.md new file mode 100644 index 00000000..dc60c803 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/README.md @@ -0,0 +1,65 @@ +# koa-morgan + +> HTTP request logger middleware for koa. +> [morgan] wrapper for koa's middleware. + +[![NPM version][npm-img]][npm-url] +[![NPM Downloads][downloads-image]][npm-url] +[![Build status][travis-img]][travis-url] +[![Test coverage][coveralls-img]][coveralls-url] +[![Dependency status][david-img]][david-url] +[![License][license-img]][license-url] + +## Install + +```sh +$ npm install --save koa-morgan +``` + +## Usage + +### **=1.x**, 100%, working with **morgan** and **koa-v2** + +```js +const fs = require('fs') +const Koa = require('koa') +const morgan = require('koa-morgan') + +// create a write stream (in append mode) +const accessLogStream = fs.createWriteStream(__dirname + '/access.log', + { flags: 'a' }) +const app = new Koa() + +// setup the logger +app.use(morgan('combined', { stream: accessLogStream })) + +app.use((ctx) => { + ctx.body = 'hello, world!' +}) + +app.listen(2333) +``` + +### **=0.x**, working with **koa-v1** + +```js +var koa = require('koa'); +var morgan = require('koa-morgan'); +var app = koa(); + +app.use(morgan.middleware(format, options)); + +``` + +[npm-img]: https://img.shields.io/npm/v/koa-morgan.svg?style=flat-square +[npm-url]: https://npmjs.org/package/koa-morgan +[travis-img]: https://img.shields.io/travis/koa-modules/morgan.svg?style=flat-square +[travis-url]: https://travis-ci.org/koa-modules/morgan +[coveralls-img]: https://img.shields.io/coveralls/koa-modules/morgan.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/koa-modules/morgan?branch=master +[license-img]: https://img.shields.io/badge/license-MIT-green.svg?style=flat-square +[license-url]: LICENSE +[david-img]: https://img.shields.io/david/koa-modules/morgan.svg?style=flat-square +[david-url]: https://david-dm.org/koa-modules/morgan +[downloads-image]: https://img.shields.io/npm/dm/koa-morgan.svg?style=flat-square +[morgan]: https://github.com/expressjs/morgan diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/index.js new file mode 100644 index 00000000..d5c12df9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/index.js @@ -0,0 +1,38 @@ +'use strict' + +/*! + * morgan + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014 Douglas Christopher Wilson + * Copyright(c) 2015 Fangdun Cai + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +const originalMorgan = require('morgan') + +/** + * Expose `morgan`. + */ + +module.exports = morgan + +morgan.compile = originalMorgan.compile +morgan.format = originalMorgan.format +morgan.token = originalMorgan.token + +function morgan(format, options) { + const fn = originalMorgan(format, options) + return (ctx, next) => { + return new Promise((resolve, reject) => { + fn(ctx.req, ctx.res, (err) => { + err ? reject(err) : resolve(ctx) + }) + }).then(next) + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/package.json new file mode 100644 index 00000000..049b04a7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-morgan/package.json @@ -0,0 +1,77 @@ +{ + "_args": [ + [ + "koa-morgan@1.0.1", + "/tmp/repository/main" + ] + ], + "_from": "koa-morgan@1.0.1", + "_id": "koa-morgan@1.0.1", + "_inBundle": false, + "_integrity": "sha1-CAUuDODYOdPEMXi5CluzQkvvH5k=", + "_location": "/koa-morgan", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "koa-morgan@1.0.1", + "name": "koa-morgan", + "escapedName": "koa-morgan", + "rawSpec": "1.0.1", + "saveSpec": null, + "fetchSpec": "1.0.1" + }, + "_requiredBy": [ + "/@vscode/test-web" + ], + "_resolved": "https://registry.npmjs.org/koa-morgan/-/koa-morgan-1.0.1.tgz", + "_spec": "1.0.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Fangdun Cai", + "email": "cfddream@gmail.com" + }, + "bugs": { + "url": "https://github.com/koa-modules/morgan/issues" + }, + "dependencies": { + "morgan": "^1.6.1" + }, + "description": "HTTP request logger middleware for koa", + "devDependencies": { + "co": "^4.x", + "isparta": "^4.x", + "koa": "next", + "mocha": "^2.x", + "power-assert": "^1.x", + "split": "^1.x", + "supertest": "^1.x" + }, + "enignes": { + "node": ">= 4" + }, + "files": [ + "History.md", + "LICENSE", + "README.md", + "index.js" + ], + "homepage": "https://github.com/koa-modules/morgan#readme", + "keywords": [ + "logger", + "morgan" + ], + "license": "MIT", + "main": "index.js", + "name": "koa-morgan", + "repository": { + "type": "git", + "url": "git+https://github.com/koa-modules/morgan.git" + }, + "scripts": { + "test": "mocha --reporter spec --bail --check-leaks", + "test-ci": "isparta cover node_modules/.bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/*.js", + "test-cov": "isparta cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/*.js" + }, + "version": "1.0.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/History.md new file mode 100644 index 00000000..403b2dae --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/History.md @@ -0,0 +1,64 @@ + +4.0.0 / 2018-09-26 +================== + + * feat(pkg): update deps (#68) + * travis: add node@8, node@10 + +3.0.0 / 2017-03-26 +================== + + * use async function + * bump deps + * update examples + +2.0.0 / 2016-03-07 +================== + + * update to koa v2 api (breaking koa v1) + * travis: only test on node 4+ + +1.3.0 / 2014-05-08 +================== + + * add .mountPath + +1.2.5 / 2014-03-15 + + * fix matching `/prefix` against `/prefix*` + +1.2.4 / 2014-03-25 +================== + + * use `yield* next` + * bump deps + +1.2.3 / 2014-01-12 +================== + + * optimize: compose before closure. Closes #12 + +1.2.2 / 2013-12-22 +================== + + * fix for koa 0.1.0 + * update koa-compose + +1.2.1 / 2013-12-17 +================== + + * restore prefix before going further downstream + +1.2.0 / 2013-11-29 +================== + + * add error propagation example + * add socket errors example + * add some debug() calls + * update to new middleware signature + +1.1.0 / 2013-09-08 +================== + + * add middleware mounting support + * add support for pathless mounting diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/Readme.md new file mode 100644 index 00000000..3d22b5f8 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/Readme.md @@ -0,0 +1,127 @@ +# koa-mount + + Mount other Koa applications as middleware. The `path` passed to `mount()` is stripped + from the URL temporarily until the stack unwinds. This is useful for creating entire + apps or middleware that will function correctly regardless of which path segment(s) + they should operate on. + +## Installation + +```js +$ npm install koa-mount +``` + +## Examples + + View the [./examples](examples) directory for working examples. + +### Mounting Applications + + Entire applications mounted at specific paths. For example you could mount + a blog application at "/blog", with a router that matches paths such as + "GET /", "GET /posts", and will behave properly for "GET /blog/posts" etc + when mounted. + +```js +const mount = require('koa-mount'); +const Koa = require('koa'); + +// hello + +const a = new Koa(); + +a.use(async function (ctx, next){ + await next(); + ctx.body = 'Hello'; +}); + +// world + +const b = new Koa(); + +b.use(async function (ctx, next){ + await next(); + ctx.body = 'World'; +}); + +// app + +const app = new Koa(); + +app.use(mount('/hello', a)); +app.use(mount('/world', b)); + +app.listen(3000); +console.log('listening on port 3000'); +``` + + Try the following requests: + +``` +$ GET / +Not Found + +$ GET /hello +Hello + +$ GET /world +World +``` + +### Mounting Middleware + + Mount middleware at specific paths, allowing them to operate independently + of the prefix, as they're not aware of it. + +```js +const mount = require('koa-mount'); +const Koa = require('koa'); + +async function hello(ctx, next){ + await next(); + ctx.body = 'Hello'; +} + +async function world(ctx, next){ + await next(); + ctx.body = 'World'; +} + +const app = new Koa(); + +app.use(mount('/hello', hello)); +app.use(mount('/world', world)); + +app.listen(3000); +console.log('listening on port 3000'); +``` + +### Optional Paths + + The path argument is optional, defaulting to "/": + +```js +app.use(mount(a)); +app.use(mount(b)); +``` + +## Debugging + + Use the __DEBUG__ environement variable to whitelist + koa-mount debug output: + +``` +$ DEBUG=koa-mount node myapp.js & +$ GET /foo/bar/baz + + koa-mount enter /foo/bar/baz -> /bar/baz +2s + koa-mount enter /bar/baz -> /baz +0ms + koa-mount enter /baz -> / +0ms + koa-mount leave /baz -> / +1ms + koa-mount leave /bar/baz -> /baz +0ms + koa-mount leave /foo/bar/baz -> /bar/baz +0ms +``` + +## License + + MIT diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/index.js new file mode 100644 index 00000000..12730d6e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/index.js @@ -0,0 +1,94 @@ + +/** + * Module dependencies. + */ + +const debug = require('debug')('koa-mount') +const compose = require('koa-compose') +const assert = require('assert') + +/** + * Expose `mount()`. + */ + +module.exports = mount + +/** + * Mount `app` with `prefix`, `app` + * may be a Koa application or + * middleware function. + * + * @param {String|Application|Function} prefix, app, or function + * @param {Application|Function} [app or function] + * @return {Function} + * @api public + */ + +function mount (prefix, app) { + if (typeof prefix !== 'string') { + app = prefix + prefix = '/' + } + + assert.equal(prefix[0], '/', 'mount path must begin with "/"') + + // compose + const downstream = app.middleware + ? compose(app.middleware) + : app + + // don't need to do mounting here + if (prefix === '/') return downstream + + const trailingSlash = prefix.slice(-1) === '/' + + const name = app.name || 'unnamed' + debug('mount %s %s', prefix, name) + + return async function (ctx, upstream) { + const prev = ctx.path + const newPath = match(prev) + debug('mount %s %s -> %s', prefix, name, newPath) + if (!newPath) return await upstream() + + ctx.mountPath = prefix + ctx.path = newPath + debug('enter %s -> %s', prev, ctx.path) + + await downstream(ctx, async () => { + ctx.path = prev + await upstream() + ctx.path = newPath + }) + + debug('leave %s -> %s', prev, ctx.path) + ctx.path = prev + } + + /** + * Check if `prefix` satisfies a `path`. + * Returns the new path. + * + * match('/images/', '/lkajsldkjf') => false + * match('/images', '/images') => / + * match('/images/', '/images') => false + * match('/images/', '/images/asdf') => /asdf + * + * @param {String} prefix + * @param {String} path + * @return {String|Boolean} + * @api private + */ + + function match (path) { + // does not match prefix at all + if (path.indexOf(prefix) !== 0) return false + + const newPath = path.replace(prefix, '') || '/' + if (trailingSlash) return newPath + + // `/mount` does not match `/mountlkjalskjdf` + if (newPath[0] !== '/') return false + return newPath + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/package.json new file mode 100644 index 00000000..17470071 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-mount/package.json @@ -0,0 +1,76 @@ +{ + "_args": [ + [ + "koa-mount@4.0.0", + "/tmp/repository/main" + ] + ], + "_from": "koa-mount@4.0.0", + "_id": "koa-mount@4.0.0", + "_inBundle": false, + "_integrity": "sha512-rm71jaA/P+6HeCpoRhmCv8KVBIi0tfGuO/dMKicbQnQW/YJntJ6MnnspkodoA4QstMVEZArsCphmd0bJEtoMjQ==", + "_location": "/koa-mount", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "koa-mount@4.0.0", + "name": "koa-mount", + "escapedName": "koa-mount", + "rawSpec": "4.0.0", + "saveSpec": null, + "fetchSpec": "4.0.0" + }, + "_requiredBy": [ + "/@vscode/test-web" + ], + "_resolved": "https://registry.npmjs.org/koa-mount/-/koa-mount-4.0.0.tgz", + "_spec": "4.0.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/koajs/mount/issues" + }, + "dependencies": { + "debug": "^4.0.1", + "koa-compose": "^4.1.0" + }, + "description": "Mounting middleware for koa", + "devDependencies": { + "eslint": "^3.18.0", + "eslint-config-standard": "^7.1.0", + "eslint-plugin-promise": "^3.5.0", + "eslint-plugin-standard": "^2.1.1", + "istanbul": "^0.4.5", + "koa": "^2.0.1", + "koa-static": "^3.0.0", + "mocha": "^3.2.0", + "should": "^11.2.0", + "supertest": "^3.0.0" + }, + "engines": { + "node": ">= 7.6.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/koajs/mount#readme", + "keywords": [ + "koa", + "middleware", + "mount", + "mounting" + ], + "license": "MIT", + "name": "koa-mount", + "repository": { + "type": "git", + "url": "git+https://github.com/koajs/mount.git" + }, + "scripts": { + "lint": "eslint --fix .", + "test": "NODE_ENV=test mocha --reporter spec", + "test-cov": "NODE_ENV=test istanbul cover ./node_modules/.bin/_mocha", + "test-travis": "NODE_ENV=test istanbul cover ./node_modules/.bin/_mocha --report lcovonly" + }, + "version": "4.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/History.md new file mode 100644 index 00000000..103255fd --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/History.md @@ -0,0 +1,133 @@ + +5.0.0 / 2018-06-19 +================== + + * bump deps + * fix bug that set Content-Type not working. (#105) + +4.1.2 / 2017-12-14 +================== + + * Fix issue with dots in path when using extensions array (#92) + +4.1.1 / 2017-09-25 +================== + + * Fix brotli support, closes #83 + * Fix tests + +4.1.0 / 2017-04-26 +================== + + * Add support for Cache-Control: immutable with a new "immutable" option + * Added serving of brotli versions of files + +4.0.0 / 2017-04-09 +================== + + * throw error if file not exists, closes #43 + * remove co, use async function + * bump deps + +3.3.0 / 2017-01-10 +================== + + * add extensions option + * bump deps + +3.2.0 / 2016-03-23 +================== + + * add setHeaders option + +3.1.1 / 2016-03-04 +================== + + * bump deps + * simplify scripts + +3.1.0 / 2015-10-24 +================== + + * return a promise instead of a generator + * fix: split path by path.sep instead of slash + * fix: strip root correctly on windows + * tests: resolve paths for windows + +3.0.1 / 2015-10-23 +================== + + * fix stats info when path does not finish with slash and format is enabled, closes #34 + +3.0.0 / 2015-10-21 +================== + + * bump deps + * format option defaults to true + * fix: enable format only index exists + * simplify the declarations of `format`, `gzip` + +2.0.1 / 2015-10-14 +================== + + * fix judgement of trailing slash + +2.0.0 / 2015-10-14 +================== + + * serve directories without a trailing slash, closes #27 + * when .hidden option is set, also check hidden directories, closes #17 + * bump deps: mz@2, mocha@2, koa@1 + * use resolve-path, closes #9 + * gzip version of file should not be automatically sent + * fix test: gzip.json.gz is not valid json data + +1.3.1 / 2014-09-08 +================== + + * add .maxAge alias + +1.3.0 / 2014-09-07 +================== + + * add automatically check and serve `.gz` files + * remove `finished` dependency + * refactor with `mz` + +1.2.3 / 2014-02-11 +================== + + * fix malicious path in windows + * update finished + * make assert message better + +1.2.2 / 2014-01-07 +================== + + * fix: ignore directories instead of crashing koa + +1.2.1 / 2014-01-02 +================== + + * add `content-length` header + +1.2.0 / 2013-12-27 +================== + + * add `maxage` option + +1.1.2 / 2013-12-22 +================== + + * replace deprecated ctx.error() with ctx.throw() + +1.1.1 / 2013-12-20 +================== + + * use: on-socket-error + +1.1.0 / 2013-12-19 +================== + + * add: `send` now returns the file path if sent + * add: destroy streams on socket errors to prevent fd leaks diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/LICENSE new file mode 100644 index 00000000..cd6c8b21 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2020 Koa 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/README.md new file mode 100644 index 00000000..b0e3b516 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/README.md @@ -0,0 +1,109 @@ +# [**koa-send**](https://github.com/koajs/send) + +> Static file serving middleware. + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![Dependency Status][david-image]][david-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + + +## Installation + +```js +$ npm install koa-send +``` + + +## Options + + - `maxage` Browser cache max-age in milliseconds. (defaults to `0`). + - `immutable` Tell the browser the resource is immutable and can be cached indefinitely. (defaults to `false`). + - `hidden` Allow transfer of hidden files. (defaults to `false`). + - [`root`](#root-path) Root directory to restrict file access. + - `index` Name of the index file to serve automatically when visiting the root location. (defaults to none). + - `gzip` Try to serve the gzipped version of a file automatically when `gzip` is supported by a client and if the requested file with `.gz` extension exists. (defaults to `true`). + - `brotli` Try to serve the brotli version of a file automatically when `brotli` is supported by a client and if the requested file with `.br` extension exists. (defaults to `true`). + - `format` If not `false` (defaults to `true`), format the path to serve static file servers and not require a trailing slash for directories, so that you can do both `/directory` and `/directory/`. + - [`setHeaders`](#setheaders) Function to set custom headers on response. + - `extensions` Try to match extensions from passed array to search for file when no extension is sufficed in URL. First found is served. (defaults to `false`) + +### Root path + + Note that `root` is required, defaults to `''` and will be resolved, + removing the leading `/` to make the path relative and this + path must not contain "..", protecting developers from + concatenating user input. If you plan on serving files based on + user input supply a `root` directory from which to serve from. + + For example to serve files from `./public`: + +```js +app.use(async (ctx) => { + await send(ctx, ctx.path, { root: __dirname + '/public' }); +}) +``` + + To serve developer specified files: + +```js +app.use(async (ctx) => { + await send(ctx, 'path/to/my.js'); +}) +``` + +### setHeaders + +The function is called as `fn(res, path, stats)`, where the arguments are: +* `res`: the response object. +* `path`: the resolved file path that is being sent. +* `stats`: the stats object of the file that is being sent. + +You should only use the `setHeaders` option when you wish to edit the `Cache-Control` or `Last-Modified` headers, because doing it before is useless (it's overwritten by `send`), and doing it after is too late because the headers are already sent. + +If you want to edit any other header, simply set them before calling `send`. + + +## Example + +```js +const send = require('koa-send'); +const Koa = require('koa'); +const app = new Koa(); + +// $ GET /package.json +// $ GET / + +app.use(async (ctx) => { + if ('/' == ctx.path) return ctx.body = 'Try GET /package.json'; + await send(ctx, ctx.path); +}) + +app.listen(3000); +console.log('listening on port 3000'); +``` + + +## License + +[MIT](/LICENSE) + + +[npm-image]: https://img.shields.io/npm/v/koa-send.svg?style=flat-square +[npm-url]: https://npmjs.org/package/koa-send +[github-tag]: http://img.shields.io/github/tag/koajs/send.svg?style=flat-square +[github-url]: https://github.com/koajs/send/tags +[travis-image]: https://img.shields.io/travis/koajs/send.svg?style=flat-square +[travis-url]: https://travis-ci.org/koajs/send +[coveralls-image]: https://img.shields.io/coveralls/koajs/send.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/koajs/send?branch=master +[david-image]: http://img.shields.io/david/koajs/send.svg?style=flat-square +[david-url]: https://david-dm.org/koajs/send +[license-image]: http://img.shields.io/npm/l/koa-send.svg?style=flat-square +[license-url]: LICENSE +[downloads-image]: http://img.shields.io/npm/dm/koa-send.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/koa-send +[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square +[gittip-url]: https://www.gittip.com/jonathanong/ diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/index.js new file mode 100644 index 00000000..60df25d4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/index.js @@ -0,0 +1,188 @@ +/** + * Module dependencies. + */ + +const fs = require('fs') +const util = require('util') +const debug = require('debug')('koa-send') +const resolvePath = require('resolve-path') +const createError = require('http-errors') +const assert = require('assert') + +const stat = util.promisify(fs.stat) +const access = util.promisify(fs.access) + +async function exists (path) { + try { + await access(path) + return true + } catch (e) { + return false + } +} + +const { + normalize, + basename, + extname, + resolve, + parse, + sep +} = require('path') + +/** + * Expose `send()`. + */ + +module.exports = send + +/** + * Send file at `path` with the + * given `options` to the koa `ctx`. + * + * @param {Context} ctx + * @param {String} path + * @param {Object} [opts] + * @return {Promise} + * @api public + */ + +async function send (ctx, path, opts = {}) { + assert(ctx, 'koa context required') + assert(path, 'pathname required') + + // options + debug('send "%s" %j', path, opts) + const root = opts.root ? normalize(resolve(opts.root)) : '' + const trailingSlash = path[path.length - 1] === '/' + path = path.substr(parse(path).root.length) + const index = opts.index + const maxage = opts.maxage || opts.maxAge || 0 + const immutable = opts.immutable || false + const hidden = opts.hidden || false + const format = opts.format !== false + const extensions = Array.isArray(opts.extensions) ? opts.extensions : false + const brotli = opts.brotli !== false + const gzip = opts.gzip !== false + const setHeaders = opts.setHeaders + + if (setHeaders && typeof setHeaders !== 'function') { + throw new TypeError('option setHeaders must be function') + } + + // normalize path + path = decode(path) + + if (path === -1) return ctx.throw(400, 'failed to decode') + + // index file support + if (index && trailingSlash) path += index + + path = resolvePath(root, path) + + // hidden file support, ignore + if (!hidden && isHidden(root, path)) return + + let encodingExt = '' + // serve brotli file when possible otherwise gzipped file when possible + if (ctx.acceptsEncodings('br', 'identity') === 'br' && brotli && (await exists(path + '.br'))) { + path = path + '.br' + ctx.set('Content-Encoding', 'br') + ctx.res.removeHeader('Content-Length') + encodingExt = '.br' + } else if (ctx.acceptsEncodings('gzip', 'identity') === 'gzip' && gzip && (await exists(path + '.gz'))) { + path = path + '.gz' + ctx.set('Content-Encoding', 'gzip') + ctx.res.removeHeader('Content-Length') + encodingExt = '.gz' + } + + if (extensions && !/\./.exec(basename(path))) { + const list = [].concat(extensions) + for (let i = 0; i < list.length; i++) { + let ext = list[i] + if (typeof ext !== 'string') { + throw new TypeError('option extensions must be array of strings or false') + } + if (!/^\./.exec(ext)) ext = `.${ext}` + if (await exists(`${path}${ext}`)) { + path = `${path}${ext}` + break + } + } + } + + // stat + let stats + try { + stats = await stat(path) + + // Format the path to serve static file servers + // and not require a trailing slash for directories, + // so that you can do both `/directory` and `/directory/` + if (stats.isDirectory()) { + if (format && index) { + path += `/${index}` + stats = await stat(path) + } else { + return + } + } + } catch (err) { + const notfound = ['ENOENT', 'ENAMETOOLONG', 'ENOTDIR'] + if (notfound.includes(err.code)) { + throw createError(404, err) + } + err.status = 500 + throw err + } + + if (setHeaders) setHeaders(ctx.res, path, stats) + + // stream + ctx.set('Content-Length', stats.size) + if (!ctx.response.get('Last-Modified')) ctx.set('Last-Modified', stats.mtime.toUTCString()) + if (!ctx.response.get('Cache-Control')) { + const directives = [`max-age=${(maxage / 1000 | 0)}`] + if (immutable) { + directives.push('immutable') + } + ctx.set('Cache-Control', directives.join(',')) + } + if (!ctx.type) ctx.type = type(path, encodingExt) + ctx.body = fs.createReadStream(path) + + return path +} + +/** + * Check if it's hidden. + */ + +function isHidden (root, path) { + path = path.substr(root.length).split(sep) + for (let i = 0; i < path.length; i++) { + if (path[i][0] === '.') return true + } + return false +} + +/** + * File type. + */ + +function type (file, ext) { + return ext !== '' ? extname(basename(file, ext)) : extname(file) +} + +/** + * Decode `path`. + */ + +function decode (path) { + try { + return decodeURIComponent(path) + } catch (err) { + return -1 + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/package.json new file mode 100644 index 00000000..cf854b58 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-send/package.json @@ -0,0 +1,86 @@ +{ + "_args": [ + [ + "koa-send@5.0.1", + "/tmp/repository/main" + ] + ], + "_from": "koa-send@5.0.1", + "_id": "koa-send@5.0.1", + "_inBundle": false, + "_integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", + "_location": "/koa-send", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "koa-send@5.0.1", + "name": "koa-send", + "escapedName": "koa-send", + "rawSpec": "5.0.1", + "saveSpec": null, + "fetchSpec": "5.0.1" + }, + "_requiredBy": [ + "/koa-static" + ], + "_resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "_spec": "5.0.1", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/koajs/send/issues" + }, + "dependencies": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" + }, + "description": "Transfer static files", + "devDependencies": { + "eslint": "^4.19.1", + "eslint-config-standard": "^11.0.0", + "eslint-plugin-import": "^2.12.0", + "eslint-plugin-node": "^6.0.1", + "eslint-plugin-promise": "^3.8.0", + "eslint-plugin-standard": "^3.1.0", + "iltorb": "^2.3.2", + "koa": "^2.5.1", + "mocha": "^5.2.0", + "nyc": "^15.0.0", + "should": "^13.2.1", + "supertest": "^3.1.0" + }, + "engines": { + "node": ">= 8" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/koajs/send", + "keywords": [ + "koa", + "file", + "static", + "sendfile" + ], + "license": "MIT", + "main": "index.js", + "name": "koa-send", + "nyc": { + "reporter": [ + "lcov", + "text-summary" + ], + "report-dir": "./coverage" + }, + "repository": { + "type": "git", + "url": "git://github.com/koajs/send.git" + }, + "scripts": { + "lint": "eslint --fix .", + "test": "npm run lint && mocha --require should --reporter spec --exit", + "test-cov": "nyc npm run test" + }, + "version": "5.0.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/History.md new file mode 100644 index 00000000..b8878f55 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/History.md @@ -0,0 +1,124 @@ + +5.0.0 / 2018-06-19 +================== + + * bump deps + +4.0.3 / 2018-05-17 +================== + + * npm: disable package-lock + * bump deps + +4.0.2 / 2017-11-16 +================== + +* Fix: `serve` mutates `opts` argument so it cannot be reused (#117) + +4.0.1 / 2017-07-09 +================== + + * Fix: throw error if error status not 404 + * fix `index: false` bug if path is directory + +4.0.0 / 2017-07-03 +================== + + * upgrade to koa-send@4 + * use async function + +3.0.0 / 2016-03-24 +================== + + * support koa 2.x + * travis: test node@4+ + +2.0.0 / 2016-01-07 +================== + + * bump koa-send@~3.1.0 + +1.5.2 / 2015-11-03 +================== + + * Fix: default index could be disabled. Closes #41 + +1.5.1 / 2015-10-14 +================== + + * Fix v1.4.x → 1.5.0 broken. Closes #53 + +1.5.0 / 2015-10-14 +================== + + * update koa-send@2 + * update devDeps + +1.4.9 / 2015-02-03 +================== + + * only support GET and HEAD requests + +1.4.8 / 2014-12-17 +================== + + * support root = `.` + +1.4.7 / 2014-09-07 +================== + + * update koa-send + +1.4.5 / 2014-05-05 +================== + + * Fix response already handled logic - Koajs now defaults status == 404. See koajs/koa#269 + +1.4.4 / 2014-05-04 +================== + + * Add two missing semicolons. Closes #24 + * Use bash syntax highlighting for install command. Closes #23 + * named generator function to help debugging. Closes #20 + +1.4.3 / 2014-02-11 +================== + + * update koa-send + +1.4.2 / 2014-01-07 +================== + + * update koa-send + +1.4.1 / 2013-12-30 +================== + + * fix for koa 0.2.1. Closes #12 + +1.4.0 / 2013-12-20 +================== + + * add: defer option - semi-breaking change + +1.3.0 / 2013-12-11 +================== + + * refactor to use koa-send + * rename maxAge -> maxage + * fix: don't bother responding if response already "handled" + +1.2.0 / 2013-09-14 +================== + + * add Last-Modified. Closes #5 + +1.1.1 / 2013-09-13 +================== + + * fix upstream responses + +1.1.0 / 2013-09-13 +================== + + * rewrite without send diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/Readme.md new file mode 100644 index 00000000..16c32eaa --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/Readme.md @@ -0,0 +1,86 @@ +# koa-static + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![Dependency Status][david-image]][david-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + + Koa static file serving middleware, wrapper for [`koa-send`](https://github.com/koajs/send). + +## Installation + +```bash +$ npm install koa-static +``` + +## API + +```js +const Koa = require('koa'); +const app = new Koa(); +app.use(require('koa-static')(root, opts)); +``` + +* `root` root directory string. nothing above this root directory can be served +* `opts` options object. + +### Options + + - `maxage` Browser cache max-age in milliseconds. defaults to 0 + - `hidden` Allow transfer of hidden files. defaults to false + - `index` Default file name, defaults to 'index.html' + - `defer` If true, serves after `return next()`, allowing any downstream middleware to respond first. + - `gzip` Try to serve the gzipped version of a file automatically when gzip is supported by a client and if the requested file with .gz extension exists. defaults to true. + - `br` Try to serve the brotli version of a file automatically when brotli is supported by a client and if the requested file with .br extension exists (note, that brotli is only accepted over https). defaults to true. + - [setHeaders](https://github.com/koajs/send#setheaders) Function to set custom headers on response. + - `extensions` Try to match extensions from passed array to search for file when no extension is sufficed in URL. First found is served. (defaults to `false`) + +## Example + +```js +const serve = require('koa-static'); +const Koa = require('koa'); +const app = new Koa(); + +// $ GET /package.json +app.use(serve('.')); + +// $ GET /hello.txt +app.use(serve('test/fixtures')); + +// or use absolute paths +app.use(serve(__dirname + '/test/fixtures')); + +app.listen(3000); + +console.log('listening on port 3000'); +``` + +### See also + + - [koajs/conditional-get](https://github.com/koajs/conditional-get) Conditional GET support for koa + - [koajs/compress](https://github.com/koajs/compress) Compress middleware for koa + - [koajs/mount](https://github.com/koajs/mount) Mount `koa-static` to a specific path + +## License + + MIT + +[npm-image]: https://img.shields.io/npm/v/koa-static.svg?style=flat-square +[npm-url]: https://npmjs.org/package/koa-static +[github-tag]: http://img.shields.io/github/tag/koajs/static.svg?style=flat-square +[github-url]: https://github.com/koajs/static/tags +[travis-image]: https://img.shields.io/travis/koajs/static.svg?style=flat-square +[travis-url]: https://travis-ci.org/koajs/static +[coveralls-image]: https://img.shields.io/coveralls/koajs/static.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/koajs/static?branch=master +[david-image]: http://img.shields.io/david/koajs/static.svg?style=flat-square +[david-url]: https://david-dm.org/koajs/static +[license-image]: http://img.shields.io/npm/l/koa-static.svg?style=flat-square +[license-url]: LICENSE +[downloads-image]: http://img.shields.io/npm/dm/koa-static.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/koa-static +[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square +[gittip-url]: https://www.gittip.com/jonathanong/ diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/index.js new file mode 100644 index 00000000..02355ef0 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/index.js @@ -0,0 +1,73 @@ + +'use strict' + +/** + * Module dependencies. + */ + +const debug = require('debug')('koa-static') +const { resolve } = require('path') +const assert = require('assert') +const send = require('koa-send') + +/** + * Expose `serve()`. + */ + +module.exports = serve + +/** + * Serve static files from `root`. + * + * @param {String} root + * @param {Object} [opts] + * @return {Function} + * @api public + */ + +function serve (root, opts) { + opts = Object.assign({}, opts) + + assert(root, 'root directory is required to serve files') + + // options + debug('static "%s" %j', root, opts) + opts.root = resolve(root) + if (opts.index !== false) opts.index = opts.index || 'index.html' + + if (!opts.defer) { + return async function serve (ctx, next) { + let done = false + + if (ctx.method === 'HEAD' || ctx.method === 'GET') { + try { + done = await send(ctx, ctx.path, opts) + } catch (err) { + if (err.status !== 404) { + throw err + } + } + } + + if (!done) { + await next() + } + } + } + + return async function serve (ctx, next) { + await next() + + if (ctx.method !== 'HEAD' && ctx.method !== 'GET') return + // response is already handled + if (ctx.body != null || ctx.status !== 404) return // eslint-disable-line + + try { + await send(ctx, ctx.path, opts) + } catch (err) { + if (err.status !== 404) { + throw err + } + } + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/CHANGELOG.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/CHANGELOG.md new file mode 100644 index 00000000..820d21e3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/CHANGELOG.md @@ -0,0 +1,395 @@ + +3.1.0 / 2017-09-26 +================== + + * Add `DEBUG_HIDE_DATE` env var (#486) + * Remove ReDoS regexp in %o formatter (#504) + * Remove "component" from package.json + * Remove `component.json` + * Ignore package-lock.json + * Examples: fix colors printout + * Fix: browser detection + * Fix: spelling mistake (#496, @EdwardBetts) + +3.0.1 / 2017-08-24 +================== + + * Fix: Disable colors in Edge and Internet Explorer (#489) + +3.0.0 / 2017-08-08 +================== + + * Breaking: Remove DEBUG_FD (#406) + * Breaking: Use `Date#toISOString()` instead to `Date#toUTCString()` when output is not a TTY (#418) + * Breaking: Make millisecond timer namespace specific and allow 'always enabled' output (#408) + * Addition: document `enabled` flag (#465) + * Addition: add 256 colors mode (#481) + * Addition: `enabled()` updates existing debug instances, add `destroy()` function (#440) + * Update: component: update "ms" to v2.0.0 + * Update: separate the Node and Browser tests in Travis-CI + * Update: refactor Readme, fixed documentation, added "Namespace Colors" section, redid screenshots + * Update: separate Node.js and web browser examples for organization + * Update: update "browserify" to v14.4.0 + * Fix: fix Readme typo (#473) + +2.6.9 / 2017-09-22 +================== + + * remove ReDoS regexp in %o formatter (#504) + +2.6.8 / 2017-05-18 +================== + + * Fix: Check for undefined on browser globals (#462, @marbemac) + +2.6.7 / 2017-05-16 +================== + + * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom) + * Fix: Inline extend function in node implementation (#452, @dougwilson) + * Docs: Fix typo (#455, @msasad) + +2.6.5 / 2017-04-27 +================== + + * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek) + * Misc: clean up browser reference checks (#447, @thebigredgeek) + * Misc: add npm-debug.log to .gitignore (@thebigredgeek) + + +2.6.4 / 2017-04-20 +================== + + * Fix: bug that would occur if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo) + * Chore: ignore bower.json in npm installations. (#437, @joaovieira) + * Misc: update "ms" to v0.7.3 (@tootallnate) + +2.6.3 / 2017-03-13 +================== + + * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts) + * Docs: Changelog fix (@thebigredgeek) + +2.6.2 / 2017-03-10 +================== + + * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin) + * Docs: Add backers and sponsors from Open Collective (#422, @piamancini) + * Docs: Add Slackin invite badge (@tootallnate) + +2.6.1 / 2017-02-10 +================== + + * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error + * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0) + * Fix: IE8 "Expected identifier" error (#414, @vgoma) + * Fix: Namespaces would not disable once enabled (#409, @musikov) + +2.6.0 / 2016-12-28 +================== + + * Fix: added better null pointer checks for browser useColors (@thebigredgeek) + * Improvement: removed explicit `window.debug` export (#404, @tootallnate) + * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate) + +2.5.2 / 2016-12-25 +================== + + * Fix: reference error on window within webworkers (#393, @KlausTrainer) + * Docs: fixed README typo (#391, @lurch) + * Docs: added notice about v3 api discussion (@thebigredgeek) + +2.5.1 / 2016-12-20 +================== + + * Fix: babel-core compatibility + +2.5.0 / 2016-12-20 +================== + + * Fix: wrong reference in bower file (@thebigredgeek) + * Fix: webworker compatibility (@thebigredgeek) + * Fix: output formatting issue (#388, @kribblo) + * Fix: babel-loader compatibility (#383, @escwald) + * Misc: removed built asset from repo and publications (@thebigredgeek) + * Misc: moved source files to /src (#378, @yamikuronue) + * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue) + * Test: coveralls integration (#378, @yamikuronue) + * Docs: simplified language in the opening paragraph (#373, @yamikuronue) + +2.4.5 / 2016-12-17 +================== + + * Fix: `navigator` undefined in Rhino (#376, @jochenberger) + * Fix: custom log function (#379, @hsiliev) + * Improvement: bit of cleanup + linting fixes (@thebigredgeek) + * Improvement: rm non-maintainted `dist/` dir (#375, @freewil) + * Docs: simplified language in the opening paragraph. (#373, @yamikuronue) + +2.4.4 / 2016-12-14 +================== + + * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts) + +2.4.3 / 2016-12-14 +================== + + * Fix: navigation.userAgent error for react native (#364, @escwald) + +2.4.2 / 2016-12-14 +================== + + * Fix: browser colors (#367, @tootallnate) + * Misc: travis ci integration (@thebigredgeek) + * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek) + +2.4.1 / 2016-12-13 +================== + + * Fix: typo that broke the package (#356) + +2.4.0 / 2016-12-13 +================== + + * Fix: bower.json references unbuilt src entry point (#342, @justmatt) + * Fix: revert "handle regex special characters" (@tootallnate) + * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate) + * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate) + * Improvement: allow colors in workers (#335, @botverse) + * Improvement: use same color for same namespace. (#338, @lchenay) + +2.3.3 / 2016-11-09 +================== + + * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne) + * Fix: Returning `localStorage` saved values (#331, Levi Thomason) + * Improvement: Don't create an empty object when no `process` (Nathan Rajlich) + +2.3.2 / 2016-11-09 +================== + + * Fix: be super-safe in index.js as well (@TooTallNate) + * Fix: should check whether process exists (Tom Newby) + +2.3.1 / 2016-11-09 +================== + + * Fix: Added electron compatibility (#324, @paulcbetts) + * Improvement: Added performance optimizations (@tootallnate) + * Readme: Corrected PowerShell environment variable example (#252, @gimre) + * Misc: Removed yarn lock file from source control (#321, @fengmk2) + +2.3.0 / 2016-11-07 +================== + + * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic) + * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos) + * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15) + * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran) + * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom) + * Package: Update "ms" to 0.7.2 (#315, @DevSide) + * Package: removed superfluous version property from bower.json (#207 @kkirsche) + * Readme: fix USE_COLORS to DEBUG_COLORS + * Readme: Doc fixes for format string sugar (#269, @mlucool) + * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0) + * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable) + * Readme: better docs for browser support (#224, @matthewmueller) + * Tooling: Added yarn integration for development (#317, @thebigredgeek) + * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek) + * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman) + * Misc: Updated contributors (@thebigredgeek) + +2.2.0 / 2015-05-09 +================== + + * package: update "ms" to v0.7.1 (#202, @dougwilson) + * README: add logging to file example (#193, @DanielOchoa) + * README: fixed a typo (#191, @amir-s) + * browser: expose `storage` (#190, @stephenmathieson) + * Makefile: add a `distclean` target (#189, @stephenmathieson) + +2.1.3 / 2015-03-13 +================== + + * Updated stdout/stderr example (#186) + * Updated example/stdout.js to match debug current behaviour + * Renamed example/stderr.js to stdout.js + * Update Readme.md (#184) + * replace high intensity foreground color for bold (#182, #183) + +2.1.2 / 2015-03-01 +================== + + * dist: recompile + * update "ms" to v0.7.0 + * package: update "browserify" to v9.0.3 + * component: fix "ms.js" repo location + * changed bower package name + * updated documentation about using debug in a browser + * fix: security error on safari (#167, #168, @yields) + +2.1.1 / 2014-12-29 +================== + + * browser: use `typeof` to check for `console` existence + * browser: check for `console.log` truthiness (fix IE 8/9) + * browser: add support for Chrome apps + * Readme: added Windows usage remarks + * Add `bower.json` to properly support bower install + +2.1.0 / 2014-10-15 +================== + + * node: implement `DEBUG_FD` env variable support + * package: update "browserify" to v6.1.0 + * package: add "license" field to package.json (#135, @panuhorsmalahti) + +2.0.0 / 2014-09-01 +================== + + * package: update "browserify" to v5.11.0 + * node: use stderr rather than stdout for logging (#29, @stephenmathieson) + +1.0.4 / 2014-07-15 +================== + + * dist: recompile + * example: remove `console.info()` log usage + * example: add "Content-Type" UTF-8 header to browser example + * browser: place %c marker after the space character + * browser: reset the "content" color via `color: inherit` + * browser: add colors support for Firefox >= v31 + * debug: prefer an instance `log()` function over the global one (#119) + * Readme: update documentation about styled console logs for FF v31 (#116, @wryk) + +1.0.3 / 2014-07-09 +================== + + * Add support for multiple wildcards in namespaces (#122, @seegno) + * browser: fix lint + +1.0.2 / 2014-06-10 +================== + + * browser: update color palette (#113, @gscottolson) + * common: make console logging function configurable (#108, @timoxley) + * node: fix %o colors on old node <= 0.8.x + * Makefile: find node path using shell/which (#109, @timoxley) + +1.0.1 / 2014-06-06 +================== + + * browser: use `removeItem()` to clear localStorage + * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) + * package: add "contributors" section + * node: fix comment typo + * README: list authors + +1.0.0 / 2014-06-04 +================== + + * make ms diff be global, not be scope + * debug: ignore empty strings in enable() + * node: make DEBUG_COLORS able to disable coloring + * *: export the `colors` array + * npmignore: don't publish the `dist` dir + * Makefile: refactor to use browserify + * package: add "browserify" as a dev dependency + * Readme: add Web Inspector Colors section + * node: reset terminal color for the debug content + * node: map "%o" to `util.inspect()` + * browser: map "%j" to `JSON.stringify()` + * debug: add custom "formatters" + * debug: use "ms" module for humanizing the diff + * Readme: add "bash" syntax highlighting + * browser: add Firebug color support + * browser: add colors for WebKit browsers + * node: apply log to `console` + * rewrite: abstract common logic for Node & browsers + * add .jshintrc file + +0.8.1 / 2014-04-14 +================== + + * package: re-add the "component" section + +0.8.0 / 2014-03-30 +================== + + * add `enable()` method for nodejs. Closes #27 + * change from stderr to stdout + * remove unnecessary index.js file + +0.7.4 / 2013-11-13 +================== + + * remove "browserify" key from package.json (fixes something in browserify) + +0.7.3 / 2013-10-30 +================== + + * fix: catch localStorage security error when cookies are blocked (Chrome) + * add debug(err) support. Closes #46 + * add .browser prop to package.json. Closes #42 + +0.7.2 / 2013-02-06 +================== + + * fix package.json + * fix: Mobile Safari (private mode) is broken with debug + * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript + +0.7.1 / 2013-02-05 +================== + + * add repository URL to package.json + * add DEBUG_COLORED to force colored output + * add browserify support + * fix component. Closes #24 + +0.7.0 / 2012-05-04 +================== + + * Added .component to package.json + * Added debug.component.js build + +0.6.0 / 2012-03-16 +================== + + * Added support for "-" prefix in DEBUG [Vinay Pulim] + * Added `.enabled` flag to the node version [TooTallNate] + +0.5.0 / 2012-02-02 +================== + + * Added: humanize diffs. Closes #8 + * Added `debug.disable()` to the CS variant + * Removed padding. Closes #10 + * Fixed: persist client-side variant again. Closes #9 + +0.4.0 / 2012-02-01 +================== + + * Added browser variant support for older browsers [TooTallNate] + * Added `debug.enable('project:*')` to browser variant [TooTallNate] + * Added padding to diff (moved it to the right) + +0.3.0 / 2012-01-26 +================== + + * Added millisecond diff when isatty, otherwise UTC string + +0.2.0 / 2012-01-22 +================== + + * Added wildcard support + +0.1.0 / 2011-12-02 +================== + + * Added: remove colors unless stderr isatty [TooTallNate] + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/LICENSE new file mode 100644 index 00000000..658c933d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/LICENSE @@ -0,0 +1,19 @@ +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/README.md new file mode 100644 index 00000000..0ee7634d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/README.md @@ -0,0 +1,437 @@ +# debug +[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) + + + +A tiny JavaScript debugging utility modelled after Node.js core's debugging +technique. Works in Node.js and web browsers. + +## Installation + +```bash +$ npm install debug +``` + +## Usage + +`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. + +Example [_app.js_](./examples/node/app.js): + +```js +var debug = require('debug')('http') + , http = require('http') + , name = 'My App'; + +// fake app + +debug('booting %o', name); + +http.createServer(function(req, res){ + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, function(){ + debug('listening'); +}); + +// fake worker of some kind + +require('./worker'); +``` + +Example [_worker.js_](./examples/node/worker.js): + +```js +var a = require('debug')('worker:a') + , b = require('debug')('worker:b'); + +function work() { + a('doing lots of uninteresting work'); + setTimeout(work, Math.random() * 1000); +} + +work(); + +function workb() { + b('doing some work'); + setTimeout(workb, Math.random() * 2000); +} + +workb(); +``` + +The `DEBUG` environment variable is then used to enable these based on space or +comma-delimited names. + +Here are some examples: + +screen shot 2017-08-08 at 12 53 04 pm +screen shot 2017-08-08 at 12 53 38 pm +screen shot 2017-08-08 at 12 53 25 pm + +#### Windows command prompt notes + +##### CMD + +On Windows the environment variable is set using the `set` command. + +```cmd +set DEBUG=*,-not_this +``` + +Example: + +```cmd +set DEBUG=* & node app.js +``` + +##### PowerShell (VS Code default) + +PowerShell uses different syntax to set environment variables. + +```cmd +$env:DEBUG = "*,-not_this" +``` + +Example: + +```cmd +$env:DEBUG='app';node app.js +``` + +Then, run the program to be debugged as usual. + +npm script example: +```js + "windowsDebug": "@powershell -Command $env:DEBUG='*';node app.js", +``` + +## Namespace Colors + +Every debug instance has a color generated for it based on its namespace name. +This helps when visually parsing the debug output to identify which debug instance +a debug line belongs to. + +#### Node.js + +In Node.js, colors are enabled when stderr is a TTY. You also _should_ install +the [`supports-color`](https://npmjs.org/supports-color) module alongside debug, +otherwise debug will only use a small handful of basic colors. + + + +#### Web Browser + +Colors are also enabled on "Web Inspectors" that understand the `%c` formatting +option. These are WebKit web inspectors, Firefox ([since version +31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) +and the Firebug plugin for Firefox (any version). + + + + +## Millisecond diff + +When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. + + + +When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: + + + + +## Conventions + +If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable. You can then use it for normal output as well as debug output. + +## Wildcards + +The `*` character may be used as a wildcard. Suppose for example your library has +debuggers named "connect:bodyParser", "connect:compress", "connect:session", +instead of listing all three with +`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do +`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. + +You can also exclude specific debuggers by prefixing them with a "-" character. +For example, `DEBUG=*,-connect:*` would include all debuggers except those +starting with "connect:". + +## Environment Variables + +When running through Node.js, you can set a few environment variables that will +change the behavior of the debug logging: + +| Name | Purpose | +|-----------|-------------------------------------------------| +| `DEBUG` | Enables/disables specific debugging namespaces. | +| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY). | +| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | +| `DEBUG_DEPTH` | Object inspection depth. | +| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | + + +__Note:__ The environment variables beginning with `DEBUG_` end up being +converted into an Options object that gets used with `%o`/`%O` formatters. +See the Node.js documentation for +[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) +for the complete list. + +## Formatters + +Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. +Below are the officially supported formatters: + +| Formatter | Representation | +|-----------|----------------| +| `%O` | Pretty-print an Object on multiple lines. | +| `%o` | Pretty-print an Object all on a single line. | +| `%s` | String. | +| `%d` | Number (both integer and float). | +| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | +| `%%` | Single percent sign ('%'). This does not consume an argument. | + + +### Custom formatters + +You can add custom formatters by extending the `debug.formatters` object. +For example, if you wanted to add support for rendering a Buffer as hex with +`%h`, you could do something like: + +```js +const createDebug = require('debug') +createDebug.formatters.h = (v) => { + return v.toString('hex') +} + +// …elsewhere +const debug = createDebug('foo') +debug('this is hex: %h', new Buffer('hello world')) +// foo this is hex: 68656c6c6f20776f726c6421 +0ms +``` + + +## Browser Support + +You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), +or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), +if you don't want to build it yourself. + +Debug's enable state is currently persisted by `localStorage`. +Consider the situation shown below where you have `worker:a` and `worker:b`, +and wish to debug both. You can enable this using `localStorage.debug`: + +```js +localStorage.debug = 'worker:*' +``` + +And then refresh the page. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + b('doing some work'); +}, 1200); +``` + + +## Output streams + + By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: + +Example [_stdout.js_](./examples/node/stdout.js): + +```js +var debug = require('debug'); +var error = debug('app:error'); + +// by default stderr is used +error('goes to stderr!'); + +var log = debug('app:log'); +// set this namespace to log via console.log +log.log = console.log.bind(console); // don't forget to bind to console! +log('goes to stdout'); +error('still goes to stderr!'); + +// set all output to go via console.info +// overrides all per-namespace log settings +debug.log = console.info.bind(console); +error('now goes to stdout via console.info'); +log('still goes to stdout, but via console.info now'); +``` + +## Extend +You can simply extend debugger +```js +const log = require('debug')('auth'); + +//creates new debug instance with extended namespace +const logSign = log.extend('sign'); +const logLogin = log.extend('login'); + +log('hello'); // auth hello +logSign('hello'); //auth:sign hello +logLogin('hello'); //auth:login hello +``` + +## Set dynamically + +You can also enable debug dynamically by calling the `enable()` method : + +```js +let debug = require('debug'); + +console.log(1, debug.enabled('test')); + +debug.enable('test'); +console.log(2, debug.enabled('test')); + +debug.disable(); +console.log(3, debug.enabled('test')); + +``` + +print : +``` +1 false +2 true +3 false +``` + +Usage : +`enable(namespaces)` +`namespaces` can include modes separated by a colon and wildcards. + +Note that calling `enable()` completely overrides previously set DEBUG variable : + +``` +$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' +=> false +``` + +## Checking whether a debug target is enabled + +After you've created a debug instance, you can determine whether or not it is +enabled by checking the `enabled` property: + +```javascript +const debug = require('debug')('http'); + +if (debug.enabled) { + // do stuff... +} +``` + +You can also manually toggle this property to force the debug instance to be +enabled or disabled. + + +## Authors + + - TJ Holowaychuk + - Nathan Rajlich + - Andrew Rhyne + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## License + +(The MIT License) + +Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca> + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/node.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/node.js new file mode 100644 index 00000000..7fc36fe6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/node.js @@ -0,0 +1 @@ +module.exports = require('./src/node'); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/package.json new file mode 100644 index 00000000..c97deb08 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/package.json @@ -0,0 +1,93 @@ +{ + "_args": [ + [ + "debug@3.2.7", + "/tmp/repository/main" + ] + ], + "_from": "debug@3.2.7", + "_id": "debug@3.2.7", + "_inBundle": false, + "_integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "_location": "/koa-static/debug", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "debug@3.2.7", + "name": "debug", + "escapedName": "debug", + "rawSpec": "3.2.7", + "saveSpec": null, + "fetchSpec": "3.2.7" + }, + "_requiredBy": [ + "/koa-static" + ], + "_resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "_spec": "3.2.7", + "_where": "/tmp/repository/main", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "browser": "./src/browser.js", + "bugs": { + "url": "https://github.com/visionmedia/debug/issues" + }, + "contributors": [ + { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io" + }, + { + "name": "Andrew Rhyne", + "email": "rhyneandrew@gmail.com" + } + ], + "dependencies": { + "ms": "^2.1.1" + }, + "description": "small debugging utility", + "devDependencies": { + "@babel/cli": "^7.0.0", + "@babel/core": "^7.0.0", + "@babel/preset-env": "^7.0.0", + "browserify": "14.4.0", + "chai": "^3.5.0", + "concurrently": "^3.1.0", + "coveralls": "^3.0.2", + "istanbul": "^0.4.5", + "karma": "^3.0.0", + "karma-chai": "^0.1.0", + "karma-mocha": "^1.3.0", + "karma-phantomjs-launcher": "^1.0.2", + "mocha": "^5.2.0", + "mocha-lcov-reporter": "^1.2.0", + "rimraf": "^2.5.4", + "xo": "^0.23.0" + }, + "files": [ + "src", + "node.js", + "dist/debug.js", + "LICENSE", + "README.md" + ], + "homepage": "https://github.com/visionmedia/debug#readme", + "keywords": [ + "debug", + "log", + "debugger" + ], + "license": "MIT", + "main": "./src/index.js", + "name": "debug", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/debug.git" + }, + "unpkg": "./dist/debug.js", + "version": "3.2.7" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/browser.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/browser.js new file mode 100644 index 00000000..c924b0ac --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/browser.js @@ -0,0 +1,180 @@ +"use strict"; + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/* eslint-env browser */ + +/** + * This is the web browser implementation of `debug()`. + */ +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = localstorage(); +/** + * Colors. + */ + +exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33']; +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ +// eslint-disable-next-line complexity + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } // Internet Explorer and Edge do not support colors. + + + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + + + return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773 + typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); +} +/** + * Colorize log arguments if enabled. + * + * @api public + */ + + +function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function (match) { + if (match === '%%') { + return; + } + + index++; + + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + args.splice(lastC, 0, c); +} +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + + +function log() { + var _console; + + // This hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return (typeof console === "undefined" ? "undefined" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments); +} +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + + +function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } +} +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + + +function load() { + var r; + + try { + r = exports.storage.getItem('debug'); + } catch (error) {} // Swallow + // XXX (@Qix-) should we be logging these? + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + + + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + + +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } +} + +module.exports = require('./common')(exports); +var formatters = module.exports.formatters; +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } +}; + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/common.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/common.js new file mode 100644 index 00000000..e0de3fb5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/common.js @@ -0,0 +1,249 @@ +"use strict"; + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ +function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = require('ms'); + Object.keys(env).forEach(function (key) { + createDebug[key] = env[key]; + }); + /** + * Active `debug` instances. + */ + + createDebug.instances = []; + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + + createDebug.formatters = {}; + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + + function selectColor(namespace) { + var hash = 0; + + for (var i = 0; i < namespace.length; i++) { + hash = (hash << 5) - hash + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + + createDebug.selectColor = selectColor; + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + + function createDebug(namespace) { + var prevTime; + + function debug() { + // Disabled? + if (!debug.enabled) { + return; + } + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var self = debug; // Set `diff` timestamp + + var curr = Number(new Date()); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } // Apply any `formatters` transformations + + + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return match; + } + + index++; + var formatter = createDebug.formatters[format]; + + if (typeof formatter === 'function') { + var val = args[index]; + match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format` + + args.splice(index, 1); + index--; + } + + return match; + }); // Apply env-specific formatting (colors, etc.) + + createDebug.formatArgs.call(self, args); + var logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = createDebug.enabled(namespace); + debug.useColors = createDebug.useColors(); + debug.color = selectColor(namespace); + debug.destroy = destroy; + debug.extend = extend; // Debug.formatArgs = formatArgs; + // debug.rawLog = rawLog; + // env-specific initialization logic for debug instances + + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + createDebug.instances.push(debug); + return debug; + } + + function destroy() { + var index = createDebug.instances.indexOf(this); + + if (index !== -1) { + createDebug.instances.splice(index, 1); + return true; + } + + return false; + } + + function extend(namespace, delimiter) { + return createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + } + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + + + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.names = []; + createDebug.skips = []; + var i; + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + + for (i = 0; i < createDebug.instances.length; i++) { + var instance = createDebug.instances[i]; + instance.enabled = createDebug.enabled(instance.namespace); + } + } + /** + * Disable debug output. + * + * @api public + */ + + + function disable() { + createDebug.enable(''); + } + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + + + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + var i; + var len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + + + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + + return val; + } + + createDebug.enable(createDebug.load()); + return createDebug; +} + +module.exports = setup; + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/index.js new file mode 100644 index 00000000..02173159 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/index.js @@ -0,0 +1,12 @@ +"use strict"; + +/** + * Detect Electron renderer / nwjs process, which is node, but we should + * treat as a browser. + */ +if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/node.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/node.js new file mode 100644 index 00000000..1e6a5f16 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/node_modules/debug/src/node.js @@ -0,0 +1,177 @@ +"use strict"; + +/** + * Module dependencies. + */ +var tty = require('tty'); + +var util = require('util'); +/** + * This is the Node.js implementation of `debug()`. + */ + + +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +try { + // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) + // eslint-disable-next-line import/no-extraneous-dependencies + var supportsColor = require('supports-color'); + + if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { + exports.colors = [20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68, 69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134, 135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 214, 215, 220, 221]; + } +} catch (error) {} // Swallow - we only care if `supports-color` is available; it doesn't have to be. + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + + +exports.inspectOpts = Object.keys(process.env).filter(function (key) { + return /^debug_/i.test(key); +}).reduce(function (obj, key) { + // Camel-case + var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function (_, k) { + return k.toUpperCase(); + }); // Coerce string value into JS value + + var val = process.env[key]; + + if (/^(yes|on|true|enabled)$/i.test(val)) { + val = true; + } else if (/^(no|off|false|disabled)$/i.test(val)) { + val = false; + } else if (val === 'null') { + val = null; + } else { + val = Number(val); + } + + obj[prop] = val; + return obj; +}, {}); +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(process.stderr.fd); +} +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + + +function formatArgs(args) { + var name = this.namespace, + useColors = this.useColors; + + if (useColors) { + var c = this.color; + var colorCode = "\x1B[3" + (c < 8 ? c : '8;5;' + c); + var prefix = " ".concat(colorCode, ";1m").concat(name, " \x1B[0m"); + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + "\x1B[0m"); + } else { + args[0] = getDate() + name + ' ' + args[0]; + } +} + +function getDate() { + if (exports.inspectOpts.hideDate) { + return ''; + } + + return new Date().toISOString() + ' '; +} +/** + * Invokes `util.format()` with the specified arguments and writes to stderr. + */ + + +function log() { + return process.stderr.write(util.format.apply(util, arguments) + '\n'); +} +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + + +function save(namespaces) { + if (namespaces) { + process.env.DEBUG = namespaces; + } else { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } +} +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + + +function load() { + return process.env.DEBUG; +} +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + + +function init(debug) { + debug.inspectOpts = {}; + var keys = Object.keys(exports.inspectOpts); + + for (var i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +module.exports = require('./common')(exports); +var formatters = module.exports.formatters; +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +formatters.o = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n') + .map(function (str) { return str.trim(); }) + .join(' '); +}; +/** + * Map %O to `util.inspect()`, allowing multiple lines if needed. + */ + + +formatters.O = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/package.json new file mode 100644 index 00000000..3c63df1f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa-static/package.json @@ -0,0 +1,79 @@ +{ + "_args": [ + [ + "koa-static@5.0.0", + "/tmp/repository/main" + ] + ], + "_from": "koa-static@5.0.0", + "_id": "koa-static@5.0.0", + "_inBundle": false, + "_integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", + "_location": "/koa-static", + "_phantomChildren": { + "ms": "2.1.2" + }, + "_requested": { + "type": "version", + "registry": true, + "raw": "koa-static@5.0.0", + "name": "koa-static", + "escapedName": "koa-static", + "rawSpec": "5.0.0", + "saveSpec": null, + "fetchSpec": "5.0.0" + }, + "_requiredBy": [ + "/@vscode/test-web" + ], + "_resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "_spec": "5.0.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/koajs/static/issues" + }, + "dependencies": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" + }, + "description": "Static file serving middleware for koa", + "devDependencies": { + "eslint": "^4.19.1", + "eslint-config-standard": "^11.0.0", + "eslint-plugin-import": "^2.12.0", + "eslint-plugin-node": "^6.0.1", + "eslint-plugin-promise": "^3.8.0", + "eslint-plugin-standard": "^3.1.0", + "istanbul": "^0.4.5", + "koa": "^2.5.1", + "mocha": "^5.2.0", + "supertest": "^3.1.0" + }, + "engines": { + "node": ">= 7.6.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/koajs/static#readme", + "keywords": [ + "koa", + "middleware", + "file", + "static", + "sendfile" + ], + "license": "MIT", + "name": "koa-static", + "repository": { + "type": "git", + "url": "git+https://github.com/koajs/static.git" + }, + "scripts": { + "lint": "eslint --fix .", + "test": "mocha --harmony --reporter spec --exit", + "test-cov": "node --harmony ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- --exit", + "test-travis": "node --harmony ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha --report lcovonly -- --exit" + }, + "version": "5.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/History.md new file mode 100644 index 00000000..f4dc5af6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/History.md @@ -0,0 +1,648 @@ + +2.13.1 / 2021-01-04 +================== + +**fixes** + * [[`b5472f4`](http://github.com/koajs/koa/commit/b5472f4cbb87349becae36b4a9ad5f76a825abb8)] - fix: make ESM transpiled CommonJS play nice for TS folks, fix #1513 (#1518) (miwnwski <>) + * [[`68d97d6`](http://github.com/koajs/koa/commit/68d97d69e4536065504bf9ef1e348a66b3f35709)] - fix: fixed order of vulnerability disclosure addresses (niftylettuce <>) + +**others** + * [[`b4398f5`](http://github.com/koajs/koa/commit/b4398f5d68f9546167419f394a686afdcb5e10e2)] - correct verb tense in doc (#1512) (Matan Shavit <<71092861+matanshavit@users.noreply.github.com>>) + * [[`39e1a5a`](http://github.com/koajs/koa/commit/39e1a5a380aa2bbc4e2d164e8e4bf37cfd512516)] - fixed multiple grammatical errors in docs. (#1497) (Hridayesh Sharma <>) + * [[`aeb5d19`](http://github.com/koajs/koa/commit/aeb5d1984dcc5f8e3386f8f9724807ae6f3aa1c4)] - docs: added niftylettuce@gmail.com to vulnerability disclosure (niftylettuce <>) + * [[`6e1093b`](http://github.com/koajs/koa/commit/6e1093be27b41135c8e67fce108743d54e9cab67)] - docs: remove babel from readme (#1494) (miwnwski <>) + * [[`38cb591`](http://github.com/koajs/koa/commit/38cb591254ff5f65a04e8fb57be293afe697c46e)] - docs: update specific for auto response status (AlbertAZ1992 <>) + * [[`2224cd9`](http://github.com/koajs/koa/commit/2224cd9b6a648e7ac2eb27eac332e7d6de7db26c)] - docs: remove babel ref. (#1488) (Imed Jaberi <>) + * [[`d51f983`](http://github.com/koajs/koa/commit/d51f98328c3b84493cc6bda0732aabb69e20e3a1)] - docs: fix assert example for response (#1489) (Imed Jaberi <>) + * [[`f8b49b8`](http://github.com/koajs/koa/commit/f8b49b859363ad6c3d9ea5c11ee62341407ceafd)] - chore: fix grammatical and spelling errors in comments and tests (#1490) (Matt Kubej <>) + * [[`d1c9263`](http://github.com/koajs/koa/commit/d1c92638c95d799df2fdff5576b96fc43a62813f)] - deps: update depd >> v2.0.0 (#1482) (imed jaberi <>) + +2.13.0 / 2020-06-21 +================== + +**features** + * [[`bbcde76`](http://github.com/koajs/koa/commit/bbcde76f5cb5b67bbcd3201791cf0ef648fd3a8b)] - feat: support esm (#1474) (ZYSzys <>) + +**others** + * [[`20e58cf`](http://github.com/koajs/koa/commit/20e58cf3e4f20fc5d5886df1d0ac6dd8c33bd202)] - test: imporve coverage to 100% (dead-horse <>) + * [[`4a40d63`](http://github.com/koajs/koa/commit/4a40d633c4b4a203c6656078f9952ccef65c5875)] - build: use prepare instead of prepublish (dead-horse <>) + * [[`226ba8c`](http://github.com/koajs/koa/commit/226ba8c8e81e83da48e7bf137be3f146d03f40b8)] - build: use prepublish instead of prepack (dead-horse <>) + +2.12.1 / 2020-06-13 +================== + +**fixes** + * [[`e2030c7`](http://github.com/koajs/koa/commit/e2030c7249c7ae24e28158d8eae405a02fefc9f8)] - fix: Improve checks for Error in onerror handlers (#1468) (Julien Wajsberg <>) + +**others** + * [[`5208c5e`](http://github.com/koajs/koa/commit/5208c5e15d35b3653fce6b8ed68d09865abea843)] - chore: Use single console.error() statement in error handler (#1471) (Mike Vosseller <>) + +2.12.0 / 2020-05-18 +================== + +**features** + * [[`0d2f421`](http://github.com/koajs/koa/commit/0d2f421c265350d3d84e1bc261572954479f27d3)] - feat: error handler treat err.statusCode as the same as err.status (#1460) (Vijay Krishnavanshi <>) + * [[`8d52105`](http://github.com/koajs/koa/commit/8d52105a34234be9e771ff3b76b43e4e30328943)] - feat: allow bodyless responses for non empty status codes (#1447) (ejose19 <<8742215+ejose19@users.noreply.github.com>>) + +**others** + * [[`faeaff5`](http://github.com/koajs/koa/commit/faeaff5c149a81a188ab8e5af0b994029e45acbb)] - fox: remove `error-inject` and fix error handling (#1409) (Konstantin Vyatkin <>) + * [[`f7c732f`](http://github.com/koajs/koa/commit/f7c732fd06f724505e9090add4d977e667da55a8)] - docs: fixed incorrect onerror example (#1459) (Paul Annekov <>) + * [[`143d8f7`](http://github.com/koajs/koa/commit/143d8f72f2a232b4c97eac00e7811015911e4f7c)] - Always use strict equality. (#1225) (Yazan Medanat <>) + * [[`6b6b0dd`](http://github.com/koajs/koa/commit/6b6b0ddf7aff073e65493c6efaffab8331c0331c)] - docs(api): add app.use chainability note (#1449) (Zac Anger <>) + * [[`8ddab48`](http://github.com/koajs/koa/commit/8ddab48cbdbca1e6d1cc8c3ddae45491db524d51)] - docs: Document response status with empty body (#1445) (Marc-Aurèle DARCHE <<152407+madarche@users.noreply.github.com>>) + * [[`7deedb2`](http://github.com/koajs/koa/commit/7deedb235274223f1b9da46dee296545b23598de)] - docs: Updating context.md with the latest cookies opts (#1433) (Brad Ito <>) + * [[`3e97a10`](http://github.com/koajs/koa/commit/3e97a106bb846d9337737011bb85149ddd797229)] - docs(links): remove Google+ link (#1439) (laffachan <<45162759+laffachan@users.noreply.github.com>>) + * [[`eda2760`](http://github.com/koajs/koa/commit/eda27608f7d39ede86d7b402aae64b1867ce31c6)] - build: Drop unused Travis sudo: false directive (#1416) (Olle Jonsson <>) + +2.11.0 / 2019-10-28 +================== + +**features** + * [[`422e539`](http://github.com/koajs/koa/commit/422e539e8989e65ba43ecc39ddbaa3c4f755d465)] - feat: support app.proxyIPHeader and app.maxIpsCount to make ctx.ips more security (Yiyu He <>) + * [[`d48d88e`](http://github.com/koajs/koa/commit/d48d88ee17b780c02123e6d657274cab456e943e)] - feat: implement response.has (#1397) (Konstantin Vyatkin <>) + +**others** + * [[`4dc56f6`](http://github.com/koajs/koa/commit/4dc56f6d04e8f5fe12ba53a8a776653b3d7b60ed)] - chore: update ESLint and plugins/configs (#1407) (Konstantin Vyatkin <>) + * [[`be7d334`](http://github.com/koajs/koa/commit/be7d334778481639294cdf87f5c359a230aeb65b)] - chore: removes code duplication at handling HEAD method (#1400) (Konstantin Vyatkin <>) + * [[`f155785`](http://github.com/koajs/koa/commit/f155785e2bb42b5ddf0a8156401c6dafdf57ba8b)] - chore: support `writableEnded` (#1402) (Konstantin Vyatkin <>) + * [[`b968688`](http://github.com/koajs/koa/commit/b968688afe2c727ae141f50aa983d481dbc1dbbf)] - chore: add FUNDING.yml (#1403) (Konstantin Vyatkin <>) + * [[`4f96829`](http://github.com/koajs/koa/commit/4f968298f97394e488297ec32c8e927a3a322076)] - chore: remove isJSON in res.length (#1399) (Konstantin Vyatkin <>) + * [[`8be5626`](http://github.com/koajs/koa/commit/8be5626bbb54e6c899a1b71d22411709126d9fea)] - build: enable codecov partial coverage and use bash uploader (#1396) (Konstantin Vyatkin <>) + * [[`ef5c43b`](http://github.com/koajs/koa/commit/ef5c43bcbcf31819e032c3b7ae7654b7f8e9358b)] - chore: use rest params (#1393) (Konstantin Vyatkin <>) + +2.10.0 / 2019-10-12 +================== + +**features** + * [[`d7f7f77`](http://github.com/koajs/koa/commit/d7f7f77689e2eaef050686be2bdf3e72881a79ac)] - feat: support sameSite=none cookies (bump cookies dependency) (#1390) (Filip Skokan <>) + +2.9.0 / 2019-10-12 +================== + +**features** + * [[`2d1c598`](http://github.com/koajs/koa/commit/2d1c5981869e0fe6f5bc71b5c5582accfd125cc6)] - feat: export HttpError from http-errors library (Micheal Hill <>) + +**others** + * [[`cf70dbc`](http://github.com/koajs/koa/commit/cf70dbc6d2ba62bf1eb12b563dd5ecd27af6e2be)] - Chore: Use https in readme (#1389) (谭九鼎 <<109224573@qq.com>>) + +2.8.2 / 2019-09-28 +================== + +**fixes** + * [[`54e8fab`](http://github.com/koajs/koa/commit/54e8fab3e3d907bbb264caf3e28a24773d0d6fdb)] - fix: encode redirect url if not already encoded (#1384) (fengmk2 <>) + +**others** + * [[`817b498`](http://github.com/koajs/koa/commit/817b49830571b45a8aec6b1fc1525434f5798c58)] - test: fix body test (#1375) (Robert Nagy <>) + * [[`f75d445`](http://github.com/koajs/koa/commit/f75d4455359ecdf30eeb676e2c7f31d4cf7b42ed)] - test: fix end after end (#1374) (Robert Nagy <>) + +2.8.1 / 2019-08-19 +================== + +**fixes** + * [[`287e589`](http://github.com/koajs/koa/commit/287e589ac773d3738b2aa7d40e0b6d43dde5261b)] - fix: make options more compatibility (dead-horse <>) + +2.8.0 / 2019-08-19 +================== + +**features** + * [[`5afff89`](http://github.com/koajs/koa/commit/5afff89eca0efe7081309dc2d123309e825df221)] - feat: accept options in the Application constructor (#1372) (Jake <>) + +**fixes** + * [[`ff70bdc`](http://github.com/koajs/koa/commit/ff70bdc75a30a37f63fc1f7d8cbae3204df3d982)] - fix: typo on document (#1355) (Jeff <>) + +**others** + * [[`3b23865`](http://github.com/koajs/koa/commit/3b23865340cfba075f61f7dba0ea31fcc27260ec)] - docs: parameter of request.get is case-insensitive (#1373) (Gunnlaugur Thor Briem <>) + * [[`a245d18`](http://github.com/koajs/koa/commit/a245d18a131341feec4f87659746954e78cae780)] - docs: Update response.socket (#1357) (Jeff <>) + * [[`d1d65dd`](http://github.com/koajs/koa/commit/d1d65dd29d7bbaf9ea42eaa5fcb0da3fb4df98e9)] - chore(deps): install egg-bin, mm as devDeps not deps (#1366) (Edvard Chen <>) + * [[`2c86b10`](http://github.com/koajs/koa/commit/2c86b10feafd868ebd071dda3a222e6f51972b5d)] - test: remove jest and use egg-bin(mocha) (#1363) (Yiyu He <>) + * [[`219bf22`](http://github.com/koajs/koa/commit/219bf22237b11bc375e2e110b93db512f1acfdd4)] - docs(context): update link (#1354) (Peng Jie <>) + * [[`52a6737`](http://github.com/koajs/koa/commit/52a673703a87a93c0f6a8552e6bd73caba66d2eb)] - chore: ignore Intellij IDEA project files (#1361) (Imon-Haque <<38266345+Imon-Haque@users.noreply.github.com>>) + * [[`b9e3546`](http://github.com/koajs/koa/commit/b9e35469d3bbd0a1ee92e0a815ce2512904d4a18)] - docs(api): fix keygrip link (#1350) (Peng Jie <>) + * [[`d4bdb5e`](http://github.com/koajs/koa/commit/d4bdb5ed9e2fe06ec44698b66c029f624135a0ab)] - chore: update eslint and fix lint errors (dead-horse <>) + * [[`12960c4`](http://github.com/koajs/koa/commit/12960c437cc25c53e682cfe5bff06d74a5bb1eb9)] - build: test on 8/10/12 (dead-horse <>) + * [[`00e8f7a`](http://github.com/koajs/koa/commit/00e8f7a1b7603aabdb7fb3567f485cb1c2076702)] - docs: ctx.type aliases ctx.response, not ctx.request (#1343) (Alex Berk <>) + * [[`62f29eb`](http://github.com/koajs/koa/commit/62f29eb0c4dee01170a5511615e5bcc9faca26ca)] - docs(context): update cookies link (#1348) (Peng Jie <>) + * [[`b7fc526`](http://github.com/koajs/koa/commit/b7fc526ea49894f366153bd32997e02568c0b8a6)] - docs: fix typo in cookie path default value docs (#1340) (Igor Adamenko <>) + * [[`23f7f54`](http://github.com/koajs/koa/commit/23f7f545abfe1fb6499cd61cc8ff41fd86cef4a0)] - chore: simplify variable (#1332) (kzhang <>) + * [[`132c9ee`](http://github.com/koajs/koa/commit/132c9ee63f92a586a120ed3bd6b7ef023badb8bb)] - docs: Clarify the format of request.headers (#1325) (Dobes Vandermeer <>) + * [[`5810f27`](http://github.com/koajs/koa/commit/5810f279a4caeda115f39e429c9671795613abf8)] - docs: Removed Document in Progress note in Koa vs Express (#1336) (Andrew Peterson <>) + * [[`75233d9`](http://github.com/koajs/koa/commit/75233d974a30af6e3b8ab38a73e5ede67172fc1c)] - chore: Consider removing this return statement; it will be ignored. (#1322) (Vern Brandl <>) + * [[`04e07fd`](http://github.com/koajs/koa/commit/04e07fdc620841068f12b8edf36f27e6592a0a18)] - test: Buffer() is deprecated due to security and usability issues. so use the Buffer.alloc() instead (#1321) (Vern Brandl <>) + * [[`130e363`](http://github.com/koajs/koa/commit/130e363856747b487652f04b5550056d7778e43a)] - docs: use 'fs-extra' instead of 'fs-promise' (#1309) (rosald <<35028438+rosald@users.noreply.github.com>>) + * [[`2f2078b`](http://github.com/koajs/koa/commit/2f2078bf998bd3f44289ebd17eeccf5e12e4c134)] - chore: Update PR-welcome badge url (#1299) (James George <>) + +2.7.0 / 2019-01-28 +================== + +**features** + * [[`b7bfa71`](http://github.com/koajs/koa/commit/b7bfa7113b8d1af49a57ab767f24a599ed92044f)] - feat: change set status assert, allowing valid custom statuses (#1308) (Martin Iwanowski <>) + +**others** + * [[`72f325b`](http://github.com/koajs/koa/commit/72f325b78edd0dc2aac940a76ce5f644005ce4c3)] - chore: add pr welcoming badge (#1291) (James George <>) + * [[`b15115b`](http://github.com/koajs/koa/commit/b15115b2cbfffe15827cd5e4368267d417b72f08)] - chore: Reduce unnecessary variable declarations (#1298) (call me saisai <<1457358080@qq.com>>) + * [[`ad91ce2`](http://github.com/koajs/koa/commit/ad91ce2346cb34e5d5a49d07dd952d15f6c832a3)] - chore: license 2019 (dead-horse <>) + * [[`b25e79d`](http://github.com/koajs/koa/commit/b25e79dfb599777a38157bd419395bd28369ee86)] - Mark two examples as live for the corresponding documentation change in https://github.com/koajs/koajs.com/pull/38. (#1031) (Francisco Ryan Tolmasky I <>) + * [[`d9ef603`](http://github.com/koajs/koa/commit/d9ef60398e88f2c2f958ab2b159d38052ffe7f8a)] - chore: Optimize array split (#1295) (Mikhail Bodrov <>) + * [[`9be8583`](http://github.com/koajs/koa/commit/9be858312553002841725b617050aaff3c48951d)] - chore: replace ~~ with Math.trunc in res.length (option) (#1288) (jeremiG <>) + * [[`7e46c20`](http://github.com/koajs/koa/commit/7e46c2058cb5994809eab5f4dbb12f21e937c72b)] - docs: add link to the license file (#1290) (James George <>) + * [[`48993ad`](http://github.com/koajs/koa/commit/48993ade9b0831fbce28d94b3b0963a4b0dccbdd)] - docs: Document other body types (#1285) (Douglas Wade <>) + * [[`acb388b`](http://github.com/koajs/koa/commit/acb388bc0546b48fca11dce8aa7a595af2cda5e2)] - docs: Add security vulnerability disclosure instructions to the Readme (#1283) (Douglas Wade <>) + * [[`a007198`](http://github.com/koajs/koa/commit/a007198fa23c19902b1f3ffb81498629e0e9c875)] - docs: Document ctx.app.emit (#1284) (Douglas Wade <>) + * [[`f90e825`](http://github.com/koajs/koa/commit/f90e825da9d505c11b4262c50cd54553f979c300)] - docs: response.set(fields) won't overwrites previous header fields(#1282) (Douglas Wade <>) + * [[`fc93c05`](http://github.com/koajs/koa/commit/fc93c05f68398f30abc46fd16ae6c673a1eee099)] - docs: update readme to add babel 7 instructions (#1274) (Vikram Rangaraj <>) + * [[`5560f72`](http://github.com/koajs/koa/commit/5560f729124f022ffed00085aafea43dded7fb03)] - chore: use the ability of `content-type` lib directly (#1276) (Jordan <>) + +2.6.2 / 2018-11-10 +================== + +**fixes** + * [[`9905199`](http://github.com/koajs/koa/commit/99051992a9f45eb0dd79e062681d6f5d366deb41)] - fix: Status message is not supported on HTTP/2 (#1264) (André Cruz <>) + +**others** + * [[`325792a`](http://github.com/koajs/koa/commit/325792aee92de0ba6fea306657933fc63dc00474)] - docs: add table of contents for guide.md (#1267) (ZYSzys <>) + * [[`71aaa29`](http://github.com/koajs/koa/commit/71aaa29591d6681f8579486f18d32ba1ee651a5b)] - docs: fix spelling in throw docs (#1269) (Martin Iwanowski <>) + * [[`bc81ca9`](http://github.com/koajs/koa/commit/bc81ca9414296234c764b7306a19ba72b2e59b52)] - chore: use res instead of this.res (#1271) (Jordan <>) + * [[`0251b38`](http://github.com/koajs/koa/commit/0251b38a8405471892c5eeaba7c8d54bd7028214)] - test: node v11 on travis (#1265) (Martin Iwanowski <>) + * [[`88b92b4`](http://github.com/koajs/koa/commit/88b92b43153f21609aee71d47abcd4dc27a6586d)] - doc: updated docs for throw() to pass status as first param. (#1268) (Waleed Ashraf <>) + +2.6.1 / 2018-10-23 +================== + +**fixes** + * [[`4964242`](http://github.com/koajs/koa/commit/49642428342e5f291eb9d690802e83ed830623b5)] - fix: use X-Forwarded-Host first on app.proxy present (#1263) (fengmk2 <>) + +2.6.0 / 2018-10-23 +================== + +**features** + * [[`9c5c58b`](http://github.com/koajs/koa/commit/9c5c58b18363494976185e7ddc790ac63de840ed)] - feat: use :authority header of http2 requests as host (#1262) (Martin Michaelis <>) + * [[`9146024`](http://github.com/koajs/koa/commit/9146024e1094e8bb871ab15d1b7fc556a710732f)] - feat: response.attachment append a parameter: options from contentDisposition (#1240) (小雷 <<863837949@qq.com>>) + +**others** + * [[`d32623b`](http://github.com/koajs/koa/commit/d32623baa7a6273d47be67d587ad4ea0ecffc5de)] - docs: Update error-handling.md (#1239) (urugator <>) + +2.5.3 / 2018-09-11 +================== + +**fixes** + * [[`2ee32f5`](http://github.com/koajs/koa/commit/2ee32f50b88b383317e33cc0a4bfaa5f2eadead7)] - fix: pin debug@~3.1.0 avoid deprecated warnning (#1245) (fengmk2 <>) + +**others** + * [[`2180839`](http://github.com/koajs/koa/commit/2180839eda2cb16edcfda46ccfe24711680af850)] - docs: Update koa-vs-express.md (#1230) (Clayton Ray <>) + +2.5.2 / 2018-07-12 +================== + + * deps: upgrade all dependencies + * perf: avoid stringify when set header (#1220) + * perf: cache content type's result (#1218) + * perf: lazy init cookies and ip when first time use it (#1216) + * chore: fix comment & approve cov (#1214) + * docs: fix grammar + * test&cov: add test case (#1211) + * Lazily initialize `request.accept` and delegate `context.accept` (#1209) + * fix: use non deprecated custom inspect (#1198) + * Simplify processes in the getter `request.protocol` (#1203) + * docs: better demonstrate middleware flow (#1195) + * fix: Throw a TypeError instead of a AssertionError (#1199) + * chore: mistake in a comment (#1201) + * chore: use this.res.socket insteadof this.ctx.req.socket (#1177) + * chore: Using "listenerCount" instead of "listeners" (#1184) + +2.5.1 / 2018-04-27 +================== + + * test: node v10 on travis (#1182) + * fix tests: remove unnecessary assert doesNotThrow and api calls (#1170) + * use this.response insteadof this.ctx.response (#1163) + * deps: remove istanbul (#1151) + * Update guide.md (#1150) + +2.5.0 / 2018-02-11 +================== + + * feat: ignore set header/status when header sent (#1137) + * run coverage using --runInBand (#1141) + * [Update] license year to 2018 (#1130) + * docs: small grammatical fix in api docs index (#1111) + * docs: fixed typo (#1112) + * docs: capitalize K in word koa (#1126) + * Error handling: on non-error throw try to stringify if error is an object (#1113) + * Use eslint-config-koa (#1105) + * Update mgol's name in AUTHORS, add .mailmap (#1100) + * Avoid generating package locks instead of ignoring them (#1108) + * chore: update copyright year to 2017 (#1095) + + +2.4.1 / 2017-11-06 +================== + + * fix bad merge w/ 2.4.0 + +2.4.0 / 2017-11-06 +================== + +UNPUBLISHED + + * update `package.engines.node` to be more strict + * update `fresh@^0.5.2` + * fix: `inspect()` no longer crashes `context` + * fix: gated `res.statusMessage` for HTTP/2 + * added: `app.handleRequest()` is exposed + +2.3.0 / 2017-06-20 +================== + + * fix: use `Buffer.from()` + * test on node 7 & 8 + * add `package-lock.json` to `.gitignore` + * run `lint --fix` + * add `request.header` in addition to `request.headers` + * add IPv6 hostname support + +2.2.0 / 2017-03-14 +================== + + * fix: drop `package.engines.node` requirement to >= 6.0.0 + * this fixes `yarn`, which errors when this semver range is not satisfied + * bump `cookies@~0.7.0` + * bump `fresh@^0.5.0` + +2.1.0 / 2017-03-07 +================== + + * added: return middleware chain promise from `callback()` #848 + * added: node v7.7+ `res.getHeaderNames()` support #930 + * added: `err.headerSent` in error handling #919 + * added: lots of docs! + +2.0.1 / 2017-02-25 +================== + +NOTE: we hit a versioning snafu. `v2.0.0` was previously released, +so `v2.0.1` is released as the first `v2.x` with a `latest` tag. + + * upgrade mocha #900 + * add names to `application`'s request and response handlers #805 + * breaking: remove unused `app.name` #899 + * breaking: drop official support for node < 7.6 + +2.0.0 / ?????????? +================== + + * Fix malformed content-type header causing exception on charset get (#898) + * fix: subdomains should be [] if the host is an ip (#808) + * don't pre-bound onerror [breaking change] (#800) + * fix `ctx.flushHeaders()` to use `res.flushHeaders()` instead of `res.writeHead()` (#795) + * fix(response): correct response.writable logic (#782) + * merge v1.1.2 and v1.2.0 changes + * include `koa-convert` so that generator functions still work + * NOTE: generator functions are deprecated in v2 and will be removed in v3 + * improve linting + * improve docs + +2.0.0-alpha.8 / 2017-02-13 +================== + + * Fix malformed content-type header causing exception on charset get (#898) + +2.0.0-alpha.7 / 2016-09-07 +================== + + * fix: subdomains should be [] if the host is an ip (#808) + +2.0.0-alpha.6 / 2016-08-29 +================== + + * don't pre-bound onerror [breaking change] + +2.0.0-alpha.5 / 2016-08-10 +================== + + * fix `ctx.flushHeaders()` to use `res.flushHeaders()` instead of `res.writeHead()` + +2.0.0-alpha.4 / 2016-07-23 +================== + + * fix `response.writeable` during pipelined requests + +1.2.0 / 2016-03-03 +================== + + * add support for `err.headers` in `ctx.onerror()` + - see: https://github.com/koajs/koa/pull/668 + - note: you should set these headers in your custom error handlers as well + - docs: https://github.com/koajs/koa/blob/master/docs/error-handling.md + * fix `cookies`' detection of http/https + - see: https://github.com/koajs/koa/pull/614 + * deprecate `app.experimental = true`. Koa v2 does not use this signature. + * add a code of conduct + * test against the latest version of node + * add a lot of docs + +1.1.2 / 2015-11-05 +================== + + * ensure parseurl always working as expected + * fix Application.inspect() – missing .proxy value. + +2.0.0-alpha.3 / 2015-11-05 +================== + + * ensure parseurl always working as expected. #586 + * fix Application.inspect() – missing .proxy value. Closes #563 + +2.0.0-alpha.2 / 2015-10-27 +================== + + * remove `co` and generator support completely + * improved documentation + * more refactoring into ES6 + +2.0.0-alpha.1 / 2015-10-22 +================== + + * change the middleware signature to `async (ctx, next) => await next()` + * drop node < 4 support and rewrite the codebase in ES6 + +1.1.1 / 2015-10-22 +================== + + * do not send a content-type when the type is unknown #536 + +1.1.0 / 2015-10-11 +================== + + * add `app.silent=` to toggle error logging @tejasmanohar #486 + * add `ctx.origin` @chentsulin #480 + * various refactoring + - add `use strict` everywhere + +1.0.0 / 2015-08-22 +================== + + * add `this.req` check for `querystring()` + * don't log errors with `err.expose` + * `koa` now follows semver! + +0.21.0 / 2015-05-23 +================== + + * empty `request.query` objects are now always the same instance + * bump `fresh@0.3.0` + +0.20.0 / 2015-04-30 +================== + +Breaking change if you're using `this.get('ua') === undefined` etc. +For more details please checkout [#438](https://github.com/koajs/koa/pull/438). + + * make sure helpers return strict string + * feat: alias response.headers to response.header + +0.19.1 / 2015-04-14 +================== + + * non-error thrown, fixed #432 + +0.19.0 / 2015-04-05 +================== + + * `req.host` and `req.hostname` now always return a string (semi-breaking change) + * improved test coverage + +0.18.1 / 2015-03-01 +================== + + * move babel to `devDependencies` + +0.18.0 / 2015-02-14 +================== + + * experimental es7 async function support via `app.experimental = true` + * use `content-type` instead of `media-typer` + +0.17.0 / 2015-02-05 +================== + +Breaking change if you're using an old version of node v0.11! +Otherwise, you should have no trouble upgrading. + + * official iojs support + * drop support for node.js `>= 0.11.0 < 0.11.16` + * use `Object.setPrototypeOf()` instead of `__proto__` + * update dependencies + +0.16.0 / 2015-01-27 +================== + + * add `res.append()` + * fix path usage for node@0.11.15 + +0.15.0 / 2015-01-18 +================== + + * add `this.href` + +0.14.0 / 2014-12-15 +================== + + * remove `x-powered-by` response header + * fix the content type on plain-text redirects + * add ctx.state + * bump `co@4` + * bump dependencies + +0.13.0 / 2014-10-17 +================== + + * add this.message + * custom status support via `statuses` + +0.12.2 / 2014-09-28 +================== + + * use wider semver ranges for dependencies koa maintainers also maintain + +0.12.1 / 2014-09-21 +================== + + * bump content-disposition + * bump statuses + +0.12.0 / 2014-09-20 +================== + + * add this.assert() + * use content-disposition + +0.11.0 / 2014-09-08 +================== + + * fix app.use() assertion #337 + * bump a lot of dependencies + +0.10.0 / 2014-08-12 +================== + + * add `ctx.throw(err, object)` support + * add `ctx.throw(err, status, object)` support + +0.9.0 / 2014-08-07 +================== + + * add: do not set `err.expose` to true when err.status not a valid http status code + * add: alias `request.headers` as `request.header` + * add context.inspect(), cleanup app.inspect() + * update cookies + * fix `err.status` invalid lead to uncaughtException + * fix middleware gif, close #322 + +0.8.2 / 2014-07-27 +================== + + * bump co + * bump parseurl + +0.8.1 / 2014-06-24 +================== + + * bump type-is + +0.8.0 / 2014-06-13 +================== + + * add `this.response.is()`` + * remove `.status=string` and `res.statusString` #298 + +0.7.0 / 2014-06-07 +================== + + * add `this.lastModified` and `this.etag` as both getters and setters for ubiquity #292. + See koajs/koa@4065bf7 for an explanation. + * refactor `this.response.vary()` to use [vary](https://github.com/expressjs/vary) #291 + * remove `this.response.append()` #291 + +0.6.3 / 2014-06-06 +================== + + * fix res.type= when the extension is unknown + * assert when non-error is passed to app.onerror #287 + * bump finished + +0.6.2 / 2014-06-03 +================== + + * switch from set-type to mime-types + +0.6.1 / 2014-05-11 +================== + + * bump type-is + * bump koa-compose + +0.6.0 / 2014-05-01 +================== + + * add nicer error formatting + * add: assert object type in ctx.onerror + * change .status default to 404. Closes #263 + * remove .outputErrors, suppress output when handled by the dev. Closes #272 + * fix content-length when body is re-assigned. Closes #267 + +0.5.5 / 2014-04-14 +================== + + * fix length when .body is missing + * fix: make sure all intermediate stream bodies will be destroyed + +0.5.4 / 2014-04-12 +================== + + * fix header stripping in a few cases + +0.5.3 / 2014-04-09 +================== + + * change res.type= to always default charset. Closes #252 + * remove ctx.inspect() implementation. Closes #164 + +0.5.2 / 2014-03-23 +================== + + * fix: inspection of `app` and `app.toJSON()` + * fix: let `this.throw`n errors provide their own status + * fix: overwriting of `content-type` w/ `HEAD` requests + * refactor: use statuses + * refactor: use escape-html + * bump dev deps + +0.5.1 / 2014-03-06 +================== + + * add request.hostname(getter). Closes #224 + * remove response.charset and ctx.charset (too confusing in relation to ctx.type) [breaking change] + * fix a debug() name + +0.5.0 / 2014-02-19 +================== + + * add context.charset + * add context.charset= + * add request.charset + * add response.charset + * add response.charset= + * fix response.body= html content sniffing + * change ctx.length and ctx.type to always delegate to response object [breaking change] + +0.4.0 / 2014-02-11 +================== + + * remove app.jsonSpaces settings - moved to [koa-json](https://github.com/koajs/json) + * add this.response=false to bypass koa's response handling + * fix response handling after body has been sent + * changed ctx.throw() to no longer .expose 5xx errors + * remove app.keys getter/setter, update cookies, and remove keygrip deps + * update fresh + * update koa-compose + +0.3.0 / 2014-01-17 +================== + + * add ctx.host= delegate + * add req.host= + * add: context.throw supports Error instances + * update co + * update cookies + +0.2.1 / 2013-12-30 +================== + + * add better 404 handling + * add check for fn._name in debug() output + * add explicit .toJSON() calls to ctx.toJSON() + +0.2.0 / 2013-12-28 +================== + + * add support for .throw(status, msg). Closes #130 + * add GeneratorFunction assertion for app.use(). Closes #120 + * refactor: move `.is()` to `type-is` + * refactor: move content negotiation to "accepts" + * refactor: allow any streams with .pipe method + * remove `next` in callback for now + +0.1.2 / 2013-12-21 +================== + + * update co, koa-compose, keygrip + * use on-socket-error + * add throw(status, msg) support + * assert middleware is GeneratorFunction + * ducktype stream checks + * remove `next` is `app.callback()` + +0.1.1 / 2013-12-19 +================== + + * fix: cleanup socker error handler on response diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/LICENSE new file mode 100644 index 00000000..a7062874 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2019 Koa 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/Readme.md new file mode 100644 index 00000000..29a1e92c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/Readme.md @@ -0,0 +1,289 @@ +Koa middleware framework for nodejs + + [![gitter][gitter-image]][gitter-url] + [![NPM version][npm-image]][npm-url] + [![build status][travis-image]][travis-url] + [![Test coverage][coveralls-image]][coveralls-url] + [![OpenCollective Backers][backers-image]](#backers) + [![OpenCollective Sponsors][sponsors-image]](#sponsors) + [![PR's Welcome][pr-welcoming-image]][pr-welcoming-url] + + Expressive HTTP middleware framework for node.js to make web applications and APIs more enjoyable to write. Koa's middleware stack flows in a stack-like manner, allowing you to perform actions downstream then filter and manipulate the response upstream. + + Only methods that are common to nearly all HTTP servers are integrated directly into Koa's small ~570 SLOC codebase. This + includes things like content negotiation, normalization of node inconsistencies, redirection, and a few others. + + Koa is not bundled with any middleware. + +## Installation + +Koa requires __node v7.6.0__ or higher for ES2015 and async function support. + +``` +$ npm install koa +``` + +## Hello Koa + +```js +const Koa = require('koa'); +const app = new Koa(); + +// response +app.use(ctx => { + ctx.body = 'Hello Koa'; +}); + +app.listen(3000); +``` + +## Getting started + + - [Kick-Off-Koa](https://github.com/koajs/kick-off-koa) - An intro to Koa via a set of self-guided workshops. + - [Workshop](https://github.com/koajs/workshop) - A workshop to learn the basics of Koa, Express' spiritual successor. + - [Introduction Screencast](https://knowthen.com/episode-3-koajs-quickstart-guide/) - An introduction to installing and getting started with Koa + + +## Middleware + +Koa is a middleware framework that can take two different kinds of functions as middleware: + + * async function + * common function + +Here is an example of logger middleware with each of the different functions: + +### ___async___ functions (node v7.6+) + +```js +app.use(async (ctx, next) => { + const start = Date.now(); + await next(); + const ms = Date.now() - start; + console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); +}); +``` + +### Common function + +```js +// Middleware normally takes two parameters (ctx, next), ctx is the context for one request, +// next is a function that is invoked to execute the downstream middleware. It returns a Promise with a then function for running code after completion. + +app.use((ctx, next) => { + const start = Date.now(); + return next().then(() => { + const ms = Date.now() - start; + console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); + }); +}); +``` + +### Koa v1.x Middleware Signature + +The middleware signature changed between v1.x and v2.x. The older signature is deprecated. + +**Old signature middleware support will be removed in v3** + +Please see the [Migration Guide](docs/migration.md) for more information on upgrading from v1.x and +using v1.x middleware with v2.x. + +## Context, Request and Response + +Each middleware receives a Koa `Context` object that encapsulates an incoming +http message and the corresponding response to that message. `ctx` is often used +as the parameter name for the context object. + +```js +app.use(async (ctx, next) => { await next(); }); +``` + +Koa provides a `Request` object as the `request` property of the `Context`. +Koa's `Request` object provides helpful methods for working with +http requests which delegate to an [IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage) +from the node `http` module. + +Here is an example of checking that a requesting client supports xml. + +```js +app.use(async (ctx, next) => { + ctx.assert(ctx.request.accepts('xml'), 406); + // equivalent to: + // if (!ctx.request.accepts('xml')) ctx.throw(406); + await next(); +}); +``` + +Koa provides a `Response` object as the `response` property of the `Context`. +Koa's `Response` object provides helpful methods for working with +http responses which delegate to a [ServerResponse](https://nodejs.org/api/http.html#http_class_http_serverresponse) +. + +Koa's pattern of delegating to Node's request and response objects rather than extending them +provides a cleaner interface and reduces conflicts between different middleware and with Node +itself as well as providing better support for stream handling. The `IncomingMessage` can still be +directly accessed as the `req` property on the `Context` and `ServerResponse` can be directly +accessed as the `res` property on the `Context`. + +Here is an example using Koa's `Response` object to stream a file as the response body. + +```js +app.use(async (ctx, next) => { + await next(); + ctx.response.type = 'xml'; + ctx.response.body = fs.createReadStream('really_large.xml'); +}); +``` + +The `Context` object also provides shortcuts for methods on its `request` and `response`. In the prior +examples, `ctx.type` can be used instead of `ctx.response.type` and `ctx.accepts` can be used +instead of `ctx.request.accepts`. + +For more information on `Request`, `Response` and `Context`, see the [Request API Reference](docs/api/request.md), +[Response API Reference](docs/api/response.md) and [Context API Reference](docs/api/context.md). + +## Koa Application + +The object created when executing `new Koa()` is known as the Koa application object. + +The application object is Koa's interface with node's http server and handles the registration +of middleware, dispatching to the middleware from http, default error handling, as well as +configuration of the context, request and response objects. + +Learn more about the application object in the [Application API Reference](docs/api/index.md). + +## Documentation + + - [Usage Guide](docs/guide.md) + - [Error Handling](docs/error-handling.md) + - [Koa for Express Users](docs/koa-vs-express.md) + - [FAQ](docs/faq.md) + - [API documentation](docs/api/index.md) + +## Troubleshooting + +Check the [Troubleshooting Guide](docs/troubleshooting.md) or [Debugging Koa](docs/guide.md#debugging-koa) in +the general Koa guide. + +## Running tests + +``` +$ npm test +``` + +## Reporting vulnerabilities + +To report a security vulnerability, please do not open an issue, as this notifies attackers of the vulnerability. Instead, please email [dead_horse](mailto:heyiyu.deadhorse@gmail.com), [jonathanong](mailto:me@jongleberry.com), and [niftylettuce](mailto:niftylettuce@gmail.com) to disclose. + +## Authors + +See [AUTHORS](AUTHORS). + +## Community + + - [Badgeboard](https://koajs.github.io/badgeboard) and list of official modules + - [Examples](https://github.com/koajs/examples) + - [Middleware](https://github.com/koajs/koa/wiki) list + - [Wiki](https://github.com/koajs/koa/wiki) + - [Reddit Community](https://www.reddit.com/r/koajs) + - [Mailing list](https://groups.google.com/forum/#!forum/koajs) + - [中文文档 v1.x](https://github.com/guo-yu/koa-guide) + - [中文文档 v2.x](https://github.com/demopark/koa-docs-Zh-CN) + - __[#koajs]__ on freenode + +## Job Board + +Looking for a career upgrade? + + + + + +## Backers + +Support us with a monthly donation and help us continue our activities. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# License + + [MIT](https://github.com/koajs/koa/blob/master/LICENSE) + +[npm-image]: https://img.shields.io/npm/v/koa.svg?style=flat-square +[npm-url]: https://www.npmjs.com/package/koa +[travis-image]: https://img.shields.io/travis/koajs/koa/master.svg?style=flat-square +[travis-url]: https://travis-ci.org/koajs/koa +[coveralls-image]: https://img.shields.io/codecov/c/github/koajs/koa.svg?style=flat-square +[coveralls-url]: https://codecov.io/github/koajs/koa?branch=master +[backers-image]: https://opencollective.com/koajs/backers/badge.svg?style=flat-square +[sponsors-image]: https://opencollective.com/koajs/sponsors/badge.svg?style=flat-square +[gitter-image]: https://img.shields.io/gitter/room/koajs/koa.svg?style=flat-square +[gitter-url]: https://gitter.im/koajs/koa?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge +[#koajs]: https://webchat.freenode.net/?channels=#koajs +[pr-welcoming-image]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square +[pr-welcoming-url]: https://github.com/koajs/koa/pull/new diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/dist/koa.mjs b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/dist/koa.mjs new file mode 100644 index 00000000..8101c022 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/dist/koa.mjs @@ -0,0 +1,4 @@ +import mod from "../lib/application.js"; + +export default mod; +export const HttpError = mod.HttpError; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/application.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/application.js new file mode 100644 index 00000000..6849d73f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/application.js @@ -0,0 +1,291 @@ + +'use strict'; + +/** + * Module dependencies. + */ + +const isGeneratorFunction = require('is-generator-function'); +const debug = require('debug')('koa:application'); +const onFinished = require('on-finished'); +const response = require('./response'); +const compose = require('koa-compose'); +const context = require('./context'); +const request = require('./request'); +const statuses = require('statuses'); +const Emitter = require('events'); +const util = require('util'); +const Stream = require('stream'); +const http = require('http'); +const only = require('only'); +const convert = require('koa-convert'); +const deprecate = require('depd')('koa'); +const { HttpError } = require('http-errors'); + +/** + * Expose `Application` class. + * Inherits from `Emitter.prototype`. + */ + +module.exports = class Application extends Emitter { + /** + * Initialize a new `Application`. + * + * @api public + */ + + /** + * + * @param {object} [options] Application options + * @param {string} [options.env='development'] Environment + * @param {string[]} [options.keys] Signed cookie keys + * @param {boolean} [options.proxy] Trust proxy headers + * @param {number} [options.subdomainOffset] Subdomain offset + * @param {boolean} [options.proxyIpHeader] proxy ip header, default to X-Forwarded-For + * @param {boolean} [options.maxIpsCount] max ips read from proxy ip header, default to 0 (means infinity) + * + */ + + constructor(options) { + super(); + options = options || {}; + this.proxy = options.proxy || false; + this.subdomainOffset = options.subdomainOffset || 2; + this.proxyIpHeader = options.proxyIpHeader || 'X-Forwarded-For'; + this.maxIpsCount = options.maxIpsCount || 0; + this.env = options.env || process.env.NODE_ENV || 'development'; + if (options.keys) this.keys = options.keys; + this.middleware = []; + this.context = Object.create(context); + this.request = Object.create(request); + this.response = Object.create(response); + // util.inspect.custom support for node 6+ + /* istanbul ignore else */ + if (util.inspect.custom) { + this[util.inspect.custom] = this.inspect; + } + } + + /** + * Shorthand for: + * + * http.createServer(app.callback()).listen(...) + * + * @param {Mixed} ... + * @return {Server} + * @api public + */ + + listen(...args) { + debug('listen'); + const server = http.createServer(this.callback()); + return server.listen(...args); + } + + /** + * Return JSON representation. + * We only bother showing settings. + * + * @return {Object} + * @api public + */ + + toJSON() { + return only(this, [ + 'subdomainOffset', + 'proxy', + 'env' + ]); + } + + /** + * Inspect implementation. + * + * @return {Object} + * @api public + */ + + inspect() { + return this.toJSON(); + } + + /** + * Use the given middleware `fn`. + * + * Old-style middleware will be converted. + * + * @param {Function} fn + * @return {Application} self + * @api public + */ + + use(fn) { + if (typeof fn !== 'function') throw new TypeError('middleware must be a function!'); + if (isGeneratorFunction(fn)) { + deprecate('Support for generators will be removed in v3. ' + + 'See the documentation for examples of how to convert old middleware ' + + 'https://github.com/koajs/koa/blob/master/docs/migration.md'); + fn = convert(fn); + } + debug('use %s', fn._name || fn.name || '-'); + this.middleware.push(fn); + return this; + } + + /** + * Return a request handler callback + * for node's native http server. + * + * @return {Function} + * @api public + */ + + callback() { + const fn = compose(this.middleware); + + if (!this.listenerCount('error')) this.on('error', this.onerror); + + const handleRequest = (req, res) => { + const ctx = this.createContext(req, res); + return this.handleRequest(ctx, fn); + }; + + return handleRequest; + } + + /** + * Handle request in callback. + * + * @api private + */ + + handleRequest(ctx, fnMiddleware) { + const res = ctx.res; + res.statusCode = 404; + const onerror = err => ctx.onerror(err); + const handleResponse = () => respond(ctx); + onFinished(res, onerror); + return fnMiddleware(ctx).then(handleResponse).catch(onerror); + } + + /** + * Initialize a new context. + * + * @api private + */ + + createContext(req, res) { + const context = Object.create(this.context); + const request = context.request = Object.create(this.request); + const response = context.response = Object.create(this.response); + context.app = request.app = response.app = this; + context.req = request.req = response.req = req; + context.res = request.res = response.res = res; + request.ctx = response.ctx = context; + request.response = response; + response.request = request; + context.originalUrl = request.originalUrl = req.url; + context.state = {}; + return context; + } + + /** + * Default error handler. + * + * @param {Error} err + * @api private + */ + + onerror(err) { + // When dealing with cross-globals a normal `instanceof` check doesn't work properly. + // See https://github.com/koajs/koa/issues/1466 + // We can probably remove it once jest fixes https://github.com/facebook/jest/issues/2549. + const isNativeError = + Object.prototype.toString.call(err) === '[object Error]' || + err instanceof Error; + if (!isNativeError) throw new TypeError(util.format('non-error thrown: %j', err)); + + if (404 === err.status || err.expose) return; + if (this.silent) return; + + const msg = err.stack || err.toString(); + console.error(`\n${msg.replace(/^/gm, ' ')}\n`); + } + + /** + * Help TS users comply to CommonJS, ESM, bundler mismatch. + * @see https://github.com/koajs/koa/issues/1513 + */ + + static get default() { + return Application; + } +}; + +/** + * Response helper. + */ + +function respond(ctx) { + // allow bypassing koa + if (false === ctx.respond) return; + + if (!ctx.writable) return; + + const res = ctx.res; + let body = ctx.body; + const code = ctx.status; + + // ignore body + if (statuses.empty[code]) { + // strip headers + ctx.body = null; + return res.end(); + } + + if ('HEAD' === ctx.method) { + if (!res.headersSent && !ctx.response.has('Content-Length')) { + const { length } = ctx.response; + if (Number.isInteger(length)) ctx.length = length; + } + return res.end(); + } + + // status body + if (null == body) { + if (ctx.response._explicitNullBody) { + ctx.response.remove('Content-Type'); + ctx.response.remove('Transfer-Encoding'); + return res.end(); + } + if (ctx.req.httpVersionMajor >= 2) { + body = String(code); + } else { + body = ctx.message || String(code); + } + if (!res.headersSent) { + ctx.type = 'text'; + ctx.length = Buffer.byteLength(body); + } + return res.end(body); + } + + // responses + if (Buffer.isBuffer(body)) return res.end(body); + if ('string' === typeof body) return res.end(body); + if (body instanceof Stream) return body.pipe(res); + + // body: json + body = JSON.stringify(body); + if (!res.headersSent) { + ctx.length = Buffer.byteLength(body); + } + res.end(body); +} + +/** + * Make HttpError available to consumers of the library so that consumers don't + * have a direct dependency upon `http-errors` + */ + +module.exports.HttpError = HttpError; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/context.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/context.js new file mode 100644 index 00000000..f6c0f111 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/context.js @@ -0,0 +1,251 @@ + +'use strict'; + +/** + * Module dependencies. + */ + +const util = require('util'); +const createError = require('http-errors'); +const httpAssert = require('http-assert'); +const delegate = require('delegates'); +const statuses = require('statuses'); +const Cookies = require('cookies'); + +const COOKIES = Symbol('context#cookies'); + +/** + * Context prototype. + */ + +const proto = module.exports = { + + /** + * util.inspect() implementation, which + * just returns the JSON output. + * + * @return {Object} + * @api public + */ + + inspect() { + if (this === proto) return this; + return this.toJSON(); + }, + + /** + * Return JSON representation. + * + * Here we explicitly invoke .toJSON() on each + * object, as iteration will otherwise fail due + * to the getters and cause utilities such as + * clone() to fail. + * + * @return {Object} + * @api public + */ + + toJSON() { + return { + request: this.request.toJSON(), + response: this.response.toJSON(), + app: this.app.toJSON(), + originalUrl: this.originalUrl, + req: '', + res: '', + socket: '' + }; + }, + + /** + * Similar to .throw(), adds assertion. + * + * this.assert(this.user, 401, 'Please login!'); + * + * See: https://github.com/jshttp/http-assert + * + * @param {Mixed} test + * @param {Number} status + * @param {String} message + * @api public + */ + + assert: httpAssert, + + /** + * Throw an error with `status` (default 500) and + * `msg`. Note that these are user-level + * errors, and the message may be exposed to the client. + * + * this.throw(403) + * this.throw(400, 'name required') + * this.throw('something exploded') + * this.throw(new Error('invalid')) + * this.throw(400, new Error('invalid')) + * + * See: https://github.com/jshttp/http-errors + * + * Note: `status` should only be passed as the first parameter. + * + * @param {String|Number|Error} err, msg or status + * @param {String|Number|Error} [err, msg or status] + * @param {Object} [props] + * @api public + */ + + throw(...args) { + throw createError(...args); + }, + + /** + * Default error handling. + * + * @param {Error} err + * @api private + */ + + onerror(err) { + // don't do anything if there is no error. + // this allows you to pass `this.onerror` + // to node-style callbacks. + if (null == err) return; + + // When dealing with cross-globals a normal `instanceof` check doesn't work properly. + // See https://github.com/koajs/koa/issues/1466 + // We can probably remove it once jest fixes https://github.com/facebook/jest/issues/2549. + const isNativeError = + Object.prototype.toString.call(err) === '[object Error]' || + err instanceof Error; + if (!isNativeError) err = new Error(util.format('non-error thrown: %j', err)); + + let headerSent = false; + if (this.headerSent || !this.writable) { + headerSent = err.headerSent = true; + } + + // delegate + this.app.emit('error', err, this); + + // nothing we can do here other + // than delegate to the app-level + // handler and log. + if (headerSent) { + return; + } + + const { res } = this; + + // first unset all headers + /* istanbul ignore else */ + if (typeof res.getHeaderNames === 'function') { + res.getHeaderNames().forEach(name => res.removeHeader(name)); + } else { + res._headers = {}; // Node < 7.7 + } + + // then set those specified + this.set(err.headers); + + // force text/plain + this.type = 'text'; + + let statusCode = err.status || err.statusCode; + + // ENOENT support + if ('ENOENT' === err.code) statusCode = 404; + + // default to 500 + if ('number' !== typeof statusCode || !statuses[statusCode]) statusCode = 500; + + // respond + const code = statuses[statusCode]; + const msg = err.expose ? err.message : code; + this.status = err.status = statusCode; + this.length = Buffer.byteLength(msg); + res.end(msg); + }, + + get cookies() { + if (!this[COOKIES]) { + this[COOKIES] = new Cookies(this.req, this.res, { + keys: this.app.keys, + secure: this.request.secure + }); + } + return this[COOKIES]; + }, + + set cookies(_cookies) { + this[COOKIES] = _cookies; + } +}; + +/** + * Custom inspection implementation for newer Node.js versions. + * + * @return {Object} + * @api public + */ + +/* istanbul ignore else */ +if (util.inspect.custom) { + module.exports[util.inspect.custom] = module.exports.inspect; +} + +/** + * Response delegation. + */ + +delegate(proto, 'response') + .method('attachment') + .method('redirect') + .method('remove') + .method('vary') + .method('has') + .method('set') + .method('append') + .method('flushHeaders') + .access('status') + .access('message') + .access('body') + .access('length') + .access('type') + .access('lastModified') + .access('etag') + .getter('headerSent') + .getter('writable'); + +/** + * Request delegation. + */ + +delegate(proto, 'request') + .method('acceptsLanguages') + .method('acceptsEncodings') + .method('acceptsCharsets') + .method('accepts') + .method('get') + .method('is') + .access('querystring') + .access('idempotent') + .access('socket') + .access('search') + .access('method') + .access('query') + .access('path') + .access('url') + .access('accept') + .getter('origin') + .getter('href') + .getter('subdomains') + .getter('protocol') + .getter('host') + .getter('hostname') + .getter('URL') + .getter('header') + .getter('headers') + .getter('secure') + .getter('stale') + .getter('fresh') + .getter('ips') + .getter('ip'); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/request.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/request.js new file mode 100644 index 00000000..e62afd60 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/request.js @@ -0,0 +1,726 @@ + +'use strict'; + +/** + * Module dependencies. + */ + +const URL = require('url').URL; +const net = require('net'); +const accepts = require('accepts'); +const contentType = require('content-type'); +const stringify = require('url').format; +const parse = require('parseurl'); +const qs = require('querystring'); +const typeis = require('type-is'); +const fresh = require('fresh'); +const only = require('only'); +const util = require('util'); + +const IP = Symbol('context#ip'); + +/** + * Prototype. + */ + +module.exports = { + + /** + * Return request header. + * + * @return {Object} + * @api public + */ + + get header() { + return this.req.headers; + }, + + /** + * Set request header. + * + * @api public + */ + + set header(val) { + this.req.headers = val; + }, + + /** + * Return request header, alias as request.header + * + * @return {Object} + * @api public + */ + + get headers() { + return this.req.headers; + }, + + /** + * Set request header, alias as request.header + * + * @api public + */ + + set headers(val) { + this.req.headers = val; + }, + + /** + * Get request URL. + * + * @return {String} + * @api public + */ + + get url() { + return this.req.url; + }, + + /** + * Set request URL. + * + * @api public + */ + + set url(val) { + this.req.url = val; + }, + + /** + * Get origin of URL. + * + * @return {String} + * @api public + */ + + get origin() { + return `${this.protocol}://${this.host}`; + }, + + /** + * Get full request URL. + * + * @return {String} + * @api public + */ + + get href() { + // support: `GET http://example.com/foo` + if (/^https?:\/\//i.test(this.originalUrl)) return this.originalUrl; + return this.origin + this.originalUrl; + }, + + /** + * Get request method. + * + * @return {String} + * @api public + */ + + get method() { + return this.req.method; + }, + + /** + * Set request method. + * + * @param {String} val + * @api public + */ + + set method(val) { + this.req.method = val; + }, + + /** + * Get request pathname. + * + * @return {String} + * @api public + */ + + get path() { + return parse(this.req).pathname; + }, + + /** + * Set pathname, retaining the query string when present. + * + * @param {String} path + * @api public + */ + + set path(path) { + const url = parse(this.req); + if (url.pathname === path) return; + + url.pathname = path; + url.path = null; + + this.url = stringify(url); + }, + + /** + * Get parsed query string. + * + * @return {Object} + * @api public + */ + + get query() { + const str = this.querystring; + const c = this._querycache = this._querycache || {}; + return c[str] || (c[str] = qs.parse(str)); + }, + + /** + * Set query string as an object. + * + * @param {Object} obj + * @api public + */ + + set query(obj) { + this.querystring = qs.stringify(obj); + }, + + /** + * Get query string. + * + * @return {String} + * @api public + */ + + get querystring() { + if (!this.req) return ''; + return parse(this.req).query || ''; + }, + + /** + * Set query string. + * + * @param {String} str + * @api public + */ + + set querystring(str) { + const url = parse(this.req); + if (url.search === `?${str}`) return; + + url.search = str; + url.path = null; + + this.url = stringify(url); + }, + + /** + * Get the search string. Same as the query string + * except it includes the leading ?. + * + * @return {String} + * @api public + */ + + get search() { + if (!this.querystring) return ''; + return `?${this.querystring}`; + }, + + /** + * Set the search string. Same as + * request.querystring= but included for ubiquity. + * + * @param {String} str + * @api public + */ + + set search(str) { + this.querystring = str; + }, + + /** + * Parse the "Host" header field host + * and support X-Forwarded-Host when a + * proxy is enabled. + * + * @return {String} hostname:port + * @api public + */ + + get host() { + const proxy = this.app.proxy; + let host = proxy && this.get('X-Forwarded-Host'); + if (!host) { + if (this.req.httpVersionMajor >= 2) host = this.get(':authority'); + if (!host) host = this.get('Host'); + } + if (!host) return ''; + return host.split(/\s*,\s*/, 1)[0]; + }, + + /** + * Parse the "Host" header field hostname + * and support X-Forwarded-Host when a + * proxy is enabled. + * + * @return {String} hostname + * @api public + */ + + get hostname() { + const host = this.host; + if (!host) return ''; + if ('[' === host[0]) return this.URL.hostname || ''; // IPv6 + return host.split(':', 1)[0]; + }, + + /** + * Get WHATWG parsed URL. + * Lazily memoized. + * + * @return {URL|Object} + * @api public + */ + + get URL() { + /* istanbul ignore else */ + if (!this.memoizedURL) { + const originalUrl = this.originalUrl || ''; // avoid undefined in template string + try { + this.memoizedURL = new URL(`${this.origin}${originalUrl}`); + } catch (err) { + this.memoizedURL = Object.create(null); + } + } + return this.memoizedURL; + }, + + /** + * Check if the request is fresh, aka + * Last-Modified and/or the ETag + * still match. + * + * @return {Boolean} + * @api public + */ + + get fresh() { + const method = this.method; + const s = this.ctx.status; + + // GET or HEAD for weak freshness validation only + if ('GET' !== method && 'HEAD' !== method) return false; + + // 2xx or 304 as per rfc2616 14.26 + if ((s >= 200 && s < 300) || 304 === s) { + return fresh(this.header, this.response.header); + } + + return false; + }, + + /** + * Check if the request is stale, aka + * "Last-Modified" and / or the "ETag" for the + * resource has changed. + * + * @return {Boolean} + * @api public + */ + + get stale() { + return !this.fresh; + }, + + /** + * Check if the request is idempotent. + * + * @return {Boolean} + * @api public + */ + + get idempotent() { + const methods = ['GET', 'HEAD', 'PUT', 'DELETE', 'OPTIONS', 'TRACE']; + return !!~methods.indexOf(this.method); + }, + + /** + * Return the request socket. + * + * @return {Connection} + * @api public + */ + + get socket() { + return this.req.socket; + }, + + /** + * Get the charset when present or undefined. + * + * @return {String} + * @api public + */ + + get charset() { + try { + const { parameters } = contentType.parse(this.req); + return parameters.charset || ''; + } catch (e) { + return ''; + } + }, + + /** + * Return parsed Content-Length when present. + * + * @return {Number} + * @api public + */ + + get length() { + const len = this.get('Content-Length'); + if (len === '') return; + return ~~len; + }, + + /** + * Return the protocol string "http" or "https" + * when requested with TLS. When the proxy setting + * is enabled the "X-Forwarded-Proto" header + * field will be trusted. If you're running behind + * a reverse proxy that supplies https for you this + * may be enabled. + * + * @return {String} + * @api public + */ + + get protocol() { + if (this.socket.encrypted) return 'https'; + if (!this.app.proxy) return 'http'; + const proto = this.get('X-Forwarded-Proto'); + return proto ? proto.split(/\s*,\s*/, 1)[0] : 'http'; + }, + + /** + * Shorthand for: + * + * this.protocol == 'https' + * + * @return {Boolean} + * @api public + */ + + get secure() { + return 'https' === this.protocol; + }, + + /** + * When `app.proxy` is `true`, parse + * the "X-Forwarded-For" ip address list. + * + * For example if the value was "client, proxy1, proxy2" + * you would receive the array `["client", "proxy1", "proxy2"]` + * where "proxy2" is the furthest down-stream. + * + * @return {Array} + * @api public + */ + + get ips() { + const proxy = this.app.proxy; + const val = this.get(this.app.proxyIpHeader); + let ips = proxy && val + ? val.split(/\s*,\s*/) + : []; + if (this.app.maxIpsCount > 0) { + ips = ips.slice(-this.app.maxIpsCount); + } + return ips; + }, + + /** + * Return request's remote address + * When `app.proxy` is `true`, parse + * the "X-Forwarded-For" ip address list and return the first one + * + * @return {String} + * @api public + */ + + get ip() { + if (!this[IP]) { + this[IP] = this.ips[0] || this.socket.remoteAddress || ''; + } + return this[IP]; + }, + + set ip(_ip) { + this[IP] = _ip; + }, + + /** + * Return subdomains as an array. + * + * Subdomains are the dot-separated parts of the host before the main domain + * of the app. By default, the domain of the app is assumed to be the last two + * parts of the host. This can be changed by setting `app.subdomainOffset`. + * + * For example, if the domain is "tobi.ferrets.example.com": + * If `app.subdomainOffset` is not set, this.subdomains is + * `["ferrets", "tobi"]`. + * If `app.subdomainOffset` is 3, this.subdomains is `["tobi"]`. + * + * @return {Array} + * @api public + */ + + get subdomains() { + const offset = this.app.subdomainOffset; + const hostname = this.hostname; + if (net.isIP(hostname)) return []; + return hostname + .split('.') + .reverse() + .slice(offset); + }, + + /** + * Get accept object. + * Lazily memoized. + * + * @return {Object} + * @api private + */ + + get accept() { + return this._accept || (this._accept = accepts(this.req)); + }, + + /** + * Set accept object. + * + * @param {Object} + * @api private + */ + + set accept(obj) { + this._accept = obj; + }, + + /** + * Check if the given `type(s)` is acceptable, returning + * the best match when true, otherwise `false`, 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.accepts('html'); + * // => "html" + * + * // Accept: text/*, application/json + * this.accepts('html'); + * // => "html" + * this.accepts('text/html'); + * // => "text/html" + * this.accepts('json', 'text'); + * // => "json" + * this.accepts('application/json'); + * // => "application/json" + * + * // Accept: text/*, application/json + * this.accepts('image/png'); + * this.accepts('png'); + * // => false + * + * // Accept: text/*;q=.5, application/json + * this.accepts(['html', 'json']); + * this.accepts('html', 'json'); + * // => "json" + * + * @param {String|Array} type(s)... + * @return {String|Array|false} + * @api public + */ + + accepts(...args) { + return this.accept.types(...args); + }, + + /** + * 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} encoding(s)... + * @return {String|Array} + * @api public + */ + + acceptsEncodings(...args) { + return this.accept.encodings(...args); + }, + + /** + * 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} charset(s)... + * @return {String|Array} + * @api public + */ + + acceptsCharsets(...args) { + return this.accept.charsets(...args); + }, + + /** + * 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} lang(s)... + * @return {Array|String} + * @api public + */ + + acceptsLanguages(...args) { + return this.accept.languages(...args); + }, + + /** + * Check if the incoming request contains the "Content-Type" + * header field and if it contains any of the given mime `type`s. + * If there is no request body, `null` is returned. + * If there is no content type, `false` is returned. + * Otherwise, it returns the first `type` that matches. + * + * Examples: + * + * // With Content-Type: text/html; charset=utf-8 + * this.is('html'); // => 'html' + * this.is('text/html'); // => 'text/html' + * this.is('text/*', 'application/json'); // => 'text/html' + * + * // When Content-Type is application/json + * this.is('json', 'urlencoded'); // => 'json' + * this.is('application/json'); // => 'application/json' + * this.is('html', 'application/*'); // => 'application/json' + * + * this.is('html'); // => false + * + * @param {String|String[]} [type] + * @param {String[]} [types] + * @return {String|false|null} + * @api public + */ + + is(type, ...types) { + return typeis(this.req, type, ...types); + }, + + /** + * Return the request mime type void of + * parameters such as "charset". + * + * @return {String} + * @api public + */ + + get type() { + const type = this.get('Content-Type'); + if (!type) return ''; + return type.split(';')[0]; + }, + + /** + * Return request header. + * + * The `Referrer` header field is special-cased, + * both `Referrer` and `Referer` are interchangeable. + * + * Examples: + * + * this.get('Content-Type'); + * // => "text/plain" + * + * this.get('content-type'); + * // => "text/plain" + * + * this.get('Something'); + * // => '' + * + * @param {String} field + * @return {String} + * @api public + */ + + get(field) { + const req = this.req; + switch (field = field.toLowerCase()) { + case 'referer': + case 'referrer': + return req.headers.referrer || req.headers.referer || ''; + default: + return req.headers[field] || ''; + } + }, + + /** + * Inspect implementation. + * + * @return {Object} + * @api public + */ + + inspect() { + if (!this.req) return; + return this.toJSON(); + }, + + /** + * Return JSON representation. + * + * @return {Object} + * @api public + */ + + toJSON() { + return only(this, [ + 'method', + 'url', + 'header' + ]); + } +}; + +/** + * Custom inspection implementation for newer Node.js versions. + * + * @return {Object} + * @api public + */ + +/* istanbul ignore else */ +if (util.inspect.custom) { + module.exports[util.inspect.custom] = module.exports.inspect; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/response.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/response.js new file mode 100644 index 00000000..91be188e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/lib/response.js @@ -0,0 +1,586 @@ + +'use strict'; + +/** + * Module dependencies. + */ + +const contentDisposition = require('content-disposition'); +const getType = require('cache-content-type'); +const onFinish = require('on-finished'); +const escape = require('escape-html'); +const typeis = require('type-is').is; +const statuses = require('statuses'); +const destroy = require('destroy'); +const assert = require('assert'); +const extname = require('path').extname; +const vary = require('vary'); +const only = require('only'); +const util = require('util'); +const encodeUrl = require('encodeurl'); +const Stream = require('stream'); + +/** + * Prototype. + */ + +module.exports = { + + /** + * Return the request socket. + * + * @return {Connection} + * @api public + */ + + get socket() { + return this.res.socket; + }, + + /** + * Return response header. + * + * @return {Object} + * @api public + */ + + get header() { + const { res } = this; + return typeof res.getHeaders === 'function' + ? res.getHeaders() + : res._headers || {}; // Node < 7.7 + }, + + /** + * Return response header, alias as response.header + * + * @return {Object} + * @api public + */ + + get headers() { + return this.header; + }, + + /** + * Get response status code. + * + * @return {Number} + * @api public + */ + + get status() { + return this.res.statusCode; + }, + + /** + * Set response status code. + * + * @param {Number} code + * @api public + */ + + set status(code) { + if (this.headerSent) return; + + assert(Number.isInteger(code), 'status code must be a number'); + assert(code >= 100 && code <= 999, `invalid status code: ${code}`); + this._explicitStatus = true; + this.res.statusCode = code; + if (this.req.httpVersionMajor < 2) this.res.statusMessage = statuses[code]; + if (this.body && statuses.empty[code]) this.body = null; + }, + + /** + * Get response status message + * + * @return {String} + * @api public + */ + + get message() { + return this.res.statusMessage || statuses[this.status]; + }, + + /** + * Set response status message + * + * @param {String} msg + * @api public + */ + + set message(msg) { + this.res.statusMessage = msg; + }, + + /** + * Get response body. + * + * @return {Mixed} + * @api public + */ + + get body() { + return this._body; + }, + + /** + * Set response body. + * + * @param {String|Buffer|Object|Stream} val + * @api public + */ + + set body(val) { + const original = this._body; + this._body = val; + + // no content + if (null == val) { + if (!statuses.empty[this.status]) this.status = 204; + if (val === null) this._explicitNullBody = true; + this.remove('Content-Type'); + this.remove('Content-Length'); + this.remove('Transfer-Encoding'); + return; + } + + // set the status + if (!this._explicitStatus) this.status = 200; + + // set the content-type only if not yet set + const setType = !this.has('Content-Type'); + + // string + if ('string' === typeof val) { + if (setType) this.type = /^\s* this.ctx.onerror(err)); + // overwriting + if (null != original) this.remove('Content-Length'); + } + + if (setType) this.type = 'bin'; + return; + } + + // json + this.remove('Content-Length'); + this.type = 'json'; + }, + + /** + * Set Content-Length field to `n`. + * + * @param {Number} n + * @api public + */ + + set length(n) { + this.set('Content-Length', n); + }, + + /** + * Return parsed response Content-Length when present. + * + * @return {Number} + * @api public + */ + + get length() { + if (this.has('Content-Length')) { + return parseInt(this.get('Content-Length'), 10) || 0; + } + + const { body } = this; + if (!body || body instanceof Stream) return undefined; + if ('string' === typeof body) return Buffer.byteLength(body); + if (Buffer.isBuffer(body)) return body.length; + return Buffer.byteLength(JSON.stringify(body)); + }, + + /** + * Check if a header has been written to the socket. + * + * @return {Boolean} + * @api public + */ + + get headerSent() { + return this.res.headersSent; + }, + + /** + * Vary on `field`. + * + * @param {String} field + * @api public + */ + + vary(field) { + if (this.headerSent) return; + + vary(this.res, field); + }, + + /** + * Perform a 302 redirect to `url`. + * + * The string "back" is special-cased + * to provide Referrer support, when Referrer + * is not present `alt` or "/" is used. + * + * Examples: + * + * this.redirect('back'); + * this.redirect('back', '/index.html'); + * this.redirect('/login'); + * this.redirect('http://google.com'); + * + * @param {String} url + * @param {String} [alt] + * @api public + */ + + redirect(url, alt) { + // location + if ('back' === url) url = this.ctx.get('Referrer') || alt || '/'; + this.set('Location', encodeUrl(url)); + + // status + if (!statuses.redirect[this.status]) this.status = 302; + + // html + if (this.ctx.accepts('html')) { + url = escape(url); + this.type = 'text/html; charset=utf-8'; + this.body = `Redirecting to ${url}.`; + return; + } + + // text + this.type = 'text/plain; charset=utf-8'; + this.body = `Redirecting to ${url}.`; + }, + + /** + * Set Content-Disposition header to "attachment" with optional `filename`. + * + * @param {String} filename + * @api public + */ + + attachment(filename, options) { + if (filename) this.type = extname(filename); + this.set('Content-Disposition', contentDisposition(filename, options)); + }, + + /** + * Set Content-Type response header with `type` through `mime.lookup()` + * when it does not contain a charset. + * + * Examples: + * + * this.type = '.html'; + * this.type = 'html'; + * this.type = 'json'; + * this.type = 'application/json'; + * this.type = 'png'; + * + * @param {String} type + * @api public + */ + + set type(type) { + type = getType(type); + if (type) { + this.set('Content-Type', type); + } else { + this.remove('Content-Type'); + } + }, + + /** + * Set the Last-Modified date using a string or a Date. + * + * this.response.lastModified = new Date(); + * this.response.lastModified = '2013-09-13'; + * + * @param {String|Date} type + * @api public + */ + + set lastModified(val) { + if ('string' === typeof val) val = new Date(val); + this.set('Last-Modified', val.toUTCString()); + }, + + /** + * Get the Last-Modified date in Date form, if it exists. + * + * @return {Date} + * @api public + */ + + get lastModified() { + const date = this.get('last-modified'); + if (date) return new Date(date); + }, + + /** + * Set the ETag of a response. + * This will normalize the quotes if necessary. + * + * this.response.etag = 'md5hashsum'; + * this.response.etag = '"md5hashsum"'; + * this.response.etag = 'W/"123456789"'; + * + * @param {String} etag + * @api public + */ + + set etag(val) { + if (!/^(W\/)?"/.test(val)) val = `"${val}"`; + this.set('ETag', val); + }, + + /** + * Get the ETag of a response. + * + * @return {String} + * @api public + */ + + get etag() { + return this.get('ETag'); + }, + + /** + * Return the response mime type void of + * parameters such as "charset". + * + * @return {String} + * @api public + */ + + get type() { + const type = this.get('Content-Type'); + if (!type) return ''; + return type.split(';', 1)[0]; + }, + + /** + * Check whether the response is one of the listed types. + * Pretty much the same as `this.request.is()`. + * + * @param {String|String[]} [type] + * @param {String[]} [types] + * @return {String|false} + * @api public + */ + + is(type, ...types) { + return typeis(this.type, type, ...types); + }, + + /** + * Return response header. + * + * Examples: + * + * this.get('Content-Type'); + * // => "text/plain" + * + * this.get('content-type'); + * // => "text/plain" + * + * @param {String} field + * @return {String} + * @api public + */ + + get(field) { + return this.header[field.toLowerCase()] || ''; + }, + + /** + * Returns true if the header identified by name is currently set in the outgoing headers. + * The header name matching is case-insensitive. + * + * Examples: + * + * this.has('Content-Type'); + * // => true + * + * this.get('content-type'); + * // => true + * + * @param {String} field + * @return {boolean} + * @api public + */ + + has(field) { + return typeof this.res.hasHeader === 'function' + ? this.res.hasHeader(field) + // Node < 7.7 + : field.toLowerCase() in this.headers; + }, + + /** + * Set header `field` to `val` or pass + * an object of header fields. + * + * Examples: + * + * this.set('Foo', ['bar', 'baz']); + * this.set('Accept', 'application/json'); + * this.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' }); + * + * @param {String|Object|Array} field + * @param {String} val + * @api public + */ + + set(field, val) { + if (this.headerSent) return; + + if (2 === arguments.length) { + if (Array.isArray(val)) val = val.map(v => typeof v === 'string' ? v : String(v)); + else if (typeof val !== 'string') val = String(val); + this.res.setHeader(field, val); + } else { + for (const key in field) { + this.set(key, field[key]); + } + } + }, + + /** + * Append additional header `field` with value `val`. + * + * Examples: + * + * ``` + * this.append('Link', ['', '']); + * this.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly'); + * this.append('Warning', '199 Miscellaneous warning'); + * ``` + * + * @param {String} field + * @param {String|Array} val + * @api public + */ + + append(field, val) { + const prev = this.get(field); + + if (prev) { + val = Array.isArray(prev) + ? prev.concat(val) + : [prev].concat(val); + } + + return this.set(field, val); + }, + + /** + * Remove header `field`. + * + * @param {String} name + * @api public + */ + + remove(field) { + if (this.headerSent) return; + + this.res.removeHeader(field); + }, + + /** + * Checks if the request is writable. + * Tests for the existence of the socket + * as node sometimes does not set it. + * + * @return {Boolean} + * @api private + */ + + get writable() { + // can't write any more after response finished + // response.writableEnded is available since Node > 12.9 + // https://nodejs.org/api/http.html#http_response_writableended + // response.finished is undocumented feature of previous Node versions + // https://stackoverflow.com/questions/16254385/undocumented-response-finished-in-node-js + if (this.res.writableEnded || this.res.finished) return false; + + const socket = this.res.socket; + // There are already pending outgoing res, but still writable + // https://github.com/nodejs/node/blob/v4.4.7/lib/_http_server.js#L486 + if (!socket) return true; + return socket.writable; + }, + + /** + * Inspect implementation. + * + * @return {Object} + * @api public + */ + + inspect() { + if (!this.res) return; + const o = this.toJSON(); + o.body = this.body; + return o; + }, + + /** + * Return JSON representation. + * + * @return {Object} + * @api public + */ + + toJSON() { + return only(this, [ + 'status', + 'message', + 'header' + ]); + }, + + /** + * Flush any set headers and begin the body + */ + + flushHeaders() { + this.res.flushHeaders(); + } +}; + +/** + * Custom inspection implementation for node 6+. + * + * @return {Object} + * @api public + */ + +/* istanbul ignore else */ +if (util.inspect.custom) { + module.exports[util.inspect.custom] = module.exports.inspect; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.coveralls.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.coveralls.yml new file mode 100644 index 00000000..20a70685 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.coveralls.yml @@ -0,0 +1 @@ +repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.eslintrc b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.eslintrc new file mode 100644 index 00000000..146371ed --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.eslintrc @@ -0,0 +1,14 @@ +{ + "env": { + "browser": true, + "node": true + }, + "globals": { + "chrome": true + }, + "rules": { + "no-console": 0, + "no-empty": [1, { "allowEmptyCatch": true }] + }, + "extends": "eslint:recommended" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.npmignore b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.npmignore new file mode 100644 index 00000000..5f60eecc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.npmignore @@ -0,0 +1,9 @@ +support +test +examples +example +*.sock +dist +yarn.lock +coverage +bower.json diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.travis.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.travis.yml new file mode 100644 index 00000000..a7643003 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/.travis.yml @@ -0,0 +1,20 @@ +sudo: false + +language: node_js + +node_js: + - "4" + - "6" + - "8" + +install: + - make install + +script: + - make lint + - make test + +matrix: + include: + - node_js: '8' + env: BROWSER=1 diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/CHANGELOG.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/CHANGELOG.md new file mode 100644 index 00000000..820d21e3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/CHANGELOG.md @@ -0,0 +1,395 @@ + +3.1.0 / 2017-09-26 +================== + + * Add `DEBUG_HIDE_DATE` env var (#486) + * Remove ReDoS regexp in %o formatter (#504) + * Remove "component" from package.json + * Remove `component.json` + * Ignore package-lock.json + * Examples: fix colors printout + * Fix: browser detection + * Fix: spelling mistake (#496, @EdwardBetts) + +3.0.1 / 2017-08-24 +================== + + * Fix: Disable colors in Edge and Internet Explorer (#489) + +3.0.0 / 2017-08-08 +================== + + * Breaking: Remove DEBUG_FD (#406) + * Breaking: Use `Date#toISOString()` instead to `Date#toUTCString()` when output is not a TTY (#418) + * Breaking: Make millisecond timer namespace specific and allow 'always enabled' output (#408) + * Addition: document `enabled` flag (#465) + * Addition: add 256 colors mode (#481) + * Addition: `enabled()` updates existing debug instances, add `destroy()` function (#440) + * Update: component: update "ms" to v2.0.0 + * Update: separate the Node and Browser tests in Travis-CI + * Update: refactor Readme, fixed documentation, added "Namespace Colors" section, redid screenshots + * Update: separate Node.js and web browser examples for organization + * Update: update "browserify" to v14.4.0 + * Fix: fix Readme typo (#473) + +2.6.9 / 2017-09-22 +================== + + * remove ReDoS regexp in %o formatter (#504) + +2.6.8 / 2017-05-18 +================== + + * Fix: Check for undefined on browser globals (#462, @marbemac) + +2.6.7 / 2017-05-16 +================== + + * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom) + * Fix: Inline extend function in node implementation (#452, @dougwilson) + * Docs: Fix typo (#455, @msasad) + +2.6.5 / 2017-04-27 +================== + + * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek) + * Misc: clean up browser reference checks (#447, @thebigredgeek) + * Misc: add npm-debug.log to .gitignore (@thebigredgeek) + + +2.6.4 / 2017-04-20 +================== + + * Fix: bug that would occur if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo) + * Chore: ignore bower.json in npm installations. (#437, @joaovieira) + * Misc: update "ms" to v0.7.3 (@tootallnate) + +2.6.3 / 2017-03-13 +================== + + * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts) + * Docs: Changelog fix (@thebigredgeek) + +2.6.2 / 2017-03-10 +================== + + * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin) + * Docs: Add backers and sponsors from Open Collective (#422, @piamancini) + * Docs: Add Slackin invite badge (@tootallnate) + +2.6.1 / 2017-02-10 +================== + + * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error + * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0) + * Fix: IE8 "Expected identifier" error (#414, @vgoma) + * Fix: Namespaces would not disable once enabled (#409, @musikov) + +2.6.0 / 2016-12-28 +================== + + * Fix: added better null pointer checks for browser useColors (@thebigredgeek) + * Improvement: removed explicit `window.debug` export (#404, @tootallnate) + * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate) + +2.5.2 / 2016-12-25 +================== + + * Fix: reference error on window within webworkers (#393, @KlausTrainer) + * Docs: fixed README typo (#391, @lurch) + * Docs: added notice about v3 api discussion (@thebigredgeek) + +2.5.1 / 2016-12-20 +================== + + * Fix: babel-core compatibility + +2.5.0 / 2016-12-20 +================== + + * Fix: wrong reference in bower file (@thebigredgeek) + * Fix: webworker compatibility (@thebigredgeek) + * Fix: output formatting issue (#388, @kribblo) + * Fix: babel-loader compatibility (#383, @escwald) + * Misc: removed built asset from repo and publications (@thebigredgeek) + * Misc: moved source files to /src (#378, @yamikuronue) + * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue) + * Test: coveralls integration (#378, @yamikuronue) + * Docs: simplified language in the opening paragraph (#373, @yamikuronue) + +2.4.5 / 2016-12-17 +================== + + * Fix: `navigator` undefined in Rhino (#376, @jochenberger) + * Fix: custom log function (#379, @hsiliev) + * Improvement: bit of cleanup + linting fixes (@thebigredgeek) + * Improvement: rm non-maintainted `dist/` dir (#375, @freewil) + * Docs: simplified language in the opening paragraph. (#373, @yamikuronue) + +2.4.4 / 2016-12-14 +================== + + * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts) + +2.4.3 / 2016-12-14 +================== + + * Fix: navigation.userAgent error for react native (#364, @escwald) + +2.4.2 / 2016-12-14 +================== + + * Fix: browser colors (#367, @tootallnate) + * Misc: travis ci integration (@thebigredgeek) + * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek) + +2.4.1 / 2016-12-13 +================== + + * Fix: typo that broke the package (#356) + +2.4.0 / 2016-12-13 +================== + + * Fix: bower.json references unbuilt src entry point (#342, @justmatt) + * Fix: revert "handle regex special characters" (@tootallnate) + * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate) + * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate) + * Improvement: allow colors in workers (#335, @botverse) + * Improvement: use same color for same namespace. (#338, @lchenay) + +2.3.3 / 2016-11-09 +================== + + * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne) + * Fix: Returning `localStorage` saved values (#331, Levi Thomason) + * Improvement: Don't create an empty object when no `process` (Nathan Rajlich) + +2.3.2 / 2016-11-09 +================== + + * Fix: be super-safe in index.js as well (@TooTallNate) + * Fix: should check whether process exists (Tom Newby) + +2.3.1 / 2016-11-09 +================== + + * Fix: Added electron compatibility (#324, @paulcbetts) + * Improvement: Added performance optimizations (@tootallnate) + * Readme: Corrected PowerShell environment variable example (#252, @gimre) + * Misc: Removed yarn lock file from source control (#321, @fengmk2) + +2.3.0 / 2016-11-07 +================== + + * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic) + * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos) + * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15) + * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran) + * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom) + * Package: Update "ms" to 0.7.2 (#315, @DevSide) + * Package: removed superfluous version property from bower.json (#207 @kkirsche) + * Readme: fix USE_COLORS to DEBUG_COLORS + * Readme: Doc fixes for format string sugar (#269, @mlucool) + * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0) + * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable) + * Readme: better docs for browser support (#224, @matthewmueller) + * Tooling: Added yarn integration for development (#317, @thebigredgeek) + * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek) + * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman) + * Misc: Updated contributors (@thebigredgeek) + +2.2.0 / 2015-05-09 +================== + + * package: update "ms" to v0.7.1 (#202, @dougwilson) + * README: add logging to file example (#193, @DanielOchoa) + * README: fixed a typo (#191, @amir-s) + * browser: expose `storage` (#190, @stephenmathieson) + * Makefile: add a `distclean` target (#189, @stephenmathieson) + +2.1.3 / 2015-03-13 +================== + + * Updated stdout/stderr example (#186) + * Updated example/stdout.js to match debug current behaviour + * Renamed example/stderr.js to stdout.js + * Update Readme.md (#184) + * replace high intensity foreground color for bold (#182, #183) + +2.1.2 / 2015-03-01 +================== + + * dist: recompile + * update "ms" to v0.7.0 + * package: update "browserify" to v9.0.3 + * component: fix "ms.js" repo location + * changed bower package name + * updated documentation about using debug in a browser + * fix: security error on safari (#167, #168, @yields) + +2.1.1 / 2014-12-29 +================== + + * browser: use `typeof` to check for `console` existence + * browser: check for `console.log` truthiness (fix IE 8/9) + * browser: add support for Chrome apps + * Readme: added Windows usage remarks + * Add `bower.json` to properly support bower install + +2.1.0 / 2014-10-15 +================== + + * node: implement `DEBUG_FD` env variable support + * package: update "browserify" to v6.1.0 + * package: add "license" field to package.json (#135, @panuhorsmalahti) + +2.0.0 / 2014-09-01 +================== + + * package: update "browserify" to v5.11.0 + * node: use stderr rather than stdout for logging (#29, @stephenmathieson) + +1.0.4 / 2014-07-15 +================== + + * dist: recompile + * example: remove `console.info()` log usage + * example: add "Content-Type" UTF-8 header to browser example + * browser: place %c marker after the space character + * browser: reset the "content" color via `color: inherit` + * browser: add colors support for Firefox >= v31 + * debug: prefer an instance `log()` function over the global one (#119) + * Readme: update documentation about styled console logs for FF v31 (#116, @wryk) + +1.0.3 / 2014-07-09 +================== + + * Add support for multiple wildcards in namespaces (#122, @seegno) + * browser: fix lint + +1.0.2 / 2014-06-10 +================== + + * browser: update color palette (#113, @gscottolson) + * common: make console logging function configurable (#108, @timoxley) + * node: fix %o colors on old node <= 0.8.x + * Makefile: find node path using shell/which (#109, @timoxley) + +1.0.1 / 2014-06-06 +================== + + * browser: use `removeItem()` to clear localStorage + * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) + * package: add "contributors" section + * node: fix comment typo + * README: list authors + +1.0.0 / 2014-06-04 +================== + + * make ms diff be global, not be scope + * debug: ignore empty strings in enable() + * node: make DEBUG_COLORS able to disable coloring + * *: export the `colors` array + * npmignore: don't publish the `dist` dir + * Makefile: refactor to use browserify + * package: add "browserify" as a dev dependency + * Readme: add Web Inspector Colors section + * node: reset terminal color for the debug content + * node: map "%o" to `util.inspect()` + * browser: map "%j" to `JSON.stringify()` + * debug: add custom "formatters" + * debug: use "ms" module for humanizing the diff + * Readme: add "bash" syntax highlighting + * browser: add Firebug color support + * browser: add colors for WebKit browsers + * node: apply log to `console` + * rewrite: abstract common logic for Node & browsers + * add .jshintrc file + +0.8.1 / 2014-04-14 +================== + + * package: re-add the "component" section + +0.8.0 / 2014-03-30 +================== + + * add `enable()` method for nodejs. Closes #27 + * change from stderr to stdout + * remove unnecessary index.js file + +0.7.4 / 2013-11-13 +================== + + * remove "browserify" key from package.json (fixes something in browserify) + +0.7.3 / 2013-10-30 +================== + + * fix: catch localStorage security error when cookies are blocked (Chrome) + * add debug(err) support. Closes #46 + * add .browser prop to package.json. Closes #42 + +0.7.2 / 2013-02-06 +================== + + * fix package.json + * fix: Mobile Safari (private mode) is broken with debug + * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript + +0.7.1 / 2013-02-05 +================== + + * add repository URL to package.json + * add DEBUG_COLORED to force colored output + * add browserify support + * fix component. Closes #24 + +0.7.0 / 2012-05-04 +================== + + * Added .component to package.json + * Added debug.component.js build + +0.6.0 / 2012-03-16 +================== + + * Added support for "-" prefix in DEBUG [Vinay Pulim] + * Added `.enabled` flag to the node version [TooTallNate] + +0.5.0 / 2012-02-02 +================== + + * Added: humanize diffs. Closes #8 + * Added `debug.disable()` to the CS variant + * Removed padding. Closes #10 + * Fixed: persist client-side variant again. Closes #9 + +0.4.0 / 2012-02-01 +================== + + * Added browser variant support for older browsers [TooTallNate] + * Added `debug.enable('project:*')` to browser variant [TooTallNate] + * Added padding to diff (moved it to the right) + +0.3.0 / 2012-01-26 +================== + + * Added millisecond diff when isatty, otherwise UTC string + +0.2.0 / 2012-01-22 +================== + + * Added wildcard support + +0.1.0 / 2011-12-02 +================== + + * Added: remove colors unless stderr isatty [TooTallNate] + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/LICENSE new file mode 100644 index 00000000..658c933d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/LICENSE @@ -0,0 +1,19 @@ +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/Makefile b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/Makefile new file mode 100644 index 00000000..3ddd1360 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/Makefile @@ -0,0 +1,58 @@ +# get Makefile directory name: http://stackoverflow.com/a/5982798/376773 +THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd) + +# BIN directory +BIN := $(THIS_DIR)/node_modules/.bin + +# Path +PATH := node_modules/.bin:$(PATH) +SHELL := /bin/bash + +# applications +NODE ?= $(shell which node) +YARN ?= $(shell which yarn) +PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm)) +BROWSERIFY ?= $(NODE) $(BIN)/browserify + +install: node_modules + +browser: dist/debug.js + +node_modules: package.json + @NODE_ENV= $(PKG) install + @touch node_modules + +dist/debug.js: src/*.js node_modules + @mkdir -p dist + @$(BROWSERIFY) \ + --standalone debug \ + . > dist/debug.js + +lint: + @eslint *.js src/*.js + +test-node: + @istanbul cover node_modules/mocha/bin/_mocha -- test/**.js + @cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js + +test-browser: + @$(MAKE) browser + @karma start --single-run + +test-all: + @concurrently \ + "make test-node" \ + "make test-browser" + +test: + @if [ "x$(BROWSER)" = "x" ]; then \ + $(MAKE) test-node; \ + else \ + $(MAKE) test-browser; \ + fi + +clean: + rimraf dist coverage + +.PHONY: browser install clean lint test test-all test-node test-browser diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/README.md new file mode 100644 index 00000000..8e754d17 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/README.md @@ -0,0 +1,368 @@ +# debug +[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) + + + +A tiny JavaScript debugging utility modelled after Node.js core's debugging +technique. Works in Node.js and web browsers. + +## Installation + +```bash +$ npm install debug +``` + +## Usage + +`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. + +Example [_app.js_](./examples/node/app.js): + +```js +var debug = require('debug')('http') + , http = require('http') + , name = 'My App'; + +// fake app + +debug('booting %o', name); + +http.createServer(function(req, res){ + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, function(){ + debug('listening'); +}); + +// fake worker of some kind + +require('./worker'); +``` + +Example [_worker.js_](./examples/node/worker.js): + +```js +var a = require('debug')('worker:a') + , b = require('debug')('worker:b'); + +function work() { + a('doing lots of uninteresting work'); + setTimeout(work, Math.random() * 1000); +} + +work(); + +function workb() { + b('doing some work'); + setTimeout(workb, Math.random() * 2000); +} + +workb(); +``` + +The `DEBUG` environment variable is then used to enable these based on space or +comma-delimited names. + +Here are some examples: + +screen shot 2017-08-08 at 12 53 04 pm +screen shot 2017-08-08 at 12 53 38 pm +screen shot 2017-08-08 at 12 53 25 pm + +#### Windows note + +On Windows the environment variable is set using the `set` command. + +```cmd +set DEBUG=*,-not_this +``` + +Note that PowerShell uses different syntax to set environment variables. + +```cmd +$env:DEBUG = "*,-not_this" +``` + +Then, run the program to be debugged as usual. + + +## Namespace Colors + +Every debug instance has a color generated for it based on its namespace name. +This helps when visually parsing the debug output to identify which debug instance +a debug line belongs to. + +#### Node.js + +In Node.js, colors are enabled when stderr is a TTY. You also _should_ install +the [`supports-color`](https://npmjs.org/supports-color) module alongside debug, +otherwise debug will only use a small handful of basic colors. + + + +#### Web Browser + +Colors are also enabled on "Web Inspectors" that understand the `%c` formatting +option. These are WebKit web inspectors, Firefox ([since version +31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) +and the Firebug plugin for Firefox (any version). + + + + +## Millisecond diff + +When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. + + + +When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: + + + + +## Conventions + +If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable. You can then use it for normal output as well as debug output. + +## Wildcards + +The `*` character may be used as a wildcard. Suppose for example your library has +debuggers named "connect:bodyParser", "connect:compress", "connect:session", +instead of listing all three with +`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do +`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. + +You can also exclude specific debuggers by prefixing them with a "-" character. +For example, `DEBUG=*,-connect:*` would include all debuggers except those +starting with "connect:". + +## Environment Variables + +When running through Node.js, you can set a few environment variables that will +change the behavior of the debug logging: + +| Name | Purpose | +|-----------|-------------------------------------------------| +| `DEBUG` | Enables/disables specific debugging namespaces. | +| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY). | +| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | +| `DEBUG_DEPTH` | Object inspection depth. | +| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | + + +__Note:__ The environment variables beginning with `DEBUG_` end up being +converted into an Options object that gets used with `%o`/`%O` formatters. +See the Node.js documentation for +[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) +for the complete list. + +## Formatters + +Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. +Below are the officially supported formatters: + +| Formatter | Representation | +|-----------|----------------| +| `%O` | Pretty-print an Object on multiple lines. | +| `%o` | Pretty-print an Object all on a single line. | +| `%s` | String. | +| `%d` | Number (both integer and float). | +| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | +| `%%` | Single percent sign ('%'). This does not consume an argument. | + + +### Custom formatters + +You can add custom formatters by extending the `debug.formatters` object. +For example, if you wanted to add support for rendering a Buffer as hex with +`%h`, you could do something like: + +```js +const createDebug = require('debug') +createDebug.formatters.h = (v) => { + return v.toString('hex') +} + +// …elsewhere +const debug = createDebug('foo') +debug('this is hex: %h', new Buffer('hello world')) +// foo this is hex: 68656c6c6f20776f726c6421 +0ms +``` + + +## Browser Support + +You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), +or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), +if you don't want to build it yourself. + +Debug's enable state is currently persisted by `localStorage`. +Consider the situation shown below where you have `worker:a` and `worker:b`, +and wish to debug both. You can enable this using `localStorage.debug`: + +```js +localStorage.debug = 'worker:*' +``` + +And then refresh the page. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + b('doing some work'); +}, 1200); +``` + + +## Output streams + + By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: + +Example [_stdout.js_](./examples/node/stdout.js): + +```js +var debug = require('debug'); +var error = debug('app:error'); + +// by default stderr is used +error('goes to stderr!'); + +var log = debug('app:log'); +// set this namespace to log via console.log +log.log = console.log.bind(console); // don't forget to bind to console! +log('goes to stdout'); +error('still goes to stderr!'); + +// set all output to go via console.info +// overrides all per-namespace log settings +debug.log = console.info.bind(console); +error('now goes to stdout via console.info'); +log('still goes to stdout, but via console.info now'); +``` + +## Checking whether a debug target is enabled + +After you've created a debug instance, you can determine whether or not it is +enabled by checking the `enabled` property: + +```javascript +const debug = require('debug')('http'); + +if (debug.enabled) { + // do stuff... +} +``` + +You can also manually toggle this property to force the debug instance to be +enabled or disabled. + + +## Authors + + - TJ Holowaychuk + - Nathan Rajlich + - Andrew Rhyne + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## License + +(The MIT License) + +Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca> + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/karma.conf.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/karma.conf.js new file mode 100644 index 00000000..103a82d1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/karma.conf.js @@ -0,0 +1,70 @@ +// Karma configuration +// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC) + +module.exports = function(config) { + config.set({ + + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', + + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['mocha', 'chai', 'sinon'], + + + // list of files / patterns to load in the browser + files: [ + 'dist/debug.js', + 'test/*spec.js' + ], + + + // list of files to exclude + exclude: [ + 'src/node.js' + ], + + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + }, + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress'], + + + // web server port + port: 9876, + + + // enable / disable colors in the output (reporters and logs) + colors: true, + + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['PhantomJS'], + + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: false, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity + }) +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/node.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/node.js new file mode 100644 index 00000000..7fc36fe6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/node.js @@ -0,0 +1 @@ +module.exports = require('./src/node'); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/package.json new file mode 100644 index 00000000..adca58ef --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/package.json @@ -0,0 +1,85 @@ +{ + "_args": [ + [ + "debug@3.1.0", + "/tmp/repository/main" + ] + ], + "_from": "debug@3.1.0", + "_id": "debug@3.1.0", + "_inBundle": false, + "_integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "_location": "/koa/debug", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "debug@3.1.0", + "name": "debug", + "escapedName": "debug", + "rawSpec": "3.1.0", + "saveSpec": null, + "fetchSpec": "3.1.0" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "_spec": "3.1.0", + "_where": "/tmp/repository/main", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "browser": "./src/browser.js", + "bugs": { + "url": "https://github.com/visionmedia/debug/issues" + }, + "contributors": [ + { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io" + }, + { + "name": "Andrew Rhyne", + "email": "rhyneandrew@gmail.com" + } + ], + "dependencies": { + "ms": "2.0.0" + }, + "description": "small debugging utility", + "devDependencies": { + "browserify": "14.4.0", + "chai": "^3.5.0", + "concurrently": "^3.1.0", + "coveralls": "^2.11.15", + "eslint": "^3.12.1", + "istanbul": "^0.4.5", + "karma": "^1.3.0", + "karma-chai": "^0.1.0", + "karma-mocha": "^1.3.0", + "karma-phantomjs-launcher": "^1.0.2", + "karma-sinon": "^1.0.5", + "mocha": "^3.2.0", + "mocha-lcov-reporter": "^1.2.0", + "rimraf": "^2.5.4", + "sinon": "^1.17.6", + "sinon-chai": "^2.8.0" + }, + "homepage": "https://github.com/visionmedia/debug#readme", + "keywords": [ + "debug", + "log", + "debugger" + ], + "license": "MIT", + "main": "./src/index.js", + "name": "debug", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/debug.git" + }, + "version": "3.1.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/browser.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/browser.js new file mode 100644 index 00000000..f5149ff5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/browser.js @@ -0,0 +1,195 @@ +/** + * This is the web browser implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = 'undefined' != typeof chrome + && 'undefined' != typeof chrome.storage + ? chrome.storage.local + : localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', + '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', + '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', + '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', + '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', + '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', + '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', + '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', + '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', + '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', + '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { + return true; + } + + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + return window.localStorage; + } catch (e) {} +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/debug.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/debug.js new file mode 100644 index 00000000..77e6384a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/debug.js @@ -0,0 +1,225 @@ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = require('ms'); + +/** + * Active `debug` instances. + */ +exports.instances = []; + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + +exports.formatters = {}; + +/** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + +function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return exports.colors[Math.abs(hash) % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function createDebug(namespace) { + + var prevTime; + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + exports.formatArgs.call(self, args); + + var logFn = debug.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = exports.enabled(namespace); + debug.useColors = exports.useColors(); + debug.color = selectColor(namespace); + debug.destroy = destroy; + + // env-specific initialization logic for debug instances + if ('function' === typeof exports.init) { + exports.init(debug); + } + + exports.instances.push(debug); + + return debug; +} + +function destroy () { + var index = exports.instances.indexOf(this); + if (index !== -1) { + exports.instances.splice(index, 1); + return true; + } else { + return false; + } +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + exports.names = []; + exports.skips = []; + + var i; + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } + + for (i = 0; i < exports.instances.length; i++) { + var instance = exports.instances[i]; + instance.enabled = exports.enabled(instance.namespace); + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/index.js new file mode 100644 index 00000000..cabcbcda --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/index.js @@ -0,0 +1,10 @@ +/** + * Detect Electron renderer process, which is node, but we should + * treat as a browser. + */ + +if (typeof process === 'undefined' || process.type === 'renderer') { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/node.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/node.js new file mode 100644 index 00000000..d666fb9c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/debug/src/node.js @@ -0,0 +1,186 @@ +/** + * Module dependencies. + */ + +var tty = require('tty'); +var util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [ 6, 2, 3, 4, 5, 1 ]; + +try { + var supportsColor = require('supports-color'); + if (supportsColor && supportsColor.level >= 2) { + exports.colors = [ + 20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68, + 69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134, + 135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 214, 215, 220, 221 + ]; + } +} catch (err) { + // swallow - we only care if `supports-color` is available; it doesn't have to be. +} + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(function (key) { + return /^debug_/i.test(key); +}).reduce(function (obj, key) { + // camel-case + var prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() }); + + // coerce string value into JS value + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) val = false; + else if (val === 'null') val = null; + else val = Number(val); + + obj[prop] = val; + return obj; +}, {}); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts + ? Boolean(exports.inspectOpts.colors) + : tty.isatty(process.stderr.fd); +} + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +exports.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n').map(function(str) { + return str.trim() + }).join(' '); +}; + +/** + * Map %o to `util.inspect()`, allowing multiple lines if needed. + */ + +exports.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + var name = this.namespace; + var useColors = this.useColors; + + if (useColors) { + var c = this.color; + var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c); + var prefix = ' ' + colorCode + ';1m' + name + ' ' + '\u001b[0m'; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); + } else { + args[0] = getDate() + name + ' ' + args[0]; + } +} + +function getDate() { + if (exports.inspectOpts.hideDate) { + return ''; + } else { + return new Date().toISOString() + ' '; + } +} + +/** + * Invokes `util.format()` with the specified arguments and writes to stderr. + */ + +function log() { + return process.stderr.write(util.format.apply(util, arguments) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + if (null == namespaces) { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init (debug) { + debug.inspectOpts = {}; + + var keys = Object.keys(exports.inspectOpts); + for (var i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +/** + * Enable namespaces listed in `process.env.DEBUG` initially. + */ + +exports.enable(load()); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/History.md new file mode 100644 index 00000000..cd9ebaaa --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/History.md @@ -0,0 +1,103 @@ +2.0.0 / 2018-10-26 +================== + + * Drop support for Node.js 0.6 + * Replace internal `eval` usage with `Function` constructor + * Use instance methods on `process` to check for listeners + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/LICENSE new file mode 100644 index 00000000..248de7af --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014-2018 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/Readme.md new file mode 100644 index 00000000..043d1ca2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/Readme.md @@ -0,0 +1,280 @@ +# 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) + +[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/nodejs-depd/master?label=windows +[appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd +[coveralls-image]: https://badgen.net/coveralls/c/github/dougwilson/nodejs-depd/master +[coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master +[node-image]: https://badgen.net/npm/node/depd +[node-url]: https://nodejs.org/en/download/ +[npm-downloads-image]: https://badgen.net/npm/dm/depd +[npm-url]: https://npmjs.org/package/depd +[npm-version-image]: https://badgen.net/npm/v/depd +[travis-image]: https://badgen.net/travis/dougwilson/nodejs-depd/master?label=linux +[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/index.js new file mode 100644 index 00000000..1bf2fcfd --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/index.js @@ -0,0 +1,538 @@ +/*! + * depd + * Copyright(c) 2014-2018 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +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 ' + stack[i].toString() + } + + 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 event 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 eehaslisteners (emitter, type) { + var count = typeof emitter.listenerCount !== 'function' + ? emitter.listeners(type).length + : emitter.listenerCount(type) + + return count > 0 +} + +/** + * Determine if namespace is ignored. + */ + +function isignored (namespace) { + 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) { + 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 = eehaslisteners(process, 'deprecation') + + // 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 ' + stack[i].toString() + } + + 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 ' + stack[i].toString() + '\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 stack = getStack() + var site = callSiteLocation(stack[1]) + + site.name = fn.name + + // eslint-disable-next-line no-new-func + var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site', + '"use strict"\n' + + 'return function (' + args + ') {' + + 'log.call(deprecate, message, site)\n' + + 'return fn.apply(this, arguments)\n' + + '}')(fn, log, this, message, site) + + 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/lib/browser/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/lib/browser/index.js new file mode 100644 index 00000000..6be45cc2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/lib/browser/index.js @@ -0,0 +1,77 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/package.json new file mode 100644 index 00000000..be2c9063 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/depd/package.json @@ -0,0 +1,83 @@ +{ + "_args": [ + [ + "depd@2.0.0", + "/tmp/repository/main" + ] + ], + "_from": "depd@2.0.0", + "_id": "depd@2.0.0", + "_inBundle": false, + "_integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "_location": "/koa/depd", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "depd@2.0.0", + "name": "depd", + "escapedName": "depd", + "rawSpec": "2.0.0", + "saveSpec": null, + "fetchSpec": "2.0.0" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "_spec": "2.0.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "browser": "lib/browser/index.js", + "bugs": { + "url": "https://github.com/dougwilson/nodejs-depd/issues" + }, + "description": "Deprecate all the things", + "devDependencies": { + "beautify-benchmark": "0.2.4", + "benchmark": "2.1.4", + "eslint": "5.7.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.14.0", + "eslint-plugin-markdown": "1.0.0-beta.7", + "eslint-plugin-node": "7.0.1", + "eslint-plugin-promise": "4.0.1", + "eslint-plugin-standard": "4.0.0", + "istanbul": "0.4.5", + "mocha": "5.2.0", + "safe-buffer": "5.1.2", + "uid-safe": "2.1.5" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "lib/", + "History.md", + "LICENSE", + "index.js", + "Readme.md" + ], + "homepage": "https://github.com/dougwilson/nodejs-depd#readme", + "keywords": [ + "deprecate", + "deprecated" + ], + "license": "MIT", + "name": "depd", + "repository": { + "type": "git", + "url": "git+https://github.com/dougwilson/nodejs-depd.git" + }, + "scripts": { + "bench": "node benchmark/index.js", + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --bail test/", + "test-ci": "istanbul cover --print=none node_modules/mocha/bin/_mocha -- --reporter spec test/ && istanbul report lcovonly text-summary", + "test-cov": "istanbul cover --print=none node_modules/mocha/bin/_mocha -- --reporter dot test/ && istanbul report lcov text-summary" + }, + "version": "2.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/index.js new file mode 100644 index 00000000..6a522b16 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/index.js @@ -0,0 +1,152 @@ +/** + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/license.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/license.md new file mode 100644 index 00000000..69b61253 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/license.md @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/package.json new file mode 100644 index 00000000..52abc0b4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/package.json @@ -0,0 +1,72 @@ +{ + "_args": [ + [ + "ms@2.0.0", + "/tmp/repository/main" + ] + ], + "_from": "ms@2.0.0", + "_id": "ms@2.0.0", + "_inBundle": false, + "_integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "_location": "/koa/ms", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "ms@2.0.0", + "name": "ms", + "escapedName": "ms", + "rawSpec": "2.0.0", + "saveSpec": null, + "fetchSpec": "2.0.0" + }, + "_requiredBy": [ + "/koa/debug" + ], + "_resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "_spec": "2.0.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/zeit/ms/issues" + }, + "description": "Tiny milisecond conversion utility", + "devDependencies": { + "eslint": "3.19.0", + "expect.js": "0.3.1", + "husky": "0.13.3", + "lint-staged": "3.4.1", + "mocha": "3.4.1" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "node": true, + "es6": true + } + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/zeit/ms#readme", + "license": "MIT", + "lint-staged": { + "*.js": [ + "npm run lint", + "prettier --single-quote --write", + "git add" + ] + }, + "main": "./index", + "name": "ms", + "repository": { + "type": "git", + "url": "git+https://github.com/zeit/ms.git" + }, + "scripts": { + "lint": "eslint lib/* bin/*", + "precommit": "lint-staged", + "test": "mocha tests.js" + }, + "version": "2.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/readme.md new file mode 100644 index 00000000..84a9974c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/node_modules/ms/readme.md @@ -0,0 +1,51 @@ +# 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/package.json new file mode 100644 index 00000000..f680ae0c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/koa/package.json @@ -0,0 +1,113 @@ +{ + "_args": [ + [ + "koa@2.13.1", + "/tmp/repository/main" + ] + ], + "_from": "koa@2.13.1", + "_id": "koa@2.13.1", + "_inBundle": false, + "_integrity": "sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w==", + "_location": "/koa", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "koa@2.13.1", + "name": "koa", + "escapedName": "koa", + "rawSpec": "2.13.1", + "saveSpec": null, + "fetchSpec": "2.13.1" + }, + "_requiredBy": [ + "/@vscode/test-web" + ], + "_resolved": "https://registry.npmjs.org/koa/-/koa-2.13.1.tgz", + "_spec": "2.13.1", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/koajs/koa/issues" + }, + "dependencies": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "~3.1.0", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^1.2.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "description": "Koa web app framework", + "devDependencies": { + "egg-bin": "^4.13.0", + "eslint": "^6.5.1", + "eslint-config-koa": "^2.0.0", + "eslint-config-standard": "^14.1.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-node": "^10.0.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.1", + "gen-esm-wrapper": "^1.0.6", + "mm": "^2.5.0", + "supertest": "^3.1.0" + }, + "engines": { + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" + }, + "exports": { + ".": { + "require": "./lib/application.js", + "import": "./dist/koa.mjs" + }, + "./": "./" + }, + "files": [ + "dist", + "lib" + ], + "homepage": "https://github.com/koajs/koa#readme", + "keywords": [ + "web", + "app", + "http", + "application", + "framework", + "middleware", + "rack" + ], + "license": "MIT", + "main": "lib/application.js", + "name": "koa", + "repository": { + "type": "git", + "url": "git+https://github.com/koajs/koa.git" + }, + "scripts": { + "authors": "git log --format='%aN <%aE>' | sort -u > AUTHORS", + "bench": "make -C benchmarks", + "build": "gen-esm-wrapper . ./dist/koa.mjs", + "lint": "eslint benchmarks lib test", + "prepare": "npm run build", + "test": "egg-bin test test", + "test-cov": "egg-bin cov test" + }, + "version": "2.13.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/index.js new file mode 100644 index 00000000..18439555 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/index.js @@ -0,0 +1,85 @@ +'use strict'; +const fs = require('fs'); +const path = require('path'); +const pify = require('pify'); + +const defaults = { + mode: 0o777 & (~process.umask()), + fs +}; + +// https://github.com/nodejs/node/issues/8987 +// https://github.com/libuv/libuv/pull/1088 +const checkPath = pth => { + if (process.platform === 'win32') { + const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path.parse(pth).root, '')); + + if (pathHasInvalidWinCharacters) { + const err = new Error(`Path contains invalid characters: ${pth}`); + err.code = 'EINVAL'; + throw err; + } + } +}; + +module.exports = (input, opts) => Promise.resolve().then(() => { + checkPath(input); + opts = Object.assign({}, defaults, opts); + + const mkdir = pify(opts.fs.mkdir); + const stat = pify(opts.fs.stat); + + const make = pth => { + return mkdir(pth, opts.mode) + .then(() => pth) + .catch(err => { + if (err.code === 'ENOENT') { + if (err.message.includes('null bytes') || path.dirname(pth) === pth) { + throw err; + } + + return make(path.dirname(pth)).then(() => make(pth)); + } + + return stat(pth) + .then(stats => stats.isDirectory() ? pth : Promise.reject()) + .catch(() => { + throw err; + }); + }); + }; + + return make(path.resolve(input)); +}); + +module.exports.sync = (input, opts) => { + checkPath(input); + opts = Object.assign({}, defaults, opts); + + const make = pth => { + try { + opts.fs.mkdirSync(pth, opts.mode); + } catch (err) { + if (err.code === 'ENOENT') { + if (err.message.includes('null bytes') || path.dirname(pth) === pth) { + throw err; + } + + make(path.dirname(pth)); + return make(pth); + } + + try { + if (!opts.fs.statSync(pth).isDirectory()) { + throw new Error('The path is not a directory'); + } + } catch (_) { + throw err; + } + } + + return pth; + }; + + return make(path.resolve(input)); +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/license @@ -0,0 +1,9 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/index.js new file mode 100644 index 00000000..1dee43ad --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/index.js @@ -0,0 +1,84 @@ +'use strict'; + +const processFn = (fn, opts) => function () { + const P = opts.promiseModule; + const args = new Array(arguments.length); + + for (let i = 0; i < arguments.length; i++) { + args[i] = arguments[i]; + } + + return new P((resolve, reject) => { + if (opts.errorFirst) { + args.push(function (err, result) { + if (opts.multiArgs) { + const results = new Array(arguments.length - 1); + + for (let i = 1; i < arguments.length; i++) { + results[i - 1] = arguments[i]; + } + + if (err) { + results.unshift(err); + reject(results); + } else { + resolve(results); + } + } else if (err) { + reject(err); + } else { + resolve(result); + } + }); + } else { + args.push(function (result) { + if (opts.multiArgs) { + const results = new Array(arguments.length - 1); + + for (let i = 0; i < arguments.length; i++) { + results[i] = arguments[i]; + } + + resolve(results); + } else { + resolve(result); + } + }); + } + + fn.apply(this, args); + }); +}; + +module.exports = (obj, opts) => { + opts = Object.assign({ + exclude: [/.+(Sync|Stream)$/], + errorFirst: true, + promiseModule: Promise + }, opts); + + const filter = key => { + const match = pattern => typeof pattern === 'string' ? key === pattern : pattern.test(key); + return opts.include ? opts.include.some(match) : !opts.exclude.some(match); + }; + + let ret; + if (typeof obj === 'function') { + ret = function () { + if (opts.excludeMain) { + return obj.apply(this, arguments); + } + + return processFn(obj, opts).apply(this, arguments); + }; + } else { + ret = Object.create(Object.getPrototypeOf(obj)); + } + + for (const key in obj) { // eslint-disable-line guard-for-in + const x = obj[key]; + ret[key] = typeof x === 'function' && filter(key) ? processFn(x, opts) : x; + } + + return ret; +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/license @@ -0,0 +1,9 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/package.json new file mode 100644 index 00000000..ca538e25 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/package.json @@ -0,0 +1,86 @@ +{ + "_args": [ + [ + "pify@3.0.0", + "/tmp/repository/main" + ] + ], + "_from": "pify@3.0.0", + "_id": "pify@3.0.0", + "_inBundle": false, + "_integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "_location": "/make-dir/pify", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "pify@3.0.0", + "name": "pify", + "escapedName": "pify", + "rawSpec": "3.0.0", + "saveSpec": null, + "fetchSpec": "3.0.0" + }, + "_requiredBy": [ + "/make-dir" + ], + "_resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "_spec": "3.0.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/pify/issues" + }, + "description": "Promisify a callback-style function", + "devDependencies": { + "ava": "*", + "pinkie-promise": "^2.0.0", + "v8-natives": "^1.0.0", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/pify#readme", + "keywords": [ + "promise", + "promises", + "promisify", + "all", + "denodify", + "denodeify", + "callback", + "cb", + "node", + "then", + "thenify", + "convert", + "transform", + "wrap", + "wrapper", + "bind", + "to", + "async", + "await", + "es2015", + "bluebird" + ], + "license": "MIT", + "name": "pify", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/pify.git" + }, + "scripts": { + "optimization-test": "node --allow-natives-syntax optimization-test.js", + "test": "xo && ava && npm run optimization-test" + }, + "version": "3.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/readme.md new file mode 100644 index 00000000..376ca4e5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/node_modules/pify/readme.md @@ -0,0 +1,131 @@ +# pify [![Build Status](https://travis-ci.org/sindresorhus/pify.svg?branch=master)](https://travis-ci.org/sindresorhus/pify) + +> Promisify a callback-style function + + +## Install + +``` +$ npm install --save pify +``` + + +## Usage + +```js +const fs = require('fs'); +const pify = require('pify'); + +// Promisify a single function +pify(fs.readFile)('package.json', 'utf8').then(data => { + console.log(JSON.parse(data).name); + //=> 'pify' +}); + +// Promisify all methods in a module +pify(fs).readFile('package.json', 'utf8').then(data => { + console.log(JSON.parse(data).name); + //=> 'pify' +}); +``` + + +## API + +### pify(input, [options]) + +Returns a `Promise` wrapped version of the supplied function or module. + +#### input + +Type: `Function` `Object` + +Callback-style function or module whose methods you want to promisify. + +#### options + +##### multiArgs + +Type: `boolean`
+Default: `false` + +By default, the promisified function will only return the second argument from the callback, which works fine for most APIs. This option can be useful for modules like `request` that return multiple arguments. Turning this on will make it return an array of all arguments from the callback, excluding the error argument, instead of just the second argument. This also applies to rejections, where it returns an array of all the callback arguments, including the error. + +```js +const request = require('request'); +const pify = require('pify'); + +pify(request, {multiArgs: true})('https://sindresorhus.com').then(result => { + const [httpResponse, body] = result; +}); +``` + +##### include + +Type: `string[]` `RegExp[]` + +Methods in a module to promisify. Remaining methods will be left untouched. + +##### exclude + +Type: `string[]` `RegExp[]`
+Default: `[/.+(Sync|Stream)$/]` + +Methods in a module **not** to promisify. Methods with names ending with `'Sync'` are excluded by default. + +##### excludeMain + +Type: `boolean`
+Default: `false` + +If given module is a function itself, it will be promisified. Turn this option on if you want to promisify only methods of the module. + +```js +const pify = require('pify'); + +function fn() { + return true; +} + +fn.method = (data, callback) => { + setImmediate(() => { + callback(null, data); + }); +}; + +// Promisify methods but not `fn()` +const promiseFn = pify(fn, {excludeMain: true}); + +if (promiseFn()) { + promiseFn.method('hi').then(data => { + console.log(data); + }); +} +``` + +##### errorFirst + +Type: `boolean`
+Default: `true` + +Whether the callback has an error as the first argument. You'll want to set this to `false` if you're dealing with an API that doesn't have an error as the first argument, like `fs.exists()`, some browser APIs, Chrome Extension APIs, etc. + +##### promiseModule + +Type: `Function` + +Custom promise module to use instead of the native one. + +Check out [`pinkie-promise`](https://github.com/floatdrop/pinkie-promise) if you need a tiny promise polyfill. + + +## Related + +- [p-event](https://github.com/sindresorhus/p-event) - Promisify an event by waiting for it to be emitted +- [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently +- [More…](https://github.com/sindresorhus/promise-fun) + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/package.json new file mode 100644 index 00000000..2d901e49 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/package.json @@ -0,0 +1,89 @@ +{ + "_args": [ + [ + "make-dir@1.3.0", + "/tmp/repository/main" + ] + ], + "_from": "make-dir@1.3.0", + "_id": "make-dir@1.3.0", + "_inBundle": false, + "_integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "_location": "/make-dir", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "make-dir@1.3.0", + "name": "make-dir", + "escapedName": "make-dir", + "rawSpec": "1.3.0", + "saveSpec": null, + "fetchSpec": "1.3.0" + }, + "_requiredBy": [ + "/decompress" + ], + "_resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "_spec": "1.3.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/make-dir/issues" + }, + "dependencies": { + "pify": "^3.0.0" + }, + "description": "Make a directory and its parents if needed - Think `mkdir -p`", + "devDependencies": { + "ava": "*", + "codecov": "^3.0.0", + "graceful-fs": "^4.1.11", + "nyc": "^11.3.0", + "path-type": "^3.0.0", + "tempy": "^0.2.1", + "xo": "^0.20.0" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/make-dir#readme", + "keywords": [ + "mkdir", + "mkdirp", + "make", + "directories", + "dir", + "dirs", + "folders", + "directory", + "folder", + "path", + "parent", + "parents", + "intermediate", + "recursively", + "recursive", + "create", + "fs", + "filesystem", + "file-system" + ], + "license": "MIT", + "name": "make-dir", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/make-dir.git" + }, + "scripts": { + "test": "xo && nyc ava" + }, + "version": "1.3.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/readme.md new file mode 100644 index 00000000..8a32bf47 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/make-dir/readme.md @@ -0,0 +1,116 @@ +# make-dir [![Build Status: macOS & Linux](https://travis-ci.org/sindresorhus/make-dir.svg?branch=master)](https://travis-ci.org/sindresorhus/make-dir) [![Build status: Windows](https://ci.appveyor.com/api/projects/status/e0vtt8y600w91gcs/branch/master?svg=true)](https://ci.appveyor.com/project/sindresorhus/make-dir/branch/master) [![codecov](https://codecov.io/gh/sindresorhus/make-dir/branch/master/graph/badge.svg)](https://codecov.io/gh/sindresorhus/make-dir) + +> Make a directory and its parents if needed - Think `mkdir -p` + + +## Advantages over [`mkdirp`](https://github.com/substack/node-mkdirp) + +- Promise API *(Async/await ready!)* +- Fixes many `mkdirp` issues: [#96](https://github.com/substack/node-mkdirp/pull/96) [#70](https://github.com/substack/node-mkdirp/issues/70) [#66](https://github.com/substack/node-mkdirp/issues/66) +- 100% test coverage +- CI-tested on macOS, Linux, and Windows +- Actively maintained +- Doesn't bundle a CLI + + +## Install + +``` +$ npm install make-dir +``` + + +## Usage + +``` +$ pwd +/Users/sindresorhus/fun +$ tree +. +``` + +```js +const makeDir = require('make-dir'); + +makeDir('unicorn/rainbow/cake').then(path => { + console.log(path); + //=> '/Users/sindresorhus/fun/unicorn/rainbow/cake' +}); +``` + +``` +$ tree +. +└── unicorn + └── rainbow + └── cake +``` + +Multiple directories: + +```js +const makeDir = require('make-dir'); + +Promise.all([ + makeDir('unicorn/rainbow') + makeDir('foo/bar') +]).then(paths => { + console.log(paths); + /* + [ + '/Users/sindresorhus/fun/unicorn/rainbow', + '/Users/sindresorhus/fun/foo/bar' + ] + */ +}); +``` + + +## API + +### makeDir(path, [options]) + +Returns a `Promise` for the path to the created directory. + +### makeDir.sync(path, [options]) + +Returns the path to the created directory. + +#### path + +Type: `string` + +Directory to create. + +#### options + +Type: `Object` + +##### mode + +Type: `integer`
+Default: `0o777 & (~process.umask())` + +Directory [permissions](https://x-team.com/blog/file-system-permissions-umask-node-js/). + +##### fs + +Type: `Object`
+Default: `require('fs')` + +Use a custom `fs` implementation. For example [`graceful-fs`](https://github.com/isaacs/node-graceful-fs). + + +## Related + +- [make-dir-cli](https://github.com/sindresorhus/make-dir-cli) - CLI for this module +- [del](https://github.com/sindresorhus/del) - Delete files and directories +- [globby](https://github.com/sindresorhus/globby) - User-friendly glob matching +- [cpy](https://github.com/sindresorhus/cpy) - Copy files +- [cpy-cli](https://github.com/sindresorhus/cpy-cli) - Copy files on the command-line +- [move-file](https://github.com/sindresorhus/move-file) - Move a file + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/HISTORY.md new file mode 100644 index 00000000..62c20031 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/HISTORY.md @@ -0,0 +1,22 @@ +0.3.0 / 2014-09-07 +================== + + * Support Node.js 0.6 + * Throw error when parameter format invalid on parse + +0.2.0 / 2014-06-18 +================== + + * Add `typer.format()` to format media types + +0.1.0 / 2014-06-17 +================== + + * Accept `req` as argument to `parse` + * Accept `res` as argument to `parse` + * Parse media type with extra LWS between type and first parameter + +0.0.0 / 2014-06-13 +================== + + * Initial implementation diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/LICENSE new file mode 100644 index 00000000..b7dce6cf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/LICENSE @@ -0,0 +1,22 @@ +(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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/README.md new file mode 100644 index 00000000..d8df6234 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/README.md @@ -0,0 +1,81 @@ +# media-typer + +[![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] + +Simple RFC 6838 media type parser + +## Installation + +```sh +$ npm install media-typer +``` + +## API + +```js +var typer = require('media-typer') +``` + +### typer.parse(string) + +```js +var obj = typer.parse('image/svg+xml; charset=utf-8') +``` + +Parse a media type string. This will return an object with the following +properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`): + + - `type`: The type of the media type (always lower case). Example: `'image'` + + - `subtype`: The subtype of the media type (always lower case). Example: `'svg'` + + - `suffix`: The suffix of the media type (always lower case). Example: `'xml'` + + - `parameters`: An object of the parameters in the media type (name of parameter always lower case). Example: `{charset: 'utf-8'}` + +### typer.parse(req) + +```js +var obj = typer.parse(req) +``` + +Parse the `content-type` header from the given `req`. Short-cut for +`typer.parse(req.headers['content-type'])`. + +### typer.parse(res) + +```js +var obj = typer.parse(res) +``` + +Parse the `content-type` header set on the given `res`. Short-cut for +`typer.parse(res.getHeader('content-type'))`. + +### typer.format(obj) + +```js +var obj = typer.format({type: 'image', subtype: 'svg', suffix: 'xml'}) +``` + +Format an object into a media type string. This will return a string of the +mime type for the given object. For the properties of the object, see the +documentation for `typer.parse(string)`. + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/media-typer.svg?style=flat +[npm-url]: https://npmjs.org/package/media-typer +[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=flat +[node-version-url]: http://nodejs.org/download/ +[travis-image]: https://img.shields.io/travis/jshttp/media-typer.svg?style=flat +[travis-url]: https://travis-ci.org/jshttp/media-typer +[coveralls-image]: https://img.shields.io/coveralls/jshttp/media-typer.svg?style=flat +[coveralls-url]: https://coveralls.io/r/jshttp/media-typer +[downloads-image]: https://img.shields.io/npm/dm/media-typer.svg?style=flat +[downloads-url]: https://npmjs.org/package/media-typer diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/index.js new file mode 100644 index 00000000..07f7295e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/index.js @@ -0,0 +1,270 @@ +/*! + * media-typer + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * RegExp to match *( ";" parameter ) in RFC 2616 sec 3.7 + * + * parameter = token "=" ( token | quoted-string ) + * token = 1* + * separators = "(" | ")" | "<" | ">" | "@" + * | "," | ";" | ":" | "\" | <"> + * | "/" | "[" | "]" | "?" | "=" + * | "{" | "}" | SP | HT + * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) + * qdtext = > + * quoted-pair = "\" CHAR + * CHAR = + * TEXT = + * LWS = [CRLF] 1*( SP | HT ) + * CRLF = CR LF + * CR = + * LF = + * SP = + * SHT = + * CTL = + * OCTET = + */ +var paramRegExp = /; *([!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) *= *("(?:[ !\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u0020-\u007e])*"|[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) */g; +var textRegExp = /^[\u0020-\u007e\u0080-\u00ff]+$/ +var tokenRegExp = /^[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+$/ + +/** + * RegExp to match quoted-pair in RFC 2616 + * + * quoted-pair = "\" CHAR + * CHAR = + */ +var qescRegExp = /\\([\u0000-\u007f])/g; + +/** + * RegExp to match chars that must be quoted-pair in RFC 2616 + */ +var quoteRegExp = /([\\"])/g; + +/** + * RegExp to match type in RFC 6838 + * + * type-name = restricted-name + * subtype-name = restricted-name + * restricted-name = restricted-name-first *126restricted-name-chars + * restricted-name-first = ALPHA / DIGIT + * restricted-name-chars = ALPHA / DIGIT / "!" / "#" / + * "$" / "&" / "-" / "^" / "_" + * restricted-name-chars =/ "." ; Characters before first dot always + * ; specify a facet name + * restricted-name-chars =/ "+" ; Characters after last plus always + * ; specify a structured syntax suffix + * ALPHA = %x41-5A / %x61-7A ; A-Z / a-z + * DIGIT = %x30-39 ; 0-9 + */ +var subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/ +var typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/ +var typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/; + +/** + * Module exports. + */ + +exports.format = format +exports.parse = parse + +/** + * Format object to media type. + * + * @param {object} obj + * @return {string} + * @api public + */ + +function format(obj) { + if (!obj || typeof obj !== 'object') { + throw new TypeError('argument obj is required') + } + + var parameters = obj.parameters + var subtype = obj.subtype + var suffix = obj.suffix + var type = obj.type + + if (!type || !typeNameRegExp.test(type)) { + throw new TypeError('invalid type') + } + + if (!subtype || !subtypeNameRegExp.test(subtype)) { + throw new TypeError('invalid subtype') + } + + // format as type/subtype + var string = type + '/' + subtype + + // append +suffix + if (suffix) { + if (!typeNameRegExp.test(suffix)) { + throw new TypeError('invalid suffix') + } + + string += '+' + suffix + } + + // append parameters + if (parameters && typeof parameters === 'object') { + var param + var params = Object.keys(parameters).sort() + + for (var i = 0; i < params.length; i++) { + param = params[i] + + if (!tokenRegExp.test(param)) { + throw new TypeError('invalid parameter name') + } + + string += '; ' + param + '=' + qstring(parameters[param]) + } + } + + return string +} + +/** + * Parse media type to object. + * + * @param {string|object} string + * @return {Object} + * @api public + */ + +function parse(string) { + if (!string) { + throw new TypeError('argument string is required') + } + + // support req/res-like objects as argument + if (typeof string === 'object') { + string = getcontenttype(string) + } + + if (typeof string !== 'string') { + throw new TypeError('argument string is required to be a string') + } + + var index = string.indexOf(';') + var type = index !== -1 + ? string.substr(0, index) + : string + + var key + var match + var obj = splitType(type) + var params = {} + var value + + paramRegExp.lastIndex = index + + while (match = paramRegExp.exec(string)) { + if (match.index !== index) { + throw new TypeError('invalid parameter format') + } + + index += match[0].length + key = match[1].toLowerCase() + value = match[2] + + if (value[0] === '"') { + // remove quotes and escapes + value = value + .substr(1, value.length - 2) + .replace(qescRegExp, '$1') + } + + params[key] = value + } + + if (index !== -1 && index !== string.length) { + throw new TypeError('invalid parameter format') + } + + obj.parameters = params + + return obj +} + +/** + * Get content-type from req/res objects. + * + * @param {object} + * @return {Object} + * @api private + */ + +function getcontenttype(obj) { + if (typeof obj.getHeader === 'function') { + // res-like + return obj.getHeader('content-type') + } + + if (typeof obj.headers === 'object') { + // req-like + return obj.headers && obj.headers['content-type'] + } +} + +/** + * Quote a string if necessary. + * + * @param {string} val + * @return {string} + * @api private + */ + +function qstring(val) { + var str = String(val) + + // no need to quote tokens + if (tokenRegExp.test(str)) { + return str + } + + if (str.length > 0 && !textRegExp.test(str)) { + throw new TypeError('invalid parameter value') + } + + return '"' + str.replace(quoteRegExp, '\\$1') + '"' +} + +/** + * Simply "type/subtype+siffx" into parts. + * + * @param {string} string + * @return {Object} + * @api private + */ + +function splitType(string) { + var match = typeRegExp.exec(string.toLowerCase()) + + if (!match) { + throw new TypeError('invalid media type') + } + + var type = match[1] + var subtype = match[2] + var suffix + + // suffix after last + + var index = subtype.lastIndexOf('+') + if (index !== -1) { + suffix = subtype.substr(index + 1) + subtype = subtype.substr(0, index) + } + + var obj = { + type: type, + subtype: subtype, + suffix: suffix + } + + return obj +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/package.json new file mode 100644 index 00000000..9d728086 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/media-typer/package.json @@ -0,0 +1,64 @@ +{ + "_args": [ + [ + "media-typer@0.3.0", + "/tmp/repository/main" + ] + ], + "_from": "media-typer@0.3.0", + "_id": "media-typer@0.3.0", + "_inBundle": false, + "_integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "_location": "/media-typer", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "media-typer@0.3.0", + "name": "media-typer", + "escapedName": "media-typer", + "rawSpec": "0.3.0", + "saveSpec": null, + "fetchSpec": "0.3.0" + }, + "_requiredBy": [ + "/type-is" + ], + "_resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "_spec": "0.3.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "bugs": { + "url": "https://github.com/jshttp/media-typer/issues" + }, + "description": "Simple RFC 6838 media type parser and formatter", + "devDependencies": { + "istanbul": "0.3.2", + "mocha": "~1.21.4", + "should": "~4.0.4" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "index.js" + ], + "homepage": "https://github.com/jshttp/media-typer#readme", + "license": "MIT", + "name": "media-typer", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/media-typer.git" + }, + "scripts": { + "test": "mocha --reporter spec --check-leaks --bail 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": "0.3.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/HISTORY.md new file mode 100644 index 00000000..c0ecf072 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/HISTORY.md @@ -0,0 +1,29 @@ +1.1.2 / 2016-01-17 +================== + + * perf: enable strict mode + +1.1.1 / 2014-12-30 +================== + + * Improve `browserify` support + +1.1.0 / 2014-07-05 +================== + + * Add `CONNECT` method + +1.0.1 / 2014-06-02 +================== + + * Fix module to work with harmony transform + +1.0.0 / 2014-05-08 +================== + + * Add `PURGE` method + +0.1.0 / 2013-10-28 +================== + + * Add `http.METHODS` support diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/LICENSE new file mode 100644 index 00000000..220dc1a2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2013-2014 TJ Holowaychuk +Copyright (c) 2015-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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/README.md new file mode 100644 index 00000000..672a32bf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/README.md @@ -0,0 +1,51 @@ +# Methods + +[![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 verbs that Node.js core's HTTP parser supports. + +This module provides an export that is just like `http.METHODS` from Node.js core, +with the following differences: + + * All method names are lower-cased. + * Contains a fallback list of methods for Node.js versions that do not have a + `http.METHODS` export (0.10 and lower). + * Provides the fallback list when using tools like `browserify` without pulling + in the `http` shim module. + +## Install + +```bash +$ npm install methods +``` + +## API + +```js +var methods = require('methods') +``` + +### methods + +This is an array of lower-cased method names that Node.js supports. If Node.js +provides the `http.METHODS` export, then this is the same array lower-cased, +otherwise it is a snapshot of the verbs from Node.js 0.10. + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/methods.svg?style=flat +[npm-url]: https://npmjs.org/package/methods +[node-version-image]: https://img.shields.io/node/v/methods.svg?style=flat +[node-version-url]: https://nodejs.org/en/download/ +[travis-image]: https://img.shields.io/travis/jshttp/methods.svg?style=flat +[travis-url]: https://travis-ci.org/jshttp/methods +[coveralls-image]: https://img.shields.io/coveralls/jshttp/methods.svg?style=flat +[coveralls-url]: https://coveralls.io/r/jshttp/methods?branch=master +[downloads-image]: https://img.shields.io/npm/dm/methods.svg?style=flat +[downloads-url]: https://npmjs.org/package/methods diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/index.js new file mode 100644 index 00000000..667a50bd --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/index.js @@ -0,0 +1,69 @@ +/*! + * methods + * Copyright(c) 2013-2014 TJ Holowaychuk + * Copyright(c) 2015-2016 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +/** + * Module dependencies. + * @private + */ + +var http = require('http'); + +/** + * Module exports. + * @public + */ + +module.exports = getCurrentNodeMethods() || getBasicNodeMethods(); + +/** + * Get the current Node.js methods. + * @private + */ + +function getCurrentNodeMethods() { + return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) { + return method.toLowerCase(); + }); +} + +/** + * Get the "basic" Node.js methods, a snapshot from Node.js 0.10. + * @private + */ + +function getBasicNodeMethods() { + return [ + 'get', + 'post', + 'put', + 'head', + 'delete', + 'options', + 'trace', + 'copy', + 'lock', + 'mkcol', + 'move', + 'purge', + 'propfind', + 'proppatch', + 'unlock', + 'report', + 'mkactivity', + 'checkout', + 'merge', + 'm-search', + 'notify', + 'subscribe', + 'unsubscribe', + 'patch', + 'search', + 'connect' + ]; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/package.json new file mode 100644 index 00000000..7af42fd4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/methods/package.json @@ -0,0 +1,82 @@ +{ + "_args": [ + [ + "methods@1.1.2", + "/tmp/repository/main" + ] + ], + "_from": "methods@1.1.2", + "_id": "methods@1.1.2", + "_inBundle": false, + "_integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "_location": "/methods", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "methods@1.1.2", + "name": "methods", + "escapedName": "methods", + "rawSpec": "1.1.2", + "saveSpec": null, + "fetchSpec": "1.1.2" + }, + "_requiredBy": [ + "/@koa/router" + ], + "_resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "_spec": "1.1.2", + "_where": "/tmp/repository/main", + "browser": { + "http": false + }, + "bugs": { + "url": "https://github.com/jshttp/methods/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + } + ], + "description": "HTTP methods that node supports", + "devDependencies": { + "istanbul": "0.4.1", + "mocha": "1.21.5" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "index.js", + "HISTORY.md", + "LICENSE" + ], + "homepage": "https://github.com/jshttp/methods#readme", + "keywords": [ + "http", + "methods" + ], + "license": "MIT", + "name": "methods", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/methods.git" + }, + "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/" + }, + "version": "1.1.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/HISTORY.md new file mode 100644 index 00000000..672d414c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/HISTORY.md @@ -0,0 +1,486 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/LICENSE new file mode 100644 index 00000000..a7ae8ee9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/README.md new file mode 100644 index 00000000..41c696a3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/README.md @@ -0,0 +1,100 @@ +# 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 database of all mime types. +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/db.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/db.json new file mode 100644 index 00000000..911b0f86 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/db.json @@ -0,0 +1,8417 @@ +{ + "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/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/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/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 + }, + "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/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/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 + }, + "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/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+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" + }, + "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/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/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.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.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.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.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.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.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.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.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 + }, + "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-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" + }, + "image/avcs": { + "source": "iana" + }, + "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", + "extensions": ["ico"] + }, + "image/vnd.mix": { + "source": "iana" + }, + "image/vnd.mozilla.apng": { + "source": "iana" + }, + "image/vnd.ms-dds": { + "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+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.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/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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/index.js new file mode 100644 index 00000000..551031f6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/index.js @@ -0,0 +1,11 @@ +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = require('./db.json') diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/package.json new file mode 100644 index 00000000..dde1bf07 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-db/package.json @@ -0,0 +1,105 @@ +{ + "_args": [ + [ + "mime-db@1.49.0", + "/tmp/repository/main" + ] + ], + "_from": "mime-db@1.49.0", + "_id": "mime-db@1.49.0", + "_inBundle": false, + "_integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "_location": "/mime-db", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "mime-db@1.49.0", + "name": "mime-db", + "escapedName": "mime-db", + "rawSpec": "1.49.0", + "saveSpec": null, + "fetchSpec": "1.49.0" + }, + "_requiredBy": [ + "/mime-types" + ], + "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "_spec": "1.49.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/jshttp/mime-db/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + { + "name": "Robert Kieffer", + "email": "robert@broofa.com", + "url": "http://github.com/broofa" + } + ], + "description": "Media Type Database", + "devDependencies": { + "bluebird": "3.7.2", + "co": "4.6.0", + "cogent": "1.0.1", + "csv-parse": "4.16.0", + "eslint": "7.31.0", + "eslint-config-standard": "15.0.1", + "eslint-plugin-import": "2.23.4", + "eslint-plugin-markdown": "2.2.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.1.0", + "eslint-plugin-standard": "4.1.0", + "gnode": "0.1.2", + "mocha": "9.0.3", + "nyc": "15.1.0", + "raw-body": "2.4.1", + "stream-to-array": "2.3.0" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "db.json", + "index.js" + ], + "homepage": "https://github.com/jshttp/mime-db#readme", + "keywords": [ + "mime", + "db", + "type", + "types", + "database", + "charset", + "charsets" + ], + "license": "MIT", + "name": "mime-db", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/mime-db.git" + }, + "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" + }, + "version": "1.49.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/HISTORY.md new file mode 100644 index 00000000..977ffbb1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/HISTORY.md @@ -0,0 +1,378 @@ +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 + - Mark `text/yaml` as compressible + +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 + - Mark `text/less` as compressible + +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 + - Add additional compressible + - 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/LICENSE new file mode 100644 index 00000000..06166077 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/LICENSE @@ -0,0 +1,23 @@ +(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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/README.md new file mode 100644 index 00000000..c978ac27 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/README.md @@ -0,0 +1,113 @@ +# 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?query=workflow%3Aci +[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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/index.js new file mode 100644 index 00000000..b9f34d59 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/index.js @@ -0,0 +1,188 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/package.json new file mode 100644 index 00000000..909787eb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime-types/package.json @@ -0,0 +1,93 @@ +{ + "_args": [ + [ + "mime-types@2.1.32", + "/tmp/repository/main" + ] + ], + "_from": "mime-types@2.1.32", + "_id": "mime-types@2.1.32", + "_inBundle": false, + "_integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "_location": "/mime-types", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "mime-types@2.1.32", + "name": "mime-types", + "escapedName": "mime-types", + "rawSpec": "2.1.32", + "saveSpec": null, + "fetchSpec": "2.1.32" + }, + "_requiredBy": [ + "/accepts", + "/cache-content-type", + "/type-is", + "/webpack" + ], + "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "_spec": "2.1.32", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/jshttp/mime-types/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": "https://searchbeam.jit.su" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "dependencies": { + "mime-db": "1.49.0" + }, + "description": "The ultimate javascript content-type utility.", + "devDependencies": { + "eslint": "7.31.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.23.4", + "eslint-plugin-markdown": "2.2.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.1.0", + "eslint-plugin-standard": "4.1.0", + "mocha": "9.0.3", + "nyc": "15.1.0" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "homepage": "https://github.com/jshttp/mime-types#readme", + "keywords": [ + "mime", + "types" + ], + "license": "MIT", + "name": "mime-types", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/mime-types.git" + }, + "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" + }, + "version": "2.1.32" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/CHANGELOG.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/CHANGELOG.md new file mode 100644 index 00000000..5d0fae93 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/CHANGELOG.md @@ -0,0 +1,289 @@ +# 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. + +### [2.5.2](https://github.com/broofa/mime/compare/v2.5.0...v2.5.2) (2021-02-17) + + +### Bug Fixes + +* update to mime-db@1.46.0, fixes [#253](https://github.com/broofa/mime/issues/253) ([f10e6aa](https://github.com/broofa/mime/commit/f10e6aa62e1356de7e2491d7fb4374c8dac65800)) + +## [2.5.0](https://github.com/broofa/mime/compare/v2.4.7...v2.5.0) (2021-01-16) + + +### Features + +* improved CLI ([#244](https://github.com/broofa/mime/issues/244)) ([c8a8356](https://github.com/broofa/mime/commit/c8a8356e3b27f3ef46b64b89b428fdb547b14d5f)) + +### [2.4.7](https://github.com/broofa/mime/compare/v2.4.6...v2.4.7) (2020-12-16) + + +### Bug Fixes + +* update to latest mime-db ([43b09ef](https://github.com/broofa/mime/commit/43b09eff0233eacc449af2b1f99a19ba9e104a44)) + +### [2.4.6](https://github.com/broofa/mime/compare/v2.4.5...v2.4.6) (2020-05-27) + + +### Bug Fixes + +* add cli.js to package.json files ([#237](https://github.com/broofa/mime/issues/237)) ([6c070bc](https://github.com/broofa/mime/commit/6c070bc298fa12a48e2ed126fbb9de641a1e7ebc)) + +### [2.4.5](https://github.com/broofa/mime/compare/v2.4.4...v2.4.5) (2020-05-01) + + +### Bug Fixes + +* fix [#236](https://github.com/broofa/mime/issues/236) ([7f4ecd0](https://github.com/broofa/mime/commit/7f4ecd0d850ed22c9e3bfda2c11fc74e4dde12a7)) +* update to latest mime-db ([c5cb3f2](https://github.com/broofa/mime/commit/c5cb3f2ab8b07642a066efbde1142af1b90c927b)) + +### [2.4.4](https://github.com/broofa/mime/compare/v2.4.3...v2.4.4) (2019-06-07) + + + +### [2.4.3](https://github.com/broofa/mime/compare/v2.4.2...v2.4.3) (2019-05-15) + + + +### [2.4.2](https://github.com/broofa/mime/compare/v2.4.1...v2.4.2) (2019-04-07) + + +### Bug Fixes + +* don't use arrow function introduced in 2.4.1 ([2e00b5c](https://github.com/broofa/mime/commit/2e00b5c)) + + + +### [2.4.1](https://github.com/broofa/mime/compare/v2.4.0...v2.4.1) (2019-04-03) + + +### Bug Fixes + +* update MDN and mime-db types ([3e567a9](https://github.com/broofa/mime/commit/3e567a9)) + + + +# [2.4.0](https://github.com/broofa/mime/compare/v2.3.1...v2.4.0) (2018-11-26) + + +### Features + +* Bind exported methods ([9d2a7b8](https://github.com/broofa/mime/commit/9d2a7b8)) +* update to mime-db@1.37.0 ([49e6e41](https://github.com/broofa/mime/commit/49e6e41)) + + + +### [2.3.1](https://github.com/broofa/mime/compare/v2.3.0...v2.3.1) (2018-04-11) + + +### Bug Fixes + +* fix [#198](https://github.com/broofa/mime/issues/198) ([25ca180](https://github.com/broofa/mime/commit/25ca180)) + + + +# [2.3.0](https://github.com/broofa/mime/compare/v2.2.2...v2.3.0) (2018-04-11) + + +### Bug Fixes + +* fix [#192](https://github.com/broofa/mime/issues/192) ([5c35df6](https://github.com/broofa/mime/commit/5c35df6)) + + +### Features + +* add travis-ci testing ([d64160f](https://github.com/broofa/mime/commit/d64160f)) + + + +### [2.2.2](https://github.com/broofa/mime/compare/v2.2.1...v2.2.2) (2018-03-30) + + +### Bug Fixes + +* update types files to mime-db@1.32.0 ([85aac16](https://github.com/broofa/mime/commit/85aac16)) + + +### [2.2.1](https://github.com/broofa/mime/compare/v2.2.0...v2.2.1) (2018-03-30) + + +### Bug Fixes + +* Retain type->extension mappings for non-default types. Fixes [#180](https://github.com/broofa/mime/issues/180) ([b5c83fb](https://github.com/broofa/mime/commit/b5c83fb)) + + + +# [2.2.0](https://github.com/broofa/mime/compare/v2.1.0...v2.2.0) (2018-01-04) + + +### Features + +* Retain type->extension mappings for non-default types. Fixes [#180](https://github.com/broofa/mime/issues/180) ([10f82ac](https://github.com/broofa/mime/commit/10f82ac)) + + + +# [2.1.0](https://github.com/broofa/mime/compare/v2.0.5...v2.1.0) (2017-12-22) + + +### Features + +* Upgrade to mime-db@1.32.0. Fixes [#185](https://github.com/broofa/mime/issues/185) ([3f775ba](https://github.com/broofa/mime/commit/3f775ba)) + + + +### [2.0.5](https://github.com/broofa/mime/compare/v2.0.1...v2.0.5) (2017-12-22) + + +### Bug Fixes + +* ES5 support (back to node v0.4) ([f14ccb6](https://github.com/broofa/mime/commit/f14ccb6)) + + + +# Changelog + +### v2.0.4 (24/11/2017) +- [**closed**] Switch to mime-score module for resolving extension contention issues. [#182](https://github.com/broofa/mime/issues/182) +- [**closed**] Update mime-db to 1.31.0 in v1.x branch [#181](https://github.com/broofa/mime/issues/181) + +--- + +## v1.5.0 (22/11/2017) +- [**closed**] need ES5 version ready in npm package [#179](https://github.com/broofa/mime/issues/179) +- [**closed**] mime-db no trace of iWork - pages / numbers / etc. [#178](https://github.com/broofa/mime/issues/178) +- [**closed**] How it works in brownser ? [#176](https://github.com/broofa/mime/issues/176) +- [**closed**] Missing `./Mime` [#175](https://github.com/broofa/mime/issues/175) +- [**closed**] Vulnerable Regular Expression [#167](https://github.com/broofa/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/mime/issues/172) + +--- + +### v2.0.2 (15/09/2017) +- [**V2**] fs.readFileSync is not a function [#165](https://github.com/broofa/mime/issues/165) +- [**closed**] The extension for video/quicktime should map to .mov, not .qt [#164](https://github.com/broofa/mime/issues/164) +- [**V2**] [v2 Feedback request] Mime class API [#163](https://github.com/broofa/mime/issues/163) +- [**V2**] [v2 Feedback request] Resolving conflicts over extensions [#162](https://github.com/broofa/mime/issues/162) +- [**V2**] Allow callers to load module with official, full, or no defined types. [#161](https://github.com/broofa/mime/issues/161) +- [**V2**] Use "facets" to resolve extension conflicts [#160](https://github.com/broofa/mime/issues/160) +- [**V2**] Remove fs and path dependencies [#152](https://github.com/broofa/mime/issues/152) +- [**V2**] Default content-type should not be application/octet-stream [#139](https://github.com/broofa/mime/issues/139) +- [**V2**] reset mime-types [#124](https://github.com/broofa/mime/issues/124) +- [**V2**] Extensionless paths should return null or false [#113](https://github.com/broofa/mime/issues/113) + +--- + +### v2.0.1 (14/09/2017) +- [**closed**] Changelog for v2.0 does not mention breaking changes [#171](https://github.com/broofa/mime/issues/171) +- [**closed**] MIME breaking with 'class' declaration as it is without 'use strict mode' [#170](https://github.com/broofa/mime/issues/170) + +--- + +## v2.0.0 (12/09/2017) +- [**closed**] woff and woff2 [#168](https://github.com/broofa/mime/issues/168) + +--- + +## v1.4.0 (28/08/2017) +- [**closed**] support for ac3 voc files [#159](https://github.com/broofa/mime/issues/159) +- [**closed**] Help understanding change from application/xml to text/xml [#158](https://github.com/broofa/mime/issues/158) +- [**closed**] no longer able to override mimetype [#157](https://github.com/broofa/mime/issues/157) +- [**closed**] application/vnd.adobe.photoshop [#147](https://github.com/broofa/mime/issues/147) +- [**closed**] Directories should appear as something other than application/octet-stream [#135](https://github.com/broofa/mime/issues/135) +- [**closed**] requested features [#131](https://github.com/broofa/mime/issues/131) +- [**closed**] Make types.json loading optional? [#129](https://github.com/broofa/mime/issues/129) +- [**closed**] Cannot find module './types.json' [#120](https://github.com/broofa/mime/issues/120) +- [**V2**] .wav files show up as "audio/x-wav" instead of "audio/x-wave" [#118](https://github.com/broofa/mime/issues/118) +- [**closed**] Don't be a pain in the ass for node community [#108](https://github.com/broofa/mime/issues/108) +- [**closed**] don't make default_type global [#78](https://github.com/broofa/mime/issues/78) +- [**closed**] mime.extension() fails if the content-type is parameterized [#74](https://github.com/broofa/mime/issues/74) + +--- + +### v1.3.6 (11/05/2017) +- [**closed**] .md should be text/markdown as of March 2016 [#154](https://github.com/broofa/mime/issues/154) +- [**closed**] Error while installing mime [#153](https://github.com/broofa/mime/issues/153) +- [**closed**] application/manifest+json [#149](https://github.com/broofa/mime/issues/149) +- [**closed**] Dynamic adaptive streaming over HTTP (DASH) file extension typo [#141](https://github.com/broofa/mime/issues/141) +- [**closed**] charsets image/png undefined [#140](https://github.com/broofa/mime/issues/140) +- [**closed**] Mime-db dependency out of date [#130](https://github.com/broofa/mime/issues/130) +- [**closed**] how to support plist? [#126](https://github.com/broofa/mime/issues/126) +- [**closed**] how does .types file format look like? [#123](https://github.com/broofa/mime/issues/123) +- [**closed**] Feature: support for expanding MIME patterns [#121](https://github.com/broofa/mime/issues/121) +- [**closed**] DEBUG_MIME doesn't work [#117](https://github.com/broofa/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/mime/issues/111) +- [**closed**] Consider adding support for hjson. [#110](https://github.com/broofa/mime/issues/110) +- [**closed**] Add mime type for Opus audio files [#94](https://github.com/broofa/mime/issues/94) +- [**closed**] Consider making the `Requesting New Types` information more visible [#77](https://github.com/broofa/mime/issues/77) + +--- + +## v1.3.0 (05/02/2015) +- [**closed**] Add common name? [#114](https://github.com/broofa/mime/issues/114) +- [**closed**] application/x-yaml [#104](https://github.com/broofa/mime/issues/104) +- [**closed**] Add mime type for WOFF file format 2.0 [#102](https://github.com/broofa/mime/issues/102) +- [**closed**] application/x-msi for .msi [#99](https://github.com/broofa/mime/issues/99) +- [**closed**] Add mimetype for gettext translation files [#98](https://github.com/broofa/mime/issues/98) +- [**closed**] collaborators [#88](https://github.com/broofa/mime/issues/88) +- [**closed**] getting errot in installation of mime module...any1 can help? [#87](https://github.com/broofa/mime/issues/87) +- [**closed**] should application/json's charset be utf8? [#86](https://github.com/broofa/mime/issues/86) +- [**closed**] Add "license" and "licenses" to package.json [#81](https://github.com/broofa/mime/issues/81) +- [**closed**] lookup with extension-less file on Windows returns wrong type [#68](https://github.com/broofa/mime/issues/68) + +--- + +### v1.2.11 (15/08/2013) +- [**closed**] Update mime.types [#65](https://github.com/broofa/mime/issues/65) +- [**closed**] Publish a new version [#63](https://github.com/broofa/mime/issues/63) +- [**closed**] README should state upfront that "application/octet-stream" is default for unknown extension [#55](https://github.com/broofa/mime/issues/55) +- [**closed**] Suggested improvement to the charset API [#52](https://github.com/broofa/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/mime/issues/62) +- [**closed**] node.types in conflict with mime.types [#51](https://github.com/broofa/mime/issues/51) + +--- + +### v1.2.9 (17/01/2013) +- [**closed**] Please update "mime" NPM [#49](https://github.com/broofa/mime/issues/49) +- [**closed**] Please add semicolon [#46](https://github.com/broofa/mime/issues/46) +- [**closed**] parse full mime types [#43](https://github.com/broofa/mime/issues/43) + +--- + +### v1.2.8 (10/01/2013) +- [**closed**] /js directory mime is application/javascript. Is it correct? [#47](https://github.com/broofa/mime/issues/47) +- [**closed**] Add mime types for lua code. [#45](https://github.com/broofa/mime/issues/45) + +--- + +### v1.2.7 (19/10/2012) +- [**closed**] cannot install 1.2.7 via npm [#41](https://github.com/broofa/mime/issues/41) +- [**closed**] Transfer ownership to @broofa [#36](https://github.com/broofa/mime/issues/36) +- [**closed**] it's wrong to set charset to UTF-8 for text [#30](https://github.com/broofa/mime/issues/30) +- [**closed**] Allow multiple instances of MIME types container [#27](https://github.com/broofa/mime/issues/27) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/LICENSE new file mode 100644 index 00000000..d3f46f7e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/LICENSE @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/Mime.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/Mime.js new file mode 100644 index 00000000..969a66e4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/Mime.js @@ -0,0 +1,97 @@ +'use strict'; + +/** + * @param typeMap [Object] Map of MIME type -> Array[extensions] + * @param ... + */ +function Mime() { + this._types = Object.create(null); + this._extensions = Object.create(null); + + for (let i = 0; i < arguments.length; i++) { + this.define(arguments[i]); + } + + this.define = this.define.bind(this); + this.getType = this.getType.bind(this); + this.getExtension = this.getExtension.bind(this); +} + +/** + * 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']}); + * + * If a type declares an extension that has already been defined, an error will + * be thrown. To suppress this error and force the extension to be associated + * with the new type, pass `force`=true. Alternatively, you may prefix the + * extension with "*" to map the type to extension, without mapping the + * extension to the type. + * + * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']}); + * + * + * @param map (Object) type definitions + * @param force (Boolean) if true, force overriding of existing definitions + */ +Mime.prototype.define = function(typeMap, force) { + for (let type in typeMap) { + let extensions = typeMap[type].map(function(t) { + return t.toLowerCase(); + }); + type = type.toLowerCase(); + + for (let i = 0; i < extensions.length; i++) { + const ext = extensions[i]; + + // '*' prefix = not the preferred type for this extension. So fixup the + // extension, and skip it. + if (ext[0] === '*') { + continue; + } + + if (!force && (ext in this._types)) { + throw new Error( + 'Attempt to change mapping for "' + ext + + '" extension from "' + this._types[ext] + '" to "' + type + + '". Pass `force=true` to allow this, otherwise remove "' + ext + + '" from the list of extensions for "' + type + '".' + ); + } + + this._types[ext] = type; + } + + // Use first extension as default + if (force || !this._extensions[type]) { + const ext = extensions[0]; + this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1); + } + } +}; + +/** + * Lookup a mime type based on extension + */ +Mime.prototype.getType = function(path) { + path = String(path); + let last = path.replace(/^.*[/\\]/, '').toLowerCase(); + let ext = last.replace(/^.*\./, '').toLowerCase(); + + let hasPath = last.length < path.length; + let hasDot = ext.length < last.length - 1; + + return (hasDot || !hasPath) && this._types[ext] || null; +}; + +/** + * Return file extension associated with a mime type + */ +Mime.prototype.getExtension = function(type) { + type = /^\s*([^;\s]*)/.test(type) && RegExp.$1; + return type && this._extensions[type.toLowerCase()] || null; +}; + +module.exports = Mime; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/README.md new file mode 100644 index 00000000..b08316f2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/README.md @@ -0,0 +1,187 @@ + +# Mime + +A comprehensive, compact MIME type module. + +[![Build Status](https://travis-ci.org/broofa/mime.svg?branch=master)](https://travis-ci.org/broofa/mime) + +## Version 2 Notes + +Version 2 is a breaking change from 1.x as the semver implies. Specifically: + +* `lookup()` renamed to `getType()` +* `extension()` renamed to `getExtension()` +* `charset()` and `load()` methods have been removed + +If you prefer the legacy version of this module please `npm install mime@^1`. Version 1 docs may be found [here](https://github.com/broofa/mime/tree/v1.4.0). + +## Install + +### NPM +``` +npm install mime +``` + +### Browser + +It is recommended that you use a bundler such as +[webpack](https://webpack.github.io/) or [browserify](http://browserify.org/) to +package your code. However, browser-ready versions are available via wzrd.in. +E.g. For the full version: + + + + +Or, for the `mime/lite` version: + + + + +## Quick Start + +For the full version (800+ MIME types, 1,000+ extensions): + +```javascript +const mime = require('mime'); + +mime.getType('txt'); // ⇨ 'text/plain' +mime.getExtension('text/plain'); // ⇨ 'txt' +``` + +See [Mime API](#mime-api) below for API details. + +## Lite Version + +There is also a "lite" version of this module that omits vendor-specific +(`*/vnd.*`) and experimental (`*/x-*`) types. It weighs in at ~2.5KB, compared +to 8KB for the full version. To load the lite version: + +```javascript +const mime = require('mime/lite'); +``` + +## Mime .vs. mime-types .vs. mime-db modules + +For those of you wondering about the difference between these [popular] NPM modules, +here's a brief rundown ... + +[`mime-db`](https://github.com/jshttp/mime-db) is "the source of +truth" for MIME type information. It is not an API. Rather, it is a canonical +dataset of mime type definitions pulled from IANA, Apache, NGINX, and custom mappings +submitted by the Node.js community. + +[`mime-types`](https://github.com/jshttp/mime-types) is a thin +wrapper around mime-db that provides an API drop-in compatible(ish) with `mime @ < v1.3.6` API. + +`mime` is, as of v2, a self-contained module bundled with a pre-optimized version +of the `mime-db` dataset. It provides a simplified API with the following characteristics: + +* Intelligently resolved type conflicts (See [mime-score](https://github.com/broofa/mime-score) for details) +* Method naming consistent with industry best-practices +* Compact footprint. E.g. The minified+compressed sizes of the various modules: + +Module | Size +--- | --- +`mime-db` | 18 KB +`mime-types` | same as mime-db +`mime` | 8 KB +`mime/lite` | 2 KB + +## Mime API + +Both `require('mime')` and `require('mime/lite')` return instances of the MIME +class, documented below. + +Note: Inputs to this API are case-insensitive. Outputs (returned values) will +be lowercase. + +### new Mime(typeMap, ... more maps) + +Most users of this module will not need to create Mime instances directly. +However if you would like to create custom mappings, you may do so as follows +... + +```javascript +// Require Mime class +const Mime = require('mime/Mime'); + +// Define mime type -> extensions map +const typeMap = { + 'text/abc': ['abc', 'alpha', 'bet'], + 'text/def': ['leppard'] +}; + +// Create and use Mime instance +const myMime = new Mime(typeMap); +myMime.getType('abc'); // ⇨ 'text/abc' +myMime.getExtension('text/def'); // ⇨ 'leppard' +``` + +If more than one map argument is provided, each map is `define()`ed (see below), in order. + +### mime.getType(pathOrExtension) + +Get mime type for the given path or extension. E.g. + +```javascript +mime.getType('js'); // ⇨ 'application/javascript' +mime.getType('json'); // ⇨ 'application/json' + +mime.getType('txt'); // ⇨ 'text/plain' +mime.getType('dir/text.txt'); // ⇨ 'text/plain' +mime.getType('dir\\text.txt'); // ⇨ 'text/plain' +mime.getType('.text.txt'); // ⇨ 'text/plain' +mime.getType('.txt'); // ⇨ 'text/plain' +``` + +`null` is returned in cases where an extension is not detected or recognized + +```javascript +mime.getType('foo/txt'); // ⇨ null +mime.getType('bogus_type'); // ⇨ null +``` + +### mime.getExtension(type) +Get extension for the given mime type. Charset options (often included in +Content-Type headers) are ignored. + +```javascript +mime.getExtension('text/plain'); // ⇨ 'txt' +mime.getExtension('application/json'); // ⇨ 'json' +mime.getExtension('text/html; charset=utf8'); // ⇨ 'html' +``` + +### mime.define(typeMap[, force = false]) + +Define [more] type mappings. + +`typeMap` is a map of type -> extensions, as documented in `new Mime`, above. + +By default this method will throw an error if you try to map a type to an +extension that is already assigned to another type. Passing `true` for the +`force` argument will suppress this behavior (overriding any previous mapping). + +```javascript +mime.define({'text/x-abc': ['abc', 'abcd']}); + +mime.getType('abcd'); // ⇨ 'text/x-abc' +mime.getExtension('text/x-abc') // ⇨ 'abc' +``` + +## Command Line + + mime [path_or_extension] + +E.g. + + > mime scripts/jquery.js + application/javascript + +---- +Markdown generated from [src/README_js.md](src/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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/cli.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/cli.js new file mode 100755 index 00000000..ab70a49c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/cli.js @@ -0,0 +1,46 @@ +#!/usr/bin/env node + +'use strict'; + +process.title = 'mime'; +let mime = require('.'); +let pkg = require('./package.json'); +let args = process.argv.splice(2); + +if (args.includes('--version') || args.includes('-v') || args.includes('--v')) { + console.log(pkg.version); + process.exit(0); +} else if (args.includes('--name') || args.includes('-n') || args.includes('--n')) { + console.log(pkg.name); + process.exit(0); +} else if (args.includes('--help') || args.includes('-h') || args.includes('--h')) { + console.log(pkg.name + ' - ' + pkg.description + '\n'); + console.log(`Usage: + + mime [flags] [path_or_extension] + + Flags: + --help, -h Show this message + --version, -v Display the version + --name, -n Print the name of the program + + Note: the command will exit after it executes if a command is specified + The path_or_extension is the path to the file or the extension of the file. + + Examples: + mime --help + mime --version + mime --name + mime -v + mime src/log.js + mime new.py + mime foo.sh + `); + process.exit(0); +} + +let file = args[0]; +let type = mime.getType(file); + +process.stdout.write(type + '\n'); + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/index.js new file mode 100644 index 00000000..fadcf8d6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/index.js @@ -0,0 +1,4 @@ +'use strict'; + +let Mime = require('./Mime'); +module.exports = new Mime(require('./types/standard'), require('./types/other')); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/lite.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/lite.js new file mode 100644 index 00000000..835cffb3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/lite.js @@ -0,0 +1,4 @@ +'use strict'; + +let Mime = require('./Mime'); +module.exports = new Mime(require('./types/standard')); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/package.json new file mode 100644 index 00000000..4a76a0d2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/package.json @@ -0,0 +1,84 @@ +{ + "_args": [ + [ + "mime@2.5.2", + "/tmp/repository/main" + ] + ], + "_from": "mime@2.5.2", + "_id": "mime@2.5.2", + "_inBundle": false, + "_integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "_location": "/mime", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "mime@2.5.2", + "name": "mime", + "escapedName": "mime", + "rawSpec": "2.5.2", + "saveSpec": null, + "fetchSpec": "2.5.2" + }, + "_requiredBy": [ + "/playwright" + ], + "_resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "_spec": "2.5.2", + "_where": "/tmp/repository/main", + "author": { + "name": "Robert Kieffer", + "email": "robert@broofa.com", + "url": "http://github.com/broofa" + }, + "bin": { + "mime": "cli.js" + }, + "bugs": { + "url": "https://github.com/broofa/mime/issues" + }, + "contributors": [], + "dependencies": {}, + "description": "A comprehensive library for mime-type mapping", + "devDependencies": { + "benchmark": "*", + "chalk": "4.1.0", + "eslint": "7.20.0", + "mime-db": "1.46.0", + "mime-score": "1.2.0", + "mime-types": "2.1.28", + "mocha": "8.3.0", + "runmd": "*", + "standard-version": "9.1.0" + }, + "engines": { + "node": ">=4.0.0" + }, + "files": [ + "index.js", + "lite.js", + "Mime.js", + "cli.js", + "/types" + ], + "homepage": "https://github.com/broofa/mime#readme", + "keywords": [ + "util", + "mime" + ], + "license": "MIT", + "name": "mime", + "repository": { + "url": "git+https://github.com/broofa/mime.git", + "type": "git" + }, + "scripts": { + "benchmark": "node src/benchmark.js", + "md": "runmd --watch --output README.md src/README_js.md", + "prepare": "node src/build.js && runmd --output README.md src/README_js.md", + "release": "standard-version", + "test": "mocha src/test.js" + }, + "version": "2.5.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/types/other.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/types/other.js new file mode 100644 index 00000000..7c831d18 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/types/other.js @@ -0,0 +1 @@ +module.exports = {"application/prs.cww":["cww"],"application/vnd.1000minds.decision-model+xml":["1km"],"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.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"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.citationstyles.style+xml":["csl"],"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.dbf":["dbf"],"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.ac+xml":["*ac"],"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.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"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.rar":["rar"],"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.software602.filler.form+xml":["fo"],"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.syncml.dmddf+xml":["ddf"],"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/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"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":["*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":["*deb","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":["*iso"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"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":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*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":["*prc","*pdb"],"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"],"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/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*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":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"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.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"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":["*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/vnd.wfa.wsc":["wsc"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"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/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":["*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"],"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/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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/types/standard.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/types/standard.js new file mode 100644 index 00000000..cf282761 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/mime/types/standard.js @@ -0,0 +1 @@ +module.exports = {"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"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","es"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"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/lgr+xml":["lgr"],"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/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/mrb-consumer+xml":["*xdf"],"application/mrb-publish+xml":["*xdf"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"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/p2p-overlay+xml":["relo"],"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/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"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/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"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/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"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/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-error+xml":["xer"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"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/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*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/webm":["webm"]}; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/README.md new file mode 100644 index 00000000..ad72b813 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/README.md @@ -0,0 +1,209 @@ +# minimatch + +A minimal matching utility. + +[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.svg)](http://travis-ci.org/isaacs/minimatch) + + +This is the matching library used internally by npm. + +It works by converting glob expressions into JavaScript `RegExp` +objects. + +## Usage + +```javascript +var minimatch = require("minimatch") + +minimatch("bar.foo", "*.foo") // true! +minimatch("bar.foo", "*.bar") // false! +minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy! +``` + +## Features + +Supports these glob features: + +* Brace Expansion +* Extended glob matching +* "Globstar" `**` matching + +See: + +* `man sh` +* `man bash` +* `man 3 fnmatch` +* `man 5 gitignore` + +## Minimatch Class + +Create a minimatch object by instantiating the `minimatch.Minimatch` class. + +```javascript +var Minimatch = require("minimatch").Minimatch +var mm = new Minimatch(pattern, options) +``` + +### Properties + +* `pattern` The original pattern the minimatch object represents. +* `options` The options supplied to the constructor. +* `set` A 2-dimensional array of regexp or string expressions. + Each row in the + array corresponds to a brace-expanded pattern. Each item in the row + corresponds to a single path-part. For example, the pattern + `{a,b/c}/d` would expand to a set of patterns like: + + [ [ a, d ] + , [ b, c, d ] ] + + If a portion of the pattern doesn't have any "magic" in it + (that is, it's something like `"foo"` rather than `fo*o?`), then it + will be left as a string rather than converted to a regular + expression. + +* `regexp` Created by the `makeRe` method. A single regular expression + expressing the entire pattern. This is useful in cases where you wish + to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. +* `negate` True if the pattern is negated. +* `comment` True if the pattern is a comment. +* `empty` True if the pattern is `""`. + +### Methods + +* `makeRe` Generate the `regexp` member if necessary, and return it. + Will return `false` if the pattern is invalid. +* `match(fname)` Return true if the filename matches the pattern, or + false otherwise. +* `matchOne(fileArray, patternArray, partial)` Take a `/`-split + filename, and match it against a single row in the `regExpSet`. This + method is mainly for internal use, but is exposed so that it can be + used by a glob-walker that needs to avoid excessive filesystem calls. + +All other methods are internal, and will be called as necessary. + +### minimatch(path, pattern, options) + +Main export. Tests a path against the pattern using the options. + +```javascript +var isJS = minimatch(file, "*.js", { matchBase: true }) +``` + +### minimatch.filter(pattern, options) + +Returns a function that tests its +supplied argument, suitable for use with `Array.filter`. Example: + +```javascript +var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) +``` + +### minimatch.match(list, pattern, options) + +Match against the list of +files, in the style of fnmatch or glob. If nothing is matched, and +options.nonull is set, then return a list containing the pattern itself. + +```javascript +var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) +``` + +### minimatch.makeRe(pattern, options) + +Make a regular expression object from the pattern. + +## Options + +All options are `false` by default. + +### debug + +Dump a ton of stuff to stderr. + +### nobrace + +Do not expand `{a,b}` and `{1..3}` brace sets. + +### noglobstar + +Disable `**` matching against multiple folder names. + +### dot + +Allow patterns to match filenames starting with a period, even if +the pattern does not explicitly have a period in that spot. + +Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` +is set. + +### noext + +Disable "extglob" style patterns like `+(a|b)`. + +### nocase + +Perform a case-insensitive match. + +### nonull + +When a match is not found by `minimatch.match`, return a list containing +the pattern itself if this option is set. When not set, an empty list +is returned if there are no matches. + +### matchBase + +If set, then patterns without slashes will be matched +against the basename of the path if it contains slashes. For example, +`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. + +### nocomment + +Suppress the behavior of treating `#` at the start of a pattern as a +comment. + +### nonegate + +Suppress the behavior of treating a leading `!` character as negation. + +### flipNegate + +Returns from negate expressions the same as if they were not negated. +(Ie, true on a hit, false on a miss.) + + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between minimatch and other +implementations, and are intentional. + +If the pattern starts with a `!` character, then it is negated. Set the +`nonegate` flag to suppress this behavior, and treat leading `!` +characters normally. This is perhaps relevant if you wish to start the +pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` +characters at the start of a pattern will negate the pattern multiple +times. + +If a pattern starts with `#`, then it is treated as a comment, and +will not match anything. Use `\#` to match a literal `#` at the +start of a line, or set the `nocomment` flag to suppress this behavior. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.1, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then minimatch.match returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/minimatch.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/minimatch.js new file mode 100644 index 00000000..5b5f8cf4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/minimatch.js @@ -0,0 +1,923 @@ +module.exports = minimatch +minimatch.Minimatch = Minimatch + +var path = { sep: '/' } +try { + path = require('path') +} catch (er) {} + +var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} +var expand = require('brace-expansion') + +var plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +} + +// any single thing other than / +// don't need to escape / when using new RegExp() +var qmark = '[^/]' + +// * => any number of characters +var star = qmark + '*?' + +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' + +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' + +// characters that need to be escaped in RegExp. +var reSpecials = charSet('().*{}+?[]^$\\!') + +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split('').reduce(function (set, c) { + set[c] = true + return set + }, {}) +} + +// normalizes slashes. +var slashSplit = /\/+/ + +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) + } +} + +function ext (a, b) { + a = a || {} + b = b || {} + var t = {} + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + return t +} + +minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return minimatch + + var orig = minimatch + + var m = function minimatch (p, pattern, options) { + return orig.minimatch(p, pattern, ext(def, options)) + } + + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + } + + return m +} + +Minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return Minimatch + return minimatch.defaults(def).Minimatch +} + +function minimatch (p, pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } + + if (!options) options = {} + + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false + } + + // "" only matches "" + if (pattern.trim() === '') return p === '' + + return new Minimatch(pattern, options).match(p) +} + +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options) + } + + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } + + if (!options) options = {} + pattern = pattern.trim() + + // windows support: need to use /, not \ + if (path.sep !== '/') { + pattern = pattern.split(path.sep).join('/') + } + + this.options = options + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false + + // make the set of regexps etc. + this.make() +} + +Minimatch.prototype.debug = function () {} + +Minimatch.prototype.make = make +function make () { + // don't do it more than once. + if (this._made) return + + var pattern = this.pattern + var options = this.options + + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return + } + + // step 1: figure out negation, etc. + this.parseNegate() + + // step 2: expand braces + var set = this.globSet = this.braceExpand() + + if (options.debug) this.debug = console.error + + this.debug(this.pattern, set) + + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }) + + this.debug(this.pattern, set) + + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this) + + this.debug(this.pattern, set) + + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return s.indexOf(false) === -1 + }) + + this.debug(this.pattern, set) + + this.set = set +} + +Minimatch.prototype.parseNegate = parseNegate +function parseNegate () { + var pattern = this.pattern + var negate = false + var options = this.options + var negateOffset = 0 + + if (options.nonegate) return + + for (var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === '!' + ; i++) { + negate = !negate + negateOffset++ + } + + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate +} + +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = function (pattern, options) { + return braceExpand(pattern, options) +} + +Minimatch.prototype.braceExpand = braceExpand + +function braceExpand (pattern, options) { + if (!options) { + if (this instanceof Minimatch) { + options = this.options + } else { + options = {} + } + } + + pattern = typeof pattern === 'undefined' + ? this.pattern : pattern + + if (typeof pattern === 'undefined') { + throw new TypeError('undefined pattern') + } + + if (options.nobrace || + !pattern.match(/\{.*\}/)) { + // shortcut. no need to expand. + return [pattern] + } + + return expand(pattern) +} + +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch.prototype.parse = parse +var SUBPARSE = {} +function parse (pattern, isSub) { + if (pattern.length > 1024 * 64) { + throw new TypeError('pattern is too long') + } + + var options = this.options + + // shortcuts + if (!options.noglobstar && pattern === '**') return GLOBSTAR + if (pattern === '') return '' + + var re = '' + var hasMagic = !!options.nocase + var escaping = false + // ? => one single character + var patternListStack = [] + var negativeLists = [] + var stateChar + var inClass = false + var reClassStart = -1 + var classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + var patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)' + var self = this + + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case '*': + re += star + hasMagic = true + break + case '?': + re += qmark + hasMagic = true + break + default: + re += '\\' + stateChar + break + } + self.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } + + for (var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i++) { + this.debug('%s\t%s %s %j', pattern, i, re, c) + + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += '\\' + c + escaping = false + continue + } + + switch (c) { + case '/': + // completely not allowed, even escaped. + // Should already be path-split by now. + return false + + case '\\': + clearStateChar() + escaping = true + continue + + // the various stateChar values + // for the "extglob" stuff. + case '?': + case '*': + case '+': + case '@': + case '!': + this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) + + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === '!' && i === classStart + 1) c = '^' + re += c + continue + } + + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar() + continue + + case '(': + if (inClass) { + re += '(' + continue + } + + if (!stateChar) { + re += '\\(' + continue + } + + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close + }) + // negation is (?:(?!js)[^/]*) + re += stateChar === '!' ? '(?:(?!(?:' : '(?:' + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue + + case ')': + if (inClass || !patternListStack.length) { + re += '\\)' + continue + } + + clearStateChar() + hasMagic = true + var pl = patternListStack.pop() + // negation is (?:(?!js)[^/]*) + // The others are (?:) + re += pl.close + if (pl.type === '!') { + negativeLists.push(pl) + } + pl.reEnd = re.length + continue + + case '|': + if (inClass || !patternListStack.length || escaping) { + re += '\\|' + escaping = false + continue + } + + clearStateChar() + re += '|' + continue + + // these are mostly the same in regexp and glob + case '[': + // swallow any state-tracking char before the [ + clearStateChar() + + if (inClass) { + re += '\\' + c + continue + } + + inClass = true + classStart = i + reClassStart = re.length + re += c + continue + + case ']': + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += '\\' + c + escaping = false + continue + } + + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + if (inClass) { + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + var cs = pattern.substring(classStart + 1, i) + try { + RegExp('[' + cs + ']') + } catch (er) { + // not a valid class! + var sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' + hasMagic = hasMagic || sp[1] + inClass = false + continue + } + } + + // finish up the class. + hasMagic = true + inClass = false + re += c + continue + + default: + // swallow any state char that wasn't consumed + clearStateChar() + + if (escaping) { + // no need + escaping = false + } else if (reSpecials[c] + && !(c === '^' && inClass)) { + re += '\\' + } + + re += c + + } // switch + } // for + + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + cs = pattern.substr(classStart + 1) + sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + hasMagic = hasMagic || sp[1] + } + + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + pl.open.length) + this.debug('setting tail', re, pl) + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = '\\' + } + + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + '|' + }) + + this.debug('tail=%j\n %s', tail, tail, pl, re) + var t = pl.type === '*' ? star + : pl.type === '?' ? qmark + : '\\' + pl.type + + hasMagic = true + re = re.slice(0, pl.reStart) + t + '\\(' + tail + } + + // handle trailing things that only matter at the very end. + clearStateChar() + if (escaping) { + // trailing \\ + re += '\\\\' + } + + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false + switch (re.charAt(0)) { + case '.': + case '[': + case '(': addPatternStart = true + } + + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (var n = negativeLists.length - 1; n > -1; n--) { + var nl = negativeLists[n] + + var nlBefore = re.slice(0, nl.reStart) + var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) + var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + var nlAfter = re.slice(nl.reEnd) + + nlLast += nlAfter + + // Handle nested stuff like *(*.js|!(*.json)), where open parens + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + var openParensBefore = nlBefore.split('(').length - 1 + var cleanAfter = nlAfter + for (i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') + } + nlAfter = cleanAfter + + var dollar = '' + if (nlAfter === '' && isSub !== SUBPARSE) { + dollar = '$' + } + var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast + re = newRe + } + + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== '' && hasMagic) { + re = '(?=.)' + re + } + + if (addPatternStart) { + re = patternStart + re + } + + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [re, hasMagic] + } + + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) + } + + var flags = options.nocase ? 'i' : '' + try { + var regExp = new RegExp('^' + re + '$', flags) + } catch (er) { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') + } + + regExp._glob = pattern + regExp._src = re + + return regExp +} + +minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe() +} + +Minimatch.prototype.makeRe = makeRe +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set + + if (!set.length) { + this.regexp = false + return this.regexp + } + var options = this.options + + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + var flags = options.nocase ? 'i' : '' + + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === 'string') ? regExpEscape(p) + : p._src + }).join('\\\/') + }).join('|') + + // must match entire pattern + // ending in a * or ** will make it less strict. + re = '^(?:' + re + ')$' + + // can match anything, as long as it's not this. + if (this.negate) re = '^(?!' + re + ').*$' + + try { + this.regexp = new RegExp(re, flags) + } catch (ex) { + this.regexp = false + } + return this.regexp +} + +minimatch.match = function (list, pattern, options) { + options = options || {} + var mm = new Minimatch(pattern, options) + list = list.filter(function (f) { + return mm.match(f) + }) + if (mm.options.nonull && !list.length) { + list.push(pattern) + } + return list +} + +Minimatch.prototype.match = match +function match (f, partial) { + this.debug('match', f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === '' + + if (f === '/' && partial) return true + + var options = this.options + + // windows: need to use /, not \ + if (path.sep !== '/') { + f = f.split(path.sep).join('/') + } + + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, 'split', f) + + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. + + var set = this.set + this.debug(this.pattern, 'set', set) + + // Find the basename of the path by looking for the last non-empty segment + var filename + var i + for (i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } + + for (i = 0; i < set.length; i++) { + var pattern = set[i] + var file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + var hit = this.matchOne(file, pattern, partial) + if (hit) { + if (options.flipNegate) return true + return !this.negate + } + } + + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate +} + +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch.prototype.matchOne = function (file, pattern, partial) { + var options = this.options + + this.debug('matchOne', + { 'this': this, file: file, pattern: pattern }) + + this.debug('matchOne', file.length, pattern.length) + + for (var fi = 0, + pi = 0, + fl = file.length, + pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi++, pi++) { + this.debug('matchOne loop') + var p = pattern[pi] + var f = file[fi] + + this.debug(pattern, p, f) + + // should be impossible. + // some invalid regexp stuff in the set. + if (p === false) return false + + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]) + + // "**" + // a/**/b/**/c would match the following: + // a/b/x/y/z/c + // a/x/y/z/b/c + // a/b/x/b/x/c + // a/b/c + // To do this, take the rest of the pattern after + // the **, and see if it would match the file remainder. + // If so, return success. + // If not, the ** "swallows" a segment, and try again. + // This is recursively awful. + // + // a/**/b/**/c matching a/b/x/y/z/c + // - a matches a + // - doublestar + // - matchOne(b/x/y/z/c, b/**/c) + // - b matches b + // - doublestar + // - matchOne(x/y/z/c, c) -> no + // - matchOne(y/z/c, c) -> no + // - matchOne(z/c, c) -> no + // - matchOne(c, c) yes, hit + var fr = fi + var pr = pi + 1 + if (pr === pl) { + this.debug('** at the end') + // a ** at the end will just swallow the rest. + // We have found a match. + // however, it will not swallow /.x, unless + // options.dot is set. + // . and .. are *never* matched by **, for explosively + // exponential reasons. + for (; fi < fl; fi++) { + if (file[fi] === '.' || file[fi] === '..' || + (!options.dot && file[fi].charAt(0) === '.')) return false + } + return true + } + + // ok, let's see if we can swallow whatever we can. + while (fr < fl) { + var swallowee = file[fr] + + this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) + + // XXX remove this slice. Just pass the start index. + if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { + this.debug('globstar found match!', fr, fl, swallowee) + // found a match. + return true + } else { + // can't swallow "." or ".." ever. + // can only swallow ".foo" when explicitly asked. + if (swallowee === '.' || swallowee === '..' || + (!options.dot && swallowee.charAt(0) === '.')) { + this.debug('dot detected!', file, fr, pattern, pr) + break + } + + // ** swallows a segment, and continue. + this.debug('globstar swallow a segment, and continue') + fr++ + } + } + + // no match was found. + // However, in partial mode, we can't say this is necessarily over. + // If there's more *pattern* left, then + if (partial) { + // ran out of file + this.debug('\n>>> no match, partial?', file, fr, pattern, pr) + if (fr === fl) return true + } + return false + } + + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === 'string') { + if (options.nocase) { + hit = f.toLowerCase() === p.toLowerCase() + } else { + hit = f === p + } + this.debug('string match', p, f, hit) + } else { + hit = f.match(p) + this.debug('pattern match', p, f, hit) + } + + if (!hit) return false + } + + // Note: ending in / means that we'll get a final "" + // at the end of the pattern. This can only match a + // corresponding "" at the end of the file. + // If the file ends in /, then it can only match a + // a pattern that ends in /, unless the pattern just + // doesn't have any more for it. But, a/b/ should *not* + // match "a/b/*", even though "" matches against the + // [^/]*? pattern, except in partial mode, where it might + // simply not be reached yet. + // However, a/b/ should still satisfy a/* + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') + return emptyFileEnd + } + + // should be unreachable. + throw new Error('wtf?') +} + +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, '$1') +} + +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/package.json new file mode 100644 index 00000000..6a96c5d2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimatch/package.json @@ -0,0 +1,69 @@ +{ + "_args": [ + [ + "minimatch@3.0.4", + "/tmp/repository/main" + ] + ], + "_from": "minimatch@3.0.4", + "_id": "minimatch@3.0.4", + "_inBundle": false, + "_integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "_location": "/minimatch", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "minimatch@3.0.4", + "name": "minimatch", + "escapedName": "minimatch", + "rawSpec": "3.0.4", + "saveSpec": null, + "fetchSpec": "3.0.4" + }, + "_requiredBy": [ + "/@eslint/eslintrc", + "/@humanwhocodes/config-array", + "/eslint", + "/glob" + ], + "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "_spec": "3.0.4", + "_where": "/tmp/repository/main", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, + "bugs": { + "url": "https://github.com/isaacs/minimatch/issues" + }, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "description": "a glob matcher in javascript", + "devDependencies": { + "tap": "^10.3.2" + }, + "engines": { + "node": "*" + }, + "files": [ + "minimatch.js" + ], + "homepage": "https://github.com/isaacs/minimatch#readme", + "license": "ISC", + "main": "minimatch.js", + "name": "minimatch", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/minimatch.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap test/*.js --cov" + }, + "version": "3.0.4" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/.travis.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/.travis.yml new file mode 100644 index 00000000..74c57bf1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.12" + - "iojs" +before_install: + - npm install -g npm@~1.4.6 diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/LICENSE new file mode 100644 index 00000000..ee27ba4b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/example/parse.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/example/parse.js new file mode 100644 index 00000000..f7c8d498 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/example/parse.js @@ -0,0 +1,2 @@ +var argv = require('../')(process.argv.slice(2)); +console.log(argv); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/index.js new file mode 100644 index 00000000..d9c3eb79 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/index.js @@ -0,0 +1,249 @@ +module.exports = function (args, opts) { + if (!opts) opts = {}; + + var flags = { bools : {}, strings : {}, unknownFn: null }; + + if (typeof opts['unknown'] === 'function') { + flags.unknownFn = opts['unknown']; + } + + if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { + flags.allBools = true; + } else { + [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + } + + var aliases = {}; + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + if (aliases[key]) { + flags.strings[aliases[key]] = true; + } + }); + + var defaults = opts['default'] || {}; + + var argv = { _ : [] }; + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--')+1); + args = args.slice(0, args.indexOf('--')); + } + + function argDefined(key, arg) { + return (flags.allBools && /^--[^=]+$/.test(arg)) || + flags.strings[key] || flags.bools[key] || aliases[key]; + } + + function setArg (key, val, arg) { + if (arg && flags.unknownFn && !argDefined(key, arg)) { + if (flags.unknownFn(arg) === false) return; + } + + var value = !flags.strings[key] && isNumber(val) + ? Number(val) : val + ; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + function setKey (obj, keys, value) { + var o = obj; + for (var i = 0; i < keys.length-1; i++) { + var key = keys[i]; + if (isConstructorOrProto(o, key)) return; + if (o[key] === undefined) o[key] = {}; + if (o[key] === Object.prototype || o[key] === Number.prototype + || o[key] === String.prototype) o[key] = {}; + if (o[key] === Array.prototype) o[key] = []; + o = o[key]; + } + + var key = keys[keys.length - 1]; + if (isConstructorOrProto(o, key)) return; + if (o === Object.prototype || o === Number.prototype + || o === String.prototype) o = {}; + if (o === Array.prototype) o = []; + if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { + o[key] = value; + } + else if (Array.isArray(o[key])) { + o[key].push(value); + } + else { + o[key] = [ o[key], value ]; + } + } + + function aliasIsBoolean(key) { + return aliases[key].some(function (x) { + return flags.bools[x]; + }); + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + + if (/^--.+=/.test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + var key = m[1]; + var value = m[2]; + if (flags.bools[key]) { + value = value !== 'false'; + } + setArg(key, value, arg); + } + else if (/^--no-.+/.test(arg)) { + var key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false, arg); + } + else if (/^--.+/.test(arg)) { + var key = arg.match(/^--(.+)/)[1]; + var next = args[i + 1]; + if (next !== undefined && !/^-/.test(next) + && !flags.bools[key] + && !flags.allBools + && (aliases[key] ? !aliasIsBoolean(key) : true)) { + setArg(key, next, arg); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + else if (/^-[^-]+/.test(arg)) { + var letters = arg.slice(1,-1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + var next = arg.slice(j+2); + + if (next === '-') { + setArg(letters[j], next, arg) + continue; + } + + if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { + setArg(letters[j], next.split('=')[1], arg); + broken = true; + break; + } + + if (/[A-Za-z]/.test(letters[j]) + && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { + setArg(letters[j], next, arg); + broken = true; + break; + } + + if (letters[j+1] && letters[j+1].match(/\W/)) { + setArg(letters[j], arg.slice(j+2), arg); + broken = true; + break; + } + else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); + } + } + + var key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) + && !flags.bools[key] + && (aliases[key] ? !aliasIsBoolean(key) : true)) { + setArg(key, args[i+1], arg); + i++; + } + else if (args[i+1] && /^(true|false)$/.test(args[i+1])) { + setArg(key, args[i+1] === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + } + else { + if (!flags.unknownFn || flags.unknownFn(arg) !== false) { + argv._.push( + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) + ); + } + if (opts.stopEarly) { + argv._.push.apply(argv._, args.slice(i + 1)); + break; + } + } + } + + Object.keys(defaults).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) { + setKey(argv, key.split('.'), defaults[key]); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[key]); + }); + } + }); + + if (opts['--']) { + argv['--'] = new Array(); + notFlags.forEach(function(key) { + argv['--'].push(key); + }); + } + else { + notFlags.forEach(function(key) { + argv._.push(key); + }); + } + + return argv; +}; + +function hasKey (obj, keys) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + o = (o[key] || {}); + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function isNumber (x) { + if (typeof x === 'number') return true; + if (/^0x[0-9a-f]+$/i.test(x)) return true; + return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} + + +function isConstructorOrProto (obj, key) { + return key === 'constructor' && typeof obj[key] === 'function' || key === '__proto__'; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/package.json new file mode 100644 index 00000000..11c7f614 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/package.json @@ -0,0 +1,77 @@ +{ + "_args": [ + [ + "minimist@1.2.6", + "/tmp/repository/main" + ] + ], + "_from": "minimist@1.2.6", + "_id": "minimist@1.2.6", + "_inBundle": false, + "_integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "_location": "/minimist", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "minimist@1.2.6", + "name": "minimist", + "escapedName": "minimist", + "rawSpec": "1.2.6", + "saveSpec": null, + "fetchSpec": "1.2.6" + }, + "_requiredBy": [ + "/@vscode/test-web", + "/mkdirp" + ], + "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "_spec": "1.2.6", + "_where": "/tmp/repository/main", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/minimist/issues" + }, + "description": "parse argument options", + "devDependencies": { + "covert": "^1.0.0", + "tap": "~0.4.0", + "tape": "^3.5.0" + }, + "homepage": "https://github.com/substack/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "license": "MIT", + "main": "index.js", + "name": "minimist", + "repository": { + "type": "git", + "url": "git://github.com/substack/minimist.git" + }, + "scripts": { + "coverage": "covert test/*.js", + "test": "tap test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "version": "1.2.6" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/readme.markdown b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/readme.markdown new file mode 100644 index 00000000..859d1ab4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/readme.markdown @@ -0,0 +1,98 @@ +# minimist + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.log(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ _: [ 'foo', 'bar', 'baz' ], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' } +``` + +# security + +Previous versions had a prototype pollution bug that could cause privilege +escalation in some circumstances when handling untrusted user input. + +Please use version 1.2.6 or later: + +* https://security.snyk.io/vuln/SNYK-JS-MINIMIST-2429795 (version <=1.2.5) +* https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 (version <=1.2.3) + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a boolean, string or array of strings to always treat as +booleans. if `true` will treat all double hyphenated arguments without equal signs +as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values +* `opts.stopEarly` - when true, populate `argv._` with everything after the +first non-option +* `opts['--']` - when true, populate `argv._` with everything before the `--` +and `argv['--']` with everything after the `--`. Here's an example: + + ``` + > require('./')('one two three -- four five --six'.split(' '), { '--': true }) + { _: [ 'one', 'two', 'three' ], + '--': [ 'four', 'five', '--six' ] } + ``` + + Note that with `opts['--']` set, parsing for arguments still stops after the + `--`. + +* `opts.unknown` - a function which is invoked with a command line parameter not +defined in the `opts` configuration object. If the function returns `false`, the +unknown option is not added to `argv`. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/all_bool.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/all_bool.js new file mode 100644 index 00000000..ac835483 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/all_bool.js @@ -0,0 +1,32 @@ +var parse = require('../'); +var test = require('tape'); + +test('flag boolean true (default all --args to boolean)', function (t) { + var argv = parse(['moo', '--honk', 'cow'], { + boolean: true + }); + + t.deepEqual(argv, { + honk: true, + _: ['moo', 'cow'] + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); + +test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { + var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { + boolean: true + }); + + t.deepEqual(argv, { + honk: true, + tacos: 'good', + p: 55, + _: ['moo', 'cow'] + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/bool.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/bool.js new file mode 100644 index 00000000..5f7dbde1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/bool.js @@ -0,0 +1,178 @@ +var parse = require('../'); +var test = require('tape'); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false } + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { + boolean: ['x','y','z'] + }); + + t.deepEqual(argv, { + x : true, + y : false, + z : true, + _ : [ 'one', 'two', 'three' ] + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); +test('boolean and alias with chainable api', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + herp: { alias: 'h', boolean: true } + }; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + alias: { 'h': 'herp' }, + boolean: 'herp' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias array with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var alt = [ '--harp', 'derp' ]; + var opts = { + alias: { 'h': ['herp', 'harp'] }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var altPropertyArgv = parse(alt, opts); + var expected = { + harp: true, + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.same(altPropertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = [ '-h', 'true' ]; + var regular = [ '--herp', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function(t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); + +test('boolean --boool=true', function (t) { + var parsed = parse(['--boool=true'], { + default: { + boool: false + }, + boolean: ['boool'] + }); + + t.same(parsed.boool, true); + t.end(); +}); + +test('boolean --boool=false', function (t) { + var parsed = parse(['--boool=false'], { + default: { + boool: true + }, + boolean: ['boool'] + }); + + t.same(parsed.boool, false); + t.end(); +}); + +test('boolean using something similar to true', function (t) { + var opts = { boolean: 'h' }; + var result = parse(['-h', 'true.txt'], opts); + var expected = { + h: true, + '_': ['true.txt'] + }; + + t.same(result, expected); + t.end(); +}); \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/dash.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/dash.js new file mode 100644 index 00000000..5a4fa5be --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/dash.js @@ -0,0 +1,31 @@ +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(5); + t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); + t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); + t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); + t.deepEqual( + parse([ '-b', '-' ], { boolean: 'b' }), + { b: true, _: [ '-' ] } + ); + t.deepEqual( + parse([ '-s', '-' ], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(3); + t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); +}); + +test('move arguments after the -- into their own `--` array', function(t) { + t.plan(1); + t.deepEqual( + parse([ '--name', 'John', 'before', '--', 'after' ], { '--': true }), + { name: 'John', _: [ 'before' ], '--': [ 'after' ] }); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/default_bool.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/default_bool.js new file mode 100644 index 00000000..780a3112 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/default_bool.js @@ -0,0 +1,35 @@ +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true } + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false } + }); + t.equal(argv.somefalse, false); + t.end(); +}); + +test('boolean default to null', function (t) { + var argv = parse([], { + boolean: 'maybe', + default: { maybe: null } + }); + t.equal(argv.maybe, null); + var argv = parse(['--maybe'], { + boolean: 'maybe', + default: { maybe: null } + }); + t.equal(argv.maybe, true); + t.end(); + +}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/dotted.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/dotted.js new file mode 100644 index 00000000..d8b3e856 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/dotted.js @@ -0,0 +1,22 @@ +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); + +test('dotted default with no alias', function (t) { + var argv = parse('', {default: {'a.b': 11}}); + t.equal(argv.a.b, 11); + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/kv_short.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/kv_short.js new file mode 100644 index 00000000..f813b305 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/kv_short.js @@ -0,0 +1,16 @@ +var parse = require('../'); +var test = require('tape'); + +test('short -k=v' , function (t) { + t.plan(1); + + var argv = parse([ '-b=123' ]); + t.deepEqual(argv, { b: 123, _: [] }); +}); + +test('multi short -k=v' , function (t) { + t.plan(1); + + var argv = parse([ '-a=whatever', '-b=robots' ]); + t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/long.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/long.js new file mode 100644 index 00000000..5d3a1e09 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/long.js @@ -0,0 +1,31 @@ +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse([ '--bool' ]), + { bool : true, _ : [] }, + 'long boolean' + ); + t.deepEqual( + parse([ '--pow', 'xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture sp' + ); + t.deepEqual( + parse([ '--pow=xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture eq' + ); + t.deepEqual( + parse([ '--host', 'localhost', '--port', '555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures sp' + ); + t.deepEqual( + parse([ '--host=localhost', '--port=555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures eq' + ); + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/num.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/num.js new file mode 100644 index 00000000..2cc77f4d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/num.js @@ -0,0 +1,36 @@ +var parse = require('../'); +var test = require('tape'); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789' + ]); + t.deepEqual(argv, { + x : 1234, + y : 5.67, + z : 1e7, + w : '10f', + hex : 0xdeadbeef, + _ : [ 789 ] + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('already a number', function (t) { + var argv = parse([ '-x', 1234, 789 ]); + t.deepEqual(argv, { x : 1234, _ : [ 789 ] }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/parse.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/parse.js new file mode 100644 index 00000000..7b4a2a17 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/parse.js @@ -0,0 +1,197 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse([ '--no-moo' ]), + { moo : false, _ : [] }, + 'no' + ); + t.deepEqual( + parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), + { v : ['a','b','c'], _ : [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek' + ]), + { + c : true, + a : true, + t : true, + s : 'woo', + h : 'awesome', + b : true, + bool : true, + key : 'value', + multi : [ 'quux', 'baz' ], + meep : false, + name : 'meowmers', + _ : [ 'bare', '--not-a-flag', 'eek' ] + } + ); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse([ '-t', 'moo' ], { boolean: 't' }); + t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: [ 't', 'verbose' ], + default: { verbose: true } + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('newlines in params' , function (t) { + var args = parse([ '-s', "X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse([ "--s=X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + t.end(); +}); + +test('strings' , function (t) { + var s = parse([ '-s', '0001234' ], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse([ '-x', '56' ], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([ ' ', ' ' ], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function(t) { + var s = parse([ '-s' ], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse([ '--str' ], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse([ '-art' ], { + string: [ 'a', 't' ] + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + + +test('string and alias', function(t) { + var x = parse([ '--str', '000123' ], { + string: 's', + alias: { s: 'str' } + }); + + t.equal(x.str, '000123'); + t.equal(typeof x.str, 'string'); + t.equal(x.s, '000123'); + t.equal(typeof x.s, 'string'); + + var y = parse([ '-s', '000123' ], { + string: 'str', + alias: { str: 's' } + }); + + t.equal(y.str, '000123'); + t.equal(typeof y.str, 'string'); + t.equal(y.s, '000123'); + t.equal(typeof y.s, 'string'); + t.end(); +}); + +test('slashBreak', function (t) { + t.same( + parse([ '-I/foo/bar/baz' ]), + { I : '/foo/bar/baz', _ : [] } + ); + t.same( + parse([ '-xyz/foo/bar/baz' ]), + { x : true, y : true, z : '/foo/bar/baz', _ : [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: 'zoom' } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: [ 'zm', 'zoom' ] } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop' + ]); + + t.same(argv.foo, { + bar : 3, + baz : 4, + quux : { + quibble : 5, + o_O : true + } + }); + t.same(argv.beep, { boop : true }); + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/parse_modified.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/parse_modified.js new file mode 100644 index 00000000..ab620dc5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,9 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions' , function (t) { + t.plan(1); + + var argv = parse([ '-b', '123' ], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: [123] }); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/proto.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/proto.js new file mode 100644 index 00000000..4ac62df2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/proto.js @@ -0,0 +1,60 @@ +var parse = require('../'); +var test = require('tape'); + +test('proto pollution', function (t) { + var argv = parse(['--__proto__.x','123']); + t.equal({}.x, undefined); + t.equal(argv.__proto__.x, undefined); + t.equal(argv.x, undefined); + t.end(); +}); + +test('proto pollution (array)', function (t) { + var argv = parse(['--x','4','--x','5','--x.__proto__.z','789']); + t.equal({}.z, undefined); + t.deepEqual(argv.x, [4,5]); + t.equal(argv.x.z, undefined); + t.equal(argv.x.__proto__.z, undefined); + t.end(); +}); + +test('proto pollution (number)', function (t) { + var argv = parse(['--x','5','--x.__proto__.z','100']); + t.equal({}.z, undefined); + t.equal((4).z, undefined); + t.equal(argv.x, 5); + t.equal(argv.x.z, undefined); + t.end(); +}); + +test('proto pollution (string)', function (t) { + var argv = parse(['--x','abc','--x.__proto__.z','def']); + t.equal({}.z, undefined); + t.equal('...'.z, undefined); + t.equal(argv.x, 'abc'); + t.equal(argv.x.z, undefined); + t.end(); +}); + +test('proto pollution (constructor)', function (t) { + var argv = parse(['--constructor.prototype.y','123']); + t.equal({}.y, undefined); + t.equal(argv.y, undefined); + t.end(); +}); + +test('proto pollution (constructor function)', function (t) { + var argv = parse(['--_.concat.constructor.prototype.y', '123']); + function fnToBeTested() {} + t.equal(fnToBeTested.y, undefined); + t.equal(argv.y, undefined); + t.end(); +}); + +// powered by snyk - https://github.com/backstage/backstage/issues/10343 +test('proto pollution (constructor function) snyk', function (t) { + var argv = parse('--_.constructor.constructor.prototype.foo bar'.split(' ')); + t.equal((function(){}).foo, undefined); + t.equal(argv.y, undefined); + t.end(); +}) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/short.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/short.js new file mode 100644 index 00000000..d513a1c2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/short.js @@ -0,0 +1,67 @@ +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); + t.deepEqual( + parse([ '-123', '456' ]), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse([ '-b' ]), + { b : true, _ : [] }, + 'short boolean' + ); + t.deepEqual( + parse([ 'foo', 'bar', 'baz' ]), + { _ : [ 'foo', 'bar', 'baz' ] }, + 'bare' + ); + t.deepEqual( + parse([ '-cats' ]), + { c : true, a : true, t : true, s : true, _ : [] }, + 'group' + ); + t.deepEqual( + parse([ '-cats', 'meow' ]), + { c : true, a : true, t : true, s : 'meow', _ : [] }, + 'short group next' + ); + t.deepEqual( + parse([ '-h', 'localhost' ]), + { h : 'localhost', _ : [] }, + 'short capture' + ); + t.deepEqual( + parse([ '-h', 'localhost', '-p', '555' ]), + { h : 'localhost', p : 555, _ : [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/stop_early.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/stop_early.js new file mode 100644 index 00000000..bdf9fbcb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/stop_early.js @@ -0,0 +1,15 @@ +var parse = require('../'); +var test = require('tape'); + +test('stops parsing on the first non-option when stopEarly is set', function (t) { + var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { + stopEarly: true + }); + + t.deepEqual(argv, { + aaa: 'bbb', + _: ['ccc', '--ddd'] + }); + + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/unknown.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/unknown.js new file mode 100644 index 00000000..462a36bd --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/unknown.js @@ -0,0 +1,102 @@ +var parse = require('../'); +var test = require('tape'); + +test('boolean and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'true', '--derp', 'true' ]; + var regular = [ '--herp', 'true', '-d', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('flag boolean true any double hyphen argument is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { + boolean: true, + unknown: unknownFn + }); + t.same(unknown, ['--tacos=good', 'cow', '-p']); + t.same(argv, { + honk: true, + _: [] + }); + t.end(); +}); + +test('string and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'hello', '--derp', 'goodbye' ]; + var regular = [ '--herp', 'hello', '-d', 'moon' ]; + var opts = { + alias: { h: 'herp' }, + string: 'h', + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('default and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'hello' ]; + var regular = [ '--herp', 'hello' ]; + var opts = { + default: { 'h': 'bar' }, + alias: { 'h': 'herp' }, + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, []); + t.end(); + unknownFn(); // exercise fn for 100% coverage +}); + +test('value following -- is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '--bad', '--', 'good', 'arg' ]; + var opts = { + '--': true, + unknown: unknownFn + }; + var argv = parse(aliased, opts); + + t.same(unknown, ['--bad']); + t.same(argv, { + '--': ['good', 'arg'], + '_': [] + }) + t.end(); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/whitespace.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/whitespace.js new file mode 100644 index 00000000..8a52a58c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/minimist/test/whitespace.js @@ -0,0 +1,8 @@ +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace' , function (t) { + t.plan(1); + var x = parse([ '-x', '\t' ]).x; + t.equal(x, '\t'); +}); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/HISTORY.md new file mode 100644 index 00000000..436db472 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/HISTORY.md @@ -0,0 +1,215 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/LICENSE new file mode 100644 index 00000000..3fefed9d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/LICENSE @@ -0,0 +1,23 @@ +(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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/README.md new file mode 100644 index 00000000..fc1c4b4a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/README.md @@ -0,0 +1,417 @@ +# 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/index.js new file mode 100644 index 00000000..b33c4f2f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/index.js @@ -0,0 +1,544 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.coveralls.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.coveralls.yml new file mode 100644 index 00000000..20a70685 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.coveralls.yml @@ -0,0 +1 @@ +repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.eslintrc b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.eslintrc new file mode 100644 index 00000000..8a37ae2c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.eslintrc @@ -0,0 +1,11 @@ +{ + "env": { + "browser": true, + "node": true + }, + "rules": { + "no-console": 0, + "no-empty": [1, { "allowEmptyCatch": true }] + }, + "extends": "eslint:recommended" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.npmignore b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.npmignore new file mode 100644 index 00000000..5f60eecc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.npmignore @@ -0,0 +1,9 @@ +support +test +examples +example +*.sock +dist +yarn.lock +coverage +bower.json diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.travis.yml b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.travis.yml new file mode 100644 index 00000000..6c6090c3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/.travis.yml @@ -0,0 +1,14 @@ + +language: node_js +node_js: + - "6" + - "5" + - "4" + +install: + - make node_modules + +script: + - make lint + - make test + - make coveralls diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/CHANGELOG.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/CHANGELOG.md new file mode 100644 index 00000000..eadaa189 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/CHANGELOG.md @@ -0,0 +1,362 @@ + +2.6.9 / 2017-09-22 +================== + + * remove ReDoS regexp in %o formatter (#504) + +2.6.8 / 2017-05-18 +================== + + * Fix: Check for undefined on browser globals (#462, @marbemac) + +2.6.7 / 2017-05-16 +================== + + * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom) + * Fix: Inline extend function in node implementation (#452, @dougwilson) + * Docs: Fix typo (#455, @msasad) + +2.6.5 / 2017-04-27 +================== + + * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek) + * Misc: clean up browser reference checks (#447, @thebigredgeek) + * Misc: add npm-debug.log to .gitignore (@thebigredgeek) + + +2.6.4 / 2017-04-20 +================== + + * Fix: bug that would occure if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo) + * Chore: ignore bower.json in npm installations. (#437, @joaovieira) + * Misc: update "ms" to v0.7.3 (@tootallnate) + +2.6.3 / 2017-03-13 +================== + + * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts) + * Docs: Changelog fix (@thebigredgeek) + +2.6.2 / 2017-03-10 +================== + + * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin) + * Docs: Add backers and sponsors from Open Collective (#422, @piamancini) + * Docs: Add Slackin invite badge (@tootallnate) + +2.6.1 / 2017-02-10 +================== + + * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error + * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0) + * Fix: IE8 "Expected identifier" error (#414, @vgoma) + * Fix: Namespaces would not disable once enabled (#409, @musikov) + +2.6.0 / 2016-12-28 +================== + + * Fix: added better null pointer checks for browser useColors (@thebigredgeek) + * Improvement: removed explicit `window.debug` export (#404, @tootallnate) + * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate) + +2.5.2 / 2016-12-25 +================== + + * Fix: reference error on window within webworkers (#393, @KlausTrainer) + * Docs: fixed README typo (#391, @lurch) + * Docs: added notice about v3 api discussion (@thebigredgeek) + +2.5.1 / 2016-12-20 +================== + + * Fix: babel-core compatibility + +2.5.0 / 2016-12-20 +================== + + * Fix: wrong reference in bower file (@thebigredgeek) + * Fix: webworker compatibility (@thebigredgeek) + * Fix: output formatting issue (#388, @kribblo) + * Fix: babel-loader compatibility (#383, @escwald) + * Misc: removed built asset from repo and publications (@thebigredgeek) + * Misc: moved source files to /src (#378, @yamikuronue) + * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue) + * Test: coveralls integration (#378, @yamikuronue) + * Docs: simplified language in the opening paragraph (#373, @yamikuronue) + +2.4.5 / 2016-12-17 +================== + + * Fix: `navigator` undefined in Rhino (#376, @jochenberger) + * Fix: custom log function (#379, @hsiliev) + * Improvement: bit of cleanup + linting fixes (@thebigredgeek) + * Improvement: rm non-maintainted `dist/` dir (#375, @freewil) + * Docs: simplified language in the opening paragraph. (#373, @yamikuronue) + +2.4.4 / 2016-12-14 +================== + + * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts) + +2.4.3 / 2016-12-14 +================== + + * Fix: navigation.userAgent error for react native (#364, @escwald) + +2.4.2 / 2016-12-14 +================== + + * Fix: browser colors (#367, @tootallnate) + * Misc: travis ci integration (@thebigredgeek) + * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek) + +2.4.1 / 2016-12-13 +================== + + * Fix: typo that broke the package (#356) + +2.4.0 / 2016-12-13 +================== + + * Fix: bower.json references unbuilt src entry point (#342, @justmatt) + * Fix: revert "handle regex special characters" (@tootallnate) + * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate) + * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate) + * Improvement: allow colors in workers (#335, @botverse) + * Improvement: use same color for same namespace. (#338, @lchenay) + +2.3.3 / 2016-11-09 +================== + + * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne) + * Fix: Returning `localStorage` saved values (#331, Levi Thomason) + * Improvement: Don't create an empty object when no `process` (Nathan Rajlich) + +2.3.2 / 2016-11-09 +================== + + * Fix: be super-safe in index.js as well (@TooTallNate) + * Fix: should check whether process exists (Tom Newby) + +2.3.1 / 2016-11-09 +================== + + * Fix: Added electron compatibility (#324, @paulcbetts) + * Improvement: Added performance optimizations (@tootallnate) + * Readme: Corrected PowerShell environment variable example (#252, @gimre) + * Misc: Removed yarn lock file from source control (#321, @fengmk2) + +2.3.0 / 2016-11-07 +================== + + * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic) + * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos) + * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15) + * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran) + * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom) + * Package: Update "ms" to 0.7.2 (#315, @DevSide) + * Package: removed superfluous version property from bower.json (#207 @kkirsche) + * Readme: fix USE_COLORS to DEBUG_COLORS + * Readme: Doc fixes for format string sugar (#269, @mlucool) + * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0) + * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable) + * Readme: better docs for browser support (#224, @matthewmueller) + * Tooling: Added yarn integration for development (#317, @thebigredgeek) + * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek) + * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman) + * Misc: Updated contributors (@thebigredgeek) + +2.2.0 / 2015-05-09 +================== + + * package: update "ms" to v0.7.1 (#202, @dougwilson) + * README: add logging to file example (#193, @DanielOchoa) + * README: fixed a typo (#191, @amir-s) + * browser: expose `storage` (#190, @stephenmathieson) + * Makefile: add a `distclean` target (#189, @stephenmathieson) + +2.1.3 / 2015-03-13 +================== + + * Updated stdout/stderr example (#186) + * Updated example/stdout.js to match debug current behaviour + * Renamed example/stderr.js to stdout.js + * Update Readme.md (#184) + * replace high intensity foreground color for bold (#182, #183) + +2.1.2 / 2015-03-01 +================== + + * dist: recompile + * update "ms" to v0.7.0 + * package: update "browserify" to v9.0.3 + * component: fix "ms.js" repo location + * changed bower package name + * updated documentation about using debug in a browser + * fix: security error on safari (#167, #168, @yields) + +2.1.1 / 2014-12-29 +================== + + * browser: use `typeof` to check for `console` existence + * browser: check for `console.log` truthiness (fix IE 8/9) + * browser: add support for Chrome apps + * Readme: added Windows usage remarks + * Add `bower.json` to properly support bower install + +2.1.0 / 2014-10-15 +================== + + * node: implement `DEBUG_FD` env variable support + * package: update "browserify" to v6.1.0 + * package: add "license" field to package.json (#135, @panuhorsmalahti) + +2.0.0 / 2014-09-01 +================== + + * package: update "browserify" to v5.11.0 + * node: use stderr rather than stdout for logging (#29, @stephenmathieson) + +1.0.4 / 2014-07-15 +================== + + * dist: recompile + * example: remove `console.info()` log usage + * example: add "Content-Type" UTF-8 header to browser example + * browser: place %c marker after the space character + * browser: reset the "content" color via `color: inherit` + * browser: add colors support for Firefox >= v31 + * debug: prefer an instance `log()` function over the global one (#119) + * Readme: update documentation about styled console logs for FF v31 (#116, @wryk) + +1.0.3 / 2014-07-09 +================== + + * Add support for multiple wildcards in namespaces (#122, @seegno) + * browser: fix lint + +1.0.2 / 2014-06-10 +================== + + * browser: update color palette (#113, @gscottolson) + * common: make console logging function configurable (#108, @timoxley) + * node: fix %o colors on old node <= 0.8.x + * Makefile: find node path using shell/which (#109, @timoxley) + +1.0.1 / 2014-06-06 +================== + + * browser: use `removeItem()` to clear localStorage + * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) + * package: add "contributors" section + * node: fix comment typo + * README: list authors + +1.0.0 / 2014-06-04 +================== + + * make ms diff be global, not be scope + * debug: ignore empty strings in enable() + * node: make DEBUG_COLORS able to disable coloring + * *: export the `colors` array + * npmignore: don't publish the `dist` dir + * Makefile: refactor to use browserify + * package: add "browserify" as a dev dependency + * Readme: add Web Inspector Colors section + * node: reset terminal color for the debug content + * node: map "%o" to `util.inspect()` + * browser: map "%j" to `JSON.stringify()` + * debug: add custom "formatters" + * debug: use "ms" module for humanizing the diff + * Readme: add "bash" syntax highlighting + * browser: add Firebug color support + * browser: add colors for WebKit browsers + * node: apply log to `console` + * rewrite: abstract common logic for Node & browsers + * add .jshintrc file + +0.8.1 / 2014-04-14 +================== + + * package: re-add the "component" section + +0.8.0 / 2014-03-30 +================== + + * add `enable()` method for nodejs. Closes #27 + * change from stderr to stdout + * remove unnecessary index.js file + +0.7.4 / 2013-11-13 +================== + + * remove "browserify" key from package.json (fixes something in browserify) + +0.7.3 / 2013-10-30 +================== + + * fix: catch localStorage security error when cookies are blocked (Chrome) + * add debug(err) support. Closes #46 + * add .browser prop to package.json. Closes #42 + +0.7.2 / 2013-02-06 +================== + + * fix package.json + * fix: Mobile Safari (private mode) is broken with debug + * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript + +0.7.1 / 2013-02-05 +================== + + * add repository URL to package.json + * add DEBUG_COLORED to force colored output + * add browserify support + * fix component. Closes #24 + +0.7.0 / 2012-05-04 +================== + + * Added .component to package.json + * Added debug.component.js build + +0.6.0 / 2012-03-16 +================== + + * Added support for "-" prefix in DEBUG [Vinay Pulim] + * Added `.enabled` flag to the node version [TooTallNate] + +0.5.0 / 2012-02-02 +================== + + * Added: humanize diffs. Closes #8 + * Added `debug.disable()` to the CS variant + * Removed padding. Closes #10 + * Fixed: persist client-side variant again. Closes #9 + +0.4.0 / 2012-02-01 +================== + + * Added browser variant support for older browsers [TooTallNate] + * Added `debug.enable('project:*')` to browser variant [TooTallNate] + * Added padding to diff (moved it to the right) + +0.3.0 / 2012-01-26 +================== + + * Added millisecond diff when isatty, otherwise UTC string + +0.2.0 / 2012-01-22 +================== + + * Added wildcard support + +0.1.0 / 2011-12-02 +================== + + * Added: remove colors unless stderr isatty [TooTallNate] + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/LICENSE new file mode 100644 index 00000000..658c933d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/LICENSE @@ -0,0 +1,19 @@ +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/Makefile b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/Makefile new file mode 100644 index 00000000..584da8bf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/Makefile @@ -0,0 +1,50 @@ +# get Makefile directory name: http://stackoverflow.com/a/5982798/376773 +THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd) + +# BIN directory +BIN := $(THIS_DIR)/node_modules/.bin + +# Path +PATH := node_modules/.bin:$(PATH) +SHELL := /bin/bash + +# applications +NODE ?= $(shell which node) +YARN ?= $(shell which yarn) +PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm)) +BROWSERIFY ?= $(NODE) $(BIN)/browserify + +.FORCE: + +install: node_modules + +node_modules: package.json + @NODE_ENV= $(PKG) install + @touch node_modules + +lint: .FORCE + eslint browser.js debug.js index.js node.js + +test-node: .FORCE + istanbul cover node_modules/mocha/bin/_mocha -- test/**.js + +test-browser: .FORCE + mkdir -p dist + + @$(BROWSERIFY) \ + --standalone debug \ + . > dist/debug.js + + karma start --single-run + rimraf dist + +test: .FORCE + concurrently \ + "make test-node" \ + "make test-browser" + +coveralls: + cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js + +.PHONY: all install clean distclean diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/README.md new file mode 100644 index 00000000..f67be6b3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/README.md @@ -0,0 +1,312 @@ +# debug +[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) + + + +A tiny node.js debugging utility modelled after node core's debugging technique. + +**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)** + +## Installation + +```bash +$ npm install debug +``` + +## Usage + +`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. + +Example _app.js_: + +```js +var debug = require('debug')('http') + , http = require('http') + , name = 'My App'; + +// fake app + +debug('booting %s', name); + +http.createServer(function(req, res){ + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, function(){ + debug('listening'); +}); + +// fake worker of some kind + +require('./worker'); +``` + +Example _worker.js_: + +```js +var debug = require('debug')('worker'); + +setInterval(function(){ + debug('doing some work'); +}, 1000); +``` + + The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples: + + ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png) + + ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png) + +#### Windows note + + On Windows the environment variable is set using the `set` command. + + ```cmd + set DEBUG=*,-not_this + ``` + + Note that PowerShell uses different syntax to set environment variables. + + ```cmd + $env:DEBUG = "*,-not_this" + ``` + +Then, run the program to be debugged as usual. + +## Millisecond diff + + When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. + + ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) + + When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below: + + ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) + +## Conventions + + If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". + +## Wildcards + + The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. + + You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:". + +## Environment Variables + + When running through Node.js, you can set a few environment variables that will + change the behavior of the debug logging: + +| Name | Purpose | +|-----------|-------------------------------------------------| +| `DEBUG` | Enables/disables specific debugging namespaces. | +| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | +| `DEBUG_DEPTH` | Object inspection depth. | +| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | + + + __Note:__ The environment variables beginning with `DEBUG_` end up being + converted into an Options object that gets used with `%o`/`%O` formatters. + See the Node.js documentation for + [`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) + for the complete list. + +## Formatters + + + Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. Below are the officially supported formatters: + +| Formatter | Representation | +|-----------|----------------| +| `%O` | Pretty-print an Object on multiple lines. | +| `%o` | Pretty-print an Object all on a single line. | +| `%s` | String. | +| `%d` | Number (both integer and float). | +| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | +| `%%` | Single percent sign ('%'). This does not consume an argument. | + +### Custom formatters + + You can add custom formatters by extending the `debug.formatters` object. For example, if you wanted to add support for rendering a Buffer as hex with `%h`, you could do something like: + +```js +const createDebug = require('debug') +createDebug.formatters.h = (v) => { + return v.toString('hex') +} + +// …elsewhere +const debug = createDebug('foo') +debug('this is hex: %h', new Buffer('hello world')) +// foo this is hex: 68656c6c6f20776f726c6421 +0ms +``` + +## Browser support + You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), + or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), + if you don't want to build it yourself. + + Debug's enable state is currently persisted by `localStorage`. + Consider the situation shown below where you have `worker:a` and `worker:b`, + and wish to debug both. You can enable this using `localStorage.debug`: + +```js +localStorage.debug = 'worker:*' +``` + +And then refresh the page. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + b('doing some work'); +}, 1200); +``` + +#### Web Inspector Colors + + Colors are also enabled on "Web Inspectors" that understand the `%c` formatting + option. These are WebKit web inspectors, Firefox ([since version + 31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) + and the Firebug plugin for Firefox (any version). + + Colored output looks something like: + + ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png) + + +## Output streams + + By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: + +Example _stdout.js_: + +```js +var debug = require('debug'); +var error = debug('app:error'); + +// by default stderr is used +error('goes to stderr!'); + +var log = debug('app:log'); +// set this namespace to log via console.log +log.log = console.log.bind(console); // don't forget to bind to console! +log('goes to stdout'); +error('still goes to stderr!'); + +// set all output to go via console.info +// overrides all per-namespace log settings +debug.log = console.info.bind(console); +error('now goes to stdout via console.info'); +log('still goes to stdout, but via console.info now'); +``` + + +## Authors + + - TJ Holowaychuk + - Nathan Rajlich + - Andrew Rhyne + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## License + +(The MIT License) + +Copyright (c) 2014-2016 TJ Holowaychuk <tj@vision-media.ca> + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/component.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/component.json new file mode 100644 index 00000000..9de26410 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/component.json @@ -0,0 +1,19 @@ +{ + "name": "debug", + "repo": "visionmedia/debug", + "description": "small debugging utility", + "version": "2.6.9", + "keywords": [ + "debug", + "log", + "debugger" + ], + "main": "src/browser.js", + "scripts": [ + "src/browser.js", + "src/debug.js" + ], + "dependencies": { + "rauchg/ms.js": "0.7.1" + } +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/karma.conf.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/karma.conf.js new file mode 100644 index 00000000..103a82d1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/karma.conf.js @@ -0,0 +1,70 @@ +// Karma configuration +// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC) + +module.exports = function(config) { + config.set({ + + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', + + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['mocha', 'chai', 'sinon'], + + + // list of files / patterns to load in the browser + files: [ + 'dist/debug.js', + 'test/*spec.js' + ], + + + // list of files to exclude + exclude: [ + 'src/node.js' + ], + + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + }, + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress'], + + + // web server port + port: 9876, + + + // enable / disable colors in the output (reporters and logs) + colors: true, + + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['PhantomJS'], + + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: false, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity + }) +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/node.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/node.js new file mode 100644 index 00000000..7fc36fe6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/node.js @@ -0,0 +1 @@ +module.exports = require('./src/node'); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/package.json new file mode 100644 index 00000000..1f7ac1ec --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/package.json @@ -0,0 +1,91 @@ +{ + "_args": [ + [ + "debug@2.6.9", + "/tmp/repository/main" + ] + ], + "_from": "debug@2.6.9", + "_id": "debug@2.6.9", + "_inBundle": false, + "_integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "_location": "/morgan/debug", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "debug@2.6.9", + "name": "debug", + "escapedName": "debug", + "rawSpec": "2.6.9", + "saveSpec": null, + "fetchSpec": "2.6.9" + }, + "_requiredBy": [ + "/morgan" + ], + "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "_spec": "2.6.9", + "_where": "/tmp/repository/main", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "browser": "./src/browser.js", + "bugs": { + "url": "https://github.com/visionmedia/debug/issues" + }, + "component": { + "scripts": { + "debug/index.js": "browser.js", + "debug/debug.js": "debug.js" + } + }, + "contributors": [ + { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io" + }, + { + "name": "Andrew Rhyne", + "email": "rhyneandrew@gmail.com" + } + ], + "dependencies": { + "ms": "2.0.0" + }, + "description": "small debugging utility", + "devDependencies": { + "browserify": "9.0.3", + "chai": "^3.5.0", + "concurrently": "^3.1.0", + "coveralls": "^2.11.15", + "eslint": "^3.12.1", + "istanbul": "^0.4.5", + "karma": "^1.3.0", + "karma-chai": "^0.1.0", + "karma-mocha": "^1.3.0", + "karma-phantomjs-launcher": "^1.0.2", + "karma-sinon": "^1.0.5", + "mocha": "^3.2.0", + "mocha-lcov-reporter": "^1.2.0", + "rimraf": "^2.5.4", + "sinon": "^1.17.6", + "sinon-chai": "^2.8.0" + }, + "homepage": "https://github.com/visionmedia/debug#readme", + "keywords": [ + "debug", + "log", + "debugger" + ], + "license": "MIT", + "main": "./src/index.js", + "name": "debug", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/debug.git" + }, + "version": "2.6.9" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/browser.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/browser.js new file mode 100644 index 00000000..71069249 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/browser.js @@ -0,0 +1,185 @@ +/** + * This is the web browser implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = 'undefined' != typeof chrome + && 'undefined' != typeof chrome.storage + ? chrome.storage.local + : localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + 'lightseagreen', + 'forestgreen', + 'goldenrod', + 'dodgerblue', + 'darkorchid', + 'crimson' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { + return true; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + return window.localStorage; + } catch (e) {} +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/debug.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/debug.js new file mode 100644 index 00000000..6a5e3fc9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/debug.js @@ -0,0 +1,202 @@ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = require('ms'); + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + +exports.formatters = {}; + +/** + * Previous log timestamp. + */ + +var prevTime; + +/** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + +function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return exports.colors[Math.abs(hash) % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function createDebug(namespace) { + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + exports.formatArgs.call(self, args); + + var logFn = debug.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = exports.enabled(namespace); + debug.useColors = exports.useColors(); + debug.color = selectColor(namespace); + + // env-specific initialization logic for debug instances + if ('function' === typeof exports.init) { + exports.init(debug); + } + + return debug; +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + exports.names = []; + exports.skips = []; + + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/index.js new file mode 100644 index 00000000..e12cf4d5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/index.js @@ -0,0 +1,10 @@ +/** + * Detect Electron renderer process, which is node, but we should + * treat as a browser. + */ + +if (typeof process !== 'undefined' && process.type === 'renderer') { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/inspector-log.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/inspector-log.js new file mode 100644 index 00000000..60ea6c04 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/inspector-log.js @@ -0,0 +1,15 @@ +module.exports = inspectorLog; + +// black hole +const nullStream = new (require('stream').Writable)(); +nullStream._write = () => {}; + +/** + * Outputs a `console.log()` to the Node.js Inspector console *only*. + */ +function inspectorLog() { + const stdout = console._stdout; + console._stdout = nullStream; + console.log.apply(console, arguments); + console._stdout = stdout; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/node.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/node.js new file mode 100644 index 00000000..b15109c9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/debug/src/node.js @@ -0,0 +1,248 @@ +/** + * Module dependencies. + */ + +var tty = require('tty'); +var util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(function (key) { + return /^debug_/i.test(key); +}).reduce(function (obj, key) { + // camel-case + var prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() }); + + // coerce string value into JS value + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) val = false; + else if (val === 'null') val = null; + else val = Number(val); + + obj[prop] = val; + return obj; +}, {}); + +/** + * The file descriptor to write the `debug()` calls to. + * Set the `DEBUG_FD` env variable to override with another value. i.e.: + * + * $ DEBUG_FD=3 node script.js 3>debug.log + */ + +var fd = parseInt(process.env.DEBUG_FD, 10) || 2; + +if (1 !== fd && 2 !== fd) { + util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')() +} + +var stream = 1 === fd ? process.stdout : + 2 === fd ? process.stderr : + createWritableStdioStream(fd); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts + ? Boolean(exports.inspectOpts.colors) + : tty.isatty(fd); +} + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +exports.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n').map(function(str) { + return str.trim() + }).join(' '); +}; + +/** + * Map %o to `util.inspect()`, allowing multiple lines if needed. + */ + +exports.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + var name = this.namespace; + var useColors = this.useColors; + + if (useColors) { + var c = this.color; + var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m'; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); + } else { + args[0] = new Date().toUTCString() + + ' ' + name + ' ' + args[0]; + } +} + +/** + * Invokes `util.format()` with the specified arguments and writes to `stream`. + */ + +function log() { + return stream.write(util.format.apply(util, arguments) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + if (null == namespaces) { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Copied from `node/src/node.js`. + * + * XXX: It's lame that node doesn't expose this API out-of-the-box. It also + * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. + */ + +function createWritableStdioStream (fd) { + var stream; + var tty_wrap = process.binding('tty_wrap'); + + // Note stream._type is used for test-module-load-list.js + + switch (tty_wrap.guessHandleType(fd)) { + case 'TTY': + stream = new tty.WriteStream(fd); + stream._type = 'tty'; + + // Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + case 'FILE': + var fs = require('fs'); + stream = new fs.SyncWriteStream(fd, { autoClose: false }); + stream._type = 'fs'; + break; + + case 'PIPE': + case 'TCP': + var net = require('net'); + stream = new net.Socket({ + fd: fd, + readable: false, + writable: true + }); + + // FIXME Should probably have an option in net.Socket to create a + // stream from an existing fd which is writable only. But for now + // we'll just add this hack and set the `readable` member to false. + // Test: ./node test/fixtures/echo.js < /etc/passwd + stream.readable = false; + stream.read = null; + stream._type = 'pipe'; + + // FIXME Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + default: + // Probably an error on in uv_guess_handle() + throw new Error('Implement me. Unknown stream file type!'); + } + + // For supporting legacy API we put the FD here. + stream.fd = fd; + + stream._isStdio = true; + + return stream; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init (debug) { + debug.inspectOpts = {}; + + var keys = Object.keys(exports.inspectOpts); + for (var i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +/** + * Enable namespaces listed in `process.env.DEBUG` initially. + */ + +exports.enable(load()); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/History.md new file mode 100644 index 00000000..cd9ebaaa --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/History.md @@ -0,0 +1,103 @@ +2.0.0 / 2018-10-26 +================== + + * Drop support for Node.js 0.6 + * Replace internal `eval` usage with `Function` constructor + * Use instance methods on `process` to check for listeners + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/LICENSE new file mode 100644 index 00000000..248de7af --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014-2018 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/Readme.md new file mode 100644 index 00000000..043d1ca2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/Readme.md @@ -0,0 +1,280 @@ +# 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) + +[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/nodejs-depd/master?label=windows +[appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd +[coveralls-image]: https://badgen.net/coveralls/c/github/dougwilson/nodejs-depd/master +[coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master +[node-image]: https://badgen.net/npm/node/depd +[node-url]: https://nodejs.org/en/download/ +[npm-downloads-image]: https://badgen.net/npm/dm/depd +[npm-url]: https://npmjs.org/package/depd +[npm-version-image]: https://badgen.net/npm/v/depd +[travis-image]: https://badgen.net/travis/dougwilson/nodejs-depd/master?label=linux +[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/index.js new file mode 100644 index 00000000..1bf2fcfd --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/index.js @@ -0,0 +1,538 @@ +/*! + * depd + * Copyright(c) 2014-2018 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +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 ' + stack[i].toString() + } + + 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 event 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 eehaslisteners (emitter, type) { + var count = typeof emitter.listenerCount !== 'function' + ? emitter.listeners(type).length + : emitter.listenerCount(type) + + return count > 0 +} + +/** + * Determine if namespace is ignored. + */ + +function isignored (namespace) { + 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) { + 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 = eehaslisteners(process, 'deprecation') + + // 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 ' + stack[i].toString() + } + + 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 ' + stack[i].toString() + '\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 stack = getStack() + var site = callSiteLocation(stack[1]) + + site.name = fn.name + + // eslint-disable-next-line no-new-func + var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site', + '"use strict"\n' + + 'return function (' + args + ') {' + + 'log.call(deprecate, message, site)\n' + + 'return fn.apply(this, arguments)\n' + + '}')(fn, log, this, message, site) + + 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/lib/browser/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/lib/browser/index.js new file mode 100644 index 00000000..6be45cc2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/lib/browser/index.js @@ -0,0 +1,77 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/package.json new file mode 100644 index 00000000..2658bb41 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/depd/package.json @@ -0,0 +1,83 @@ +{ + "_args": [ + [ + "depd@2.0.0", + "/tmp/repository/main" + ] + ], + "_from": "depd@2.0.0", + "_id": "depd@2.0.0", + "_inBundle": false, + "_integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "_location": "/morgan/depd", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "depd@2.0.0", + "name": "depd", + "escapedName": "depd", + "rawSpec": "2.0.0", + "saveSpec": null, + "fetchSpec": "2.0.0" + }, + "_requiredBy": [ + "/morgan" + ], + "_resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "_spec": "2.0.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "browser": "lib/browser/index.js", + "bugs": { + "url": "https://github.com/dougwilson/nodejs-depd/issues" + }, + "description": "Deprecate all the things", + "devDependencies": { + "beautify-benchmark": "0.2.4", + "benchmark": "2.1.4", + "eslint": "5.7.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.14.0", + "eslint-plugin-markdown": "1.0.0-beta.7", + "eslint-plugin-node": "7.0.1", + "eslint-plugin-promise": "4.0.1", + "eslint-plugin-standard": "4.0.0", + "istanbul": "0.4.5", + "mocha": "5.2.0", + "safe-buffer": "5.1.2", + "uid-safe": "2.1.5" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "lib/", + "History.md", + "LICENSE", + "index.js", + "Readme.md" + ], + "homepage": "https://github.com/dougwilson/nodejs-depd#readme", + "keywords": [ + "deprecate", + "deprecated" + ], + "license": "MIT", + "name": "depd", + "repository": { + "type": "git", + "url": "git+https://github.com/dougwilson/nodejs-depd.git" + }, + "scripts": { + "bench": "node benchmark/index.js", + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --bail test/", + "test-ci": "istanbul cover --print=none node_modules/mocha/bin/_mocha -- --reporter spec test/ && istanbul report lcovonly text-summary", + "test-cov": "istanbul cover --print=none node_modules/mocha/bin/_mocha -- --reporter dot test/ && istanbul report lcov text-summary" + }, + "version": "2.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/index.js new file mode 100644 index 00000000..6a522b16 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/index.js @@ -0,0 +1,152 @@ +/** + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/license.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/license.md new file mode 100644 index 00000000..69b61253 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/license.md @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/package.json new file mode 100644 index 00000000..c22073e9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/package.json @@ -0,0 +1,72 @@ +{ + "_args": [ + [ + "ms@2.0.0", + "/tmp/repository/main" + ] + ], + "_from": "ms@2.0.0", + "_id": "ms@2.0.0", + "_inBundle": false, + "_integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "_location": "/morgan/ms", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "ms@2.0.0", + "name": "ms", + "escapedName": "ms", + "rawSpec": "2.0.0", + "saveSpec": null, + "fetchSpec": "2.0.0" + }, + "_requiredBy": [ + "/morgan/debug" + ], + "_resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "_spec": "2.0.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/zeit/ms/issues" + }, + "description": "Tiny milisecond conversion utility", + "devDependencies": { + "eslint": "3.19.0", + "expect.js": "0.3.1", + "husky": "0.13.3", + "lint-staged": "3.4.1", + "mocha": "3.4.1" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "node": true, + "es6": true + } + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/zeit/ms#readme", + "license": "MIT", + "lint-staged": { + "*.js": [ + "npm run lint", + "prettier --single-quote --write", + "git add" + ] + }, + "main": "./index", + "name": "ms", + "repository": { + "type": "git", + "url": "git+https://github.com/zeit/ms.git" + }, + "scripts": { + "lint": "eslint lib/* bin/*", + "precommit": "lint-staged", + "test": "mocha tests.js" + }, + "version": "2.0.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/readme.md new file mode 100644 index 00000000..84a9974c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/node_modules/ms/readme.md @@ -0,0 +1,51 @@ +# 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/package.json new file mode 100644 index 00000000..96fab4a0 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/morgan/package.json @@ -0,0 +1,94 @@ +{ + "_args": [ + [ + "morgan@1.10.0", + "/tmp/repository/main" + ] + ], + "_from": "morgan@1.10.0", + "_id": "morgan@1.10.0", + "_inBundle": false, + "_integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "_location": "/morgan", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "morgan@1.10.0", + "name": "morgan", + "escapedName": "morgan", + "rawSpec": "1.10.0", + "saveSpec": null, + "fetchSpec": "1.10.0" + }, + "_requiredBy": [ + "/koa-morgan" + ], + "_resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "_spec": "1.10.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/expressjs/morgan/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "description": "HTTP request logger middleware for node.js", + "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" + }, + "engines": { + "node": ">= 0.8.0" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "README.md", + "index.js" + ], + "homepage": "https://github.com/expressjs/morgan#readme", + "keywords": [ + "express", + "http", + "logger", + "middleware" + ], + "license": "MIT", + "name": "morgan", + "repository": { + "type": "git", + "url": "git+https://github.com/expressjs/morgan.git" + }, + "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" + }, + "version": "1.10.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/index.js new file mode 100644 index 00000000..c4498bcc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/index.js @@ -0,0 +1,162 @@ +/** + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/license.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/license.md new file mode 100644 index 00000000..69b61253 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/license.md @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/package.json new file mode 100644 index 00000000..3faeb86c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/package.json @@ -0,0 +1,73 @@ +{ + "_args": [ + [ + "ms@2.1.2", + "/tmp/repository/main" + ] + ], + "_from": "ms@2.1.2", + "_id": "ms@2.1.2", + "_inBundle": false, + "_integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "_location": "/ms", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "ms@2.1.2", + "name": "ms", + "escapedName": "ms", + "rawSpec": "2.1.2", + "saveSpec": null, + "fetchSpec": "2.1.2" + }, + "_requiredBy": [ + "/debug", + "/koa-static/debug" + ], + "_resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "_spec": "2.1.2", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/zeit/ms/issues" + }, + "description": "Tiny millisecond conversion utility", + "devDependencies": { + "eslint": "4.12.1", + "expect.js": "0.3.1", + "husky": "0.14.3", + "lint-staged": "5.0.0", + "mocha": "4.0.1" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "node": true, + "es6": true + } + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/zeit/ms#readme", + "license": "MIT", + "lint-staged": { + "*.js": [ + "npm run lint", + "prettier --single-quote --write", + "git add" + ] + }, + "main": "./index", + "name": "ms", + "repository": { + "type": "git", + "url": "git+https://github.com/zeit/ms.git" + }, + "scripts": { + "lint": "eslint lib/* bin/*", + "precommit": "lint-staged", + "test": "mocha tests.js" + }, + "version": "2.1.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/readme.md new file mode 100644 index 00000000..9a1996b1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/ms/readme.md @@ -0,0 +1,60 @@ +# ms + +[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) +[![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/zeit) + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/HISTORY.md new file mode 100644 index 00000000..6d06c76a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/HISTORY.md @@ -0,0 +1,103 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/LICENSE new file mode 100644 index 00000000..ea6b9e2e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/LICENSE @@ -0,0 +1,24 @@ +(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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/README.md new file mode 100644 index 00000000..04a67ff7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/README.md @@ -0,0 +1,203 @@ +# negotiator + +[![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] + +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/ +[travis-image]: https://img.shields.io/travis/jshttp/negotiator/master.svg +[travis-url]: https://travis-ci.org/jshttp/negotiator +[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 diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/index.js new file mode 100644 index 00000000..8d4f6a22 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/index.js @@ -0,0 +1,124 @@ +/*! + * negotiator + * Copyright(c) 2012 Federico Romero + * Copyright(c) 2012-2014 Isaac Z. Schlueter + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +/** + * Cached loaded submodules. + * @private + */ + +var modules = Object.create(null); + +/** + * 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) { + var preferredCharsets = loadModule('charset').preferredCharsets; + 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) { + var preferredEncodings = loadModule('encoding').preferredEncodings; + 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) { + var preferredLanguages = loadModule('language').preferredLanguages; + 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) { + var preferredMediaTypes = loadModule('mediaType').preferredMediaTypes; + 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; + +/** + * Load the given module. + * @private + */ + +function loadModule(moduleName) { + var module = modules[moduleName]; + + if (module !== undefined) { + return module; + } + + // This uses a switch for static require analysis + switch (moduleName) { + case 'charset': + module = require('./lib/charset'); + break; + case 'encoding': + module = require('./lib/encoding'); + break; + case 'language': + module = require('./lib/language'); + break; + case 'mediaType': + module = require('./lib/mediaType'); + break; + default: + throw new Error('Cannot find module \'' + moduleName + '\''); + } + + // Store to prevent invoking require() + modules[moduleName] = module; + + return module; +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/charset.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/charset.js new file mode 100644 index 00000000..cdd01480 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/charset.js @@ -0,0 +1,169 @@ +/** + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/encoding.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/encoding.js new file mode 100644 index 00000000..8432cd77 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/encoding.js @@ -0,0 +1,184 @@ +/** + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/language.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/language.js new file mode 100644 index 00000000..62f737f0 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/language.js @@ -0,0 +1,179 @@ +/** + * 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], + suffix = match[2], + 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/mediaType.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/mediaType.js new file mode 100644 index 00000000..67309dd7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/lib/mediaType.js @@ -0,0 +1,294 @@ +/** + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/package.json new file mode 100644 index 00000000..35f1bef2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/negotiator/package.json @@ -0,0 +1,87 @@ +{ + "_args": [ + [ + "negotiator@0.6.2", + "/tmp/repository/main" + ] + ], + "_from": "negotiator@0.6.2", + "_id": "negotiator@0.6.2", + "_inBundle": false, + "_integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "_location": "/negotiator", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "negotiator@0.6.2", + "name": "negotiator", + "escapedName": "negotiator", + "rawSpec": "0.6.2", + "saveSpec": null, + "fetchSpec": "0.6.2" + }, + "_requiredBy": [ + "/accepts" + ], + "_resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "_spec": "0.6.2", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/jshttp/negotiator/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Federico Romero", + "email": "federico.romero@outboxlabs.com" + }, + { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + } + ], + "description": "HTTP content negotiation", + "devDependencies": { + "eslint": "5.16.0", + "eslint-plugin-markdown": "1.0.0", + "mocha": "6.1.4", + "nyc": "14.0.0" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "lib/", + "HISTORY.md", + "LICENSE", + "index.js", + "README.md" + ], + "homepage": "https://github.com/jshttp/negotiator#readme", + "keywords": [ + "http", + "content negotiation", + "accept", + "accept-language", + "accept-encoding", + "accept-charset" + ], + "license": "MIT", + "name": "negotiator", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/negotiator.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "test-travis": "nyc --reporter=text npm test" + }, + "version": "0.6.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/index.js new file mode 100644 index 00000000..0930cf88 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/index.js @@ -0,0 +1,90 @@ +/* +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/license @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/package.json new file mode 100644 index 00000000..93889426 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/package.json @@ -0,0 +1,77 @@ +{ + "_args": [ + [ + "object-assign@4.1.1", + "/tmp/repository/main" + ] + ], + "_from": "object-assign@4.1.1", + "_id": "object-assign@4.1.1", + "_inBundle": false, + "_integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "_location": "/object-assign", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "object-assign@4.1.1", + "name": "object-assign", + "escapedName": "object-assign", + "rawSpec": "4.1.1", + "saveSpec": null, + "fetchSpec": "4.1.1" + }, + "_requiredBy": [ + "/get-stream" + ], + "_resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "_spec": "4.1.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/object-assign/issues" + }, + "description": "ES2015 `Object.assign()` ponyfill", + "devDependencies": { + "ava": "^0.16.0", + "lodash": "^4.16.4", + "matcha": "^0.7.0", + "xo": "^0.16.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/object-assign#readme", + "keywords": [ + "object", + "assign", + "extend", + "properties", + "es2015", + "ecmascript", + "harmony", + "ponyfill", + "prollyfill", + "polyfill", + "shim", + "browser" + ], + "license": "MIT", + "name": "object-assign", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/object-assign.git" + }, + "scripts": { + "bench": "matcha bench.js", + "test": "xo && ava" + }, + "version": "4.1.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/readme.md new file mode 100644 index 00000000..1be09d35 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/object-assign/readme.md @@ -0,0 +1,61 @@ +# 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/HISTORY.md new file mode 100644 index 00000000..98ff0e99 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/HISTORY.md @@ -0,0 +1,88 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/LICENSE new file mode 100644 index 00000000..5931fd23 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/LICENSE @@ -0,0 +1,23 @@ +(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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/README.md new file mode 100644 index 00000000..a0e11574 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/README.md @@ -0,0 +1,154 @@ +# 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/index.js new file mode 100644 index 00000000..9abd98f9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/index.js @@ -0,0 +1,196 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/package.json new file mode 100644 index 00000000..9435a440 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-finished/package.json @@ -0,0 +1,74 @@ +{ + "_args": [ + [ + "on-finished@2.3.0", + "/tmp/repository/main" + ] + ], + "_from": "on-finished@2.3.0", + "_id": "on-finished@2.3.0", + "_inBundle": false, + "_integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "_location": "/on-finished", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "on-finished@2.3.0", + "name": "on-finished", + "escapedName": "on-finished", + "rawSpec": "2.3.0", + "saveSpec": null, + "fetchSpec": "2.3.0" + }, + "_requiredBy": [ + "/koa", + "/morgan" + ], + "_resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "_spec": "2.3.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/jshttp/on-finished/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "dependencies": { + "ee-first": "1.1.1" + }, + "description": "Execute a callback when a request closes, finishes, or errors", + "devDependencies": { + "istanbul": "0.3.9", + "mocha": "2.2.5" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "homepage": "https://github.com/jshttp/on-finished#readme", + "license": "MIT", + "name": "on-finished", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/on-finished.git" + }, + "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/" + }, + "version": "2.3.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/HISTORY.md new file mode 100644 index 00000000..090598d8 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/HISTORY.md @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/LICENSE new file mode 100644 index 00000000..b7dce6cf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/LICENSE @@ -0,0 +1,22 @@ +(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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/README.md new file mode 100644 index 00000000..ae842824 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/README.md @@ -0,0 +1,81 @@ +# 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/index.js new file mode 100644 index 00000000..7db6375e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/index.js @@ -0,0 +1,132 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/package.json new file mode 100644 index 00000000..320521cf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/on-headers/package.json @@ -0,0 +1,80 @@ +{ + "_args": [ + [ + "on-headers@1.0.2", + "/tmp/repository/main" + ] + ], + "_from": "on-headers@1.0.2", + "_id": "on-headers@1.0.2", + "_inBundle": false, + "_integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "_location": "/on-headers", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "on-headers@1.0.2", + "name": "on-headers", + "escapedName": "on-headers", + "rawSpec": "1.0.2", + "saveSpec": null, + "fetchSpec": "1.0.2" + }, + "_requiredBy": [ + "/morgan" + ], + "_resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "_spec": "1.0.2", + "_where": "/tmp/repository/main", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "bugs": { + "url": "https://github.com/jshttp/on-headers/issues" + }, + "description": "Execute a listener when a response is about to write 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" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "README.md", + "index.js" + ], + "homepage": "https://github.com/jshttp/on-headers#readme", + "keywords": [ + "event", + "headers", + "http", + "onheaders" + ], + "license": "MIT", + "name": "on-headers", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/on-headers.git" + }, + "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" + }, + "version": "1.0.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/README.md new file mode 100644 index 00000000..1f1ffca9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/README.md @@ -0,0 +1,79 @@ +# once + +Only call a function once. + +## usage + +```javascript +var once = require('once') + +function load (file, cb) { + cb = once(cb) + loader.load('file') + loader.once('load', cb) + loader.once('error', cb) +} +``` + +Or add to the Function.prototype in a responsible way: + +```javascript +// only has to be done once +require('once').proto() + +function load (file, cb) { + cb = cb.once() + loader.load('file') + loader.once('load', cb) + loader.once('error', cb) +} +``` + +Ironically, the prototype feature makes this module twice as +complicated as necessary. + +To check whether you function has been called, use `fn.called`. Once the +function is called for the first time the return value of the original +function is saved in `fn.value` and subsequent calls will continue to +return this value. + +```javascript +var once = require('once') + +function load (cb) { + cb = once(cb) + var stream = createStream() + stream.once('data', cb) + stream.once('end', function () { + if (!cb.called) cb(new Error('not found')) + }) +} +``` + +## `once.strict(func)` + +Throw an error if the function is called twice. + +Some functions are expected to be called only once. Using `once` for them would +potentially hide logical errors. + +In the example below, the `greet` function has to call the callback only once: + +```javascript +function greet (name, cb) { + // return is missing from the if statement + // when no name is passed, the callback is called twice + if (!name) cb('Hello anonymous') + cb('Hello ' + name) +} + +function log (msg) { + console.log(msg) +} + +// this will print 'Hello anonymous' but the logical error will be missed +greet(null, once(msg)) + +// once.strict will print 'Hello anonymous' and throw an error when the callback will be called the second time +greet(null, once.strict(msg)) +``` diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/once.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/once.js new file mode 100644 index 00000000..23540673 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/once.js @@ -0,0 +1,42 @@ +var wrappy = require('wrappy') +module.exports = wrappy(once) +module.exports.strict = wrappy(onceStrict) + +once.proto = once(function () { + Object.defineProperty(Function.prototype, 'once', { + value: function () { + return once(this) + }, + configurable: true + }) + + Object.defineProperty(Function.prototype, 'onceStrict', { + value: function () { + return onceStrict(this) + }, + configurable: true + }) +}) + +function once (fn) { + var f = function () { + if (f.called) return f.value + f.called = true + return f.value = fn.apply(this, arguments) + } + f.called = false + return f +} + +function onceStrict (fn) { + var f = function () { + if (f.called) + throw new Error(f.onceError) + f.called = true + return f.value = fn.apply(this, arguments) + } + var name = fn.name || 'Function wrapped with `once`' + f.onceError = name + " shouldn't be called more than once" + f.called = false + return f +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/package.json new file mode 100644 index 00000000..bb2c2abe --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/once/package.json @@ -0,0 +1,72 @@ +{ + "_args": [ + [ + "once@1.4.0", + "/tmp/repository/main" + ] + ], + "_from": "once@1.4.0", + "_id": "once@1.4.0", + "_inBundle": false, + "_integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "_location": "/once", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "once@1.4.0", + "name": "once", + "escapedName": "once", + "rawSpec": "1.4.0", + "saveSpec": null, + "fetchSpec": "1.4.0" + }, + "_requiredBy": [ + "/end-of-stream", + "/glob", + "/inflight", + "/pump" + ], + "_resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "_spec": "1.4.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/once/issues" + }, + "dependencies": { + "wrappy": "1" + }, + "description": "Run a function exactly one time", + "devDependencies": { + "tap": "^7.0.1" + }, + "directories": { + "test": "test" + }, + "files": [ + "once.js" + ], + "homepage": "https://github.com/isaacs/once#readme", + "keywords": [ + "once", + "function", + "one", + "single" + ], + "license": "ISC", + "main": "once.js", + "name": "once", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/once.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "1.4.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/.npmignore b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/.npmignore new file mode 100644 index 00000000..f1250e58 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/.npmignore @@ -0,0 +1,4 @@ +support +test +examples +*.sock diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/History.md new file mode 100644 index 00000000..c8aa68fa --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/History.md @@ -0,0 +1,5 @@ + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/Makefile b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/Makefile new file mode 100644 index 00000000..4e9c8d36 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/Makefile @@ -0,0 +1,7 @@ + +test: + @./node_modules/.bin/mocha \ + --require should \ + --reporter spec + +.PHONY: test \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/Readme.md new file mode 100644 index 00000000..48130d9b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/Readme.md @@ -0,0 +1,58 @@ + +# only + + Return whitelisted properties of an object. + +## Installation + + $ npm install only + +## API + + An array or space-delimited string may be given: + +```js +var obj = { + name: 'tobi', + last: 'holowaychuk', + email: 'tobi@learnboost.com', + _id: '12345' +}; + +var user = only(obj, 'name last email'); +``` + +yields: + +```js +{ + name: 'tobi', + last: 'holowaychuk', + email: 'tobi@learnboost.com' +} +``` + +## License + +(The MIT License) + +Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/index.js new file mode 100644 index 00000000..1cbeda95 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/index.js @@ -0,0 +1,10 @@ + +module.exports = function(obj, keys){ + obj = obj || {}; + if ('string' == typeof keys) keys = keys.split(/ +/); + return keys.reduce(function(ret, key){ + if (null == obj[key]) return ret; + ret[key] = obj[key]; + return ret; + }, {}); +}; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/package.json new file mode 100644 index 00000000..21887af3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/only/package.json @@ -0,0 +1,57 @@ +{ + "_args": [ + [ + "only@0.0.2", + "/tmp/repository/main" + ] + ], + "_from": "only@0.0.2", + "_id": "only@0.0.2", + "_inBundle": false, + "_integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", + "_location": "/only", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "only@0.0.2", + "name": "only", + "escapedName": "only", + "rawSpec": "0.0.2", + "saveSpec": null, + "fetchSpec": "0.0.2" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "_spec": "0.0.2", + "_where": "/tmp/repository/main", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "bugs": { + "url": "https://github.com/visionmedia/node-only/issues" + }, + "dependencies": {}, + "description": "return whitelisted properties of an object", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "homepage": "https://github.com/visionmedia/node-only#readme", + "keywords": [ + "utility", + "util", + "object", + "whitelist" + ], + "main": "index", + "name": "only", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/node-only.git" + }, + "version": "0.0.2" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/HISTORY.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/HISTORY.md new file mode 100644 index 00000000..8e409541 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/HISTORY.md @@ -0,0 +1,58 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/LICENSE new file mode 100644 index 00000000..27653d3d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/LICENSE @@ -0,0 +1,24 @@ + +(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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/README.md new file mode 100644 index 00000000..443e716b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/README.md @@ -0,0 +1,133 @@ +# 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/index.js new file mode 100644 index 00000000..ece72232 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/index.js @@ -0,0 +1,158 @@ +/*! + * 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/package.json new file mode 100644 index 00000000..eb377d18 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/parseurl/package.json @@ -0,0 +1,82 @@ +{ + "_args": [ + [ + "parseurl@1.3.3", + "/tmp/repository/main" + ] + ], + "_from": "parseurl@1.3.3", + "_id": "parseurl@1.3.3", + "_inBundle": false, + "_integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "_location": "/parseurl", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "parseurl@1.3.3", + "name": "parseurl", + "escapedName": "parseurl", + "rawSpec": "1.3.3", + "saveSpec": null, + "fetchSpec": "1.3.3" + }, + "_requiredBy": [ + "/koa" + ], + "_resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "_spec": "1.3.3", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/pillarjs/parseurl/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "description": "parse a url with memoization", + "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" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "README.md", + "index.js" + ], + "homepage": "https://github.com/pillarjs/parseurl#readme", + "license": "MIT", + "name": "parseurl", + "repository": { + "type": "git", + "url": "git+https://github.com/pillarjs/parseurl.git" + }, + "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/" + }, + "version": "1.3.3" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/index.js new file mode 100644 index 00000000..22aa6c35 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/index.js @@ -0,0 +1,20 @@ +'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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/license @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/package.json new file mode 100644 index 00000000..e02fa6d6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/package.json @@ -0,0 +1,79 @@ +{ + "_args": [ + [ + "path-is-absolute@1.0.1", + "/tmp/repository/main" + ] + ], + "_from": "path-is-absolute@1.0.1", + "_id": "path-is-absolute@1.0.1", + "_inBundle": false, + "_integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "_location": "/path-is-absolute", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "path-is-absolute@1.0.1", + "name": "path-is-absolute", + "escapedName": "path-is-absolute", + "rawSpec": "1.0.1", + "saveSpec": null, + "fetchSpec": "1.0.1" + }, + "_requiredBy": [ + "/glob", + "/resolve-path" + ], + "_resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "_spec": "1.0.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/path-is-absolute/issues" + }, + "description": "Node.js 0.12 path.isAbsolute() ponyfill", + "devDependencies": { + "xo": "^0.16.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/path-is-absolute#readme", + "keywords": [ + "path", + "paths", + "file", + "dir", + "absolute", + "isabsolute", + "is-absolute", + "built-in", + "util", + "utils", + "core", + "ponyfill", + "polyfill", + "shim", + "is", + "detect", + "check" + ], + "license": "MIT", + "name": "path-is-absolute", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/path-is-absolute.git" + }, + "scripts": { + "test": "xo && node test.js" + }, + "version": "1.0.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/readme.md new file mode 100644 index 00000000..8dbdf5fc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-is-absolute/readme.md @@ -0,0 +1,59 @@ +# 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/History.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/History.md new file mode 100644 index 00000000..fedbb816 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/History.md @@ -0,0 +1,171 @@ +# Moved to [GitHub Releases](https://github.com/pillarjs/path-to-regexp/releases) + +## 3.0.0 / 2019-01-13 + +- Always use prefix character as delimiter token, allowing any character to be a delimiter (e.g. `/:att1-:att2-:att3-:att4-:att5`) +- Remove `partial` support, prefer escaping the prefix delimiter explicitly (e.g. `\\/(apple-)?icon-:res(\\d+).png`) + +## 2.4.0 / 2018-08-26 + +- Support `start` option to disable anchoring from beginning of the string + +## 2.3.0 / 2018-08-20 + +- Use `delimiter` when processing repeated matching groups (e.g. `foo/bar` has no prefix, but has a delimiter) + +## 2.2.1 / 2018-04-24 + +- Allow empty string with `end: false` to match both relative and absolute paths + +## 2.2.0 / 2018-03-06 + +- Pass `token` as second argument to `encode` option (e.g. `encode(value, token)`) + +## 2.1.0 / 2017-10-20 + +- Handle non-ending paths where the final character is a delimiter + - E.g. `/foo/` before required either `/foo/` or `/foo//` to match in non-ending mode + +## 2.0.0 / 2017-08-23 + +- New option! Ability to set `endsWith` to match paths like `/test?query=string` up to the query string +- New option! Set `delimiters` for specific characters to be treated as parameter prefixes (e.g. `/:test`) +- Remove `isarray` dependency +- Explicitly handle trailing delimiters instead of trimming them (e.g. `/test/` is now treated as `/test/` instead of `/test` when matching) +- Remove overloaded `keys` argument that accepted `options` +- Remove `keys` list attached to the `RegExp` output +- Remove asterisk functionality (it's a real pain to properly encode) +- Change `tokensToFunction` (e.g. `compile`) to accept an `encode` function for pretty encoding (e.g. pass your own implementation) + +## 1.7.0 / 2016-11-08 + +- Allow a `delimiter` option to be passed in with `tokensToRegExp` which will be used for "non-ending" token match situations + +## 1.6.0 / 2016-10-03 + +- Populate `RegExp.keys` when using the `tokensToRegExp` method (making it consistent with the main export) +- Allow a `delimiter` option to be passed in with `parse` +- Updated TypeScript definition with `Keys` and `Options` updated + +## 1.5.3 / 2016-06-15 + +- Add `\\` to the ignore character group to avoid backtracking on mismatched parens + +## 1.5.2 / 2016-06-15 + +- Escape `\\` in string segments of regexp + +## 1.5.1 / 2016-06-08 + +- Add `index.d.ts` to NPM package + +## 1.5.0 / 2016-05-20 + +- Handle partial token segments (better) +- Allow compile to handle asterisk token segments + +## 1.4.0 / 2016-05-18 + +- Handle RegExp unions in path matching groups + +## 1.3.0 / 2016-05-08 + +- Clarify README language and named parameter token support +- Support advanced Closure Compiler with type annotations +- Add pretty paths options to compiled function output +- Add TypeScript definition to project +- Improved prefix handling with non-complete segment parameters (E.g. `/:foo?-bar`) + +## 1.2.1 / 2015-08-17 + +- Encode values before validation with path compilation function +- More examples of using compilation in README + +## 1.2.0 / 2015-05-20 + +- Add support for matching an asterisk (`*`) as an unnamed match everything group (`(.*)`) + +## 1.1.1 / 2015-05-11 + +- Expose methods for working with path tokens + +## 1.1.0 / 2015-05-09 + +- Expose the parser implementation to consumers +- Implement a compiler function to generate valid strings +- Huge refactor of tests to be more DRY and cover new parse and compile functions +- Use chai in tests +- Add .editorconfig + +## 1.0.3 / 2015-01-17 + +- Optimised function runtime +- Added `files` to `package.json` + +## 1.0.2 / 2014-12-17 + +- Use `Array.isArray` shim +- Remove ES5 incompatible code +- Fixed repository path +- Added new readme badges + +## 1.0.1 / 2014-08-27 + +- Ensure installation works correctly on 0.8 + +## 1.0.0 / 2014-08-17 + +- No more API changes + +## 0.2.5 / 2014-08-07 + +- Allow keys parameter to be omitted + +## 0.2.4 / 2014-08-02 + +- Code coverage badge +- Updated readme +- Attach keys to the generated regexp + +## 0.2.3 / 2014-07-09 + +- Add MIT license + +## 0.2.2 / 2014-07-06 + +- A passed in trailing slash in non-strict mode will become optional +- In non-end mode, the optional trailing slash will only match at the end + +## 0.2.1 / 2014-06-11 + +- Fixed a major capturing group regexp regression + +## 0.2.0 / 2014-06-09 + +- Improved support for arrays +- Improved support for regexps +- Better support for non-ending strict mode matches with a trailing slash +- Travis CI support +- Block using regexp special characters in the path +- Removed support for the asterisk to match all +- New support for parameter suffixes - `*`, `+` and `?` +- Updated readme +- Provide delimiter information with keys array + +## 0.1.2 / 2014-03-10 + +- Move testing dependencies to `devDependencies` + +## 0.1.1 / 2014-03-10 + +- Match entire substring with `options.end` +- Properly handle ending and non-ending matches + +## 0.1.0 / 2014-03-06 + +- Add `options.end` + +## 0.0.2 / 2013-02-10 + +- Update to match current express +- Add .license property to component.json diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/LICENSE new file mode 100644 index 00000000..983fbe8a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/Readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/Readme.md new file mode 100644 index 00000000..b311b4f5 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/Readme.md @@ -0,0 +1,335 @@ +# Path-to-RegExp + +> Turn a path string such as `/user/:name` into a regular expression. + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![Dependency Status][david-image]][david-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +## Installation + +``` +npm install path-to-regexp --save +``` + +## Usage + +```javascript +const { pathToRegexp, match, parse, compile } = require("path-to-regexp"); + +// pathToRegexp(path, keys?, options?) +// match(path) +// parse(path) +// compile(path) +``` + +- **path** A string, array of strings, or a regular expression. +- **keys** An array to populate with keys found in the path. +- **options** + - **sensitive** When `true` the regexp will be case sensitive. (default: `false`) + - **strict** When `true` the regexp won't allow an optional trailing delimiter to match. (default: `false`) + - **end** When `true` the regexp will match to the end of the string. (default: `true`) + - **start** When `true` the regexp will match from the beginning of the string. (default: `true`) + - **delimiter** The default delimiter for segments, e.g. `[^/#?]` for `:named` patterns. (default: `'/#?'`) + - **endsWith** Optional character, or list of characters, to treat as "end" characters. + - **encode** A function to encode strings before inserting into `RegExp`. (default: `x => x`) + - **prefixes** List of characters to automatically consider prefixes when parsing. (default: `./`) + +```javascript +const keys = []; +const regexp = pathToRegexp("/foo/:bar", keys); +// regexp = /^\/foo(?:\/([^\/#\?]+?))[\/#\?]?$/i +// keys = [{ name: 'bar', prefix: '/', suffix: '', pattern: '[^\\/#\\?]+?', modifier: '' }] +``` + +**Please note:** The `RegExp` returned by `path-to-regexp` is intended for ordered data (e.g. pathnames, hostnames). It can not handle arbitrarily ordered data (e.g. query strings, URL fragments, JSON, etc). When using paths that contain query strings, you need to escape the question mark (`?`) to ensure it does not flag the parameter as [optional](#optional). + +### Parameters + +The path argument is used to define parameters and populate keys. + +#### Named Parameters + +Named parameters are defined by prefixing a colon to the parameter name (`:foo`). + +```js +const regexp = pathToRegexp("/:foo/:bar"); +// keys = [{ name: 'foo', prefix: '/', ... }, { name: 'bar', prefix: '/', ... }] + +regexp.exec("/test/route"); +//=> [ '/test/route', 'test', 'route', index: 0, input: '/test/route', groups: undefined ] +``` + +**Please note:** Parameter names must use "word characters" (`[A-Za-z0-9_]`). + +##### Custom Matching Parameters + +Parameters can have a custom regexp, which overrides the default match (`[^/]+`). For example, you can match digits or names in a path: + +```js +const regexpNumbers = pathToRegexp("/icon-:foo(\\d+).png"); +// keys = [{ name: 'foo', ... }] + +regexpNumbers.exec("/icon-123.png"); +//=> ['/icon-123.png', '123'] + +regexpNumbers.exec("/icon-abc.png"); +//=> null + +const regexpWord = pathToRegexp("/(user|u)"); +// keys = [{ name: 0, ... }] + +regexpWord.exec("/u"); +//=> ['/u', 'u'] + +regexpWord.exec("/users"); +//=> null +``` + +**Tip:** Backslashes need to be escaped with another backslash in JavaScript strings. + +##### Custom Prefix and Suffix + +Parameters can be wrapped in `{}` to create custom prefixes or suffixes for your segment: + +```js +const regexp = pathToRegexp("/:attr1?{-:attr2}?{-:attr3}?"); + +regexp.exec("/test"); +// => ['/test', 'test', undefined, undefined] + +regexp.exec("/test-test"); +// => ['/test', 'test', 'test', undefined] +``` + +#### Unnamed Parameters + +It is possible to write an unnamed parameter that only consists of a regexp. It works the same the named parameter, except it will be numerically indexed: + +```js +const regexp = pathToRegexp("/:foo/(.*)"); +// keys = [{ name: 'foo', ... }, { name: 0, ... }] + +regexp.exec("/test/route"); +//=> [ '/test/route', 'test', 'route', index: 0, input: '/test/route', groups: undefined ] +``` + +#### Modifiers + +Modifiers must be placed after the parameter (e.g. `/:foo?`, `/(test)?`, `/:foo(test)?`, or `{-:foo(test)}?`). + +##### Optional + +Parameters can be suffixed with a question mark (`?`) to make the parameter optional. + +```js +const regexp = pathToRegexp("/:foo/:bar?"); +// keys = [{ name: 'foo', ... }, { name: 'bar', prefix: '/', modifier: '?' }] + +regexp.exec("/test"); +//=> [ '/test', 'test', undefined, index: 0, input: '/test', groups: undefined ] + +regexp.exec("/test/route"); +//=> [ '/test/route', 'test', 'route', index: 0, input: '/test/route', groups: undefined ] +``` + +**Tip:** The prefix is also optional, escape the prefix `\/` to make it required. + +When dealing with query strings, escape the question mark (`?`) so it doesn't mark the parameter as optional. Handling unordered data is outside the scope of this library. + +```js +const regexp = pathToRegexp("/search/:tableName\\?useIndex=true&term=amazing"); + +regexp.exec("/search/people?useIndex=true&term=amazing"); +//=> [ '/search/people?useIndex=true&term=amazing', 'people', index: 0, input: '/search/people?useIndex=true&term=amazing', groups: undefined ] + +// This library does not handle query strings in different orders +regexp.exec("/search/people?term=amazing&useIndex=true"); +//=> null +``` + +##### Zero or more + +Parameters can be suffixed with an asterisk (`*`) to denote a zero or more parameter matches. + +```js +const regexp = pathToRegexp("/:foo*"); +// keys = [{ name: 'foo', prefix: '/', modifier: '*' }] + +regexp.exec("/"); +//=> [ '/', undefined, index: 0, input: '/', groups: undefined ] + +regexp.exec("/bar/baz"); +//=> [ '/bar/baz', 'bar/baz', index: 0, input: '/bar/baz', groups: undefined ] +``` + +##### One or more + +Parameters can be suffixed with a plus sign (`+`) to denote a one or more parameter matches. + +```js +const regexp = pathToRegexp("/:foo+"); +// keys = [{ name: 'foo', prefix: '/', modifier: '+' }] + +regexp.exec("/"); +//=> null + +regexp.exec("/bar/baz"); +//=> [ '/bar/baz','bar/baz', index: 0, input: '/bar/baz', groups: undefined ] +``` + +### Match + +The `match` function will return a function for transforming paths into parameters: + +```js +// Make sure you consistently `decode` segments. +const match = match("/user/:id", { decode: decodeURIComponent }); + +match("/user/123"); //=> { path: '/user/123', index: 0, params: { id: '123' } } +match("/invalid"); //=> false +match("/user/caf%C3%A9"); //=> { path: '/user/caf%C3%A9', index: 0, params: { id: 'café' } } +``` + +#### Process Pathname + +You should make sure variations of the same path match the expected `path`. Here's one possible solution using `encode`: + +```js +const match = match("/café", { encode: encodeURI, decode: decodeURIComponent }); + +match("/user/caf%C3%A9"); //=> { path: '/user/caf%C3%A9', index: 0, params: { id: 'café' } } +``` + +**Note:** [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) automatically encodes pathnames for you. + +##### Alternative Using Normalize + +Sometimes you won't have an already normalized pathname. You can normalize it yourself before processing: + +```js +/** + * Normalize a pathname for matching, replaces multiple slashes with a single + * slash and normalizes unicode characters to "NFC". When using this method, + * `decode` should be an identity function so you don't decode strings twice. + */ +function normalizePathname(pathname: string) { + return ( + decodeURI(pathname) + // Replaces repeated slashes in the URL. + .replace(/\/+/g, "/") + // Reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize + // Note: Missing native IE support, may want to skip this step. + .normalize() + ); +} + +// Two possible ways of writing `/café`: +const re = pathToRegexp("/caf\u00E9"); +const input = encodeURI("/cafe\u0301"); + +re.test(input); //=> false +re.test(normalizePathname(input)); //=> true +``` + +### Parse + +The `parse` function will return a list of strings and keys from a path string: + +```js +const tokens = parse("/route/:foo/(.*)"); + +console.log(tokens[0]); +//=> "/route" + +console.log(tokens[1]); +//=> { name: 'foo', prefix: '/', suffix: '', pattern: '[^\\/#\\?]+?', modifier: '' } + +console.log(tokens[2]); +//=> { name: 0, prefix: '/', suffix: '', pattern: '.*', modifier: '' } +``` + +**Note:** This method only works with strings. + +### Compile ("Reverse" Path-To-RegExp) + +The `compile` function will return a function for transforming parameters into a valid path: + +```js +// Make sure you encode your path segments consistently. +const toPath = compile("/user/:id", { encode: encodeURIComponent }); + +toPath({ id: 123 }); //=> "/user/123" +toPath({ id: "café" }); //=> "/user/caf%C3%A9" +toPath({ id: "/" }); //=> "/user/%2F" + +toPath({ id: ":/" }); //=> "/user/%3A%2F" + +// Without `encode`, you need to make sure inputs are encoded correctly. +const toPathRaw = compile("/user/:id"); + +toPathRaw({ id: "%3A%2F" }); //=> "/user/%3A%2F" +toPathRaw({ id: ":/" }, { validate: false }); //=> "/user/:/" + +const toPathRepeated = compile("/:segment+"); + +toPathRepeated({ segment: "foo" }); //=> "/foo" +toPathRepeated({ segment: ["a", "b", "c"] }); //=> "/a/b/c" + +const toPathRegexp = compile("/user/:id(\\d+)"); + +toPathRegexp({ id: 123 }); //=> "/user/123" +toPathRegexp({ id: "123" }); //=> "/user/123" +toPathRegexp({ id: "abc" }); //=> Throws `TypeError`. +toPathRegexp({ id: "abc" }, { validate: false }); //=> "/user/abc" +``` + +**Note:** The generated function will throw on invalid input. + +### Working with Tokens + +Path-To-RegExp exposes the two functions used internally that accept an array of tokens: + +- `tokensToRegexp(tokens, keys?, options?)` Transform an array of tokens into a matching regular expression. +- `tokensToFunction(tokens)` Transform an array of tokens into a path generator function. + +#### Token Information + +- `name` The name of the token (`string` for named or `number` for unnamed index) +- `prefix` The prefix string for the segment (e.g. `"/"`) +- `suffix` The suffix string for the segment (e.g. `""`) +- `pattern` The RegExp used to match this token (`string`) +- `modifier` The modifier character used for the segment (e.g. `?`) + +## Compatibility with Express <= 4.x + +Path-To-RegExp breaks compatibility with Express <= `4.x`: + +- RegExp special characters can only be used in a parameter + - Express.js 4.x supported `RegExp` special characters regardless of position - this is considered a bug +- Parameters have suffixes that augment meaning - `*`, `+` and `?`. E.g. `/:user*` +- No wildcard asterisk (`*`) - use parameters instead (`(.*)` or `:splat*`) + +## Live Demo + +You can see a live demo of this library in use at [express-route-tester](http://forbeslindesay.github.com/express-route-tester/). + +## License + +MIT + +[npm-image]: https://img.shields.io/npm/v/path-to-regexp.svg?style=flat +[npm-url]: https://npmjs.org/package/path-to-regexp +[travis-image]: https://img.shields.io/travis/pillarjs/path-to-regexp.svg?style=flat +[travis-url]: https://travis-ci.org/pillarjs/path-to-regexp +[coveralls-image]: https://img.shields.io/coveralls/pillarjs/path-to-regexp.svg?style=flat +[coveralls-url]: https://coveralls.io/r/pillarjs/path-to-regexp?branch=master +[david-image]: http://img.shields.io/david/pillarjs/path-to-regexp.svg?style=flat +[david-url]: https://david-dm.org/pillarjs/path-to-regexp +[license-image]: http://img.shields.io/npm/l/path-to-regexp.svg?style=flat +[license-url]: LICENSE.md +[downloads-image]: http://img.shields.io/npm/dm/path-to-regexp.svg?style=flat +[downloads-url]: https://npmjs.org/package/path-to-regexp diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/dist.es2015/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/dist.es2015/index.js new file mode 100644 index 00000000..551edae0 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/dist.es2015/index.js @@ -0,0 +1,398 @@ +/** + * Tokenize input string. + */ +function lexer(str) { + var tokens = []; + var i = 0; + while (i < str.length) { + var char = str[i]; + if (char === "*" || char === "+" || char === "?") { + tokens.push({ type: "MODIFIER", index: i, value: str[i++] }); + continue; + } + if (char === "\\") { + tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] }); + continue; + } + if (char === "{") { + tokens.push({ type: "OPEN", index: i, value: str[i++] }); + continue; + } + if (char === "}") { + tokens.push({ type: "CLOSE", index: i, value: str[i++] }); + continue; + } + if (char === ":") { + var name = ""; + var j = i + 1; + while (j < str.length) { + var code = str.charCodeAt(j); + if ( + // `0-9` + (code >= 48 && code <= 57) || + // `A-Z` + (code >= 65 && code <= 90) || + // `a-z` + (code >= 97 && code <= 122) || + // `_` + code === 95) { + name += str[j++]; + continue; + } + break; + } + if (!name) + throw new TypeError("Missing parameter name at " + i); + tokens.push({ type: "NAME", index: i, value: name }); + i = j; + continue; + } + if (char === "(") { + var count = 1; + var pattern = ""; + var j = i + 1; + if (str[j] === "?") { + throw new TypeError("Pattern cannot start with \"?\" at " + j); + } + while (j < str.length) { + if (str[j] === "\\") { + pattern += str[j++] + str[j++]; + continue; + } + if (str[j] === ")") { + count--; + if (count === 0) { + j++; + break; + } + } + else if (str[j] === "(") { + count++; + if (str[j + 1] !== "?") { + throw new TypeError("Capturing groups are not allowed at " + j); + } + } + pattern += str[j++]; + } + if (count) + throw new TypeError("Unbalanced pattern at " + i); + if (!pattern) + throw new TypeError("Missing pattern at " + i); + tokens.push({ type: "PATTERN", index: i, value: pattern }); + i = j; + continue; + } + tokens.push({ type: "CHAR", index: i, value: str[i++] }); + } + tokens.push({ type: "END", index: i, value: "" }); + return tokens; +} +/** + * Parse a string for the raw tokens. + */ +export function parse(str, options) { + if (options === void 0) { options = {}; } + var tokens = lexer(str); + var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; + var defaultPattern = "[^" + escapeString(options.delimiter || "/#?") + "]+?"; + var result = []; + var key = 0; + var i = 0; + var path = ""; + var tryConsume = function (type) { + if (i < tokens.length && tokens[i].type === type) + return tokens[i++].value; + }; + var mustConsume = function (type) { + var value = tryConsume(type); + if (value !== undefined) + return value; + var _a = tokens[i], nextType = _a.type, index = _a.index; + throw new TypeError("Unexpected " + nextType + " at " + index + ", expected " + type); + }; + var consumeText = function () { + var result = ""; + var value; + // tslint:disable-next-line + while ((value = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR"))) { + result += value; + } + return result; + }; + while (i < tokens.length) { + var char = tryConsume("CHAR"); + var name = tryConsume("NAME"); + var pattern = tryConsume("PATTERN"); + if (name || pattern) { + var prefix = char || ""; + if (prefixes.indexOf(prefix) === -1) { + path += prefix; + prefix = ""; + } + if (path) { + result.push(path); + path = ""; + } + result.push({ + name: name || key++, + prefix: prefix, + suffix: "", + pattern: pattern || defaultPattern, + modifier: tryConsume("MODIFIER") || "" + }); + continue; + } + var value = char || tryConsume("ESCAPED_CHAR"); + if (value) { + path += value; + continue; + } + if (path) { + result.push(path); + path = ""; + } + var open = tryConsume("OPEN"); + if (open) { + var prefix = consumeText(); + var name_1 = tryConsume("NAME") || ""; + var pattern_1 = tryConsume("PATTERN") || ""; + var suffix = consumeText(); + mustConsume("CLOSE"); + result.push({ + name: name_1 || (pattern_1 ? key++ : ""), + pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, + prefix: prefix, + suffix: suffix, + modifier: tryConsume("MODIFIER") || "" + }); + continue; + } + mustConsume("END"); + } + return result; +} +/** + * Compile a string to a template function for the path. + */ +export function compile(str, options) { + return tokensToFunction(parse(str, options), options); +} +/** + * Expose a method for transforming tokens into the path function. + */ +export function tokensToFunction(tokens, options) { + if (options === void 0) { options = {}; } + var reFlags = flags(options); + var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b; + // Compile all the tokens into regexps. + var matches = tokens.map(function (token) { + if (typeof token === "object") { + return new RegExp("^(?:" + token.pattern + ")$", reFlags); + } + }); + return function (data) { + var path = ""; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + if (typeof token === "string") { + path += token; + continue; + } + var value = data ? data[token.name] : undefined; + var optional = token.modifier === "?" || token.modifier === "*"; + var repeat = token.modifier === "*" || token.modifier === "+"; + if (Array.isArray(value)) { + if (!repeat) { + throw new TypeError("Expected \"" + token.name + "\" to not repeat, but got an array"); + } + if (value.length === 0) { + if (optional) + continue; + throw new TypeError("Expected \"" + token.name + "\" to not be empty"); + } + for (var j = 0; j < value.length; j++) { + var segment = encode(value[j], token); + if (validate && !matches[i].test(segment)) { + throw new TypeError("Expected all \"" + token.name + "\" to match \"" + token.pattern + "\", but got \"" + segment + "\""); + } + path += token.prefix + segment + token.suffix; + } + continue; + } + if (typeof value === "string" || typeof value === "number") { + var segment = encode(String(value), token); + if (validate && !matches[i].test(segment)) { + throw new TypeError("Expected \"" + token.name + "\" to match \"" + token.pattern + "\", but got \"" + segment + "\""); + } + path += token.prefix + segment + token.suffix; + continue; + } + if (optional) + continue; + var typeOfMessage = repeat ? "an array" : "a string"; + throw new TypeError("Expected \"" + token.name + "\" to be " + typeOfMessage); + } + return path; + }; +} +/** + * Create path match function from `path-to-regexp` spec. + */ +export function match(str, options) { + var keys = []; + var re = pathToRegexp(str, keys, options); + return regexpToFunction(re, keys, options); +} +/** + * Create a path match function from `path-to-regexp` output. + */ +export function regexpToFunction(re, keys, options) { + if (options === void 0) { options = {}; } + var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a; + return function (pathname) { + var m = re.exec(pathname); + if (!m) + return false; + var path = m[0], index = m.index; + var params = Object.create(null); + var _loop_1 = function (i) { + // tslint:disable-next-line + if (m[i] === undefined) + return "continue"; + var key = keys[i - 1]; + if (key.modifier === "*" || key.modifier === "+") { + params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) { + return decode(value, key); + }); + } + else { + params[key.name] = decode(m[i], key); + } + }; + for (var i = 1; i < m.length; i++) { + _loop_1(i); + } + return { path: path, index: index, params: params }; + }; +} +/** + * Escape a regular expression string. + */ +function escapeString(str) { + return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); +} +/** + * Get the flags for a regexp from the options. + */ +function flags(options) { + return options && options.sensitive ? "" : "i"; +} +/** + * Pull out keys from a regexp. + */ +function regexpToRegexp(path, keys) { + if (!keys) + return path; + var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g; + var index = 0; + var execResult = groupsRegex.exec(path.source); + while (execResult) { + keys.push({ + // Use parenthesized substring match if available, index otherwise + name: execResult[1] || index++, + prefix: "", + suffix: "", + modifier: "", + pattern: "" + }); + execResult = groupsRegex.exec(path.source); + } + return path; +} +/** + * Transform an array into a regexp. + */ +function arrayToRegexp(paths, keys, options) { + var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; }); + return new RegExp("(?:" + parts.join("|") + ")", flags(options)); +} +/** + * Create a path regexp from string input. + */ +function stringToRegexp(path, keys, options) { + return tokensToRegexp(parse(path, options), keys, options); +} +/** + * Expose a function for taking tokens and returning a RegExp. + */ +export function tokensToRegexp(tokens, keys, options) { + if (options === void 0) { options = {}; } + var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d; + var endsWith = "[" + escapeString(options.endsWith || "") + "]|$"; + var delimiter = "[" + escapeString(options.delimiter || "/#?") + "]"; + var route = start ? "^" : ""; + // Iterate over the tokens and create our regexp string. + for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { + var token = tokens_1[_i]; + if (typeof token === "string") { + route += escapeString(encode(token)); + } + else { + var prefix = escapeString(encode(token.prefix)); + var suffix = escapeString(encode(token.suffix)); + if (token.pattern) { + if (keys) + keys.push(token); + if (prefix || suffix) { + if (token.modifier === "+" || token.modifier === "*") { + var mod = token.modifier === "*" ? "?" : ""; + route += "(?:" + prefix + "((?:" + token.pattern + ")(?:" + suffix + prefix + "(?:" + token.pattern + "))*)" + suffix + ")" + mod; + } + else { + route += "(?:" + prefix + "(" + token.pattern + ")" + suffix + ")" + token.modifier; + } + } + else { + route += "(" + token.pattern + ")" + token.modifier; + } + } + else { + route += "(?:" + prefix + suffix + ")" + token.modifier; + } + } + } + if (end) { + if (!strict) + route += delimiter + "?"; + route += !options.endsWith ? "$" : "(?=" + endsWith + ")"; + } + else { + var endToken = tokens[tokens.length - 1]; + var isEndDelimited = typeof endToken === "string" + ? delimiter.indexOf(endToken[endToken.length - 1]) > -1 + : // tslint:disable-next-line + endToken === undefined; + if (!strict) { + route += "(?:" + delimiter + "(?=" + endsWith + "))?"; + } + if (!isEndDelimited) { + route += "(?=" + delimiter + "|" + endsWith + ")"; + } + } + return new RegExp(route, flags(options)); +} +/** + * Normalize the given path string, returning a regular expression. + * + * An empty array can be passed in for the keys, which will hold the + * placeholder key descriptions. For example, using `/user/:id`, `keys` will + * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + */ +export function pathToRegexp(path, keys, options) { + if (path instanceof RegExp) + return regexpToRegexp(path, keys); + if (Array.isArray(path)) + return arrayToRegexp(path, keys, options); + return stringToRegexp(path, keys, options); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/dist/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/dist/index.js new file mode 100644 index 00000000..a66d2a45 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/dist/index.js @@ -0,0 +1,408 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.pathToRegexp = exports.tokensToRegexp = exports.regexpToFunction = exports.match = exports.tokensToFunction = exports.compile = exports.parse = void 0; +/** + * Tokenize input string. + */ +function lexer(str) { + var tokens = []; + var i = 0; + while (i < str.length) { + var char = str[i]; + if (char === "*" || char === "+" || char === "?") { + tokens.push({ type: "MODIFIER", index: i, value: str[i++] }); + continue; + } + if (char === "\\") { + tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] }); + continue; + } + if (char === "{") { + tokens.push({ type: "OPEN", index: i, value: str[i++] }); + continue; + } + if (char === "}") { + tokens.push({ type: "CLOSE", index: i, value: str[i++] }); + continue; + } + if (char === ":") { + var name = ""; + var j = i + 1; + while (j < str.length) { + var code = str.charCodeAt(j); + if ( + // `0-9` + (code >= 48 && code <= 57) || + // `A-Z` + (code >= 65 && code <= 90) || + // `a-z` + (code >= 97 && code <= 122) || + // `_` + code === 95) { + name += str[j++]; + continue; + } + break; + } + if (!name) + throw new TypeError("Missing parameter name at " + i); + tokens.push({ type: "NAME", index: i, value: name }); + i = j; + continue; + } + if (char === "(") { + var count = 1; + var pattern = ""; + var j = i + 1; + if (str[j] === "?") { + throw new TypeError("Pattern cannot start with \"?\" at " + j); + } + while (j < str.length) { + if (str[j] === "\\") { + pattern += str[j++] + str[j++]; + continue; + } + if (str[j] === ")") { + count--; + if (count === 0) { + j++; + break; + } + } + else if (str[j] === "(") { + count++; + if (str[j + 1] !== "?") { + throw new TypeError("Capturing groups are not allowed at " + j); + } + } + pattern += str[j++]; + } + if (count) + throw new TypeError("Unbalanced pattern at " + i); + if (!pattern) + throw new TypeError("Missing pattern at " + i); + tokens.push({ type: "PATTERN", index: i, value: pattern }); + i = j; + continue; + } + tokens.push({ type: "CHAR", index: i, value: str[i++] }); + } + tokens.push({ type: "END", index: i, value: "" }); + return tokens; +} +/** + * Parse a string for the raw tokens. + */ +function parse(str, options) { + if (options === void 0) { options = {}; } + var tokens = lexer(str); + var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; + var defaultPattern = "[^" + escapeString(options.delimiter || "/#?") + "]+?"; + var result = []; + var key = 0; + var i = 0; + var path = ""; + var tryConsume = function (type) { + if (i < tokens.length && tokens[i].type === type) + return tokens[i++].value; + }; + var mustConsume = function (type) { + var value = tryConsume(type); + if (value !== undefined) + return value; + var _a = tokens[i], nextType = _a.type, index = _a.index; + throw new TypeError("Unexpected " + nextType + " at " + index + ", expected " + type); + }; + var consumeText = function () { + var result = ""; + var value; + // tslint:disable-next-line + while ((value = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR"))) { + result += value; + } + return result; + }; + while (i < tokens.length) { + var char = tryConsume("CHAR"); + var name = tryConsume("NAME"); + var pattern = tryConsume("PATTERN"); + if (name || pattern) { + var prefix = char || ""; + if (prefixes.indexOf(prefix) === -1) { + path += prefix; + prefix = ""; + } + if (path) { + result.push(path); + path = ""; + } + result.push({ + name: name || key++, + prefix: prefix, + suffix: "", + pattern: pattern || defaultPattern, + modifier: tryConsume("MODIFIER") || "" + }); + continue; + } + var value = char || tryConsume("ESCAPED_CHAR"); + if (value) { + path += value; + continue; + } + if (path) { + result.push(path); + path = ""; + } + var open = tryConsume("OPEN"); + if (open) { + var prefix = consumeText(); + var name_1 = tryConsume("NAME") || ""; + var pattern_1 = tryConsume("PATTERN") || ""; + var suffix = consumeText(); + mustConsume("CLOSE"); + result.push({ + name: name_1 || (pattern_1 ? key++ : ""), + pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, + prefix: prefix, + suffix: suffix, + modifier: tryConsume("MODIFIER") || "" + }); + continue; + } + mustConsume("END"); + } + return result; +} +exports.parse = parse; +/** + * Compile a string to a template function for the path. + */ +function compile(str, options) { + return tokensToFunction(parse(str, options), options); +} +exports.compile = compile; +/** + * Expose a method for transforming tokens into the path function. + */ +function tokensToFunction(tokens, options) { + if (options === void 0) { options = {}; } + var reFlags = flags(options); + var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b; + // Compile all the tokens into regexps. + var matches = tokens.map(function (token) { + if (typeof token === "object") { + return new RegExp("^(?:" + token.pattern + ")$", reFlags); + } + }); + return function (data) { + var path = ""; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + if (typeof token === "string") { + path += token; + continue; + } + var value = data ? data[token.name] : undefined; + var optional = token.modifier === "?" || token.modifier === "*"; + var repeat = token.modifier === "*" || token.modifier === "+"; + if (Array.isArray(value)) { + if (!repeat) { + throw new TypeError("Expected \"" + token.name + "\" to not repeat, but got an array"); + } + if (value.length === 0) { + if (optional) + continue; + throw new TypeError("Expected \"" + token.name + "\" to not be empty"); + } + for (var j = 0; j < value.length; j++) { + var segment = encode(value[j], token); + if (validate && !matches[i].test(segment)) { + throw new TypeError("Expected all \"" + token.name + "\" to match \"" + token.pattern + "\", but got \"" + segment + "\""); + } + path += token.prefix + segment + token.suffix; + } + continue; + } + if (typeof value === "string" || typeof value === "number") { + var segment = encode(String(value), token); + if (validate && !matches[i].test(segment)) { + throw new TypeError("Expected \"" + token.name + "\" to match \"" + token.pattern + "\", but got \"" + segment + "\""); + } + path += token.prefix + segment + token.suffix; + continue; + } + if (optional) + continue; + var typeOfMessage = repeat ? "an array" : "a string"; + throw new TypeError("Expected \"" + token.name + "\" to be " + typeOfMessage); + } + return path; + }; +} +exports.tokensToFunction = tokensToFunction; +/** + * Create path match function from `path-to-regexp` spec. + */ +function match(str, options) { + var keys = []; + var re = pathToRegexp(str, keys, options); + return regexpToFunction(re, keys, options); +} +exports.match = match; +/** + * Create a path match function from `path-to-regexp` output. + */ +function regexpToFunction(re, keys, options) { + if (options === void 0) { options = {}; } + var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a; + return function (pathname) { + var m = re.exec(pathname); + if (!m) + return false; + var path = m[0], index = m.index; + var params = Object.create(null); + var _loop_1 = function (i) { + // tslint:disable-next-line + if (m[i] === undefined) + return "continue"; + var key = keys[i - 1]; + if (key.modifier === "*" || key.modifier === "+") { + params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) { + return decode(value, key); + }); + } + else { + params[key.name] = decode(m[i], key); + } + }; + for (var i = 1; i < m.length; i++) { + _loop_1(i); + } + return { path: path, index: index, params: params }; + }; +} +exports.regexpToFunction = regexpToFunction; +/** + * Escape a regular expression string. + */ +function escapeString(str) { + return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); +} +/** + * Get the flags for a regexp from the options. + */ +function flags(options) { + return options && options.sensitive ? "" : "i"; +} +/** + * Pull out keys from a regexp. + */ +function regexpToRegexp(path, keys) { + if (!keys) + return path; + var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g; + var index = 0; + var execResult = groupsRegex.exec(path.source); + while (execResult) { + keys.push({ + // Use parenthesized substring match if available, index otherwise + name: execResult[1] || index++, + prefix: "", + suffix: "", + modifier: "", + pattern: "" + }); + execResult = groupsRegex.exec(path.source); + } + return path; +} +/** + * Transform an array into a regexp. + */ +function arrayToRegexp(paths, keys, options) { + var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; }); + return new RegExp("(?:" + parts.join("|") + ")", flags(options)); +} +/** + * Create a path regexp from string input. + */ +function stringToRegexp(path, keys, options) { + return tokensToRegexp(parse(path, options), keys, options); +} +/** + * Expose a function for taking tokens and returning a RegExp. + */ +function tokensToRegexp(tokens, keys, options) { + if (options === void 0) { options = {}; } + var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d; + var endsWith = "[" + escapeString(options.endsWith || "") + "]|$"; + var delimiter = "[" + escapeString(options.delimiter || "/#?") + "]"; + var route = start ? "^" : ""; + // Iterate over the tokens and create our regexp string. + for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { + var token = tokens_1[_i]; + if (typeof token === "string") { + route += escapeString(encode(token)); + } + else { + var prefix = escapeString(encode(token.prefix)); + var suffix = escapeString(encode(token.suffix)); + if (token.pattern) { + if (keys) + keys.push(token); + if (prefix || suffix) { + if (token.modifier === "+" || token.modifier === "*") { + var mod = token.modifier === "*" ? "?" : ""; + route += "(?:" + prefix + "((?:" + token.pattern + ")(?:" + suffix + prefix + "(?:" + token.pattern + "))*)" + suffix + ")" + mod; + } + else { + route += "(?:" + prefix + "(" + token.pattern + ")" + suffix + ")" + token.modifier; + } + } + else { + route += "(" + token.pattern + ")" + token.modifier; + } + } + else { + route += "(?:" + prefix + suffix + ")" + token.modifier; + } + } + } + if (end) { + if (!strict) + route += delimiter + "?"; + route += !options.endsWith ? "$" : "(?=" + endsWith + ")"; + } + else { + var endToken = tokens[tokens.length - 1]; + var isEndDelimited = typeof endToken === "string" + ? delimiter.indexOf(endToken[endToken.length - 1]) > -1 + : // tslint:disable-next-line + endToken === undefined; + if (!strict) { + route += "(?:" + delimiter + "(?=" + endsWith + "))?"; + } + if (!isEndDelimited) { + route += "(?=" + delimiter + "|" + endsWith + ")"; + } + } + return new RegExp(route, flags(options)); +} +exports.tokensToRegexp = tokensToRegexp; +/** + * Normalize the given path string, returning a regular expression. + * + * An empty array can be passed in for the keys, which will hold the + * placeholder key descriptions. For example, using `/user/:id`, `keys` will + * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + */ +function pathToRegexp(path, keys, options) { + if (path instanceof RegExp) + return regexpToRegexp(path, keys); + if (Array.isArray(path)) + return arrayToRegexp(path, keys, options); + return stringToRegexp(path, keys, options); +} +exports.pathToRegexp = pathToRegexp; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/package.json new file mode 100644 index 00000000..190c0507 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/path-to-regexp/package.json @@ -0,0 +1,118 @@ +{ + "_args": [ + [ + "path-to-regexp@6.2.0", + "/tmp/repository/main" + ] + ], + "_from": "path-to-regexp@6.2.0", + "_id": "path-to-regexp@6.2.0", + "_inBundle": false, + "_integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==", + "_location": "/path-to-regexp", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "path-to-regexp@6.2.0", + "name": "path-to-regexp", + "escapedName": "path-to-regexp", + "rawSpec": "6.2.0", + "saveSpec": null, + "fetchSpec": "6.2.0" + }, + "_requiredBy": [ + "/@koa/router" + ], + "_resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz", + "_spec": "6.2.0", + "_where": "/tmp/repository/main", + "bugs": { + "url": "https://github.com/pillarjs/path-to-regexp/issues" + }, + "description": "Express style path to RegExp utility", + "devDependencies": { + "@size-limit/preset-small-lib": "^4.5.6", + "@types/jest": "^26.0.9", + "@types/node": "^14.0.27", + "@types/semver": "^7.3.1", + "husky": "^4.2.5", + "jest": "^26.2.2", + "lint-staged": "^10.2.11", + "prettier": "^2.0.5", + "rimraf": "^3.0.0", + "semver": "^7.3.2", + "size-limit": "^4.5.6", + "ts-jest": "^26.1.4", + "tslint": "^6.1.3", + "tslint-config-prettier": "^1.18.0", + "tslint-config-standard": "^9.0.0", + "typescript": "^4.0.3" + }, + "files": [ + "dist/", + "dist.es2015/" + ], + "homepage": "https://github.com/pillarjs/path-to-regexp#readme", + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "jest": { + "roots": [ + "/src/" + ], + "transform": { + "\\.tsx?$": "ts-jest" + }, + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(tsx?|jsx?)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js", + "jsx", + "json", + "node" + ] + }, + "keywords": [ + "express", + "regexp", + "route", + "routing" + ], + "license": "MIT", + "lint-staged": { + "*.{js,jsx,ts,tsx,json,md,yml,yaml}": "npm run prettier" + }, + "main": "dist/index.js", + "module": "dist.es2015/index.js", + "name": "path-to-regexp", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/pillarjs/path-to-regexp.git" + }, + "scripts": { + "build": "rimraf dist/ dist.es2015/ && tsc && tsc -P tsconfig.es2015.json", + "format": "npm run prettier -- \"{.,src/**}/*.{js,jsx,ts,tsx,json,md,yml,yaml}\"", + "lint": "tslint \"src/**/*\" --project tsconfig.json", + "prepare": "npm run build", + "prettier": "prettier --write", + "size": "size-limit", + "specs": "jest --coverage", + "test": "npm run build && npm run lint && npm run specs && npm run size" + }, + "sideEffects": false, + "size-limit": [ + { + "path": "dist/index.js", + "limit": "2 kB" + } + ], + "typings": "dist/index.d.ts", + "version": "6.2.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/LICENSE new file mode 100644 index 00000000..0bbb53ed --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/LICENSE @@ -0,0 +1,23 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/README.md new file mode 100644 index 00000000..bb40a07c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/README.md @@ -0,0 +1,41 @@ +# Pend + +Dead-simple optimistic async helper. + +## Usage + +```js +var Pend = require('pend'); +var pend = new Pend(); +pend.max = 10; // defaults to Infinity +setTimeout(pend.hold(), 1000); // pend.wait will have to wait for this hold to finish +pend.go(function(cb) { + console.log("this function is immediately executed"); + setTimeout(function() { + console.log("calling cb 1"); + cb(); + }, 500); +}); +pend.go(function(cb) { + console.log("this function is also immediately executed"); + setTimeout(function() { + console.log("calling cb 2"); + cb(); + }, 1000); +}); +pend.wait(function(err) { + console.log("this is excuted when the first 2 have returned."); + console.log("err is a possible error in the standard callback style."); +}); +``` + +Output: + +``` +this function is immediately executed +this function is also immediately executed +calling cb 1 +calling cb 2 +this is excuted when the first 2 have returned. +err is a possible error in the standard callback style. +``` diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/index.js new file mode 100644 index 00000000..3bf485ed --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/index.js @@ -0,0 +1,55 @@ +module.exports = Pend; + +function Pend() { + this.pending = 0; + this.max = Infinity; + this.listeners = []; + this.waiting = []; + this.error = null; +} + +Pend.prototype.go = function(fn) { + if (this.pending < this.max) { + pendGo(this, fn); + } else { + this.waiting.push(fn); + } +}; + +Pend.prototype.wait = function(cb) { + if (this.pending === 0) { + cb(this.error); + } else { + this.listeners.push(cb); + } +}; + +Pend.prototype.hold = function() { + return pendHold(this); +}; + +function pendHold(self) { + self.pending += 1; + var called = false; + return onCb; + function onCb(err) { + if (called) throw new Error("callback called twice"); + called = true; + self.error = self.error || err; + self.pending -= 1; + if (self.waiting.length > 0 && self.pending < self.max) { + pendGo(self, self.waiting.shift()); + } else if (self.pending === 0) { + var listeners = self.listeners; + self.listeners = []; + listeners.forEach(cbListener); + } + } + function cbListener(listener) { + listener(self.error); + } +} + +function pendGo(self, fn) { + fn(pendHold(self)); +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/package.json new file mode 100644 index 00000000..161e0e47 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/package.json @@ -0,0 +1,50 @@ +{ + "_args": [ + [ + "pend@1.2.0", + "/tmp/repository/main" + ] + ], + "_from": "pend@1.2.0", + "_id": "pend@1.2.0", + "_inBundle": false, + "_integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "_location": "/pend", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "pend@1.2.0", + "name": "pend", + "escapedName": "pend", + "rawSpec": "1.2.0", + "saveSpec": null, + "fetchSpec": "1.2.0" + }, + "_requiredBy": [ + "/fd-slicer" + ], + "_resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "_spec": "1.2.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Andrew Kelley", + "email": "superjoe30@gmail.com" + }, + "bugs": { + "url": "https://github.com/andrewrk/node-pend/issues" + }, + "description": "dead-simple optimistic async helper", + "homepage": "https://github.com/andrewrk/node-pend#readme", + "license": "MIT", + "main": "index.js", + "name": "pend", + "repository": { + "type": "git", + "url": "git://github.com/andrewrk/node-pend.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "1.2.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/test.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/test.js new file mode 100644 index 00000000..75c0f2ac --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pend/test.js @@ -0,0 +1,137 @@ +var assert = require('assert'); +var Pend = require('./'); + +var tests = [ + { + name: "basic", + fn: testBasic, + }, + { + name: "max", + fn: testWithMax, + }, + { + name: "callback twice", + fn: testCallbackTwice, + }, + { + name: "calling wait twice", + fn: testCallingWaitTwice, + }, + { + name: "hold()", + fn: testHoldFn, + }, +]; +var testCount = tests.length; + +doOneTest(); + +function doOneTest() { + var test = tests.shift(); + if (!test) { + console.log(testCount + " tests passed."); + return; + } + process.stdout.write(test.name + "..."); + test.fn(function() { + process.stdout.write("OK\n"); + doOneTest(); + }); +} + +function testBasic(cb) { + var pend = new Pend(); + var results = []; + pend.go(function(cb) { + results.push(1); + setTimeout(function() { + results.push(3); + cb(); + }, 500); + }); + pend.go(function(cb) { + results.push(2); + setTimeout(function() { + results.push(4); + cb(); + }, 1000); + }); + pend.wait(function(err) { + assert.deepEqual(results, [1,2,3,4]); + cb(); + }); + assert.deepEqual(results, [1, 2]); +} + +function testWithMax(cb) { + var pend = new Pend(); + var results = []; + pend.max = 2; + pend.go(function(cb) { + results.push('a'); + setTimeout(function() { + results.push(1); + cb(); + }, 500); + }); + pend.go(function(cb) { + results.push('b'); + setTimeout(function() { + results.push(1); + cb(); + }, 500); + }); + pend.go(function(cb) { + results.push('c'); + setTimeout(function() { + results.push(2); + cb(); + }, 100); + }); + pend.wait(function(err) { + assert.deepEqual(results, ['a', 'b', 1, 'c', 1, 2]); + cb(); + }); + assert.deepEqual(results, ['a', 'b']); +} + +function testCallbackTwice(cb) { + var pend = new Pend(); + pend.go(function(cb) { + setTimeout(cb, 100); + }); + pend.go(function(cb) { + cb(); + assert.throws(cb, /callback called twice/); + }); + pend.wait(cb); +} + +function testCallingWaitTwice(cb) { + var pend = new Pend(); + pend.go(function(cb) { + setTimeout(cb, 100); + }); + pend.wait(function() { + pend.go(function(cb) { + setTimeout(cb, 50); + }); + pend.go(function(cb) { + setTimeout(cb, 10); + }); + pend.go(function(cb) { + setTimeout(cb, 20); + }); + pend.wait(cb); + }); +} + +function testHoldFn(cb) { + var pend = new Pend(); + setTimeout(pend.hold(), 100); + pend.go(function(cb) { + cb(); + }); + pend.wait(cb); +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/index.js new file mode 100644 index 00000000..7c720ebe --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/index.js @@ -0,0 +1,68 @@ +'use strict'; + +var processFn = function (fn, P, opts) { + return function () { + var that = this; + var args = new Array(arguments.length); + + for (var i = 0; i < arguments.length; i++) { + args[i] = arguments[i]; + } + + return new P(function (resolve, reject) { + args.push(function (err, result) { + if (err) { + reject(err); + } else if (opts.multiArgs) { + var results = new Array(arguments.length - 1); + + for (var i = 1; i < arguments.length; i++) { + results[i - 1] = arguments[i]; + } + + resolve(results); + } else { + resolve(result); + } + }); + + fn.apply(that, args); + }); + }; +}; + +var pify = module.exports = function (obj, P, opts) { + if (typeof P !== 'function') { + opts = P; + P = Promise; + } + + opts = opts || {}; + opts.exclude = opts.exclude || [/.+Sync$/]; + + var filter = function (key) { + var match = function (pattern) { + return typeof pattern === 'string' ? key === pattern : pattern.test(key); + }; + + return opts.include ? opts.include.some(match) : !opts.exclude.some(match); + }; + + var ret = typeof obj === 'function' ? function () { + if (opts.excludeMain) { + return obj.apply(this, arguments); + } + + return processFn(obj, P, opts).apply(this, arguments); + } : {}; + + return Object.keys(obj).reduce(function (ret, key) { + var x = obj[key]; + + ret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x; + + return ret; + }, ret); +}; + +pify.all = pify; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/license @@ -0,0 +1,21 @@ +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/package.json new file mode 100644 index 00000000..ea621e5f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/package.json @@ -0,0 +1,84 @@ +{ + "_args": [ + [ + "pify@2.3.0", + "/tmp/repository/main" + ] + ], + "_from": "pify@2.3.0", + "_id": "pify@2.3.0", + "_inBundle": false, + "_integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "_location": "/pify", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "pify@2.3.0", + "name": "pify", + "escapedName": "pify", + "rawSpec": "2.3.0", + "saveSpec": null, + "fetchSpec": "2.3.0" + }, + "_requiredBy": [ + "/decompress", + "/decompress-unzip" + ], + "_resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "_spec": "2.3.0", + "_where": "/tmp/repository/main", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/pify/issues" + }, + "description": "Promisify a callback-style function", + "devDependencies": { + "ava": "*", + "pinkie-promise": "^1.0.0", + "v8-natives": "0.0.2", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/pify#readme", + "keywords": [ + "promise", + "promises", + "promisify", + "denodify", + "denodeify", + "callback", + "cb", + "node", + "then", + "thenify", + "convert", + "transform", + "wrap", + "wrapper", + "bind", + "to", + "async", + "es2015" + ], + "license": "MIT", + "name": "pify", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/pify.git" + }, + "scripts": { + "optimization-test": "node --allow-natives-syntax optimization-test.js", + "test": "xo && ava && npm run optimization-test" + }, + "version": "2.3.0" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/readme.md new file mode 100644 index 00000000..c79ca8bf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pify/readme.md @@ -0,0 +1,119 @@ +# pify [![Build Status](https://travis-ci.org/sindresorhus/pify.svg?branch=master)](https://travis-ci.org/sindresorhus/pify) + +> Promisify a callback-style function + + +## Install + +``` +$ npm install --save pify +``` + + +## Usage + +```js +const fs = require('fs'); +const pify = require('pify'); + +// promisify a single function + +pify(fs.readFile)('package.json', 'utf8').then(data => { + console.log(JSON.parse(data).name); + //=> 'pify' +}); + +// or promisify all methods in a module + +pify(fs).readFile('package.json', 'utf8').then(data => { + console.log(JSON.parse(data).name); + //=> 'pify' +}); +``` + + +## API + +### pify(input, [promiseModule], [options]) + +Returns a promise wrapped version of the supplied function or module. + +#### input + +Type: `function`, `object` + +Callback-style function or module whose methods you want to promisify. + +#### promiseModule + +Type: `function` + +Custom promise module to use instead of the native one. + +Check out [`pinkie-promise`](https://github.com/floatdrop/pinkie-promise) if you need a tiny promise polyfill. + +#### options + +##### multiArgs + +Type: `boolean` +Default: `false` + +By default, the promisified function will only return the second argument from the callback, which works fine for most APIs. This option can be useful for modules like `request` that return multiple arguments. Turning this on will make it return an array of all arguments from the callback, excluding the error argument, instead of just the second argument. + +```js +const request = require('request'); +const pify = require('pify'); + +pify(request, {multiArgs: true})('https://sindresorhus.com').then(result => { + const [httpResponse, body] = result; +}); +``` + +##### include + +Type: `array` of (`string`|`regex`) + +Methods in a module to promisify. Remaining methods will be left untouched. + +##### exclude + +Type: `array` of (`string`|`regex`) +Default: `[/.+Sync$/]` + +Methods in a module **not** to promisify. Methods with names ending with `'Sync'` are excluded by default. + +##### excludeMain + +Type: `boolean` +Default: `false` + +By default, if given module is a function itself, this function will be promisified. Turn this option on if you want to promisify only methods of the module. + +```js +const pify = require('pify'); + +function fn() { + return true; +} + +fn.method = (data, callback) => { + setImmediate(() => { + callback(data, null); + }); +}; + +// promisify methods but not fn() +const promiseFn = pify(fn, {excludeMain: true}); + +if (promiseFn()) { + promiseFn.method('hi').then(data => { + console.log(data); + }); +} +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/index.js new file mode 100644 index 00000000..777377a1 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = typeof Promise === 'function' ? Promise : require('pinkie'); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/license new file mode 100644 index 00000000..1aeb74fd --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/package.json new file mode 100644 index 00000000..1da34593 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/package.json @@ -0,0 +1,70 @@ +{ + "_args": [ + [ + "pinkie-promise@2.0.1", + "/tmp/repository/main" + ] + ], + "_from": "pinkie-promise@2.0.1", + "_id": "pinkie-promise@2.0.1", + "_inBundle": false, + "_integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "_location": "/pinkie-promise", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "pinkie-promise@2.0.1", + "name": "pinkie-promise", + "escapedName": "pinkie-promise", + "rawSpec": "2.0.1", + "saveSpec": null, + "fetchSpec": "2.0.1" + }, + "_requiredBy": [ + "/get-stream" + ], + "_resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "_spec": "2.0.1", + "_where": "/tmp/repository/main", + "author": { + "name": "Vsevolod Strukchinsky", + "email": "floatdrop@gmail.com", + "url": "github.com/floatdrop" + }, + "bugs": { + "url": "https://github.com/floatdrop/pinkie-promise/issues" + }, + "dependencies": { + "pinkie": "^2.0.0" + }, + "description": "ES2015 Promise ponyfill", + "devDependencies": { + "mocha": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/floatdrop/pinkie-promise#readme", + "keywords": [ + "promise", + "promises", + "es2015", + "es6", + "polyfill", + "ponyfill" + ], + "license": "MIT", + "name": "pinkie-promise", + "repository": { + "type": "git", + "url": "git+https://github.com/floatdrop/pinkie-promise.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "2.0.1" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/readme.md new file mode 100644 index 00000000..78477f42 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie-promise/readme.md @@ -0,0 +1,28 @@ +# pinkie-promise [![Build Status](https://travis-ci.org/floatdrop/pinkie-promise.svg?branch=master)](https://travis-ci.org/floatdrop/pinkie-promise) + +> [ES2015 Promise](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects) ponyfill + +Module exports global Promise object (if available) or [`pinkie`](http://github.com/floatdrop/pinkie) Promise polyfill. + +## Install + +``` +$ npm install --save pinkie-promise +``` + +## Usage + +```js +var Promise = require('pinkie-promise'); + +new Promise(function (resolve) { resolve('unicorns'); }); +//=> Promise { 'unicorns' } +``` + +## Related + +- [pify](https://github.com/sindresorhus/pify) - Promisify a callback-style function + +## License + +MIT © [Vsevolod Strukchinsky](http://github.com/floatdrop) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/index.js new file mode 100644 index 00000000..14ce1bfe --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/index.js @@ -0,0 +1,292 @@ +'use strict'; + +var PENDING = 'pending'; +var SETTLED = 'settled'; +var FULFILLED = 'fulfilled'; +var REJECTED = 'rejected'; +var NOOP = function () {}; +var isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function'; + +var asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate; +var asyncQueue = []; +var asyncTimer; + +function asyncFlush() { + // run promise callbacks + for (var i = 0; i < asyncQueue.length; i++) { + asyncQueue[i][0](asyncQueue[i][1]); + } + + // reset async asyncQueue + asyncQueue = []; + asyncTimer = false; +} + +function asyncCall(callback, arg) { + asyncQueue.push([callback, arg]); + + if (!asyncTimer) { + asyncTimer = true; + asyncSetTimer(asyncFlush, 0); + } +} + +function invokeResolver(resolver, promise) { + function resolvePromise(value) { + resolve(promise, value); + } + + function rejectPromise(reason) { + reject(promise, reason); + } + + try { + resolver(resolvePromise, rejectPromise); + } catch (e) { + rejectPromise(e); + } +} + +function invokeCallback(subscriber) { + var owner = subscriber.owner; + var settled = owner._state; + var value = owner._data; + var callback = subscriber[settled]; + var promise = subscriber.then; + + if (typeof callback === 'function') { + settled = FULFILLED; + try { + value = callback(value); + } catch (e) { + reject(promise, e); + } + } + + if (!handleThenable(promise, value)) { + if (settled === FULFILLED) { + resolve(promise, value); + } + + if (settled === REJECTED) { + reject(promise, value); + } + } +} + +function handleThenable(promise, value) { + var resolved; + + try { + if (promise === value) { + throw new TypeError('A promises callback cannot return that same promise.'); + } + + if (value && (typeof value === 'function' || typeof value === 'object')) { + // then should be retrieved only once + var then = value.then; + + if (typeof then === 'function') { + then.call(value, function (val) { + if (!resolved) { + resolved = true; + + if (value === val) { + fulfill(promise, val); + } else { + resolve(promise, val); + } + } + }, function (reason) { + if (!resolved) { + resolved = true; + + reject(promise, reason); + } + }); + + return true; + } + } + } catch (e) { + if (!resolved) { + reject(promise, e); + } + + return true; + } + + return false; +} + +function resolve(promise, value) { + if (promise === value || !handleThenable(promise, value)) { + fulfill(promise, value); + } +} + +function fulfill(promise, value) { + if (promise._state === PENDING) { + promise._state = SETTLED; + promise._data = value; + + asyncCall(publishFulfillment, promise); + } +} + +function reject(promise, reason) { + if (promise._state === PENDING) { + promise._state = SETTLED; + promise._data = reason; + + asyncCall(publishRejection, promise); + } +} + +function publish(promise) { + promise._then = promise._then.forEach(invokeCallback); +} + +function publishFulfillment(promise) { + promise._state = FULFILLED; + publish(promise); +} + +function publishRejection(promise) { + promise._state = REJECTED; + publish(promise); + if (!promise._handled && isNode) { + global.process.emit('unhandledRejection', promise._data, promise); + } +} + +function notifyRejectionHandled(promise) { + global.process.emit('rejectionHandled', promise); +} + +/** + * @class + */ +function Promise(resolver) { + if (typeof resolver !== 'function') { + throw new TypeError('Promise resolver ' + resolver + ' is not a function'); + } + + if (this instanceof Promise === false) { + throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.'); + } + + this._then = []; + + invokeResolver(resolver, this); +} + +Promise.prototype = { + constructor: Promise, + + _state: PENDING, + _then: null, + _data: undefined, + _handled: false, + + then: function (onFulfillment, onRejection) { + var subscriber = { + owner: this, + then: new this.constructor(NOOP), + fulfilled: onFulfillment, + rejected: onRejection + }; + + if ((onRejection || onFulfillment) && !this._handled) { + this._handled = true; + if (this._state === REJECTED && isNode) { + asyncCall(notifyRejectionHandled, this); + } + } + + if (this._state === FULFILLED || this._state === REJECTED) { + // already resolved, call callback async + asyncCall(invokeCallback, subscriber); + } else { + // subscribe + this._then.push(subscriber); + } + + return subscriber.then; + }, + + catch: function (onRejection) { + return this.then(null, onRejection); + } +}; + +Promise.all = function (promises) { + if (!Array.isArray(promises)) { + throw new TypeError('You must pass an array to Promise.all().'); + } + + return new Promise(function (resolve, reject) { + var results = []; + var remaining = 0; + + function resolver(index) { + remaining++; + return function (value) { + results[index] = value; + if (!--remaining) { + resolve(results); + } + }; + } + + for (var i = 0, promise; i < promises.length; i++) { + promise = promises[i]; + + if (promise && typeof promise.then === 'function') { + promise.then(resolver(i), reject); + } else { + results[i] = promise; + } + } + + if (!remaining) { + resolve(results); + } + }); +}; + +Promise.race = function (promises) { + if (!Array.isArray(promises)) { + throw new TypeError('You must pass an array to Promise.race().'); + } + + return new Promise(function (resolve, reject) { + for (var i = 0, promise; i < promises.length; i++) { + promise = promises[i]; + + if (promise && typeof promise.then === 'function') { + promise.then(resolve, reject); + } else { + resolve(promise); + } + } + }); +}; + +Promise.resolve = function (value) { + if (value && typeof value === 'object' && value.constructor === Promise) { + return value; + } + + return new Promise(function (resolve) { + resolve(value); + }); +}; + +Promise.reject = function (reason) { + return new Promise(function (resolve, reject) { + reject(reason); + }); +}; + +module.exports = Promise; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/license b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/license new file mode 100644 index 00000000..1aeb74fd --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) + +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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/package.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/package.json new file mode 100644 index 00000000..99a883bf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/package.json @@ -0,0 +1,71 @@ +{ + "_args": [ + [ + "pinkie@2.0.4", + "/tmp/repository/main" + ] + ], + "_from": "pinkie@2.0.4", + "_id": "pinkie@2.0.4", + "_inBundle": false, + "_integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "_location": "/pinkie", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "pinkie@2.0.4", + "name": "pinkie", + "escapedName": "pinkie", + "rawSpec": "2.0.4", + "saveSpec": null, + "fetchSpec": "2.0.4" + }, + "_requiredBy": [ + "/pinkie-promise" + ], + "_resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "_spec": "2.0.4", + "_where": "/tmp/repository/main", + "author": { + "name": "Vsevolod Strukchinsky", + "email": "floatdrop@gmail.com", + "url": "github.com/floatdrop" + }, + "bugs": { + "url": "https://github.com/floatdrop/pinkie/issues" + }, + "description": "Itty bitty little widdle twinkie pinkie ES2015 Promise implementation", + "devDependencies": { + "core-assert": "^0.1.1", + "coveralls": "^2.11.4", + "mocha": "*", + "nyc": "^3.2.2", + "promises-aplus-tests": "*", + "xo": "^0.10.1" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/floatdrop/pinkie#readme", + "keywords": [ + "promise", + "promises", + "es2015", + "es6" + ], + "license": "MIT", + "name": "pinkie", + "repository": { + "type": "git", + "url": "git+https://github.com/floatdrop/pinkie.git" + }, + "scripts": { + "coverage": "nyc report --reporter=text-lcov | coveralls", + "test": "xo && nyc mocha" + }, + "version": "2.0.4" +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/readme.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/readme.md new file mode 100644 index 00000000..1565f958 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/pinkie/readme.md @@ -0,0 +1,83 @@ +

+
+ pinkie +
+
+

+ +> Itty bitty little widdle twinkie pinkie [ES2015 Promise](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects) implementation + +[![Build Status](https://travis-ci.org/floatdrop/pinkie.svg?branch=master)](https://travis-ci.org/floatdrop/pinkie) [![Coverage Status](https://coveralls.io/repos/floatdrop/pinkie/badge.svg?branch=master&service=github)](https://coveralls.io/github/floatdrop/pinkie?branch=master) + +There are [tons of Promise implementations](https://github.com/promises-aplus/promises-spec/blob/master/implementations.md#standalone) out there, but all of them focus on browser compatibility and are often bloated with functionality. + +This module is an exact Promise specification polyfill (like [native-promise-only](https://github.com/getify/native-promise-only)), but in Node.js land (it should be browserify-able though). + + +## Install + +``` +$ npm install --save pinkie +``` + + +## Usage + +```js +var fs = require('fs'); +var Promise = require('pinkie'); + +new Promise(function (resolve, reject) { + fs.readFile('foo.json', 'utf8', function (err, data) { + if (err) { + reject(err); + return; + } + + resolve(data); + }); +}); +//=> Promise +``` + + +### API + +`pinkie` exports bare [ES2015 Promise](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects) implementation and polyfills [Node.js rejection events](https://nodejs.org/api/process.html#process_event_unhandledrejection). In case you forgot: + +#### new Promise(executor) + +Returns new instance of `Promise`. + +##### executor + +*Required* +Type: `function` + +Function with two arguments `resolve` and `reject`. The first argument fulfills the promise, the second argument rejects it. + +#### pinkie.all(promises) + +Returns a promise that resolves when all of the promises in the `promises` Array argument have resolved. + +#### pinkie.race(promises) + +Returns a promise that resolves or rejects as soon as one of the promises in the `promises` Array resolves or rejects, with the value or reason from that promise. + +#### pinkie.reject(reason) + +Returns a Promise object that is rejected with the given `reason`. + +#### pinkie.resolve(value) + +Returns a Promise object that is resolved with the given `value`. If the `value` is a thenable (i.e. has a then method), the returned promise will "follow" that thenable, adopting its eventual state; otherwise the returned promise will be fulfilled with the `value`. + + +## Related + +- [pinkie-promise](https://github.com/floatdrop/pinkie-promise) - Returns the native Promise or this module + + +## License + +MIT © [Vsevolod Strukchinsky](http://github.com/floatdrop) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/LICENSE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/LICENSE new file mode 100644 index 00000000..df112373 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/LICENSE @@ -0,0 +1,202 @@ + 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. + + Portions Copyright (c) Microsoft Corporation. + Portions Copyright 2017 Google Inc. + + 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/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/NOTICE b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/NOTICE new file mode 100644 index 00000000..814ec169 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/NOTICE @@ -0,0 +1,5 @@ +Playwright +Copyright (c) Microsoft Corporation + +This software contains code derived from the Puppeteer project (https://github.com/puppeteer/puppeteer), +available under the Apache 2.0 license (https://github.com/puppeteer/puppeteer/blob/master/LICENSE). diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/README.md new file mode 100644 index 00000000..f4de57de --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/README.md @@ -0,0 +1,141 @@ +# 🎭 Playwright + +[![npm version](https://img.shields.io/npm/v/playwright.svg?style=flat)](https://www.npmjs.com/package/playwright) [![Join Slack](https://img.shields.io/badge/join-slack-infomational)](https://aka.ms/playwright-slack) [![Chromium version](https://img.shields.io/badge/chromium-96.0.4641.0-blue.svg?logo=google-chrome)](https://www.chromium.org/Home) [![Firefox version](https://img.shields.io/badge/firefox-92.0-blue.svg?logo=mozilla-firefox)](https://www.mozilla.org/en-US/firefox/new/) [![WebKit version](https://img.shields.io/badge/webkit-15.0-blue.svg?logo=safari)](https://webkit.org/) + +## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/docs/api/class-playwright/) + +Playwright is a Node.js library to automate [Chromium](https://www.chromium.org/Home), [Firefox](https://www.mozilla.org/en-US/firefox/new/) and [WebKit](https://webkit.org/) with a single API. Playwright is built to enable cross-browser web automation that is **ever-green**, **capable**, **reliable** and **fast**. + +| | Linux | macOS | Windows | +| :--- | :---: | :---: | :---: | +| Chromium 96.0.4641.0 | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| WebKit 15.0 | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| Firefox 92.0 | :white_check_mark: | :white_check_mark: | :white_check_mark: | + +Headless execution is supported for all the browsers on all platforms. Check out [system requirements](https://playwright.dev/docs/intro/#system-requirements) for details. + +## Usage + +``` +npm i -D playwright +``` + +This installs Playwright and browser binaries for Chromium, Firefox and WebKit. Once installed, you can `require` Playwright in a Node.js script and automate web browser interactions. + +* [Getting started](https://playwright.dev/docs/intro) +* [Installation configuration](https://playwright.dev/docs/installation) +* [API reference](https://playwright.dev/docs/api/class-playwright) + +## Capabilities + +Playwright is built to automate the broad and growing set of web browser capabilities used by Single Page Apps and Progressive Web Apps. + +* Scenarios that span multiple page, domains and iframes +* Auto-wait for elements to be ready before executing actions (like click, fill) +* Intercept network activity for stubbing and mocking network requests +* Emulate mobile devices, geolocation, permissions +* Support for web components via shadow-piercing selectors +* Native input events for mouse and keyboard +* Upload and download files + +## Examples + +#### Page screenshot + +This code snippet navigates to whatsmyuseragent.org in Chromium, Firefox and WebKit, and saves 3 screenshots. + +```js +const playwright = require('playwright'); + +(async () => { + for (const browserType of ['chromium', 'firefox', 'webkit']) { + const browser = await playwright[browserType].launch(); + const context = await browser.newContext(); + const page = await context.newPage(); + await page.goto('http://whatsmyuseragent.org/'); + await page.screenshot({ path: `example-${browserType}.png` }); + await browser.close(); + } +})(); +``` + +#### Mobile and geolocation + +This snippet emulates Mobile Safari on a device at a given geolocation, navigates to maps.google.com, performs action and takes a screenshot. + +```js +const { webkit, devices } = require('playwright'); +const iPhone11 = devices['iPhone 11 Pro']; + +(async () => { + const browser = await webkit.launch(); + const context = await browser.newContext({ + ...iPhone11, + locale: 'en-US', + geolocation: { longitude: 12.492507, latitude: 41.889938 }, + permissions: ['geolocation'] + }); + const page = await context.newPage(); + await page.goto('https://maps.google.com'); + await page.click('text="Your location"'); + await page.waitForRequest(/.*preview\/pwa/); + await page.screenshot({ path: 'colosseum-iphone.png' }); + await browser.close(); +})(); +``` + +#### Evaluate in browser context + +This code snippet navigates to example.com in Firefox, and executes a script in the page context. + +```js +const { firefox } = require('playwright'); + +(async () => { + const browser = await firefox.launch(); + const context = await browser.newContext(); + const page = await context.newPage(); + await page.goto('https://www.example.com/'); + const dimensions = await page.evaluate(() => { + return { + width: document.documentElement.clientWidth, + height: document.documentElement.clientHeight, + deviceScaleFactor: window.devicePixelRatio + } + }); + console.log(dimensions); + + await browser.close(); +})(); +``` + +#### Intercept network requests + +This code snippet sets up request routing for a WebKit page to log all network requests. + +```js +const { webkit } = require('playwright'); + +(async () => { + const browser = await webkit.launch(); + const context = await browser.newContext(); + const page = await context.newPage(); + + // Log and continue all network requests + page.route('**', route => { + console.log(route.request().url()); + route.continue(); + }); + + await page.goto('http://todomvc.com'); + await browser.close(); +})(); +``` + +## Resources + +* [Documentation](https://playwright.dev/docs/intro/) +* [API reference](https://playwright.dev/docs/api/class-playwright/) +* [Community showcase](https://playwright.dev/docs/showcase/) +* [Contribution guide](CONTRIBUTING.md) +* [Changelog](https://github.com/microsoft/playwright/releases) diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/PrintDeps.exe b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/PrintDeps.exe new file mode 100644 index 0000000000000000000000000000000000000000..eb8ddf4d7b508ace4c40bd551fd821a05b92574f GIT binary patch literal 275456 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 literal 0 HcmV?d00001 diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/README.md b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/README.md new file mode 100644 index 00000000..f280ba3d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/README.md @@ -0,0 +1,2 @@ +See building instructions at [`//browser_patches/winldd/README.md`](../browser_patches/winldd/README.md) + diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/android-driver-target.apk b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/android-driver-target.apk new file mode 100644 index 0000000000000000000000000000000000000000..3ae99e75ff9a176f66758104bd07dead3db5933c GIT binary patch literal 770013 zcmeI)d0bB2{_yduQ6d#Z#)?R29t;^$%8(K=G$;*MgGQy4AqpWh7(z0WF(etwlsO3% zg^Ey!L>V&mT;0xn?%VyG^Bd0VdA)wmbDqzBy;ggzwf91noq%!vj4-f_yz~+yZ^QgrT!^A_Dx^tvwUiZn#ox)4R$` zGgB|=x0IBb&_`C%cANPu=S~_*mTKx_QU`RE)nNK5fF13CA>QicC!TekCJ(L@U=nmAbvCz=={hU4edgfz;lX52KhepW9UugMR zEGnj_X8NM)$5NjqMdiKE>Lh|LjI5LUCLU=#sW9!h!|u=-KGsWT^yn~YX_>w2ne6hk z>n=s5^2)i*NVxbq_dbdgU1jKO~;((L2vxZceVd0SM%cay!AgW%((6J_1KzG zC+v$mO=#nrU+G`c@?2W2PSlwPJ5MW@W$vFhU+$jr5Tk$)^Sc_|eCOXi_cp_~-F`(6 zyO&vZzQt8Xg+ujAE~L%qR{FYlY{QpPwKZOax%G!8M|!x|Zufhl-1OW@u5?QJS&4f( z$1~oHH0?cgvB{aPnJ*l+Zr007v8kwt-c{Lca?}>>w6YT&i>{{rX!_jx+$r()8O1Z( zeJ&j{^3XQZ_n+>Z>asy%cWUUA^9C;#_NeO_QfpOyN@rQLb7`&4{n6(ltETpil5aA; z{Iz=Ud-1oPCm$-G30r>l{G{OMr$NJe9+)^@EBNx-vf}eL4_A$S?G+Ps;q3dxo8%w4 zU%8*xVS=-M(btkRgM**k_x4}EzyFv$bY7b<`OhKO^pkGrf3Bz> za#Q-2T&P-A`J@Tnt){&5>$%P_U-{PKv0{di#kKpL7C5Ml$P{R0N?6{EOESDP zxr>))LR+EbO*$_E^=?1d{n}7 z3t|`Kn6@6)<9>D}UYL!X9T z>9F$5?5$gKKEG&u9voa(xvge)J za&GVf<1SsNrMe7ldh_!6%iyLTHF;C2RksGTyYG`ZbJngYKk6DUm)1SM?;15fb$w~F ziNi*Z6@JS@wS-59E-kv!sd{&smUig4$b$j5ye7(q?h6R;t?jB*t#q-Z(ErYO8;_|s zQau#<2<5D|cr0(%d7anTw1HO!Kfl;nZByZdJ&&rL9XeH|?wL?>cx6uJ+>OEAwP(H# zyEQRC)Zx{Qz*9y0GEO&S=!RBFrauntZS!>;OdE9l`uUV(PHnw@7es!>yt@ms10e7zYhh8_C zRC)j2O}|YA(Hn(6(Zl`HPflUVd=gY)tGAuh`;4iAs6jW(-3RkclN zaqYqDPFD<-cf5Wzq|)r0%v@u!MZHeEj|l14KQv|AgshX5ULU`Vx}0-!?a0ekN>i`N zj2)dM>s%G5xwcKDq|y$-UZoXwZ`&CiQJAN0o1DIKcvpiC>rysdx~DN=R>h!oYA%j} z-K-}}*=BLrV^LCRwQS#gOUypU-RPfCG&<&(rC6HUs_$ca>jdmR`|Q}qOq0MYP1n_{ zHVf|Wt+$)JFt$KYV{$LZ#^;7LU z_`02Lij4ATeVNG#C(NTl4)$qt`GC%4Wl#HEWAr1JXlh$}#qI3wy7t16KGxb_+P4x; z8#t=?10IoF73MZdV9A(dl{KI@h9$v8qE8UKc%8e-pjvGn4-U3Yw~ zw-#sjQrX^R;3umT;leAI`YN_wBQ3f8?w2@utqpd¥OXk5|r1yt-jP8xzaKY^#Js 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

  • +H(be3s|T`G}zak`RAcnrxN3-Lm5sP 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 literal 0 HcmV?d00001 diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/install_media_pack.ps1 b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/install_media_pack.ps1 new file mode 100644 index 00000000..61707542 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/install_media_pack.ps1 @@ -0,0 +1,5 @@ +$osInfo = Get-WmiObject -Class Win32_OperatingSystem +# check if running on Windows Server +if ($osInfo.ProductType -eq 3) { + Install-WindowsFeature Server-Media-Foundation +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_beta_linux.sh b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_beta_linux.sh new file mode 100755 index 00000000..0d7db063 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_beta_linux.sh @@ -0,0 +1,27 @@ +#!/bin/bash +set -e +set -x + +is_user_root () { [ "${EUID:-$(id -u)}" -eq 0 ]; } +if is_user_root; then + maybesudo="" +else + maybesudo="sudo" +fi + +# 1. make sure to remove old beta if any. +if dpkg --get-selections | grep -q "^google-chrome-beta[[:space:]]*install$" >/dev/null; then + $maybesudo apt-get remove -y google-chrome-beta +fi + +if ! command -v wget >/dev/null; then + $maybesudo apt-get install -y wget +fi + +# 2. download chrome beta from dl.google.com and install it. +cd /tmp +wget https://dl.google.com/linux/direct/google-chrome-beta_current_amd64.deb +$maybesudo apt-get install -y ./google-chrome-beta_current_amd64.deb +rm -rf ./google-chrome-beta_current_amd64.deb +cd - +google-chrome-beta --version diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_beta_mac.sh b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_beta_mac.sh new file mode 100755 index 00000000..910e57b0 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_beta_mac.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e +set -x + +rm -rf "/Applications/Google Chrome Beta.app" +cd /tmp +curl -o ./googlechromebeta.dmg -k https://dl.google.com/chrome/mac/beta/googlechromebeta.dmg +hdiutil attach -nobrowse -quiet -noautofsck -noautoopen -mountpoint /Volumes/googlechromebeta.dmg ./googlechromebeta.dmg +cp -rf "/Volumes/googlechromebeta.dmg/Google Chrome Beta.app" /Applications +hdiutil detach /Volumes/googlechromebeta.dmg +rm -rf /tmp/googlechromebeta.dmg + +/Applications/Google\ Chrome\ Beta.app/Contents/MacOS/Google\ Chrome\ Beta --version diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_beta_win.ps1 b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_beta_win.ps1 new file mode 100644 index 00000000..61e4578a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_beta_win.ps1 @@ -0,0 +1,25 @@ +$url = 'https://dl.google.com/tag/s/dl/chrome/install/beta/googlechromebetastandaloneenterprise.msi'; + +if ([Environment]::Is64BitProcess) { + $url = 'https://dl.google.com/tag/s/dl/chrome/install/beta/googlechromebetastandaloneenterprise64.msi' +} + +Write-Host "Downloading Google Chrome Beta" +$wc = New-Object net.webclient +$msiInstaller = "$env:temp\google-chrome-beta.msi" +$wc.Downloadfile($url, $msiInstaller) + +Write-Host "Installing Google Chrome Beta" +$arguments = "/i `"$msiInstaller`" /quiet" +Start-Process msiexec.exe -ArgumentList $arguments -Wait +Remove-Item $msiInstaller + +$suffix = "\\Google\\Chrome Beta\\Application\\chrome.exe" +if (Test-Path "${env:ProgramFiles(x86)}$suffix") { + (Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo +} elseif (Test-Path "${env:ProgramFiles}$suffix") { + (Get-Item "${env:ProgramFiles}$suffix").VersionInfo +} else { + write-host "ERROR: failed to install Google Chrome Beta" + exit 1 +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_stable_linux.sh b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_stable_linux.sh new file mode 100755 index 00000000..6789a062 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_stable_linux.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -e +set -x + +is_user_root () { [ "${EUID:-$(id -u)}" -eq 0 ]; } +if is_user_root; then + maybesudo="" +else + maybesudo="sudo" +fi + + +# 1. make sure to remove old stable if any. +if dpkg --get-selections | grep -q "^google-chrome[[:space:]]*install$" >/dev/null; then + $maybesudo apt-get remove -y google-chrome +fi + +if ! command -v wget >/dev/null; then + $maybesudo apt-get install -y wget +fi + +# 2. download chrome stable from dl.google.com and install it. +cd /tmp +wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb +$maybesudo apt-get install -y ./google-chrome-stable_current_amd64.deb +rm -rf ./google-chrome-stable_current_amd64.deb +cd - +google-chrome --version diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_stable_mac.sh b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_stable_mac.sh new file mode 100755 index 00000000..486040bb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_stable_mac.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -e +set -x + +rm -rf "/Applications/Google Chrome.app" +cd /tmp +curl -o ./googlechrome.dmg -k https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg +hdiutil attach -nobrowse -quiet -noautofsck -noautoopen -mountpoint /Volumes/googlechrome.dmg ./googlechrome.dmg +cp -rf "/Volumes/googlechrome.dmg/Google Chrome.app" /Applications +hdiutil detach /Volumes/googlechrome.dmg +rm -rf /tmp/googlechrome.dmg +/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_stable_win.ps1 b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_stable_win.ps1 new file mode 100644 index 00000000..87d94936 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_chrome_stable_win.ps1 @@ -0,0 +1,26 @@ +$url = 'https://dl.google.com/tag/s/dl/chrome/install/googlechromestandaloneenterprise.msi'; + +if ([Environment]::Is64BitProcess) { + $url = 'https://dl.google.com/tag/s/dl/chrome/install/googlechromestandaloneenterprise64.msi' +} + +$wc = New-Object net.webclient +$msiInstaller = "$env:temp\google-chrome.msi" +Write-Host "Downloading Google Chrome" +$wc.Downloadfile($url, $msiInstaller) + +Write-Host "Installing Google Chrome" +$arguments = "/i `"$msiInstaller`" /quiet" +Start-Process msiexec.exe -ArgumentList $arguments -Wait +Remove-Item $msiInstaller + + +$suffix = "\\Google\\Chrome\\Application\\chrome.exe" +if (Test-Path "${env:ProgramFiles(x86)}$suffix") { + (Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo +} elseif (Test-Path "${env:ProgramFiles}$suffix") { + (Get-Item "${env:ProgramFiles}$suffix").VersionInfo +} else { + write-host "ERROR: failed to install Google Chrome" + exit 1 +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_beta_linux.sh b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_beta_linux.sh new file mode 100755 index 00000000..a112158c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_beta_linux.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -e +set -x + +is_user_root () { [ "${EUID:-$(id -u)}" -eq 0 ]; } +if is_user_root; then + maybesudo="" +else + maybesudo="sudo" +fi + +if dpkg --get-selections | grep -q "^microsoft-edge-beta[[:space:]]*install$" >/dev/null; then + $maybesudo apt-get remove -y microsoft-edge-beta +fi + +if ! command -v curl >/dev/null; then + $maybesudo apt-get install -y curl +fi + +curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /tmp/microsoft.gpg +$maybesudo install -o root -g root -m 644 /tmp/microsoft.gpg /etc/apt/trusted.gpg.d/ +$maybesudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list' +rm /tmp/microsoft.gpg +$maybesudo apt-get update && $maybesudo apt-get install -y microsoft-edge-beta + +microsoft-edge-beta --version diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_beta_mac.sh b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_beta_mac.sh new file mode 100755 index 00000000..fce4b692 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_beta_mac.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -e +set -x + +cd /tmp +curl -o ./msedge_beta.pkg -k "$1" +# Note: there's no way to uninstall previously installed MSEdge. +# However, running PKG again seems to update installation. +sudo installer -pkg /tmp/msedge_beta.pkg -target / +rm -rf /tmp/msedge_beta.pkg +/Applications/Microsoft\ Edge\ Beta.app/Contents/MacOS/Microsoft\ Edge\ Beta --version diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_beta_win.ps1 b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_beta_win.ps1 new file mode 100644 index 00000000..253e4eee --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_beta_win.ps1 @@ -0,0 +1,21 @@ +$url = $args[0] + +Write-Host "Downloading Microsoft Edge Beta" +$wc = New-Object net.webclient +$msiInstaller = "$env:temp\microsoft-edge-beta.msi" +$wc.Downloadfile($url, $msiInstaller) + +Write-Host "Installing Microsoft Edge Beta" +$arguments = "/i `"$msiInstaller`" /quiet" +Start-Process msiexec.exe -ArgumentList $arguments -Wait +Remove-Item $msiInstaller + +$suffix = "\\Microsoft\\Edge Beta\\Application\\msedge.exe" +if (Test-Path "${env:ProgramFiles(x86)}$suffix") { + (Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo +} elseif (Test-Path "${env:ProgramFiles}$suffix") { + (Get-Item "${env:ProgramFiles}$suffix").VersionInfo +} else { + write-host "ERROR: failed to install Microsoft Edge" + exit 1 +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_dev_linux.sh b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_dev_linux.sh new file mode 100755 index 00000000..5cdbf9c4 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_dev_linux.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -e +set -x + +is_user_root () { [ "${EUID:-$(id -u)}" -eq 0 ]; } +if is_user_root; then + maybesudo="" +else + maybesudo="sudo" +fi + +if dpkg --get-selections | grep -q "^microsoft-edge-dev[[:space:]]*install$" >/dev/null; then + $maybesudo apt-get remove -y microsoft-edge-dev +fi + +if ! command -v curl >/dev/null; then + $maybesudo apt-get install -y curl +fi + +curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /tmp/microsoft.gpg +$maybesudo install -o root -g root -m 644 /tmp/microsoft.gpg /etc/apt/trusted.gpg.d/ +$maybesudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list' +rm /tmp/microsoft.gpg +$maybesudo apt-get update && $maybesudo apt-get install -y microsoft-edge-dev + +microsoft-edge-dev --version diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_dev_mac.sh b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_dev_mac.sh new file mode 100755 index 00000000..e97ff973 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_dev_mac.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -e +set -x + +cd /tmp +curl -o ./msedge_dev.pkg -k "$1" +# Note: there's no way to uninstall previously installed MSEdge. +# However, running PKG again seems to update installation. +sudo installer -pkg /tmp/msedge_dev.pkg -target / +rm -rf /tmp/msedge_dev.pkg +/Applications/Microsoft\ Edge\ Dev.app/Contents/MacOS/Microsoft\ Edge\ Dev --version diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_dev_win.ps1 b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_dev_win.ps1 new file mode 100644 index 00000000..9601d4d6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_dev_win.ps1 @@ -0,0 +1,21 @@ +$url = $args[0] + +Write-Host "Downloading Microsoft Edge Dev" +$wc = New-Object net.webclient +$msiInstaller = "$env:temp\microsoft-edge-dev.msi" +$wc.Downloadfile($url, $msiInstaller) + +Write-Host "Installing Microsoft Edge Dev" +$arguments = "/i `"$msiInstaller`" /quiet" +Start-Process msiexec.exe -ArgumentList $arguments -Wait +Remove-Item $msiInstaller + +$suffix = "\\Microsoft\\Edge Dev\\Application\\msedge.exe" +if (Test-Path "${env:ProgramFiles(x86)}$suffix") { + (Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo +} elseif (Test-Path "${env:ProgramFiles}$suffix") { + (Get-Item "${env:ProgramFiles}$suffix").VersionInfo +} else { + write-host "ERROR: failed to install Microsoft Edge" + exit 1 +} diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_stable_mac.sh b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_stable_mac.sh new file mode 100755 index 00000000..9e0f53ec --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_stable_mac.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -e +set -x + +cd /tmp +curl -o ./msedge_stable.pkg -k "$1" +# Note: there's no way to uninstall previously installed MSEdge. +# However, running PKG again seems to update installation. +sudo installer -pkg /tmp/msedge_stable.pkg -target / +rm -rf /tmp/msedge_stable.pkg +/Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge --version diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_stable_win.ps1 b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_stable_win.ps1 new file mode 100644 index 00000000..85e50d8b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/bin/reinstall_msedge_stable_win.ps1 @@ -0,0 +1,21 @@ +$url = $args[0] + +Write-Host "Downloading Microsoft Edge" +$wc = New-Object net.webclient +$msiInstaller = "$env:temp\microsoft-edge-stable.msi" +$wc.Downloadfile($url, $msiInstaller) + +Write-Host "Installing Microsoft Edge" +$arguments = "/i `"$msiInstaller`" /quiet" +Start-Process msiexec.exe -ArgumentList $arguments -Wait +Remove-Item $msiInstaller + +$suffix = "\\Microsoft\\Edge\\Application\\msedge.exe" +if (Test-Path "${env:ProgramFiles(x86)}$suffix") { + (Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo +} elseif (Test-Path "${env:ProgramFiles}$suffix") { + (Get-Item "${env:ProgramFiles}$suffix").VersionInfo +} else { + write-host "ERROR: failed to install Microsoft Edge" + exit 1 +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/browsers.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/browsers.json new file mode 100644 index 00000000..6bac7864 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/browsers.json @@ -0,0 +1,38 @@ +{ + "comment": "Do not edit this file, use utils/roll_browser.js", + "browsers": [ + { + "name": "chromium", + "revision": "920619", + "installByDefault": true + }, + { + "name": "chromium-with-symbols", + "revision": "920619", + "installByDefault": false + }, + { + "name": "firefox", + "revision": "1295", + "installByDefault": true + }, + { + "name": "firefox-beta", + "revision": "1289", + "installByDefault": false + }, + { + "name": "webkit", + "revision": "1542", + "installByDefault": true, + "revisionOverrides": { + "mac10.14": "1446" + } + }, + { + "name": "ffmpeg", + "revision": "1005", + "installByDefault": true + } + ] +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/commitinfo b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/commitinfo new file mode 100644 index 00000000..f9da9da3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/commitinfo @@ -0,0 +1 @@ +d379db5ae0c6d20f9026dfa06639d9b906f909e0 \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/index.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/index.js new file mode 100644 index 00000000..4b9607bb --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/index.js @@ -0,0 +1,17 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ + +module.exports = require('./lib/inprocess'); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/index.mjs b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/index.mjs new file mode 100644 index 00000000..9d9b095a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/index.mjs @@ -0,0 +1,27 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ + +import playwright from './index.js'; + +export const chromium = playwright.chromium; +export const firefox = playwright.firefox; +export const webkit = playwright.webkit; +export const selectors = playwright.selectors; +export const devices = playwright.devices; +export const errors = playwright.errors; +export const _electron = playwright._electron; +export const _android = playwright._android; +export default playwright; diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/install.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/install.js new file mode 100644 index 00000000..8fd9adb0 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/install.js @@ -0,0 +1,19 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ + +const { installDefaultBrowsersForNpmInstall } = require('./lib/utils/registry'); + +installDefaultBrowsersForNpmInstall(); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/browserServerImpl.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/browserServerImpl.js new file mode 100644 index 00000000..1a0141ad --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/browserServerImpl.js @@ -0,0 +1,187 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.BrowserServerLauncherImpl = void 0; + +var _browser = require("./server/browser"); + +var _ws = require("ws"); + +var _dispatcher = require("./dispatchers/dispatcher"); + +var _browserContextDispatcher = require("./dispatchers/browserContextDispatcher"); + +var _clientHelper = require("./client/clientHelper"); + +var _utils = require("./utils/utils"); + +var _selectorsDispatcher = require("./dispatchers/selectorsDispatcher"); + +var _selectors = require("./server/selectors"); + +var _instrumentation = require("./server/instrumentation"); + +var _playwright = require("./server/playwright"); + +var _playwrightDispatcher = require("./dispatchers/playwrightDispatcher"); + +var _playwrightServer = require("./remote/playwrightServer"); + +var _browserContext = require("./server/browserContext"); + +var _cdpSessionDispatcher = require("./dispatchers/cdpSessionDispatcher"); + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +class BrowserServerLauncherImpl { + constructor(browserName) { + this._browserName = void 0; + this._browserName = browserName; + } + + async launchServer(options = {}) { + const playwright = (0, _playwright.createPlaywright)('javascript'); // 1. Pre-launch the browser + + const browser = await playwright[this._browserName].launch((0, _instrumentation.internalCallMetadata)(), { ...options, + ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : undefined, + ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs), + env: options.env ? (0, _clientHelper.envObjectToArray)(options.env) : undefined + }, toProtocolLogger(options.logger)); + let path = `/${(0, _utils.createGuid)()}`; + if (options.wsPath) path = options.wsPath.startsWith('/') ? options.wsPath : `/${options.wsPath}`; // 2. Start the server + + const delegate = { + path, + allowMultipleClients: true, + onClose: () => {}, + onConnect: this._onConnect.bind(this, playwright, browser) + }; + const server = new _playwrightServer.PlaywrightServer(delegate); + const wsEndpoint = await server.listen(options.port); // 3. Return the BrowserServer interface + + const browserServer = new _ws.EventEmitter(); + + browserServer.process = () => browser.options.browserProcess.process; + + browserServer.wsEndpoint = () => wsEndpoint; + + browserServer.close = () => browser.options.browserProcess.close(); + + browserServer.kill = () => browser.options.browserProcess.kill(); + + browserServer._disconnectForTest = () => server.close(); + + browser.options.browserProcess.onclose = async (exitCode, signal) => { + server.close(); + browserServer.emit('close', exitCode, signal); + }; + + return browserServer; + } + + async _onConnect(playwright, browser, connection, forceDisconnect) { + let browserDispatcher; + new _dispatcher.Root(connection, async scope => { + const selectors = new _selectors.Selectors(); + const selectorsDispatcher = new _selectorsDispatcher.SelectorsDispatcher(scope, selectors); + browserDispatcher = new ConnectedBrowserDispatcher(scope, browser, selectors); + browser.on(_browser.Browser.Events.Disconnected, () => { + // Underlying browser did close for some reason - force disconnect the client. + forceDisconnect(); + }); + return new _playwrightDispatcher.PlaywrightDispatcher(scope, playwright, selectorsDispatcher, browserDispatcher); + }); + return () => { + var _browserDispatcher; + + // Cleanup contexts upon disconnect. + (_browserDispatcher = browserDispatcher) === null || _browserDispatcher === void 0 ? void 0 : _browserDispatcher.cleanupContexts().catch(e => {}); + }; + } + +} // This class implements multiplexing browser dispatchers over a single Browser instance. + + +exports.BrowserServerLauncherImpl = BrowserServerLauncherImpl; + +class ConnectedBrowserDispatcher extends _dispatcher.Dispatcher { + constructor(scope, browser, selectors) { + super(scope, browser, 'Browser', { + version: browser.version(), + name: browser.options.name + }, true); + this._contexts = new Set(); + this._selectors = void 0; + this._selectors = selectors; + } + + async newContext(params, metadata) { + if (params.recordVideo) params.recordVideo.dir = this._object.options.artifactsDir; + const context = await this._object.newContext(params); + + this._contexts.add(context); + + context._setSelectors(this._selectors); + + context.on(_browserContext.BrowserContext.Events.Close, () => this._contexts.delete(context)); + if (params.storageState) await context.setStorageState(metadata, params.storageState); + return { + context: new _browserContextDispatcher.BrowserContextDispatcher(this._scope, context) + }; + } + + async close() {// Client should not send us Browser.close. + } + + async killForTests() {// Client should not send us Browser.killForTests. + } + + async newBrowserCDPSession() { + if (!this._object.options.isChromium) throw new Error(`CDP session is only available in Chromium`); + const crBrowser = this._object; + return { + session: new _cdpSessionDispatcher.CDPSessionDispatcher(this._scope, await crBrowser.newBrowserCDPSession()) + }; + } + + async startTracing(params) { + if (!this._object.options.isChromium) throw new Error(`Tracing is only available in Chromium`); + const crBrowser = this._object; + await crBrowser.startTracing(params.page ? params.page._object : undefined, params); + } + + async stopTracing() { + if (!this._object.options.isChromium) throw new Error(`Tracing is only available in Chromium`); + const crBrowser = this._object; + const buffer = await crBrowser.stopTracing(); + return { + binary: buffer.toString('base64') + }; + } + + async cleanupContexts() { + await Promise.all(Array.from(this._contexts).map(context => context.close((0, _instrumentation.internalCallMetadata)()))); + } + +} + +function toProtocolLogger(logger) { + return logger ? (direction, message) => { + if (logger.isEnabled('protocol', 'verbose')) logger.log('protocol', 'verbose', (direction === 'send' ? 'SEND ► ' : '◀ RECV ') + JSON.stringify(message), [], {}); + } : undefined; +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/cli/cli.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/cli/cli.js new file mode 100755 index 00000000..76b7a021 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/cli/cli.js @@ -0,0 +1,549 @@ +#!/usr/bin/env node + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ + +/* eslint-disable no-console */ +"use strict"; + +var _fs = _interopRequireDefault(require("fs")); + +var _os = _interopRequireDefault(require("os")); + +var _path = _interopRequireDefault(require("path")); + +var _commander = _interopRequireDefault(require("commander")); + +var _driver = require("./driver"); + +var _traceViewer = require("../server/trace/viewer/traceViewer"); + +var playwright = _interopRequireWildcard(require("../..")); + +var _child_process = require("child_process"); + +var _registry = require("../utils/registry"); + +var _gridAgent = require("../grid/gridAgent"); + +var _gridServer = require("../grid/gridServer"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const packageJSON = require('../../package.json'); + +_commander.default.version('Version ' + packageJSON.version).name(process.env.PW_CLI_NAME || 'npx playwright'); + +commandWithOpenOptions('open [url]', 'open page in browser specified via -b, --browser', []).action(function (url, command) { + open(command, url, language()).catch(logErrorAndExit); +}).on('--help', function () { + console.log(''); + console.log('Examples:'); + console.log(''); + console.log(' $ open'); + console.log(' $ open -b webkit https://example.com'); +}); +commandWithOpenOptions('codegen [url]', 'open page and generate code for user actions', [['-o, --output ', 'saves the generated script to a file'], ['--target ', `language to generate, one of javascript, test, python, python-async, csharp`, language()]]).action(function (url, command) { + codegen(command, url, command.target, command.output).catch(logErrorAndExit); +}).on('--help', function () { + console.log(''); + console.log('Examples:'); + console.log(''); + console.log(' $ codegen'); + console.log(' $ codegen --target=python'); + console.log(' $ codegen -b webkit https://example.com'); +}); + +_commander.default.command('debug [args...]', { + hidden: true +}).description('run command in debug mode: disable timeout, open inspector').allowUnknownOption(true).action(function (app, args) { + (0, _child_process.spawn)(app, args, { + env: { ...process.env, + PWDEBUG: '1' + }, + stdio: 'inherit' + }); +}).on('--help', function () { + console.log(''); + console.log('Examples:'); + console.log(''); + console.log(' $ debug node test.js'); + console.log(' $ debug npm run test'); +}); + +function suggestedBrowsersToInstall() { + return _registry.registry.executables().filter(e => e.installType !== 'none' && e.type !== 'tool').map(e => e.name).join(', '); +} + +function checkBrowsersToInstall(args) { + const faultyArguments = []; + const executables = []; + + for (const arg of args) { + const executable = _registry.registry.findExecutable(arg); + + if (!executable || executable.installType === 'none') faultyArguments.push(arg);else executables.push(executable); + } + + if (faultyArguments.length) { + console.log(`Invalid installation targets: ${faultyArguments.map(name => `'${name}'`).join(', ')}. Expecting one of: ${suggestedBrowsersToInstall()}`); + process.exit(1); + } + + return executables; +} + +_commander.default.command('install [browser...]').description('ensure browsers necessary for this version of Playwright are installed').option('--with-deps', 'install system dependencies for browsers').action(async function (args, command) { + try { + if (!args.length) { + if (command.opts().withDeps) await _registry.registry.installDeps(); + await _registry.registry.install(); + } else { + const executables = checkBrowsersToInstall(args); + if (command.opts().withDeps) await _registry.registry.installDeps(executables); + await _registry.registry.install(executables); + } + } catch (e) { + console.log(`Failed to install browsers\n${e}`); + process.exit(1); + } +}).on('--help', function () { + console.log(``); + console.log(`Examples:`); + console.log(` - $ install`); + console.log(` Install default browsers.`); + console.log(``); + console.log(` - $ install chrome firefox`); + console.log(` Install custom browsers, supports ${suggestedBrowsersToInstall()}.`); +}); + +_commander.default.command('install-deps [browser...]').description('install dependencies necessary to run browsers (will ask for sudo permissions)').action(async function (args) { + try { + if (!args.length) await _registry.registry.installDeps();else await _registry.registry.installDeps(checkBrowsersToInstall(args)); + } catch (e) { + console.log(`Failed to install browser dependencies\n${e}`); + process.exit(1); + } +}).on('--help', function () { + console.log(``); + console.log(`Examples:`); + console.log(` - $ install-deps`); + console.log(` Install dependencies for default browsers.`); + console.log(``); + console.log(` - $ install-deps chrome firefox`); + console.log(` Install dependencies for specific browsers, supports ${suggestedBrowsersToInstall()}.`); +}); + +const browsers = [{ + alias: 'cr', + name: 'Chromium', + type: 'chromium' +}, { + alias: 'ff', + name: 'Firefox', + type: 'firefox' +}, { + alias: 'wk', + name: 'WebKit', + type: 'webkit' +}]; + +for (const { + alias, + name, + type +} of browsers) { + commandWithOpenOptions(`${alias} [url]`, `open page in ${name}`, []).action(function (url, command) { + open({ ...command, + browser: type + }, url, command.target).catch(logErrorAndExit); + }).on('--help', function () { + console.log(''); + console.log('Examples:'); + console.log(''); + console.log(` $ ${alias} https://example.com`); + }); +} + +commandWithOpenOptions('screenshot ', 'capture a page screenshot', [['--wait-for-selector ', 'wait for selector before taking a screenshot'], ['--wait-for-timeout ', 'wait for timeout in milliseconds before taking a screenshot'], ['--full-page', 'whether to take a full page screenshot (entire scrollable area)']]).action(function (url, filename, command) { + screenshot(command, command, url, filename).catch(logErrorAndExit); +}).on('--help', function () { + console.log(''); + console.log('Examples:'); + console.log(''); + console.log(' $ screenshot -b webkit https://example.com example.png'); +}); +commandWithOpenOptions('pdf ', 'save page as pdf', [['--wait-for-selector ', 'wait for given selector before saving as pdf'], ['--wait-for-timeout ', 'wait for given timeout in milliseconds before saving as pdf']]).action(function (url, filename, command) { + pdf(command, command, url, filename).catch(logErrorAndExit); +}).on('--help', function () { + console.log(''); + console.log('Examples:'); + console.log(''); + console.log(' $ pdf https://example.com example.pdf'); +}); + +_commander.default.command('experimental-grid-server', { + hidden: true +}).option('--port ', 'grid port; defaults to 3333').option('--agent-factory ', 'path to grid agent factory or npm package').option('--auth-token ', 'optional authentication token').action(function (options) { + (0, _gridServer.launchGridServer)(options.agentFactory, options.port || 3333, options.authToken); +}); + +_commander.default.command('experimental-grid-agent', { + hidden: true +}).requiredOption('--agent-id ', 'agent ID').requiredOption('--grid-url ', 'grid URL').action(function (options) { + (0, _gridAgent.launchGridAgent)(options.agentId, options.gridUrl); +}); + +_commander.default.command('show-trace [trace]').option('-b, --browser ', 'browser to use, one of cr, chromium, ff, firefox, wk, webkit', 'chromium').description('Show trace viewer').action(function (trace, command) { + if (command.browser === 'cr') command.browser = 'chromium'; + if (command.browser === 'ff') command.browser = 'firefox'; + if (command.browser === 'wk') command.browser = 'webkit'; + (0, _traceViewer.showTraceViewer)(trace, command.browser).catch(logErrorAndExit); +}).on('--help', function () { + console.log(''); + console.log('Examples:'); + console.log(''); + console.log(' $ show-trace trace/directory'); +}); + +if (!process.env.PW_CLI_TARGET_LANG) { + let playwrightTestPackagePath = null; + + try { + const isLocal = packageJSON.name === '@playwright/test' || process.env.PWTEST_CLI_ALLOW_TEST_COMMAND; + + if (isLocal) { + playwrightTestPackagePath = '../test/cli'; + } else { + playwrightTestPackagePath = require.resolve('@playwright/test/lib/test/cli', { + paths: [__dirname, process.cwd()] + }); + } + } catch {} + + if (playwrightTestPackagePath) { + require(playwrightTestPackagePath).addTestCommand(_commander.default); + } else { + const command = _commander.default.command('test').allowUnknownOption(true); + + command.description('Run tests with Playwright Test. Available in @playwright/test package.'); + command.action(async (args, opts) => { + console.error('Please install @playwright/test package to use Playwright Test.'); + console.error(' npm install -D @playwright/test'); + process.exit(1); + }); + } +} + +if (process.argv[2] === 'run-driver') (0, _driver.runDriver)();else if (process.argv[2] === 'run-server') (0, _driver.runServer)(process.argv[3] ? +process.argv[3] : undefined).catch(logErrorAndExit);else if (process.argv[2] === 'print-api-json') (0, _driver.printApiJson)();else if (process.argv[2] === 'launch-server') (0, _driver.launchBrowserServer)(process.argv[3], process.argv[4]).catch(logErrorAndExit);else _commander.default.parse(process.argv); + +async function launchContext(options, headless, executablePath) { + validateOptions(options); + const browserType = lookupBrowserType(options); + const launchOptions = { + headless, + executablePath + }; + if (options.channel) launchOptions.channel = options.channel; + const contextOptions = // Copy the device descriptor since we have to compare and modify the options. + options.device ? { ...playwright.devices[options.device] + } : {}; // In headful mode, use host device scale factor for things to look nice. + // In headless, keep things the way it works in Playwright by default. + // Assume high-dpi on MacOS. TODO: this is not perfect. + + if (!headless) contextOptions.deviceScaleFactor = _os.default.platform() === 'darwin' ? 2 : 1; // Work around the WebKit GTK scrolling issue. + + if (browserType.name() === 'webkit' && process.platform === 'linux') { + delete contextOptions.hasTouch; + delete contextOptions.isMobile; + } + + if (contextOptions.isMobile && browserType.name() === 'firefox') contextOptions.isMobile = undefined; + contextOptions.acceptDownloads = true; // Proxy + + if (options.proxyServer) { + launchOptions.proxy = { + server: options.proxyServer + }; + } + + const browser = await browserType.launch(launchOptions); // Viewport size + + if (options.viewportSize) { + try { + const [width, height] = options.viewportSize.split(',').map(n => parseInt(n, 10)); + contextOptions.viewport = { + width, + height + }; + } catch (e) { + console.log('Invalid window size format: use "width, height", for example --window-size=800,600'); + process.exit(0); + } + } // Geolocation + + + if (options.geolocation) { + try { + const [latitude, longitude] = options.geolocation.split(',').map(n => parseFloat(n.trim())); + contextOptions.geolocation = { + latitude, + longitude + }; + } catch (e) { + console.log('Invalid geolocation format: user lat, long, for example --geolocation="37.819722,-122.478611"'); + process.exit(0); + } + + contextOptions.permissions = ['geolocation']; + } // User agent + + + if (options.userAgent) contextOptions.userAgent = options.userAgent; // Lang + + if (options.lang) contextOptions.locale = options.lang; // Color scheme + + if (options.colorScheme) contextOptions.colorScheme = options.colorScheme; // Timezone + + if (options.timezone) contextOptions.timezoneId = options.timezone; // Storage + + if (options.loadStorage) contextOptions.storageState = options.loadStorage; + if (options.ignoreHttpsErrors) contextOptions.ignoreHTTPSErrors = true; // Close app when the last window closes. + + const context = await browser.newContext(contextOptions); + let closingBrowser = false; + + async function closeBrowser() { + // We can come here multiple times. For example, saving storage creates + // a temporary page and we call closeBrowser again when that page closes. + if (closingBrowser) return; + closingBrowser = true; + if (options.saveTrace) await context.tracing.stop({ + path: options.saveTrace + }); + if (options.saveStorage) await context.storageState({ + path: options.saveStorage + }).catch(e => null); + await browser.close(); + } + + context.on('page', page => { + page.on('dialog', () => {}); // Prevent dialogs from being automatically dismissed. + + page.on('close', () => { + const hasPage = browser.contexts().some(context => context.pages().length > 0); + if (hasPage) return; // Avoid the error when the last page is closed because the browser has been closed. + + closeBrowser().catch(e => null); + }); + }); + + if (options.timeout) { + context.setDefaultTimeout(parseInt(options.timeout, 10)); + context.setDefaultNavigationTimeout(parseInt(options.timeout, 10)); + } + + if (options.saveTrace) await context.tracing.start({ + screenshots: true, + snapshots: true + }); // Omit options that we add automatically for presentation purpose. + + delete launchOptions.headless; + delete launchOptions.executablePath; + delete contextOptions.deviceScaleFactor; + delete contextOptions.acceptDownloads; + return { + browser, + browserName: browserType.name(), + context, + contextOptions, + launchOptions + }; +} + +async function openPage(context, url) { + const page = await context.newPage(); + + if (url) { + if (_fs.default.existsSync(url)) url = 'file://' + _path.default.resolve(url);else if (!url.startsWith('http') && !url.startsWith('file://') && !url.startsWith('about:') && !url.startsWith('data:')) url = 'http://' + url; + await page.goto(url); + } + + return page; +} + +async function open(options, url, language) { + const { + context, + launchOptions, + contextOptions + } = await launchContext(options, !!process.env.PWTEST_CLI_HEADLESS, process.env.PWTEST_CLI_EXECUTABLE_PATH); + await context._enableRecorder({ + language, + launchOptions, + contextOptions, + device: options.device, + saveStorage: options.saveStorage + }); + await openPage(context, url); + if (process.env.PWTEST_CLI_EXIT) await Promise.all(context.pages().map(p => p.close())); +} + +async function codegen(options, url, language, outputFile) { + const { + context, + launchOptions, + contextOptions + } = await launchContext(options, !!process.env.PWTEST_CLI_HEADLESS, process.env.PWTEST_CLI_EXECUTABLE_PATH); + await context._enableRecorder({ + language, + launchOptions, + contextOptions, + device: options.device, + saveStorage: options.saveStorage, + startRecording: true, + outputFile: outputFile ? _path.default.resolve(outputFile) : undefined + }); + await openPage(context, url); + if (process.env.PWTEST_CLI_EXIT) await Promise.all(context.pages().map(p => p.close())); +} + +async function waitForPage(page, captureOptions) { + if (captureOptions.waitForSelector) { + console.log(`Waiting for selector ${captureOptions.waitForSelector}...`); + await page.waitForSelector(captureOptions.waitForSelector); + } + + if (captureOptions.waitForTimeout) { + console.log(`Waiting for timeout ${captureOptions.waitForTimeout}...`); + await page.waitForTimeout(parseInt(captureOptions.waitForTimeout, 10)); + } +} + +async function screenshot(options, captureOptions, url, path) { + const { + browser, + context + } = await launchContext(options, true); + console.log('Navigating to ' + url); + const page = await openPage(context, url); + await waitForPage(page, captureOptions); + console.log('Capturing screenshot into ' + path); + await page.screenshot({ + path, + fullPage: !!captureOptions.fullPage + }); + await browser.close(); +} + +async function pdf(options, captureOptions, url, path) { + if (options.browser !== 'chromium') { + console.error('PDF creation is only working with Chromium'); + process.exit(1); + } + + const { + browser, + context + } = await launchContext({ ...options, + browser: 'chromium' + }, true); + console.log('Navigating to ' + url); + const page = await openPage(context, url); + await waitForPage(page, captureOptions); + console.log('Saving as pdf into ' + path); + await page.pdf({ + path + }); + await browser.close(); +} + +function lookupBrowserType(options) { + let name = options.browser; + + if (options.device) { + const device = playwright.devices[options.device]; + name = device.defaultBrowserType; + } + + let browserType; + + switch (name) { + case 'chromium': + browserType = playwright.chromium; + break; + + case 'webkit': + browserType = playwright.webkit; + break; + + case 'firefox': + browserType = playwright.firefox; + break; + + case 'cr': + browserType = playwright.chromium; + break; + + case 'wk': + browserType = playwright.webkit; + break; + + case 'ff': + browserType = playwright.firefox; + break; + } + + if (browserType) return browserType; + + _commander.default.help(); +} + +function validateOptions(options) { + if (options.device && !(options.device in playwright.devices)) { + console.log(`Device descriptor not found: '${options.device}', available devices are:`); + + for (const name in playwright.devices) console.log(` "${name}"`); + + process.exit(0); + } + + if (options.colorScheme && !['light', 'dark'].includes(options.colorScheme)) { + console.log('Invalid color scheme, should be one of "light", "dark"'); + process.exit(0); + } +} + +function logErrorAndExit(e) { + console.error(e); + process.exit(1); +} + +function language() { + return process.env.PW_CLI_TARGET_LANG || 'test'; +} + +function commandWithOpenOptions(command, description, options) { + let result = _commander.default.command(command).description(description); + + for (const option of options) result = result.option(option[0], ...option.slice(1)); + + return result.option('-b, --browser ', 'browser to use, one of cr, chromium, ff, firefox, wk, webkit', 'chromium').option('--channel ', 'Chromium distribution channel, "chrome", "chrome-beta", "msedge-dev", etc').option('--color-scheme ', 'emulate preferred color scheme, "light" or "dark"').option('--device ', 'emulate device, for example "iPhone 11"').option('--geolocation ', 'specify geolocation coordinates, for example "37.819722,-122.478611"').option('--ignore-https-errors', 'ignore https errors').option('--load-storage ', 'load context storage state from the file, previously saved with --save-storage').option('--lang ', 'specify language / locale, for example "en-GB"').option('--proxy-server ', 'specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"').option('--save-storage ', 'save context storage state at the end, for later use with --load-storage').option('--save-trace ', 'record a trace for the session and save it to a file').option('--timezone +
    +
      + ${[...this._agents].map(([agentId, agent]) => ` +
    • +
      Agent ${mangle(agentId)}: ${agent.status()}
      +
      Workers: ${agent._workers.size}
      +
        + ${[...agent._workers].map(([workerId, worker]) => ` +
      • worker ${mangle(workerId)} - ${JSON.stringify(worker.debugInfo())}
      • + `)} +
      +
    • + `)} +
    + `; + } + + async start(port) { + await this._server.start(port); + } + + urlPrefix() { + return this._server.urlPrefix() + this._securePath('/'); + } + + async stop() { + for (const agent of this._agents.values()) agent.closeAgent(WSErrors.GRID_SHUTDOWN); + + (0, _assert.default)(this._agents.size === 0); + await this._server.stop(); + } + +} + +function mangle(sessionId) { + return sessionId.replace(/\w{28}/, 'x'.repeat(28)); +} + +async function launchGridServer(factoryPathOrPackageName, port, authToken) { + if (!factoryPathOrPackageName) factoryPathOrPackageName = './simpleGridFactory'; + let factory; + + try { + factory = require(_path.default.resolve(factoryPathOrPackageName)); + } catch (e) { + factory = require(factoryPathOrPackageName); + } + + if (!factory || !factory.launch || typeof factory.launch !== 'function') throw new Error('factory does not export `launch` method'); + factory.name = factory.name || factoryPathOrPackageName; + const gridServer = new GridServer(factory, authToken); + await gridServer.start(port); + /* eslint-disable no-console */ + + console.log('Grid server is running at ' + gridServer.urlPrefix()); +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/grid/gridWorker.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/grid/gridWorker.js new file mode 100644 index 00000000..df53772d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/grid/gridWorker.js @@ -0,0 +1,60 @@ +"use strict"; + +var _ws = _interopRequireDefault(require("ws")); + +var _debug = _interopRequireDefault(require("debug")); + +var _dispatcher = require("../dispatchers/dispatcher"); + +var _playwrightDispatcher = require("../dispatchers/playwrightDispatcher"); + +var _playwright = require("../server/playwright"); + +var _processLauncher = require("../utils/processLauncher"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +function launchGridWorker(gridURL, agentId, workerId) { + const log = (0, _debug.default)(`[worker ${workerId}]`); + log('created'); + const ws = new _ws.default(gridURL + `/registerWorker?agentId=${agentId}&workerId=${workerId}`); + const dispatcherConnection = new _dispatcher.DispatcherConnection(); + + dispatcherConnection.onmessage = message => ws.send(JSON.stringify(message)); + + ws.once('open', () => { + new _dispatcher.Root(dispatcherConnection, async rootScope => { + const playwright = (0, _playwright.createPlaywright)('javascript'); + const dispatcher = new _playwrightDispatcher.PlaywrightDispatcher(rootScope, playwright); + dispatcher.enableSocksProxy(); + return dispatcher; + }); + }); + ws.on('message', message => dispatcherConnection.dispatch(JSON.parse(message.toString()))); + ws.on('close', async () => { + // Drop any messages during shutdown on the floor. + dispatcherConnection.onmessage = () => {}; + + setTimeout(() => process.exit(0), 30000); // Meanwhile, try to gracefully close all browsers. + + await (0, _processLauncher.gracefullyCloseAll)(); + process.exit(0); + }); +} + +launchGridWorker(process.argv[2], process.argv[3], process.argv[4]); \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/grid/simpleGridFactory.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/grid/simpleGridFactory.js new file mode 100644 index 00000000..e0e74742 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/grid/simpleGridFactory.js @@ -0,0 +1,46 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.launch = launch; +exports.timeout = exports.capacity = exports.name = void 0; + +var _child_process = _interopRequireDefault(require("child_process")); + +var _path = _interopRequireDefault(require("path")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +const name = 'Agents co-located with grid'; +exports.name = name; +const capacity = Infinity; +exports.capacity = capacity; +const timeout = 10_000; +exports.timeout = timeout; + +function launch({ + agentId, + gridURL +}) { + _child_process.default.spawn(process.argv[0], [_path.default.join(__dirname, '..', 'cli', 'cli.js'), 'experimental-grid-agent', '--grid-url', gridURL, '--agent-id', agentId], { + cwd: __dirname, + shell: true, + stdio: 'inherit' + }); +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/inprocess.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/inprocess.js new file mode 100644 index 00000000..6f6a7e77 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/inprocess.js @@ -0,0 +1,54 @@ +"use strict"; + +var _dispatcher = require("./dispatchers/dispatcher"); + +var _playwright = require("./server/playwright"); + +var _playwrightDispatcher = require("./dispatchers/playwrightDispatcher"); + +var _connection = require("./client/connection"); + +var _browserServerImpl = require("./browserServerImpl"); + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +function setupInProcess() { + const playwright = (0, _playwright.createPlaywright)('javascript'); + const clientConnection = new _connection.Connection(); + const dispatcherConnection = new _dispatcher.DispatcherConnection(); // Dispatch synchronously at first. + + dispatcherConnection.onmessage = message => clientConnection.dispatch(message); + + clientConnection.onmessage = message => dispatcherConnection.dispatch(message); + + const rootScope = new _dispatcher.Root(dispatcherConnection); // Initialize Playwright channel. + + new _playwrightDispatcher.PlaywrightDispatcher(rootScope, playwright); + const playwrightAPI = clientConnection.getObjectWithKnownName('Playwright'); + playwrightAPI.chromium._serverLauncher = new _browserServerImpl.BrowserServerLauncherImpl('chromium'); + playwrightAPI.firefox._serverLauncher = new _browserServerImpl.BrowserServerLauncherImpl('firefox'); + playwrightAPI.webkit._serverLauncher = new _browserServerImpl.BrowserServerLauncherImpl('webkit'); // Switch to async dispatch after we got Playwright object. + + dispatcherConnection.onmessage = message => setImmediate(() => clientConnection.dispatch(message)); + + clientConnection.onmessage = message => setImmediate(() => dispatcherConnection.dispatch(message)); + + playwrightAPI._toImpl = x => dispatcherConnection._dispatchers.get(x._guid)._object; + + return playwrightAPI; +} + +module.exports = setupInProcess(); \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/nativeDeps.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/nativeDeps.js new file mode 100644 index 00000000..142d50aa --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/nativeDeps.js @@ -0,0 +1,50 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.deps = void 0; + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +// This file is used to: +// - Generate Dockerfile.* files +// - Build GitHubAction +// - Execute 'npx playwright install-deps' +const deps = { + // Ubuntu 18.04 + bionic: { + tools: ['xvfb', 'fonts-noto-color-emoji', 'ttf-unifont', 'libfontconfig', 'libfreetype6', 'xfonts-cyrillic', 'xfonts-scalable', 'fonts-liberation', 'fonts-ipafont-gothic', 'fonts-wqy-zenhei', 'fonts-tlwg-loma-otf', 'ttf-ubuntu-font-family'], + chromium: ['fonts-liberation', 'libasound2', 'libatk-bridge2.0-0', 'libatk1.0-0', 'libatspi2.0-0', 'libcairo2', 'libcups2', 'libdbus-1-3', 'libdrm2', 'libegl1', 'libgbm1', 'libglib2.0-0', 'libgtk-3-0', 'libnspr4', 'libnss3', 'libpango-1.0-0', 'libx11-6', 'libx11-xcb1', 'libxcb1', 'libxcomposite1', 'libxdamage1', 'libxext6', 'libxfixes3', 'libxrandr2', 'libxshmfence1'], + firefox: ['ffmpeg', 'libatk1.0-0', 'libcairo-gobject2', 'libcairo2', 'libdbus-1-3', 'libdbus-glib-1-2', 'libfontconfig1', 'libfreetype6', 'libgdk-pixbuf2.0-0', 'libglib2.0-0', 'libgtk-3-0', 'libpango-1.0-0', 'libpangocairo-1.0-0', 'libpangoft2-1.0-0', 'libx11-6', 'libx11-xcb1', 'libxcb-shm0', 'libxcb1', 'libxcomposite1', 'libxcursor1', 'libxdamage1', 'libxext6', 'libxfixes3', 'libxi6', 'libxrender1', 'libxt6'], + webkit: ['gstreamer1.0-libav', 'gstreamer1.0-plugins-bad', 'gstreamer1.0-plugins-base', 'gstreamer1.0-plugins-good', 'libatk-bridge2.0-0', 'libatk1.0-0', 'libbrotli1', 'libcairo2', 'libegl1', 'libenchant1c2a', 'libepoxy0', 'libevdev2', 'libfontconfig1', 'libfreetype6', 'libgdk-pixbuf2.0-0', 'libgl1', 'libgles2', 'libglib2.0-0', 'libgstreamer-gl1.0-0', 'libgstreamer1.0-0', 'libgtk-3-0', 'libharfbuzz-icu0', 'libharfbuzz0b', 'libhyphen0', 'libicu60', 'libjpeg-turbo8', 'libnotify4', 'libopenjp2-7', 'libopus0', 'libpango-1.0-0', 'libpng16-16', 'libsecret-1-0', 'libvpx5', 'libwayland-client0', 'libwayland-egl1', 'libwayland-server0', 'libwebp6', 'libwebpdemux2', 'libwoff1', 'libx11-6', 'libxcomposite1', 'libxdamage1', 'libxkbcommon0', 'libxml2', 'libxslt1.1'] + }, + // Ubuntu 20.04 + focal: { + tools: ['xvfb', 'fonts-noto-color-emoji', 'ttf-unifont', 'libfontconfig', 'libfreetype6', 'xfonts-cyrillic', 'xfonts-scalable', 'fonts-liberation', 'fonts-ipafont-gothic', 'fonts-wqy-zenhei', 'fonts-tlwg-loma-otf', 'ttf-ubuntu-font-family'], + chromium: ['fonts-liberation', 'libasound2', 'libatk-bridge2.0-0', 'libatk1.0-0', 'libatspi2.0-0', 'libcairo2', 'libcups2', 'libdbus-1-3', 'libdrm2', 'libegl1', 'libgbm1', 'libglib2.0-0', 'libgtk-3-0', 'libnspr4', 'libnss3', 'libpango-1.0-0', 'libx11-6', 'libx11-xcb1', 'libxcb1', 'libxcomposite1', 'libxdamage1', 'libxext6', 'libxfixes3', 'libxrandr2', 'libxshmfence1'], + firefox: ['ffmpeg', 'libatk1.0-0', 'libcairo-gobject2', 'libcairo2', 'libdbus-1-3', 'libdbus-glib-1-2', 'libfontconfig1', 'libfreetype6', 'libgdk-pixbuf2.0-0', 'libglib2.0-0', 'libgtk-3-0', 'libpango-1.0-0', 'libpangocairo-1.0-0', 'libpangoft2-1.0-0', 'libx11-6', 'libx11-xcb1', 'libxcb-shm0', 'libxcb1', 'libxcomposite1', 'libxcursor1', 'libxdamage1', 'libxext6', 'libxfixes3', 'libxi6', 'libxrender1', 'libxt6'], + webkit: ['gstreamer1.0-libav', 'gstreamer1.0-plugins-bad', 'gstreamer1.0-plugins-base', 'gstreamer1.0-plugins-good', 'libatk-bridge2.0-0', 'libatk1.0-0', 'libcairo2', 'libegl1', 'libenchant1c2a', 'libepoxy0', 'libevdev2', 'libfontconfig1', 'libfreetype6', 'libgdk-pixbuf2.0-0', 'libgl1', 'libgles2', 'libglib2.0-0', 'libgstreamer-gl1.0-0', 'libgstreamer1.0-0', 'libgtk-3-0', 'libharfbuzz-icu0', 'libharfbuzz0b', 'libhyphen0', 'libicu66', 'libjpeg-turbo8', 'libnotify4', 'libopenjp2-7', 'libopus0', 'libpango-1.0-0', 'libpng16-16', 'libsecret-1-0', 'libsoup2.4-1', 'libvpx6', 'libwayland-client0', 'libwayland-egl1', 'libwayland-server0', 'libwebp6', 'libwebpdemux2', 'libwoff1', 'libx11-6', 'libxcomposite1', 'libxdamage1', 'libxkbcommon0', 'libxml2', 'libxslt1.1'] + }, + // Ubuntu 21.04 + hirsute: { + tools: ['xvfb', 'fonts-noto-color-emoji', 'ttf-unifont', 'libfontconfig', 'libfreetype6', 'xfonts-cyrillic', 'xfonts-scalable', 'fonts-liberation', 'fonts-ipafont-gothic', 'fonts-wqy-zenhei', 'fonts-tlwg-loma-otf', 'ttf-ubuntu-font-family'], + chromium: ['libasound2', 'libatk-bridge2.0-0', 'libatk1.0-0', 'libatspi2.0-0', 'libcairo2', 'libcups2', 'libdbus-1-3', 'libdrm2', 'libgbm1', 'libglib2.0-0', 'libnspr4', 'libnss3', 'libpango-1.0-0', 'libx11-6', 'libxcb1', 'libxcomposite1', 'libxdamage1', 'libxext6', 'libxfixes3', 'libxkbcommon0', 'libxrandr2', 'libxshmfence1'], + firefox: ['ffmpeg', 'libatk1.0-0', 'libcairo-gobject2', 'libcairo2', 'libdbus-1-3', 'libdbus-glib-1-2', 'libfontconfig1', 'libfreetype6', 'libgdk-pixbuf-2.0-0', 'libglib2.0-0', 'libgtk-3-0', 'libgtk2.0-0', 'libharfbuzz0b', 'libpango-1.0-0', 'libpangocairo-1.0-0', 'libpangoft2-1.0-0', 'libx11-6', 'libx11-xcb1', 'libxcb-shm0', 'libxcb1', 'libxcomposite1', 'libxcursor1', 'libxdamage1', 'libxext6', 'libxfixes3', 'libxi6', 'libxrender1', 'libxt6'], + webkit: ['gstreamer1.0-libav', 'gstreamer1.0-plugins-bad', 'gstreamer1.0-plugins-base', 'gstreamer1.0-plugins-good', 'libatk-bridge2.0-0', 'libatk1.0-0', 'libcairo2', 'libegl1', 'libepoxy0', 'libevdev2', 'libfontconfig1', 'libfreetype6', 'libgdk-pixbuf-2.0-0', 'libgl1', 'libgles2', 'libglib2.0-0', 'libgstreamer-gl1.0-0', 'libgstreamer-plugins-bad1.0-0', 'libgstreamer-plugins-base1.0-0', 'libgstreamer1.0-0', 'libgtk-3-0', 'libharfbuzz-icu0', 'libharfbuzz0b', 'libhyphen0', 'libjavascriptcoregtk-4.0-18', 'libjpeg-turbo8', 'liblcms2-2', 'libnotify4', 'libopenjp2-7', 'libopus0', 'libpango-1.0-0', 'libpng16-16', 'libsecret-1-0', 'libsoup2.4-1', 'libvpx6', 'libwayland-client0', 'libwayland-egl1', 'libwayland-server0', 'libwebkit2gtk-4.0-37', 'libwebp6', 'libwebpdemux2', 'libwoff1', 'libwpe-1.0-1', 'libwpebackend-fdo-1.0-1', 'libwpewebkit-1.0-3', 'libx11-6', 'libxcomposite1', 'libxdamage1', 'libxkbcommon0', 'libxml2', 'libxslt1.1'] + } +}; +exports.deps = deps; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/outofprocess.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/outofprocess.js new file mode 100644 index 00000000..fd8b5844 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/outofprocess.js @@ -0,0 +1,88 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.start = start; + +var _connection = require("./client/connection"); + +var _transport = require("./protocol/transport"); + +var childProcess = _interopRequireWildcard(require("child_process")); + +var path = _interopRequireWildcard(require("path")); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +async function start() { + const client = new PlaywrightClient(); + const playwright = await client._playwright; + + playwright.stop = () => client.stop(); + + playwright.driverProcess = client._driverProcess; + return playwright; +} + +class PlaywrightClient { + constructor() { + this._playwright = void 0; + this._driverProcess = void 0; + this._closePromise = void 0; + this._onExit = void 0; + + this._onExit = (exitCode, signal) => { + throw new Error(`Server closed with exitCode=${exitCode} signal=${signal}`); + }; + + this._driverProcess = childProcess.fork(path.join(__dirname, 'cli', 'cli.js'), ['run-driver'], { + stdio: 'pipe', + detached: true + }); + + this._driverProcess.unref(); + + this._driverProcess.on('exit', this._onExit); + + const connection = new _connection.Connection(); + const transport = new _transport.Transport(this._driverProcess.stdin, this._driverProcess.stdout); + + connection.onmessage = message => transport.send(JSON.stringify(message)); + + transport.onmessage = message => connection.dispatch(JSON.parse(message)); + + this._closePromise = new Promise(f => transport.onclose = f); + this._playwright = connection.initializePlaywright(); + } + + async stop() { + this._driverProcess.removeListener('exit', this._onExit); + + this._driverProcess.stdin.destroy(); + + this._driverProcess.stdout.destroy(); + + this._driverProcess.stderr.destroy(); + + await this._closePromise; + } + +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/callMetadata.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/callMetadata.js new file mode 100644 index 00000000..430afc16 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/callMetadata.js @@ -0,0 +1,5 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/channels.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/channels.js new file mode 100644 index 00000000..a4684898 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/channels.js @@ -0,0 +1,54 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.commandsWithTracingSnapshots = void 0; + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +// This file is generated by generate_channels.js, do not edit manually. +// ----------- FetchRequest ----------- +// ----------- Root ----------- +// ----------- Playwright ----------- +// ----------- Selectors ----------- +// ----------- BrowserType ----------- +// ----------- Browser ----------- +// ----------- EventTarget ----------- +// ----------- BrowserContext ----------- +// ----------- Page ----------- +// ----------- Frame ----------- +// ----------- Worker ----------- +// ----------- JSHandle ----------- +// ----------- ElementHandle ----------- +// ----------- Request ----------- +// ----------- Route ----------- +// ----------- Response ----------- +// ----------- WebSocket ----------- +// ----------- ConsoleMessage ----------- +// ----------- BindingCall ----------- +// ----------- Dialog ----------- +// ----------- Artifact ----------- +// ----------- Stream ----------- +// ----------- CDPSession ----------- +// ----------- Electron ----------- +// ----------- ElectronApplication ----------- +// ----------- Android ----------- +// ----------- AndroidSocket ----------- +// ----------- AndroidDevice ----------- +// ----------- JsonPipe ----------- +const commandsWithTracingSnapshots = new Set(['EventTarget.waitForEventInfo', 'BrowserContext.waitForEventInfo', 'Page.waitForEventInfo', 'WebSocket.waitForEventInfo', 'ElectronApplication.waitForEventInfo', 'AndroidDevice.waitForEventInfo', 'Page.goBack', 'Page.goForward', 'Page.reload', 'Page.setViewportSize', 'Page.keyboardDown', 'Page.keyboardUp', 'Page.keyboardInsertText', 'Page.keyboardType', 'Page.keyboardPress', 'Page.mouseMove', 'Page.mouseDown', 'Page.mouseUp', 'Page.mouseClick', 'Page.mouseWheel', 'Page.touchscreenTap', 'Frame.evalOnSelector', 'Frame.evalOnSelectorAll', 'Frame.addScriptTag', 'Frame.addStyleTag', 'Frame.check', 'Frame.click', 'Frame.dblclick', 'Frame.dispatchEvent', 'Frame.evaluateExpression', 'Frame.evaluateExpressionHandle', 'Frame.fill', 'Frame.focus', 'Frame.getAttribute', 'Frame.goto', 'Frame.hover', 'Frame.innerHTML', 'Frame.innerText', 'Frame.inputValue', 'Frame.isChecked', 'Frame.isDisabled', 'Frame.isEnabled', 'Frame.isEditable', 'Frame.press', 'Frame.selectOption', 'Frame.setContent', 'Frame.setInputFiles', 'Frame.tap', 'Frame.textContent', 'Frame.type', 'Frame.uncheck', 'Frame.waitForFunction', 'Frame.waitForSelector', 'JSHandle.evaluateExpression', 'ElementHandle.evaluateExpression', 'JSHandle.evaluateExpressionHandle', 'ElementHandle.evaluateExpressionHandle', 'ElementHandle.evalOnSelector', 'ElementHandle.evalOnSelectorAll', 'ElementHandle.check', 'ElementHandle.click', 'ElementHandle.dblclick', 'ElementHandle.dispatchEvent', 'ElementHandle.fill', 'ElementHandle.hover', 'ElementHandle.press', 'ElementHandle.scrollIntoViewIfNeeded', 'ElementHandle.selectOption', 'ElementHandle.selectText', 'ElementHandle.setInputFiles', 'ElementHandle.tap', 'ElementHandle.type', 'ElementHandle.uncheck', 'ElementHandle.waitForElementState', 'ElementHandle.waitForSelector']); +exports.commandsWithTracingSnapshots = commandsWithTracingSnapshots; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/serializers.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/serializers.js new file mode 100644 index 00000000..608cd613 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/serializers.js @@ -0,0 +1,200 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.serializeError = serializeError; +exports.parseError = parseError; +exports.parseSerializedValue = parseSerializedValue; +exports.serializeValue = serializeValue; + +var _errors = require("../utils/errors"); + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +function serializeError(e) { + if (isError(e)) return { + error: { + message: e.message, + stack: e.stack, + name: e.name + } + }; + return { + value: serializeValue(e, value => ({ + fallThrough: value + }), new Set()) + }; +} + +function parseError(error) { + if (!error.error) { + if (error.value === undefined) throw new Error('Serialized error must have either an error or a value'); + return parseSerializedValue(error.value, undefined); + } + + if (error.error.name === 'TimeoutError') { + const e = new _errors.TimeoutError(error.error.message); + e.stack = error.error.stack || ''; + return e; + } + + const e = new Error(error.error.message); + e.stack = error.error.stack || ''; + e.name = error.error.name; + return e; +} + +function parseSerializedValue(value, handles) { + if (value.n !== undefined) return value.n; + if (value.s !== undefined) return value.s; + if (value.b !== undefined) return value.b; + + if (value.v !== undefined) { + if (value.v === 'undefined') return undefined; + if (value.v === 'null') return null; + if (value.v === 'NaN') return NaN; + if (value.v === 'Infinity') return Infinity; + if (value.v === '-Infinity') return -Infinity; + if (value.v === '-0') return -0; + } + + if (value.d !== undefined) return new Date(value.d); + if (value.r !== undefined) return new RegExp(value.r.p, value.r.f); + if (value.a !== undefined) return value.a.map(a => parseSerializedValue(a, handles)); + + if (value.o !== undefined) { + const result = {}; + + for (const { + k, + v + } of value.o) result[k] = parseSerializedValue(v, handles); + + return result; + } + + if (value.h !== undefined) { + if (handles === undefined) throw new Error('Unexpected handle'); + return handles[value.h]; + } + + throw new Error('Unexpected value'); +} + +function serializeValue(value, handleSerializer, visited) { + const handle = handleSerializer(value); + if ('fallThrough' in handle) value = handle.fallThrough;else return handle; + if (visited.has(value)) throw new Error('Argument is a circular structure'); + if (typeof value === 'symbol') return { + v: 'undefined' + }; + if (Object.is(value, undefined)) return { + v: 'undefined' + }; + if (Object.is(value, null)) return { + v: 'null' + }; + if (Object.is(value, NaN)) return { + v: 'NaN' + }; + if (Object.is(value, Infinity)) return { + v: 'Infinity' + }; + if (Object.is(value, -Infinity)) return { + v: '-Infinity' + }; + if (Object.is(value, -0)) return { + v: '-0' + }; + if (typeof value === 'boolean') return { + b: value + }; + if (typeof value === 'number') return { + n: value + }; + if (typeof value === 'string') return { + s: value + }; + + if (isError(value)) { + const error = value; + + if ('captureStackTrace' in global.Error) { + // v8 + return { + s: error.stack || '' + }; + } + + return { + s: `${error.name}: ${error.message}\n${error.stack}` + }; + } + + if (isDate(value)) return { + d: value.toJSON() + }; + if (isRegExp(value)) return { + r: { + p: value.source, + f: value.flags + } + }; + + if (Array.isArray(value)) { + const a = []; + visited.add(value); + + for (let i = 0; i < value.length; ++i) a.push(serializeValue(value[i], handleSerializer, visited)); + + visited.delete(value); + return { + a + }; + } + + if (typeof value === 'object') { + const o = []; + visited.add(value); + + for (const name of Object.keys(value)) o.push({ + k: name, + v: serializeValue(value[name], handleSerializer, visited) + }); + + visited.delete(value); + return { + o + }; + } + + throw new Error('Unexpected value'); +} + +function isRegExp(obj) { + return obj instanceof RegExp || Object.prototype.toString.call(obj) === '[object RegExp]'; +} + +function isDate(obj) { + return obj instanceof Date || Object.prototype.toString.call(obj) === '[object Date]'; +} + +function isError(obj) { + var _obj$__proto__; + + return obj instanceof Error || (obj === null || obj === void 0 ? void 0 : (_obj$__proto__ = obj.__proto__) === null || _obj$__proto__ === void 0 ? void 0 : _obj$__proto__.name) === 'Error' || (obj === null || obj === void 0 ? void 0 : obj.__proto__) && isError(obj.__proto__); +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/transport.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/transport.js new file mode 100644 index 00000000..d43d55a2 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/transport.js @@ -0,0 +1,96 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Transport = void 0; + +var _utils = require("../utils/utils"); + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +class Transport { + constructor(pipeWrite, pipeRead, closeable, endian = 'le') { + this._pipeWrite = void 0; + this._data = Buffer.from([]); + this._waitForNextTask = (0, _utils.makeWaitForNextTask)(); + this._closed = false; + this._bytesLeft = 0; + this.onmessage = void 0; + this.onclose = void 0; + this._endian = void 0; + this._closeableStream = void 0; + this._pipeWrite = pipeWrite; + this._endian = endian; + this._closeableStream = closeable; + pipeRead.on('data', buffer => this._dispatch(buffer)); + pipeRead.on('close', () => { + this._closed = true; + if (this.onclose) this.onclose(); + }); + this.onmessage = undefined; + this.onclose = undefined; + } + + send(message) { + if (this._closed) throw new Error('Pipe has been closed'); + const data = Buffer.from(message, 'utf-8'); + const dataLength = Buffer.alloc(4); + if (this._endian === 'be') dataLength.writeUInt32BE(data.length, 0);else dataLength.writeUInt32LE(data.length, 0); + + this._pipeWrite.write(dataLength); + + this._pipeWrite.write(data); + } + + close() { + // Let it throw. + this._closeableStream.close(); + } + + _dispatch(buffer) { + this._data = Buffer.concat([this._data, buffer]); + + while (true) { + if (!this._bytesLeft && this._data.length < 4) { + // Need more data. + break; + } + + if (!this._bytesLeft) { + this._bytesLeft = this._endian === 'be' ? this._data.readUInt32BE(0) : this._data.readUInt32LE(0); + this._data = this._data.slice(4); + } + + if (!this._bytesLeft || this._data.length < this._bytesLeft) { + // Need more data. + break; + } + + const message = this._data.slice(0, this._bytesLeft); + + this._data = this._data.slice(this._bytesLeft); + this._bytesLeft = 0; + + this._waitForNextTask(() => { + if (this.onmessage) this.onmessage(message.toString('utf-8')); + }); + } + } + +} + +exports.Transport = Transport; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/validator.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/validator.js new file mode 100644 index 00000000..0ab925cc --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/validator.js @@ -0,0 +1,1396 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createScheme = createScheme; +Object.defineProperty(exports, "Validator", { + enumerable: true, + get: function () { + return _validatorPrimitives.Validator; + } +}); +Object.defineProperty(exports, "ValidationError", { + enumerable: true, + get: function () { + return _validatorPrimitives.ValidationError; + } +}); + +var _validatorPrimitives = require("./validatorPrimitives"); + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +// This file is generated by generate_channels.js, do not edit manually. +function createScheme(tChannel) { + const scheme = {}; + + const tType = name => { + return (arg, path) => { + const v = scheme[name]; + if (!v) throw new _validatorPrimitives.ValidationError(path + ': unknown type "' + name + '"'); + return v(arg, path); + }; + }; + + scheme.StackFrame = (0, _validatorPrimitives.tObject)({ + file: _validatorPrimitives.tString, + line: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + column: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + function: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + }); + scheme.Metadata = (0, _validatorPrimitives.tObject)({ + stack: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('StackFrame'))), + apiName: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + collectLogs: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.Point = (0, _validatorPrimitives.tObject)({ + x: _validatorPrimitives.tNumber, + y: _validatorPrimitives.tNumber + }); + scheme.Rect = (0, _validatorPrimitives.tObject)({ + x: _validatorPrimitives.tNumber, + y: _validatorPrimitives.tNumber, + width: _validatorPrimitives.tNumber, + height: _validatorPrimitives.tNumber + }); + scheme.SerializedValue = (0, _validatorPrimitives.tObject)({ + n: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + b: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + s: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + v: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['null', 'undefined', 'NaN', 'Infinity', '-Infinity', '-0'])), + d: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + r: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + p: _validatorPrimitives.tString, + f: _validatorPrimitives.tString + })), + a: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('SerializedValue'))), + o: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tObject)({ + k: _validatorPrimitives.tString, + v: tType('SerializedValue') + }))), + h: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.SerializedArgument = (0, _validatorPrimitives.tObject)({ + value: tType('SerializedValue'), + handles: (0, _validatorPrimitives.tArray)(tChannel('*')) + }); + scheme.AXNode = (0, _validatorPrimitives.tObject)({ + role: _validatorPrimitives.tString, + name: _validatorPrimitives.tString, + valueString: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + valueNumber: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + description: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + keyshortcuts: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + roledescription: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + valuetext: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + disabled: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + expanded: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + focused: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + modal: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + multiline: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + multiselectable: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + readonly: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + required: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + selected: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + checked: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['checked', 'unchecked', 'mixed'])), + pressed: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['pressed', 'released', 'mixed'])), + level: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + valuemin: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + valuemax: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + autocomplete: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + haspopup: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + invalid: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + orientation: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + children: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('AXNode'))) + }); + scheme.SetNetworkCookie = (0, _validatorPrimitives.tObject)({ + name: _validatorPrimitives.tString, + value: _validatorPrimitives.tString, + url: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + domain: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + path: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + expires: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + httpOnly: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + secure: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + sameSite: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['Strict', 'Lax', 'None'])) + }); + scheme.NetworkCookie = (0, _validatorPrimitives.tObject)({ + name: _validatorPrimitives.tString, + value: _validatorPrimitives.tString, + domain: _validatorPrimitives.tString, + path: _validatorPrimitives.tString, + expires: _validatorPrimitives.tNumber, + httpOnly: _validatorPrimitives.tBoolean, + secure: _validatorPrimitives.tBoolean, + sameSite: (0, _validatorPrimitives.tEnum)(['Strict', 'Lax', 'None']) + }); + scheme.NameValue = (0, _validatorPrimitives.tObject)({ + name: _validatorPrimitives.tString, + value: _validatorPrimitives.tString + }); + scheme.OriginStorage = (0, _validatorPrimitives.tObject)({ + origin: _validatorPrimitives.tString, + localStorage: (0, _validatorPrimitives.tArray)(tType('NameValue')) + }); + scheme.SerializedError = (0, _validatorPrimitives.tObject)({ + error: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + message: _validatorPrimitives.tString, + name: _validatorPrimitives.tString, + stack: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + })), + value: (0, _validatorPrimitives.tOptional)(tType('SerializedValue')) + }); + scheme.InterceptedResponse = (0, _validatorPrimitives.tObject)({ + request: tChannel('Request'), + status: _validatorPrimitives.tNumber, + statusText: _validatorPrimitives.tString, + headers: (0, _validatorPrimitives.tArray)(tType('NameValue')) + }); + scheme.FetchRequestFetchParams = (0, _validatorPrimitives.tObject)({ + url: _validatorPrimitives.tString, + params: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('NameValue'))), + method: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + headers: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('NameValue'))), + postData: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBinary), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + failOnStatusCode: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FetchRequestFetchResponseBodyParams = (0, _validatorPrimitives.tObject)({ + fetchUid: _validatorPrimitives.tString + }); + scheme.FetchRequestDisposeFetchResponseParams = (0, _validatorPrimitives.tObject)({ + fetchUid: _validatorPrimitives.tString + }); + scheme.FetchRequestDisposeParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.FetchResponse = (0, _validatorPrimitives.tObject)({ + fetchUid: _validatorPrimitives.tString, + url: _validatorPrimitives.tString, + status: _validatorPrimitives.tNumber, + statusText: _validatorPrimitives.tString, + headers: (0, _validatorPrimitives.tArray)(tType('NameValue')) + }); + scheme.RootInitializeParams = (0, _validatorPrimitives.tObject)({ + sdkLanguage: _validatorPrimitives.tString + }); + scheme.PlaywrightSocksConnectedParams = (0, _validatorPrimitives.tObject)({ + uid: _validatorPrimitives.tString, + host: _validatorPrimitives.tString, + port: _validatorPrimitives.tNumber + }); + scheme.PlaywrightSocksFailedParams = (0, _validatorPrimitives.tObject)({ + uid: _validatorPrimitives.tString, + errorCode: _validatorPrimitives.tString + }); + scheme.PlaywrightSocksDataParams = (0, _validatorPrimitives.tObject)({ + uid: _validatorPrimitives.tString, + data: _validatorPrimitives.tBinary + }); + scheme.PlaywrightSocksErrorParams = (0, _validatorPrimitives.tObject)({ + uid: _validatorPrimitives.tString, + error: _validatorPrimitives.tString + }); + scheme.PlaywrightSocksEndParams = (0, _validatorPrimitives.tObject)({ + uid: _validatorPrimitives.tString + }); + scheme.PlaywrightNewRequestParams = (0, _validatorPrimitives.tObject)({ + ignoreHTTPSErrors: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.SelectorsRegisterParams = (0, _validatorPrimitives.tObject)({ + name: _validatorPrimitives.tString, + source: _validatorPrimitives.tString, + contentScript: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.BrowserTypeConnectParams = (0, _validatorPrimitives.tObject)({ + wsEndpoint: _validatorPrimitives.tString, + headers: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tAny), + slowMo: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.BrowserTypeLaunchParams = (0, _validatorPrimitives.tObject)({ + channel: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + executablePath: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + args: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(_validatorPrimitives.tString)), + ignoreAllDefaultArgs: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + ignoreDefaultArgs: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(_validatorPrimitives.tString)), + handleSIGINT: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + handleSIGTERM: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + handleSIGHUP: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + env: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('NameValue'))), + headless: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + devtools: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + proxy: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + server: _validatorPrimitives.tString, + bypass: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + username: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + password: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + })), + downloadsPath: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + tracesDir: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + chromiumSandbox: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + firefoxUserPrefs: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tAny), + slowMo: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.BrowserTypeLaunchPersistentContextParams = (0, _validatorPrimitives.tObject)({ + channel: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + executablePath: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + args: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(_validatorPrimitives.tString)), + ignoreAllDefaultArgs: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + ignoreDefaultArgs: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(_validatorPrimitives.tString)), + handleSIGINT: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + handleSIGTERM: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + handleSIGHUP: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + env: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('NameValue'))), + headless: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + devtools: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + proxy: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + server: _validatorPrimitives.tString, + bypass: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + username: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + password: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + })), + downloadsPath: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + tracesDir: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + chromiumSandbox: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + noDefaultViewport: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + viewport: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + width: _validatorPrimitives.tNumber, + height: _validatorPrimitives.tNumber + })), + screen: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + width: _validatorPrimitives.tNumber, + height: _validatorPrimitives.tNumber + })), + ignoreHTTPSErrors: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + javaScriptEnabled: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + bypassCSP: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + userAgent: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + locale: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + timezoneId: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + geolocation: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + longitude: _validatorPrimitives.tNumber, + latitude: _validatorPrimitives.tNumber, + accuracy: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + })), + permissions: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(_validatorPrimitives.tString)), + extraHTTPHeaders: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('NameValue'))), + offline: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + httpCredentials: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + username: _validatorPrimitives.tString, + password: _validatorPrimitives.tString + })), + deviceScaleFactor: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + isMobile: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + hasTouch: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + colorScheme: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['dark', 'light', 'no-preference'])), + reducedMotion: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['reduce', 'no-preference'])), + forcedColors: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['active', 'none'])), + acceptDownloads: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + baseURL: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + _debugName: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + recordVideo: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + dir: _validatorPrimitives.tString, + size: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + width: _validatorPrimitives.tNumber, + height: _validatorPrimitives.tNumber + })) + })), + recordHar: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + omitContent: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + path: _validatorPrimitives.tString + })), + strictSelectors: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + userDataDir: _validatorPrimitives.tString, + slowMo: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.BrowserTypeConnectOverCDPParams = (0, _validatorPrimitives.tObject)({ + endpointURL: _validatorPrimitives.tString, + headers: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('NameValue'))), + slowMo: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.BrowserCloseParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.BrowserKillForTestsParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.BrowserNewContextParams = (0, _validatorPrimitives.tObject)({ + noDefaultViewport: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + viewport: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + width: _validatorPrimitives.tNumber, + height: _validatorPrimitives.tNumber + })), + screen: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + width: _validatorPrimitives.tNumber, + height: _validatorPrimitives.tNumber + })), + ignoreHTTPSErrors: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + javaScriptEnabled: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + bypassCSP: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + userAgent: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + locale: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + timezoneId: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + geolocation: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + longitude: _validatorPrimitives.tNumber, + latitude: _validatorPrimitives.tNumber, + accuracy: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + })), + permissions: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(_validatorPrimitives.tString)), + extraHTTPHeaders: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('NameValue'))), + offline: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + httpCredentials: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + username: _validatorPrimitives.tString, + password: _validatorPrimitives.tString + })), + deviceScaleFactor: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + isMobile: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + hasTouch: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + colorScheme: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['dark', 'light', 'no-preference'])), + reducedMotion: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['reduce', 'no-preference'])), + forcedColors: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['active', 'none'])), + acceptDownloads: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + baseURL: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + _debugName: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + recordVideo: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + dir: _validatorPrimitives.tString, + size: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + width: _validatorPrimitives.tNumber, + height: _validatorPrimitives.tNumber + })) + })), + recordHar: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + omitContent: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + path: _validatorPrimitives.tString + })), + strictSelectors: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + proxy: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + server: _validatorPrimitives.tString, + bypass: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + username: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + password: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + })), + storageState: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + cookies: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('SetNetworkCookie'))), + origins: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('OriginStorage'))) + })) + }); + scheme.BrowserNewBrowserCDPSessionParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.BrowserStartTracingParams = (0, _validatorPrimitives.tObject)({ + page: (0, _validatorPrimitives.tOptional)(tChannel('Page')), + path: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + screenshots: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + categories: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(_validatorPrimitives.tString)) + }); + scheme.BrowserStopTracingParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.EventTargetWaitForEventInfoParams = (0, _validatorPrimitives.tObject)({ + info: (0, _validatorPrimitives.tObject)({ + waitId: _validatorPrimitives.tString, + phase: (0, _validatorPrimitives.tEnum)(['before', 'after', 'log']), + event: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + message: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + error: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + }) + }); + scheme.BrowserContextWaitForEventInfoParams = tType('EventTargetWaitForEventInfoParams'); + scheme.PageWaitForEventInfoParams = tType('EventTargetWaitForEventInfoParams'); + scheme.WebSocketWaitForEventInfoParams = tType('EventTargetWaitForEventInfoParams'); + scheme.ElectronApplicationWaitForEventInfoParams = tType('EventTargetWaitForEventInfoParams'); + scheme.AndroidDeviceWaitForEventInfoParams = tType('EventTargetWaitForEventInfoParams'); + scheme.BrowserContextAddCookiesParams = (0, _validatorPrimitives.tObject)({ + cookies: (0, _validatorPrimitives.tArray)(tType('SetNetworkCookie')) + }); + scheme.BrowserContextAddInitScriptParams = (0, _validatorPrimitives.tObject)({ + source: _validatorPrimitives.tString + }); + scheme.BrowserContextClearCookiesParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.BrowserContextClearPermissionsParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.BrowserContextCloseParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.BrowserContextCookiesParams = (0, _validatorPrimitives.tObject)({ + urls: (0, _validatorPrimitives.tArray)(_validatorPrimitives.tString) + }); + scheme.BrowserContextExposeBindingParams = (0, _validatorPrimitives.tObject)({ + name: _validatorPrimitives.tString, + needsHandle: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.BrowserContextGrantPermissionsParams = (0, _validatorPrimitives.tObject)({ + permissions: (0, _validatorPrimitives.tArray)(_validatorPrimitives.tString), + origin: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + }); + scheme.BrowserContextNewPageParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.BrowserContextSetDefaultNavigationTimeoutNoReplyParams = (0, _validatorPrimitives.tObject)({ + timeout: _validatorPrimitives.tNumber + }); + scheme.BrowserContextSetDefaultTimeoutNoReplyParams = (0, _validatorPrimitives.tObject)({ + timeout: _validatorPrimitives.tNumber + }); + scheme.BrowserContextSetExtraHTTPHeadersParams = (0, _validatorPrimitives.tObject)({ + headers: (0, _validatorPrimitives.tArray)(tType('NameValue')) + }); + scheme.BrowserContextSetGeolocationParams = (0, _validatorPrimitives.tObject)({ + geolocation: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + longitude: _validatorPrimitives.tNumber, + latitude: _validatorPrimitives.tNumber, + accuracy: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + })) + }); + scheme.BrowserContextSetHTTPCredentialsParams = (0, _validatorPrimitives.tObject)({ + httpCredentials: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + username: _validatorPrimitives.tString, + password: _validatorPrimitives.tString + })) + }); + scheme.BrowserContextSetNetworkInterceptionEnabledParams = (0, _validatorPrimitives.tObject)({ + enabled: _validatorPrimitives.tBoolean + }); + scheme.BrowserContextSetOfflineParams = (0, _validatorPrimitives.tObject)({ + offline: _validatorPrimitives.tBoolean + }); + scheme.BrowserContextStorageStateParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.BrowserContextPauseParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.BrowserContextRecorderSupplementEnableParams = (0, _validatorPrimitives.tObject)({ + language: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + startRecording: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + pauseOnNextStatement: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + launchOptions: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tAny), + contextOptions: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tAny), + device: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + saveStorage: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + outputFile: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + }); + scheme.BrowserContextNewCDPSessionParams = (0, _validatorPrimitives.tObject)({ + page: (0, _validatorPrimitives.tOptional)(tChannel('Page')), + frame: (0, _validatorPrimitives.tOptional)(tChannel('Frame')) + }); + scheme.BrowserContextTracingStartParams = (0, _validatorPrimitives.tObject)({ + name: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + snapshots: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + screenshots: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.BrowserContextTracingStartChunkParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.BrowserContextTracingStopChunkParams = (0, _validatorPrimitives.tObject)({ + save: _validatorPrimitives.tBoolean + }); + scheme.BrowserContextTracingStopParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.BrowserContextHarExportParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.PageSetDefaultNavigationTimeoutNoReplyParams = (0, _validatorPrimitives.tObject)({ + timeout: _validatorPrimitives.tNumber + }); + scheme.PageSetDefaultTimeoutNoReplyParams = (0, _validatorPrimitives.tObject)({ + timeout: _validatorPrimitives.tNumber + }); + scheme.PageSetFileChooserInterceptedNoReplyParams = (0, _validatorPrimitives.tObject)({ + intercepted: _validatorPrimitives.tBoolean + }); + scheme.PageAddInitScriptParams = (0, _validatorPrimitives.tObject)({ + source: _validatorPrimitives.tString + }); + scheme.PageCloseParams = (0, _validatorPrimitives.tObject)({ + runBeforeUnload: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.PageEmulateMediaParams = (0, _validatorPrimitives.tObject)({ + media: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['screen', 'print', 'null'])), + colorScheme: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['dark', 'light', 'no-preference', 'null'])), + reducedMotion: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['reduce', 'no-preference', 'null'])), + forcedColors: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['active', 'none', 'null'])) + }); + scheme.PageExposeBindingParams = (0, _validatorPrimitives.tObject)({ + name: _validatorPrimitives.tString, + needsHandle: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.PageGoBackParams = (0, _validatorPrimitives.tObject)({ + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + waitUntil: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['load', 'domcontentloaded', 'networkidle'])) + }); + scheme.PageGoForwardParams = (0, _validatorPrimitives.tObject)({ + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + waitUntil: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['load', 'domcontentloaded', 'networkidle'])) + }); + scheme.PageReloadParams = (0, _validatorPrimitives.tObject)({ + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + waitUntil: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['load', 'domcontentloaded', 'networkidle'])) + }); + scheme.PageScreenshotParams = (0, _validatorPrimitives.tObject)({ + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + type: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['png', 'jpeg'])), + quality: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + omitBackground: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + fullPage: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + clip: (0, _validatorPrimitives.tOptional)(tType('Rect')) + }); + scheme.PageSetExtraHTTPHeadersParams = (0, _validatorPrimitives.tObject)({ + headers: (0, _validatorPrimitives.tArray)(tType('NameValue')) + }); + scheme.PageSetNetworkInterceptionEnabledParams = (0, _validatorPrimitives.tObject)({ + enabled: _validatorPrimitives.tBoolean + }); + scheme.PageSetViewportSizeParams = (0, _validatorPrimitives.tObject)({ + viewportSize: (0, _validatorPrimitives.tObject)({ + width: _validatorPrimitives.tNumber, + height: _validatorPrimitives.tNumber + }) + }); + scheme.PageKeyboardDownParams = (0, _validatorPrimitives.tObject)({ + key: _validatorPrimitives.tString + }); + scheme.PageKeyboardUpParams = (0, _validatorPrimitives.tObject)({ + key: _validatorPrimitives.tString + }); + scheme.PageKeyboardInsertTextParams = (0, _validatorPrimitives.tObject)({ + text: _validatorPrimitives.tString + }); + scheme.PageKeyboardTypeParams = (0, _validatorPrimitives.tObject)({ + text: _validatorPrimitives.tString, + delay: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.PageKeyboardPressParams = (0, _validatorPrimitives.tObject)({ + key: _validatorPrimitives.tString, + delay: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.PageMouseMoveParams = (0, _validatorPrimitives.tObject)({ + x: _validatorPrimitives.tNumber, + y: _validatorPrimitives.tNumber, + steps: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.PageMouseDownParams = (0, _validatorPrimitives.tObject)({ + button: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['left', 'right', 'middle'])), + clickCount: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.PageMouseUpParams = (0, _validatorPrimitives.tObject)({ + button: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['left', 'right', 'middle'])), + clickCount: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.PageMouseClickParams = (0, _validatorPrimitives.tObject)({ + x: _validatorPrimitives.tNumber, + y: _validatorPrimitives.tNumber, + delay: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + button: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['left', 'right', 'middle'])), + clickCount: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.PageMouseWheelParams = (0, _validatorPrimitives.tObject)({ + deltaX: _validatorPrimitives.tNumber, + deltaY: _validatorPrimitives.tNumber + }); + scheme.PageTouchscreenTapParams = (0, _validatorPrimitives.tObject)({ + x: _validatorPrimitives.tNumber, + y: _validatorPrimitives.tNumber + }); + scheme.PageAccessibilitySnapshotParams = (0, _validatorPrimitives.tObject)({ + interestingOnly: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + root: (0, _validatorPrimitives.tOptional)(tChannel('ElementHandle')) + }); + scheme.PagePdfParams = (0, _validatorPrimitives.tObject)({ + scale: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + displayHeaderFooter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + headerTemplate: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + footerTemplate: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + printBackground: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + landscape: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + pageRanges: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + format: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + width: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + height: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + preferCSSPageSize: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + margin: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + top: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + bottom: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + left: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + right: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + })) + }); + scheme.PageStartJSCoverageParams = (0, _validatorPrimitives.tObject)({ + resetOnNavigation: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + reportAnonymousScripts: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.PageStopJSCoverageParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.PageStartCSSCoverageParams = (0, _validatorPrimitives.tObject)({ + resetOnNavigation: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.PageStopCSSCoverageParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.PageBringToFrontParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.FrameEvalOnSelectorParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument') + }); + scheme.FrameEvalOnSelectorAllParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument') + }); + scheme.FrameAddScriptTagParams = (0, _validatorPrimitives.tObject)({ + url: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + content: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + type: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + }); + scheme.FrameAddStyleTagParams = (0, _validatorPrimitives.tObject)({ + url: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + content: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + }); + scheme.FrameCheckParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + position: (0, _validatorPrimitives.tOptional)(tType('Point')), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FrameClickParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + modifiers: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tEnum)(['Alt', 'Control', 'Meta', 'Shift']))), + position: (0, _validatorPrimitives.tOptional)(tType('Point')), + delay: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + button: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['left', 'right', 'middle'])), + clickCount: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FrameContentParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.FrameDragAndDropParams = (0, _validatorPrimitives.tObject)({ + source: _validatorPrimitives.tString, + target: _validatorPrimitives.tString, + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + sourcePosition: (0, _validatorPrimitives.tOptional)(tType('Point')), + targetPosition: (0, _validatorPrimitives.tOptional)(tType('Point')) + }); + scheme.FrameDblclickParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + modifiers: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tEnum)(['Alt', 'Control', 'Meta', 'Shift']))), + position: (0, _validatorPrimitives.tOptional)(tType('Point')), + delay: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + button: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['left', 'right', 'middle'])), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FrameDispatchEventParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + type: _validatorPrimitives.tString, + eventInit: tType('SerializedArgument'), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameEvaluateExpressionParams = (0, _validatorPrimitives.tObject)({ + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument') + }); + scheme.FrameEvaluateExpressionHandleParams = (0, _validatorPrimitives.tObject)({ + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument') + }); + scheme.FrameFillParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + value: _validatorPrimitives.tString, + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FrameFocusParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameFrameElementParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.FrameGetAttributeParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + name: _validatorPrimitives.tString, + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameGotoParams = (0, _validatorPrimitives.tObject)({ + url: _validatorPrimitives.tString, + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + waitUntil: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['load', 'domcontentloaded', 'networkidle'])), + referer: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + }); + scheme.FrameHoverParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + modifiers: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tEnum)(['Alt', 'Control', 'Meta', 'Shift']))), + position: (0, _validatorPrimitives.tOptional)(tType('Point')), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FrameInnerHTMLParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameInnerTextParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameInputValueParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameIsCheckedParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameIsDisabledParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameIsEnabledParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameIsHiddenParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FrameIsVisibleParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FrameIsEditableParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FramePressParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + key: _validatorPrimitives.tString, + delay: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameQuerySelectorParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FrameQuerySelectorAllParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString + }); + scheme.FrameSelectOptionParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + elements: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tChannel('ElementHandle'))), + options: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tObject)({ + value: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + label: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + index: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }))), + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FrameSetContentParams = (0, _validatorPrimitives.tObject)({ + html: _validatorPrimitives.tString, + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + waitUntil: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['load', 'domcontentloaded', 'networkidle'])) + }); + scheme.FrameSetInputFilesParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + files: (0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tObject)({ + name: _validatorPrimitives.tString, + mimeType: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + buffer: _validatorPrimitives.tBinary + })), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FrameTapParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + modifiers: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tEnum)(['Alt', 'Control', 'Meta', 'Shift']))), + position: (0, _validatorPrimitives.tOptional)(tType('Point')), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FrameTextContentParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameTitleParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.FrameTypeParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + text: _validatorPrimitives.tString, + delay: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameUncheckParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + position: (0, _validatorPrimitives.tOptional)(tType('Point')), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.FrameWaitForFunctionParams = (0, _validatorPrimitives.tObject)({ + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument'), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + pollingInterval: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.FrameWaitForSelectorParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + state: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['attached', 'detached', 'visible', 'hidden'])) + }); + scheme.WorkerEvaluateExpressionParams = (0, _validatorPrimitives.tObject)({ + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument') + }); + scheme.WorkerEvaluateExpressionHandleParams = (0, _validatorPrimitives.tObject)({ + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument') + }); + scheme.JSHandleDisposeParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleDisposeParams = tType('JSHandleDisposeParams'); + scheme.JSHandleEvaluateExpressionParams = (0, _validatorPrimitives.tObject)({ + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument') + }); + scheme.ElementHandleEvaluateExpressionParams = tType('JSHandleEvaluateExpressionParams'); + scheme.JSHandleEvaluateExpressionHandleParams = (0, _validatorPrimitives.tObject)({ + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument') + }); + scheme.ElementHandleEvaluateExpressionHandleParams = tType('JSHandleEvaluateExpressionHandleParams'); + scheme.JSHandleGetPropertyListParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleGetPropertyListParams = tType('JSHandleGetPropertyListParams'); + scheme.JSHandleGetPropertyParams = (0, _validatorPrimitives.tObject)({ + name: _validatorPrimitives.tString + }); + scheme.ElementHandleGetPropertyParams = tType('JSHandleGetPropertyParams'); + scheme.JSHandleJsonValueParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleJsonValueParams = tType('JSHandleJsonValueParams'); + scheme.ElementHandleEvalOnSelectorParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument') + }); + scheme.ElementHandleEvalOnSelectorAllParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument') + }); + scheme.ElementHandleBoundingBoxParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleCheckParams = (0, _validatorPrimitives.tObject)({ + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + position: (0, _validatorPrimitives.tOptional)(tType('Point')), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.ElementHandleClickParams = (0, _validatorPrimitives.tObject)({ + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + modifiers: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tEnum)(['Alt', 'Control', 'Meta', 'Shift']))), + position: (0, _validatorPrimitives.tOptional)(tType('Point')), + delay: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + button: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['left', 'right', 'middle'])), + clickCount: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.ElementHandleContentFrameParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleDblclickParams = (0, _validatorPrimitives.tObject)({ + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + modifiers: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tEnum)(['Alt', 'Control', 'Meta', 'Shift']))), + position: (0, _validatorPrimitives.tOptional)(tType('Point')), + delay: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + button: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['left', 'right', 'middle'])), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.ElementHandleDispatchEventParams = (0, _validatorPrimitives.tObject)({ + type: _validatorPrimitives.tString, + eventInit: tType('SerializedArgument') + }); + scheme.ElementHandleFillParams = (0, _validatorPrimitives.tObject)({ + value: _validatorPrimitives.tString, + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.ElementHandleFocusParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleGetAttributeParams = (0, _validatorPrimitives.tObject)({ + name: _validatorPrimitives.tString + }); + scheme.ElementHandleHoverParams = (0, _validatorPrimitives.tObject)({ + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + modifiers: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tEnum)(['Alt', 'Control', 'Meta', 'Shift']))), + position: (0, _validatorPrimitives.tOptional)(tType('Point')), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.ElementHandleInnerHTMLParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleInnerTextParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleInputValueParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleIsCheckedParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleIsDisabledParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleIsEditableParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleIsEnabledParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleIsHiddenParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleIsVisibleParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleOwnerFrameParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandlePressParams = (0, _validatorPrimitives.tObject)({ + key: _validatorPrimitives.tString, + delay: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.ElementHandleQuerySelectorParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.ElementHandleQuerySelectorAllParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString + }); + scheme.ElementHandleScreenshotParams = (0, _validatorPrimitives.tObject)({ + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + type: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['png', 'jpeg'])), + quality: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + omitBackground: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.ElementHandleScrollIntoViewIfNeededParams = (0, _validatorPrimitives.tObject)({ + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.ElementHandleSelectOptionParams = (0, _validatorPrimitives.tObject)({ + elements: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tChannel('ElementHandle'))), + options: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tObject)({ + value: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + label: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + index: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }))), + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.ElementHandleSelectTextParams = (0, _validatorPrimitives.tObject)({ + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.ElementHandleSetInputFilesParams = (0, _validatorPrimitives.tObject)({ + files: (0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tObject)({ + name: _validatorPrimitives.tString, + mimeType: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + buffer: _validatorPrimitives.tBinary + })), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.ElementHandleTapParams = (0, _validatorPrimitives.tObject)({ + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + modifiers: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tEnum)(['Alt', 'Control', 'Meta', 'Shift']))), + position: (0, _validatorPrimitives.tOptional)(tType('Point')), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.ElementHandleTextContentParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElementHandleTypeParams = (0, _validatorPrimitives.tObject)({ + text: _validatorPrimitives.tString, + delay: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.ElementHandleUncheckParams = (0, _validatorPrimitives.tObject)({ + force: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + noWaitAfter: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + position: (0, _validatorPrimitives.tOptional)(tType('Point')), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + trial: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.ElementHandleWaitForElementStateParams = (0, _validatorPrimitives.tObject)({ + state: (0, _validatorPrimitives.tEnum)(['visible', 'hidden', 'stable', 'enabled', 'disabled', 'editable']), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.ElementHandleWaitForSelectorParams = (0, _validatorPrimitives.tObject)({ + selector: _validatorPrimitives.tString, + strict: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + state: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['attached', 'detached', 'visible', 'hidden'])) + }); + scheme.RequestResponseParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.RouteAbortParams = (0, _validatorPrimitives.tObject)({ + errorCode: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + }); + scheme.RouteContinueParams = (0, _validatorPrimitives.tObject)({ + url: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + method: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + headers: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('NameValue'))), + postData: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBinary), + interceptResponse: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean) + }); + scheme.RouteFulfillParams = (0, _validatorPrimitives.tObject)({ + status: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + headers: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('NameValue'))), + body: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + isBase64: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + useInterceptedResponseBody: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + fetchResponseUid: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + }); + scheme.RouteResponseBodyParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ResourceTiming = (0, _validatorPrimitives.tObject)({ + startTime: _validatorPrimitives.tNumber, + domainLookupStart: _validatorPrimitives.tNumber, + domainLookupEnd: _validatorPrimitives.tNumber, + connectStart: _validatorPrimitives.tNumber, + secureConnectionStart: _validatorPrimitives.tNumber, + connectEnd: _validatorPrimitives.tNumber, + requestStart: _validatorPrimitives.tNumber, + responseStart: _validatorPrimitives.tNumber + }); + scheme.ResponseBodyParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ResponseSecurityDetailsParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ResponseServerAddrParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ResponseRawRequestHeadersParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ResponseRawResponseHeadersParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ResponseSizesParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.SecurityDetails = (0, _validatorPrimitives.tObject)({ + issuer: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + protocol: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + subjectName: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + validFrom: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + validTo: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.RequestSizes = (0, _validatorPrimitives.tObject)({ + requestBodySize: _validatorPrimitives.tNumber, + requestHeadersSize: _validatorPrimitives.tNumber, + responseBodySize: _validatorPrimitives.tNumber, + responseHeadersSize: _validatorPrimitives.tNumber + }); + scheme.RemoteAddr = (0, _validatorPrimitives.tObject)({ + ipAddress: _validatorPrimitives.tString, + port: _validatorPrimitives.tNumber + }); + scheme.BindingCallRejectParams = (0, _validatorPrimitives.tObject)({ + error: tType('SerializedError') + }); + scheme.BindingCallResolveParams = (0, _validatorPrimitives.tObject)({ + result: tType('SerializedArgument') + }); + scheme.DialogAcceptParams = (0, _validatorPrimitives.tObject)({ + promptText: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + }); + scheme.DialogDismissParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ArtifactPathAfterFinishedParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ArtifactSaveAsParams = (0, _validatorPrimitives.tObject)({ + path: _validatorPrimitives.tString + }); + scheme.ArtifactSaveAsStreamParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ArtifactFailureParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ArtifactStreamParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ArtifactCancelParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ArtifactDeleteParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.StreamReadParams = (0, _validatorPrimitives.tObject)({ + size: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.StreamCloseParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.CDPSessionSendParams = (0, _validatorPrimitives.tObject)({ + method: _validatorPrimitives.tString, + params: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tAny) + }); + scheme.CDPSessionDetachParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.ElectronLaunchParams = (0, _validatorPrimitives.tObject)({ + executablePath: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + args: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(_validatorPrimitives.tString)), + cwd: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + env: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('NameValue'))), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + acceptDownloads: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + bypassCSP: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + colorScheme: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['dark', 'light', 'no-preference'])), + extraHTTPHeaders: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('NameValue'))), + geolocation: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + longitude: _validatorPrimitives.tNumber, + latitude: _validatorPrimitives.tNumber, + accuracy: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + })), + httpCredentials: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + username: _validatorPrimitives.tString, + password: _validatorPrimitives.tString + })), + ignoreHTTPSErrors: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + locale: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + offline: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + recordHar: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + omitContent: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + path: _validatorPrimitives.tString + })), + recordVideo: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + dir: _validatorPrimitives.tString, + size: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + width: _validatorPrimitives.tNumber, + height: _validatorPrimitives.tNumber + })) + })), + strictSelectors: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + timezoneId: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + }); + scheme.ElectronApplicationBrowserWindowParams = (0, _validatorPrimitives.tObject)({ + page: tChannel('Page') + }); + scheme.ElectronApplicationEvaluateExpressionParams = (0, _validatorPrimitives.tObject)({ + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument') + }); + scheme.ElectronApplicationEvaluateExpressionHandleParams = (0, _validatorPrimitives.tObject)({ + expression: _validatorPrimitives.tString, + isFunction: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + arg: tType('SerializedArgument') + }); + scheme.ElectronApplicationCloseParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.AndroidDevicesParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.AndroidSetDefaultTimeoutNoReplyParams = (0, _validatorPrimitives.tObject)({ + timeout: _validatorPrimitives.tNumber + }); + scheme.AndroidSocketWriteParams = (0, _validatorPrimitives.tObject)({ + data: _validatorPrimitives.tBinary + }); + scheme.AndroidSocketCloseParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.AndroidDeviceWaitParams = (0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector'), + state: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['gone'])), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.AndroidDeviceFillParams = (0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector'), + text: _validatorPrimitives.tString, + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.AndroidDeviceTapParams = (0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector'), + duration: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.AndroidDeviceDragParams = (0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector'), + dest: tType('Point'), + speed: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.AndroidDeviceFlingParams = (0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector'), + direction: (0, _validatorPrimitives.tEnum)(['up', 'down', 'left', 'right']), + speed: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.AndroidDeviceLongTapParams = (0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector'), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.AndroidDevicePinchCloseParams = (0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector'), + percent: _validatorPrimitives.tNumber, + speed: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.AndroidDevicePinchOpenParams = (0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector'), + percent: _validatorPrimitives.tNumber, + speed: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.AndroidDeviceScrollParams = (0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector'), + direction: (0, _validatorPrimitives.tEnum)(['up', 'down', 'left', 'right']), + percent: _validatorPrimitives.tNumber, + speed: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.AndroidDeviceSwipeParams = (0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector'), + direction: (0, _validatorPrimitives.tEnum)(['up', 'down', 'left', 'right']), + percent: _validatorPrimitives.tNumber, + speed: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.AndroidDeviceInfoParams = (0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector') + }); + scheme.AndroidDeviceScreenshotParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.AndroidDeviceInputTypeParams = (0, _validatorPrimitives.tObject)({ + text: _validatorPrimitives.tString + }); + scheme.AndroidDeviceInputPressParams = (0, _validatorPrimitives.tObject)({ + key: _validatorPrimitives.tString + }); + scheme.AndroidDeviceInputTapParams = (0, _validatorPrimitives.tObject)({ + point: tType('Point') + }); + scheme.AndroidDeviceInputSwipeParams = (0, _validatorPrimitives.tObject)({ + segments: (0, _validatorPrimitives.tArray)(tType('Point')), + steps: _validatorPrimitives.tNumber + }); + scheme.AndroidDeviceInputDragParams = (0, _validatorPrimitives.tObject)({ + from: tType('Point'), + to: tType('Point'), + steps: _validatorPrimitives.tNumber + }); + scheme.AndroidDeviceLaunchBrowserParams = (0, _validatorPrimitives.tObject)({ + pkg: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + ignoreHTTPSErrors: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + javaScriptEnabled: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + bypassCSP: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + userAgent: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + locale: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + timezoneId: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + geolocation: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + longitude: _validatorPrimitives.tNumber, + latitude: _validatorPrimitives.tNumber, + accuracy: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + })), + permissions: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(_validatorPrimitives.tString)), + extraHTTPHeaders: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('NameValue'))), + offline: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + httpCredentials: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + username: _validatorPrimitives.tString, + password: _validatorPrimitives.tString + })), + deviceScaleFactor: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + isMobile: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + hasTouch: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + colorScheme: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['dark', 'light', 'no-preference'])), + reducedMotion: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['reduce', 'no-preference'])), + forcedColors: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['active', 'none'])), + acceptDownloads: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + _debugName: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + recordVideo: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + dir: _validatorPrimitives.tString, + size: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + width: _validatorPrimitives.tNumber, + height: _validatorPrimitives.tNumber + })) + })), + recordHar: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + omitContent: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + path: _validatorPrimitives.tString + })), + strictSelectors: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + proxy: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + server: _validatorPrimitives.tString, + bypass: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + username: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + password: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + })) + }); + scheme.AndroidDeviceOpenParams = (0, _validatorPrimitives.tObject)({ + command: _validatorPrimitives.tString + }); + scheme.AndroidDeviceShellParams = (0, _validatorPrimitives.tObject)({ + command: _validatorPrimitives.tString + }); + scheme.AndroidDeviceInstallApkParams = (0, _validatorPrimitives.tObject)({ + file: _validatorPrimitives.tBinary, + args: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(_validatorPrimitives.tString)) + }); + scheme.AndroidDevicePushParams = (0, _validatorPrimitives.tObject)({ + file: _validatorPrimitives.tBinary, + path: _validatorPrimitives.tString, + mode: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + }); + scheme.AndroidDeviceSetDefaultTimeoutNoReplyParams = (0, _validatorPrimitives.tObject)({ + timeout: _validatorPrimitives.tNumber + }); + scheme.AndroidDeviceConnectToWebViewParams = (0, _validatorPrimitives.tObject)({ + pid: _validatorPrimitives.tNumber + }); + scheme.AndroidDeviceCloseParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + scheme.AndroidWebView = (0, _validatorPrimitives.tObject)({ + pid: _validatorPrimitives.tNumber, + pkg: _validatorPrimitives.tString + }); + scheme.AndroidSelector = (0, _validatorPrimitives.tObject)({ + checkable: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + checked: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + clazz: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + clickable: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + depth: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber), + desc: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + enabled: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + focusable: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + focused: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + hasChild: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector') + })), + hasDescendant: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({ + selector: tType('AndroidSelector'), + maxDepth: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber) + })), + longClickable: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + pkg: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + res: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString), + scrollable: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + selected: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean), + text: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString) + }); + scheme.AndroidElementInfo = (0, _validatorPrimitives.tObject)({ + children: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)(tType('AndroidElementInfo'))), + clazz: _validatorPrimitives.tString, + desc: _validatorPrimitives.tString, + res: _validatorPrimitives.tString, + pkg: _validatorPrimitives.tString, + text: _validatorPrimitives.tString, + bounds: tType('Rect'), + checkable: _validatorPrimitives.tBoolean, + checked: _validatorPrimitives.tBoolean, + clickable: _validatorPrimitives.tBoolean, + enabled: _validatorPrimitives.tBoolean, + focusable: _validatorPrimitives.tBoolean, + focused: _validatorPrimitives.tBoolean, + longClickable: _validatorPrimitives.tBoolean, + scrollable: _validatorPrimitives.tBoolean, + selected: _validatorPrimitives.tBoolean + }); + scheme.JsonPipeSendParams = (0, _validatorPrimitives.tObject)({ + message: _validatorPrimitives.tAny + }); + scheme.JsonPipeCloseParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({})); + return scheme; +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/validatorPrimitives.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/validatorPrimitives.js new file mode 100644 index 00000000..98ef0843 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/protocol/validatorPrimitives.js @@ -0,0 +1,122 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.tEnum = exports.tObject = exports.tArray = exports.tOptional = exports.tAny = exports.tUndefined = exports.tBinary = exports.tString = exports.tBoolean = exports.tNumber = exports.ValidationError = void 0; + +var _utils = require("../utils/utils"); + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +class ValidationError extends Error {} + +exports.ValidationError = ValidationError; + +const tNumber = (arg, path) => { + if (arg instanceof Number) return arg.valueOf(); + if (typeof arg === 'number') return arg; + throw new ValidationError(`${path}: expected number, got ${typeof arg}`); +}; + +exports.tNumber = tNumber; + +const tBoolean = (arg, path) => { + if (arg instanceof Boolean) return arg.valueOf(); + if (typeof arg === 'boolean') return arg; + throw new ValidationError(`${path}: expected boolean, got ${typeof arg}`); +}; + +exports.tBoolean = tBoolean; + +const tString = (arg, path) => { + if (arg instanceof String) return arg.valueOf(); + if (typeof arg === 'string') return arg; + throw new ValidationError(`${path}: expected string, got ${typeof arg}`); +}; + +exports.tString = tString; + +const tBinary = (arg, path) => { + if (arg instanceof String) return arg.valueOf(); + if (typeof arg === 'string') return arg; + throw new ValidationError(`${path}: expected base64-encoded buffer, got ${typeof arg}`); +}; + +exports.tBinary = tBinary; + +const tUndefined = (arg, path) => { + if (Object.is(arg, undefined)) return arg; + throw new ValidationError(`${path}: expected undefined, got ${typeof arg}`); +}; + +exports.tUndefined = tUndefined; + +const tAny = (arg, path) => { + return arg; +}; + +exports.tAny = tAny; + +const tOptional = v => { + return (arg, path) => { + if (Object.is(arg, undefined)) return arg; + return v(arg, path); + }; +}; + +exports.tOptional = tOptional; + +const tArray = v => { + return (arg, path) => { + if (!Array.isArray(arg)) throw new ValidationError(`${path}: expected array, got ${typeof arg}`); + return arg.map((x, index) => v(x, path + '[' + index + ']')); + }; +}; + +exports.tArray = tArray; + +const tObject = s => { + return (arg, path) => { + if (Object.is(arg, null)) throw new ValidationError(`${path}: expected object, got null`); + if (typeof arg !== 'object') throw new ValidationError(`${path}: expected object, got ${typeof arg}`); + const result = {}; + + for (const [key, v] of Object.entries(s)) { + const value = v(arg[key], path ? path + '.' + key : key); + if (!Object.is(value, undefined)) result[key] = value; + } + + if ((0, _utils.isUnderTest)()) { + for (const [key, value] of Object.entries(arg)) { + if (key.startsWith('__testHook')) result[key] = value; + } + } + + return result; + }; +}; + +exports.tObject = tObject; + +const tEnum = e => { + return (arg, path) => { + if (!e.includes(arg)) throw new ValidationError(`${path}: expected one of (${e.join('|')})`); + return arg; + }; +}; + +exports.tEnum = tEnum; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/remote/playwrightClient.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/remote/playwrightClient.js new file mode 100644 index 00000000..956a62b3 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/remote/playwrightClient.js @@ -0,0 +1,80 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PlaywrightClient = void 0; + +var _ws = _interopRequireDefault(require("ws")); + +var _connection = require("../client/connection"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +class PlaywrightClient { + static async connect(options) { + const { + wsEndpoint, + timeout = 30000 + } = options; + const connection = new _connection.Connection(); + const ws = new _ws.default(wsEndpoint); + + connection.onmessage = message => ws.send(JSON.stringify(message)); + + ws.on('message', message => connection.dispatch(JSON.parse(message.toString()))); + const errorPromise = new Promise((_, reject) => ws.on('error', error => reject(error))); + const closePromise = new Promise((_, reject) => ws.on('close', () => reject(new Error('Connection closed')))); + const playwrightClientPromise = new Promise((resolve, reject) => { + ws.on('open', async () => { + const playwright = await connection.initializePlaywright(); + resolve(new PlaywrightClient(playwright, ws)); + }); + }); + let timer; + + try { + await Promise.race([playwrightClientPromise, errorPromise, closePromise, new Promise((_, reject) => timer = setTimeout(() => reject(`Timeout of ${timeout}ms exceeded while connecting.`), timeout))]); + return await playwrightClientPromise; + } finally { + clearTimeout(timer); + } + } + + constructor(playwright, ws) { + this._playwright = void 0; + this._ws = void 0; + this._closePromise = void 0; + this._playwright = playwright; + this._ws = ws; + this._closePromise = new Promise(f => ws.on('close', f)); + } + + playwright() { + return this._playwright; + } + + async close() { + this._ws.close(); + + await this._closePromise; + } + +} + +exports.PlaywrightClient = PlaywrightClient; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/remote/playwrightServer.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/remote/playwrightServer.js new file mode 100644 index 00000000..b8b98f3b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/remote/playwrightServer.js @@ -0,0 +1,156 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PlaywrightServer = void 0; + +var _debug = _interopRequireDefault(require("debug")); + +var http = _interopRequireWildcard(require("http")); + +var ws = _interopRequireWildcard(require("ws")); + +var _dispatcher = require("../dispatchers/dispatcher"); + +var _playwrightDispatcher = require("../dispatchers/playwrightDispatcher"); + +var _playwright2 = require("../server/playwright"); + +var _processLauncher = require("../utils/processLauncher"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +const debugLog = (0, _debug.default)('pw:server'); + +class PlaywrightServer { + static async startDefault() { + const cleanup = async () => { + await (0, _processLauncher.gracefullyCloseAll)().catch(e => {}); + }; + + const delegate = { + path: '/ws', + allowMultipleClients: false, + onClose: cleanup, + onConnect: async connection => { + let playwright; + new _dispatcher.Root(connection, async rootScope => { + playwright = (0, _playwright2.createPlaywright)('javascript'); + const dispatcher = new _playwrightDispatcher.PlaywrightDispatcher(rootScope, playwright); + if (process.env.PW_SOCKS_PROXY_PORT) await dispatcher.enableSocksProxy(); + return dispatcher; + }); + return () => { + var _playwright; + + cleanup(); + (_playwright = playwright) === null || _playwright === void 0 ? void 0 : _playwright.selectors.unregisterAll(); + }; + } + }; + return new PlaywrightServer(delegate); + } + + constructor(delegate) { + this._wsServer = void 0; + this._clientsCount = 0; + this._delegate = void 0; + this._delegate = delegate; + } + + async listen(port = 0) { + const server = http.createServer((request, response) => { + response.end('Running'); + }); + server.on('error', error => debugLog(error)); + const path = this._delegate.path; + const wsEndpoint = await new Promise((resolve, reject) => { + server.listen(port, () => { + const address = server.address(); + const wsEndpoint = typeof address === 'string' ? `${address}${path}` : `ws://127.0.0.1:${address.port}${path}`; + resolve(wsEndpoint); + }).on('error', reject); + }); + debugLog('Listening at ' + wsEndpoint); + this._wsServer = new ws.Server({ + server, + path + }); + + this._wsServer.on('connection', async socket => { + if (this._clientsCount && !this._delegate.allowMultipleClients) { + socket.close(); + return; + } + + this._clientsCount++; + debugLog('Incoming connection'); + const connection = new _dispatcher.DispatcherConnection(); + + connection.onmessage = message => { + if (socket.readyState !== ws.CLOSING) socket.send(JSON.stringify(message)); + }; + + socket.on('message', message => { + connection.dispatch(JSON.parse(Buffer.from(message).toString())); + }); + + const forceDisconnect = () => socket.close(); + + let onDisconnect = () => {}; + + const disconnected = () => { + this._clientsCount--; // Avoid sending any more messages over closed socket. + + connection.onmessage = () => {}; + + onDisconnect(); + }; + + socket.on('close', () => { + debugLog('Client closed'); + disconnected(); + }); + socket.on('error', error => { + debugLog('Client error ' + error); + disconnected(); + }); + onDisconnect = await this._delegate.onConnect(connection, forceDisconnect); + }); + + return wsEndpoint; + } + + async close() { + if (!this._wsServer) return; + debugLog('Closing server'); // First disconnect all remaining clients. + + await new Promise(f => this._wsServer.close(f)); + await new Promise(f => this._wsServer.options.server.close(f)); + this._wsServer = undefined; + await this._delegate.onClose(); + } + +} + +exports.PlaywrightServer = PlaywrightServer; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/accessibility.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/accessibility.js new file mode 100644 index 00000000..71876f1c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/accessibility.js @@ -0,0 +1,72 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Accessibility = void 0; + +/** + * Copyright 2018 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +class Accessibility { + constructor(getAXTree) { + this._getAXTree = void 0; + this._getAXTree = getAXTree; + } + + async snapshot(options = {}) { + const { + interestingOnly = true, + root = null + } = options; + const { + tree, + needle + } = await this._getAXTree(root || undefined); + + if (!interestingOnly) { + if (root) return needle && serializeTree(needle)[0]; + return serializeTree(tree)[0]; + } + + const interestingNodes = new Set(); + collectInterestingNodes(interestingNodes, tree, false); + if (root && (!needle || !interestingNodes.has(needle))) return null; + return serializeTree(needle || tree, interestingNodes)[0]; + } + +} + +exports.Accessibility = Accessibility; + +function collectInterestingNodes(collection, node, insideControl) { + if (node.isInteresting(insideControl)) collection.add(node); + if (node.isLeafNode()) return; + insideControl = insideControl || node.isControl(); + + for (const child of node.children()) collectInterestingNodes(collection, child, insideControl); +} + +function serializeTree(node, whitelistedNodes) { + const children = []; + + for (const child of node.children()) children.push(...serializeTree(child, whitelistedNodes)); + + if (whitelistedNodes && !whitelistedNodes.has(node)) return children; + const serializedNode = node.serialize(); + if (children.length) serializedNode.children = children; + return [serializedNode]; +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/android/android.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/android/android.js new file mode 100644 index 00000000..e45d7c2f --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/android/android.js @@ -0,0 +1,479 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.AndroidDevice = exports.Android = void 0; + +var _debug = _interopRequireDefault(require("debug")); + +var _events = require("events"); + +var _fs = _interopRequireDefault(require("fs")); + +var ws = _interopRequireWildcard(require("ws")); + +var _utils = require("../../utils/utils"); + +var _browserContext = require("../browserContext"); + +var _progress = require("../progress"); + +var _crBrowser = require("../chromium/crBrowser"); + +var _helper = require("../helper"); + +var _transport = require("../../protocol/transport"); + +var _debugLogger = require("../../utils/debugLogger"); + +var _timeoutSettings = require("../../utils/timeoutSettings"); + +var _instrumentation = require("../instrumentation"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright Microsoft Corporation. All rights reserved. + * + * 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. + */ +class Android extends _instrumentation.SdkObject { + constructor(backend, playwrightOptions) { + super(playwrightOptions.rootSdkObject, 'android'); + this._backend = void 0; + this._devices = new Map(); + this._timeoutSettings = void 0; + this._playwrightOptions = void 0; + this._backend = backend; + this._playwrightOptions = playwrightOptions; + this._timeoutSettings = new _timeoutSettings.TimeoutSettings(); + } + + setDefaultTimeout(timeout) { + this._timeoutSettings.setDefaultTimeout(timeout); + } + + async devices() { + const devices = (await this._backend.devices()).filter(d => d.status === 'device'); + const newSerials = new Set(); + + for (const d of devices) { + newSerials.add(d.serial); + if (this._devices.has(d.serial)) continue; + const device = await AndroidDevice.create(this, d); + + this._devices.set(d.serial, device); + } + + for (const d of this._devices.keys()) { + if (!newSerials.has(d)) this._devices.delete(d); + } + + return [...this._devices.values()]; + } + + _deviceClosed(device) { + this._devices.delete(device.serial); + } + +} + +exports.Android = Android; + +class AndroidDevice extends _instrumentation.SdkObject { + constructor(android, backend, model) { + super(android, 'android-device'); + this._backend = void 0; + this.model = void 0; + this.serial = void 0; + this._driverPromise = void 0; + this._lastId = 0; + this._callbacks = new Map(); + this._pollingWebViews = void 0; + this._timeoutSettings = void 0; + this._webViews = new Map(); + this._browserConnections = new Set(); + this._android = void 0; + this._isClosed = false; + this._android = android; + this._backend = backend; + this.model = model; + this.serial = backend.serial; + this._timeoutSettings = new _timeoutSettings.TimeoutSettings(android._timeoutSettings); + } + + static async create(android, backend) { + await backend.init(); + const model = await backend.runCommand('shell:getprop ro.product.model'); + const device = new AndroidDevice(android, backend, model.toString().trim()); + await device._init(); + return device; + } + + async _init() { + await this._refreshWebViews(); + + const poll = () => { + this._pollingWebViews = setTimeout(() => this._refreshWebViews().then(poll).catch(() => {}), 500); + }; + + poll(); + } + + setDefaultTimeout(timeout) { + this._timeoutSettings.setDefaultTimeout(timeout); + } + + async shell(command) { + const result = await this._backend.runCommand(`shell:${command}`); + await this._refreshWebViews(); + return result; + } + + async open(command) { + return await this._backend.open(`${command}`); + } + + async screenshot() { + return await this._backend.runCommand(`shell:screencap -p`); + } + + async _driver() { + if (!this._driverPromise) this._driverPromise = this._installDriver(); + return this._driverPromise; + } + + async _installDriver() { + (0, _debug.default)('pw:android')('Stopping the old driver'); + await this.shell(`am force-stop com.microsoft.playwright.androiddriver`); + (0, _debug.default)('pw:android')('Uninstalling the old driver'); + await this.shell(`cmd package uninstall com.microsoft.playwright.androiddriver`); + await this.shell(`cmd package uninstall com.microsoft.playwright.androiddriver.test`); + (0, _debug.default)('pw:android')('Installing the new driver'); + + for (const file of ['android-driver.apk', 'android-driver-target.apk']) await this.installApk(await _fs.default.promises.readFile(require.resolve(`../../../bin/${file}`))); + + (0, _debug.default)('pw:android')('Starting the new driver'); + this.shell('am instrument -w com.microsoft.playwright.androiddriver.test/androidx.test.runner.AndroidJUnitRunner').catch(e => (0, _debug.default)('pw:android')(e)); + const socket = await this._waitForLocalAbstract('playwright_android_driver_socket'); + const transport = new _transport.Transport(socket, socket, socket, 'be'); + + transport.onmessage = message => { + const response = JSON.parse(message); + const { + id, + result, + error + } = response; + + const callback = this._callbacks.get(id); + + if (!callback) return; + if (error) callback.reject(new Error(error));else callback.fulfill(result); + + this._callbacks.delete(id); + }; + + return transport; + } + + async _waitForLocalAbstract(socketName) { + let socket; + (0, _debug.default)('pw:android')(`Polling the socket localabstract:${socketName}`); + + while (!socket) { + try { + socket = await this._backend.open(`localabstract:${socketName}`); + } catch (e) { + await new Promise(f => setTimeout(f, 250)); + } + } + + (0, _debug.default)('pw:android')(`Connected to localabstract:${socketName}`); + return socket; + } + + async send(method, params = {}) { + // Patch the timeout in! + params.timeout = this._timeoutSettings.timeout(params); + const driver = await this._driver(); + const id = ++this._lastId; + const result = new Promise((fulfill, reject) => this._callbacks.set(id, { + fulfill, + reject + })); + driver.send(JSON.stringify({ + id, + method, + params + })); + return result; + } + + async close() { + this._isClosed = true; + if (this._pollingWebViews) clearTimeout(this._pollingWebViews); + + for (const connection of this._browserConnections) await connection.close(); + + if (this._driverPromise) { + const driver = await this._driver(); + driver.close(); + } + + await this._backend.close(); + + this._android._deviceClosed(this); + + this.emit(AndroidDevice.Events.Closed); + } + + async launchBrowser(pkg = 'com.android.chrome', options) { + (0, _debug.default)('pw:android')('Force-stopping', pkg); + await this._backend.runCommand(`shell:am force-stop ${pkg}`); + const socketName = 'playwright-' + (0, _utils.createGuid)(); + const commandLine = `_ --disable-fre --no-default-browser-check --no-first-run --remote-debugging-socket-name=${socketName}`; + (0, _debug.default)('pw:android')('Starting', pkg, commandLine); + await this._backend.runCommand(`shell:echo "${commandLine}" > /data/local/tmp/chrome-command-line`); + await this._backend.runCommand(`shell:am start -n ${pkg}/com.google.android.apps.chrome.Main about:blank`); + return await this._connectToBrowser(socketName, options); + } + + async connectToWebView(pid) { + const webView = this._webViews.get(pid); + + if (!webView) throw new Error('WebView has been closed'); + return await this._connectToBrowser(`webview_devtools_remote_${pid}`); + } + + async _connectToBrowser(socketName, options = {}) { + const socket = await this._waitForLocalAbstract(socketName); + const androidBrowser = new AndroidBrowser(this, socket); + await androidBrowser._init(); + + this._browserConnections.add(androidBrowser); + + const browserOptions = { ...this._android._playwrightOptions, + name: 'clank', + isChromium: true, + slowMo: 0, + persistent: { ...options, + noDefaultViewport: true + }, + artifactsDir: '', + downloadsPath: '', + tracesDir: '', + browserProcess: new ClankBrowserProcess(androidBrowser), + proxy: options.proxy, + protocolLogger: _helper.helper.debugProtocolLogger(), + browserLogsCollector: new _debugLogger.RecentLogsCollector() + }; + (0, _browserContext.validateBrowserContextOptions)(options, browserOptions); + const browser = await _crBrowser.CRBrowser.connect(androidBrowser, browserOptions); + const controller = new _progress.ProgressController((0, _instrumentation.internalCallMetadata)(), this); + const defaultContext = browser._defaultContext; + await controller.run(async progress => { + await defaultContext._loadDefaultContextAsIs(progress); + }); + { + // TODO: remove after rolling to r838157 + // Force page scale factor update. + const page = defaultContext.pages()[0]; + const crPage = page._delegate; + await crPage._mainFrameSession._client.send('Emulation.setDeviceMetricsOverride', { + mobile: false, + width: 0, + height: 0, + deviceScaleFactor: 0 + }); + await crPage._mainFrameSession._client.send('Emulation.clearDeviceMetricsOverride', {}); + } + return defaultContext; + } + + webViews() { + return [...this._webViews.values()]; + } + + async installApk(content, options) { + const args = options && options.args ? options.args : ['-r', '-t', '-S']; + (0, _debug.default)('pw:android')('Opening install socket'); + const installSocket = await this._backend.open(`shell:cmd package install ${args.join(' ')} ${content.length}`); + (0, _debug.default)('pw:android')('Writing driver bytes: ' + content.length); + await installSocket.write(content); + const success = await new Promise(f => installSocket.on('data', f)); + (0, _debug.default)('pw:android')('Written driver bytes: ' + success); + installSocket.close(); + } + + async push(content, path, mode = 0o644) { + const socket = await this._backend.open(`sync:`); + + const sendHeader = async (command, length) => { + const buffer = Buffer.alloc(command.length + 4); + buffer.write(command, 0); + buffer.writeUInt32LE(length, command.length); + await socket.write(buffer); + }; + + const send = async (command, data) => { + await sendHeader(command, data.length); + await socket.write(data); + }; + + await send('SEND', Buffer.from(`${path},${mode}`)); + const maxChunk = 65535; + + for (let i = 0; i < content.length; i += maxChunk) await send('DATA', content.slice(i, i + maxChunk)); + + await sendHeader('DONE', Date.now() / 1000 | 0); + const result = await new Promise(f => socket.once('data', f)); + const code = result.slice(0, 4).toString(); + if (code !== 'OKAY') throw new Error('Could not push: ' + code); + socket.close(); + } + + async _refreshWebViews() { + const sockets = (await this._backend.runCommand(`shell:cat /proc/net/unix | grep webview_devtools_remote`)).toString().split('\n'); + if (this._isClosed) return; + const newPids = new Set(); + + for (const line of sockets) { + const match = line.match(/[^@]+@webview_devtools_remote_(\d+)/); + if (!match) continue; + const pid = +match[1]; + newPids.add(pid); + } + + for (const pid of newPids) { + if (this._webViews.has(pid)) continue; + const procs = (await this._backend.runCommand(`shell:ps -A | grep ${pid}`)).toString().split('\n'); + if (this._isClosed) return; + let pkg = ''; + + for (const proc of procs) { + const match = proc.match(/[^\s]+\s+(\d+).*$/); + if (!match) continue; + const p = match[1]; + if (+p !== pid) continue; + pkg = proc.substring(proc.lastIndexOf(' ') + 1); + } + + const webView = { + pid, + pkg + }; + + this._webViews.set(pid, webView); + + this.emit(AndroidDevice.Events.WebViewAdded, webView); + } + + for (const p of this._webViews.keys()) { + if (!newPids.has(p)) { + this._webViews.delete(p); + + this.emit(AndroidDevice.Events.WebViewRemoved, p); + } + } + } + +} + +exports.AndroidDevice = AndroidDevice; +AndroidDevice.Events = { + WebViewAdded: 'webViewAdded', + WebViewRemoved: 'webViewRemoved', + Closed: 'closed' +}; + +class AndroidBrowser extends _events.EventEmitter { + constructor(device, socket) { + super(); + this.device = void 0; + this._socket = void 0; + this._receiver = void 0; + this._waitForNextTask = (0, _utils.makeWaitForNextTask)(); + this.onmessage = void 0; + this.onclose = void 0; + this.setMaxListeners(0); + this.device = device; + this._socket = socket; + + this._socket.on('close', () => { + this._waitForNextTask(() => { + if (this.onclose) this.onclose(); + }); + }); + + this._receiver = new ws.Receiver(); + + this._receiver.on('message', message => { + this._waitForNextTask(() => { + if (this.onmessage) this.onmessage(JSON.parse(message)); + }); + }); + } + + async _init() { + await this._socket.write(Buffer.from(`GET /devtools/browser HTTP/1.1\r +Upgrade: WebSocket\r +Connection: Upgrade\r +Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r +Sec-WebSocket-Version: 13\r +\r +`)); // HTTP Upgrade response. + + await new Promise(f => this._socket.once('data', f)); // Start sending web frame to receiver. + + this._socket.on('data', data => this._receiver._write(data, 'binary', () => {})); + } + + async send(s) { + await this._socket.write(encodeWebFrame(JSON.stringify(s))); + } + + async close() { + this._socket.close(); + } + +} + +function encodeWebFrame(data) { + return ws.Sender.frame(Buffer.from(data), { + opcode: 1, + mask: true, + fin: true, + readOnly: true + })[0]; +} + +class ClankBrowserProcess { + constructor(browser) { + this._browser = void 0; + this.onclose = void 0; + this._browser = browser; + } + + async kill() {} + + async close() { + await this._browser.close(); + } + +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/android/backendAdb.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/android/backendAdb.js new file mode 100644 index 00000000..5e8f7494 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/android/backendAdb.js @@ -0,0 +1,202 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.AdbBackend = void 0; + +var _assert = _interopRequireDefault(require("assert")); + +var _debug = _interopRequireDefault(require("debug")); + +var net = _interopRequireWildcard(require("net")); + +var _events = require("events"); + +var _utils = require("../../utils/utils"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright Microsoft Corporation. All rights reserved. + * + * 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. + */ +class AdbBackend { + async devices() { + const result = await runCommand('host:devices'); + const lines = result.toString().trim().split('\n'); + return lines.map(line => { + const [serial, status] = line.trim().split('\t'); + return new AdbDevice(serial, status); + }); + } + +} + +exports.AdbBackend = AdbBackend; + +class AdbDevice { + constructor(serial, status) { + this.serial = void 0; + this.status = void 0; + this.serial = serial; + this.status = status; + } + + async init() {} + + async close() {} + + runCommand(command) { + return runCommand(command, this.serial); + } + + async open(command) { + const result = await open(command, this.serial); + result.becomeSocket(); + return result; + } + +} + +async function runCommand(command, serial) { + (0, _debug.default)('pw:adb:runCommand')(command, serial); + const socket = new BufferedSocketWrapper(command, net.createConnection({ + port: 5037 + })); + + if (serial) { + await socket.write(encodeMessage(`host:transport:${serial}`)); + const status = await socket.read(4); + (0, _assert.default)(status.toString() === 'OKAY', status.toString()); + } + + await socket.write(encodeMessage(command)); + const status = await socket.read(4); + (0, _assert.default)(status.toString() === 'OKAY', status.toString()); + let commandOutput; + + if (!command.startsWith('shell:')) { + const remainingLength = parseInt((await socket.read(4)).toString(), 16); + commandOutput = await socket.read(remainingLength); + } else { + commandOutput = await socket.readAll(); + } + + socket.close(); + return commandOutput; +} + +async function open(command, serial) { + const socket = new BufferedSocketWrapper(command, net.createConnection({ + port: 5037 + })); + + if (serial) { + await socket.write(encodeMessage(`host:transport:${serial}`)); + const status = await socket.read(4); + (0, _assert.default)(status.toString() === 'OKAY', status.toString()); + } + + await socket.write(encodeMessage(command)); + const status = await socket.read(4); + (0, _assert.default)(status.toString() === 'OKAY', status.toString()); + return socket; +} + +function encodeMessage(message) { + let lenHex = message.length.toString(16); + lenHex = '0'.repeat(4 - lenHex.length) + lenHex; + return Buffer.from(lenHex + message); +} + +class BufferedSocketWrapper extends _events.EventEmitter { + constructor(command, socket) { + super(); + this.guid = (0, _utils.createGuid)(); + this._socket = void 0; + this._buffer = Buffer.from([]); + this._isSocket = false; + this._notifyReader = void 0; + this._connectPromise = void 0; + this._isClosed = false; + this._command = void 0; + this._command = command; + this._socket = socket; + this._connectPromise = new Promise(f => this._socket.on('connect', f)); + + this._socket.on('data', data => { + (0, _debug.default)('pw:adb:data')(data.toString()); + + if (this._isSocket) { + this.emit('data', data); + return; + } + + this._buffer = Buffer.concat([this._buffer, data]); + if (this._notifyReader) this._notifyReader(); + }); + + this._socket.on('close', () => { + this._isClosed = true; + if (this._notifyReader) this._notifyReader(); + this.close(); + this.emit('close'); + }); + + this._socket.on('error', error => this.emit('error', error)); + } + + async write(data) { + (0, _debug.default)('pw:adb:send')(data.toString().substring(0, 100) + '...'); + await this._connectPromise; + await new Promise(f => this._socket.write(data, f)); + } + + close() { + if (this._isClosed) return; + (0, _debug.default)('pw:adb')('Close ' + this._command); + + this._socket.destroy(); + } + + async read(length) { + await this._connectPromise; + (0, _assert.default)(!this._isSocket, 'Can not read by length in socket mode'); + + while (this._buffer.length < length) await new Promise(f => this._notifyReader = f); + + const result = this._buffer.slice(0, length); + + this._buffer = this._buffer.slice(length); + (0, _debug.default)('pw:adb:recv')(result.toString().substring(0, 100) + '...'); + return result; + } + + async readAll() { + while (!this._isClosed) await new Promise(f => this._notifyReader = f); + + return this._buffer; + } + + becomeSocket() { + (0, _assert.default)(!this._buffer.length); + this._isSocket = true; + } + +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/artifact.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/artifact.js new file mode 100644 index 00000000..524de6e9 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/artifact.js @@ -0,0 +1,123 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Artifact = void 0; + +var _fs = _interopRequireDefault(require("fs")); + +var _utils = require("../utils/utils"); + +var _async = require("../utils/async"); + +var _instrumentation = require("./instrumentation"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +class Artifact extends _instrumentation.SdkObject { + constructor(parent, localPath, unaccessibleErrorMessage, cancelCallback) { + super(parent, 'artifact'); + this._localPath = void 0; + this._unaccessibleErrorMessage = void 0; + this._cancelCallback = void 0; + this._finishedPromise = new _async.ManualPromise(); + this._saveCallbacks = []; + this._finished = false; + this._deleted = false; + this._failureError = null; + this._localPath = localPath; + this._unaccessibleErrorMessage = unaccessibleErrorMessage; + this._cancelCallback = cancelCallback; + } + + finishedPromise() { + return this._finishedPromise; + } + + localPath() { + return this._localPath; + } + + async localPathAfterFinished() { + if (this._unaccessibleErrorMessage) throw new Error(this._unaccessibleErrorMessage); + await this._finishedPromise; + if (this._failureError) return null; + return this._localPath; + } + + saveAs(saveCallback) { + if (this._unaccessibleErrorMessage) throw new Error(this._unaccessibleErrorMessage); + if (this._deleted) throw new Error(`File already deleted. Save before deleting.`); + if (this._failureError) throw new Error(`File not found on disk. Check download.failure() for details.`); + + if (this._finished) { + saveCallback(this._localPath).catch(e => {}); + return; + } + + this._saveCallbacks.push(saveCallback); + } + + async failureError() { + if (this._unaccessibleErrorMessage) return this._unaccessibleErrorMessage; + await this._finishedPromise; + return this._failureError; + } + + async cancel() { + (0, _utils.assert)(this._cancelCallback !== undefined); + return this._cancelCallback(); + } + + async delete() { + if (this._unaccessibleErrorMessage) return; + const fileName = await this.localPathAfterFinished(); + if (this._deleted) return; + this._deleted = true; + if (fileName) await _fs.default.promises.unlink(fileName).catch(e => {}); + } + + async deleteOnContextClose() { + // Compared to "delete", this method does not wait for the artifact to finish. + // We use it when closing the context to avoid stalling. + if (this._deleted) return; + this._deleted = true; + if (!this._unaccessibleErrorMessage) await _fs.default.promises.unlink(this._localPath).catch(e => {}); + await this.reportFinished('File deleted upon browser context closure.'); + } + + async reportFinished(error) { + if (this._finished) return; + this._finished = true; + this._failureError = error || null; + + if (error) { + for (const callback of this._saveCallbacks) await callback('', error); + } else { + for (const callback of this._saveCallbacks) await callback(this._localPath); + } + + this._saveCallbacks = []; + + this._finishedPromise.resolve(); + } + +} + +exports.Artifact = Artifact; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/browser.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/browser.js new file mode 100644 index 00000000..7cb6053c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/browser.js @@ -0,0 +1,118 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Browser = void 0; + +var _browserContext = require("./browserContext"); + +var _page = require("./page"); + +var _download = require("./download"); + +var _instrumentation = require("./instrumentation"); + +var _artifact = require("./artifact"); + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +class Browser extends _instrumentation.SdkObject { + constructor(options) { + super(options.rootSdkObject, 'browser'); + this.options = void 0; + this._downloads = new Map(); + this._defaultContext = null; + this._startedClosing = false; + this._idToVideo = new Map(); + this.attribution.browser = this; + this.options = options; + } + + _downloadCreated(page, uuid, url, suggestedFilename) { + const download = new _download.Download(page, this.options.downloadsPath || '', uuid, url, suggestedFilename); + + this._downloads.set(uuid, download); + } + + _downloadFilenameSuggested(uuid, suggestedFilename) { + const download = this._downloads.get(uuid); + + if (!download) return; + + download._filenameSuggested(suggestedFilename); + } + + _downloadFinished(uuid, error) { + const download = this._downloads.get(uuid); + + if (!download) return; + download.artifact.reportFinished(error); + + this._downloads.delete(uuid); + } + + _videoStarted(context, videoId, path, pageOrError) { + const artifact = new _artifact.Artifact(context, path); + + this._idToVideo.set(videoId, { + context, + artifact + }); + + context.emit(_browserContext.BrowserContext.Events.VideoStarted, artifact); + pageOrError.then(page => { + if (page instanceof _page.Page) { + page._video = artifact; + page.emit(_page.Page.Events.Video, artifact); + } + }); + } + + _takeVideo(videoId) { + const video = this._idToVideo.get(videoId); + + this._idToVideo.delete(videoId); + + return video === null || video === void 0 ? void 0 : video.artifact; + } + + _didClose() { + for (const context of this.contexts()) context._browserClosed(); + + if (this._defaultContext) this._defaultContext._browserClosed(); + this.emit(Browser.Events.Disconnected); + } + + async close() { + if (!this._startedClosing) { + this._startedClosing = true; + await this.options.browserProcess.close(); + } + + if (this.isConnected()) await new Promise(x => this.once(Browser.Events.Disconnected, x)); + } + + async killForTests() { + await this.options.browserProcess.kill(); + } + +} + +exports.Browser = Browser; +Browser.Events = { + Disconnected: 'disconnected' +}; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/browserContext.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/browserContext.js new file mode 100644 index 00000000..41253152 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/browserContext.js @@ -0,0 +1,509 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.assertBrowserContextIsNotOwned = assertBrowserContextIsNotOwned; +exports.validateBrowserContextOptions = validateBrowserContextOptions; +exports.verifyGeolocation = verifyGeolocation; +exports.normalizeProxySettings = normalizeProxySettings; +exports.BrowserContext = void 0; + +var os = _interopRequireWildcard(require("os")); + +var _timeoutSettings = require("../utils/timeoutSettings"); + +var _utils = require("../utils/utils"); + +var _helper = require("./helper"); + +var network = _interopRequireWildcard(require("./network")); + +var _page = require("./page"); + +var _path = _interopRequireDefault(require("path")); + +var _instrumentation = require("./instrumentation"); + +var _debugger = require("./supplements/debugger"); + +var _tracing = require("./trace/recorder/tracing"); + +var _harRecorder = require("./supplements/har/harRecorder"); + +var _recorderSupplement = require("./supplements/recorderSupplement"); + +var consoleApiSource = _interopRequireWildcard(require("../generated/consoleApiSource")); + +var _fetch = require("./fetch"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +/** + * Copyright 2017 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +class BrowserContext extends _instrumentation.SdkObject { + constructor(browser, options, browserContextId) { + super(browser, 'browser-context'); + this._timeoutSettings = new _timeoutSettings.TimeoutSettings(); + this._pageBindings = new Map(); + this._options = void 0; + this._requestInterceptor = void 0; + this._isPersistentContext = void 0; + this._closedStatus = 'open'; + this._closePromise = void 0; + this._closePromiseFulfill = void 0; + this._permissions = new Map(); + this._downloads = new Set(); + this._browser = void 0; + this._browserContextId = void 0; + this._selectors = void 0; + this._origins = new Set(); + this._harRecorder = void 0; + this.tracing = void 0; + this.fetchRequest = void 0; + this.attribution.context = this; + this._browser = browser; + this._options = options; + this._browserContextId = browserContextId; + this._isPersistentContext = !browserContextId; + this._closePromise = new Promise(fulfill => this._closePromiseFulfill = fulfill); + if (this._options.recordHar) this._harRecorder = new _harRecorder.HarRecorder(this, { ...this._options.recordHar, + path: _path.default.join(this._browser.options.artifactsDir, `${(0, _utils.createGuid)()}.har`) + }); + this.tracing = new _tracing.Tracing(this); + this.fetchRequest = new _fetch.BrowserContextFetchRequest(this); + } + + _setSelectors(selectors) { + this._selectors = selectors; + } + + selectors() { + return this._selectors || this._browser.options.selectors; + } + + async _initialize() { + if (this.attribution.isInternal) return; // Create instrumentation per context. + + this.instrumentation = (0, _instrumentation.createInstrumentation)(); // Debugger will pause execution upon page.pause in headed mode. + + const contextDebugger = new _debugger.Debugger(this); + this.instrumentation.addListener(contextDebugger); // When PWDEBUG=1, show inspector for each context. + + if ((0, _utils.debugMode)() === 'inspector') await _recorderSupplement.RecorderSupplement.show(this, { + pauseOnNextStatement: true + }); // When paused, show inspector. + + if (contextDebugger.isPaused()) _recorderSupplement.RecorderSupplement.showInspector(this); + contextDebugger.on(_debugger.Debugger.Events.PausedStateChanged, () => { + _recorderSupplement.RecorderSupplement.showInspector(this); + }); + if ((0, _utils.debugMode)() === 'console') await this.extendInjectedScript(consoleApiSource.source); + } + + async _ensureVideosPath() { + if (this._options.recordVideo) await (0, _utils.mkdirIfNeeded)(_path.default.join(this._options.recordVideo.dir, 'dummy')); + } + + _browserClosed() { + for (const page of this.pages()) page._didClose(); + + this._didCloseInternal(); + } + + _didCloseInternal() { + if (this._closedStatus === 'closed') { + // We can come here twice if we close browser context and browser + // at the same time. + return; + } + + this._closedStatus = 'closed'; + + this._deleteAllDownloads(); + + this._downloads.clear(); + + if (this._isPersistentContext) this._onClosePersistent(); + + this._closePromiseFulfill(new Error('Context closed')); + + this.emit(BrowserContext.Events.Close); + } // BrowserContext methods. + + + async cookies(urls = []) { + if (urls && !Array.isArray(urls)) urls = [urls]; + return await this._doCookies(urls); + } + + setHTTPCredentials(httpCredentials) { + return this._doSetHTTPCredentials(httpCredentials); + } + + async exposeBinding(name, needsHandle, playwrightBinding) { + if (this._pageBindings.has(name)) throw new Error(`Function "${name}" has been already registered`); + + for (const page of this.pages()) { + if (page.getBinding(name)) throw new Error(`Function "${name}" has been already registered in one of the pages`); + } + + const binding = new _page.PageBinding(name, playwrightBinding, needsHandle); + + this._pageBindings.set(name, binding); + + await this._doExposeBinding(binding); + } + + async grantPermissions(permissions, origin) { + let resolvedOrigin = '*'; + + if (origin) { + const url = new URL(origin); + resolvedOrigin = url.origin; + } + + const existing = new Set(this._permissions.get(resolvedOrigin) || []); + permissions.forEach(p => existing.add(p)); + const list = [...existing.values()]; + + this._permissions.set(resolvedOrigin, list); + + await this._doGrantPermissions(resolvedOrigin, list); + } + + async clearPermissions() { + this._permissions.clear(); + + await this._doClearPermissions(); + } + + setDefaultNavigationTimeout(timeout) { + this._timeoutSettings.setDefaultNavigationTimeout(timeout); + } + + setDefaultTimeout(timeout) { + this._timeoutSettings.setDefaultTimeout(timeout); + } + + async _loadDefaultContextAsIs(progress) { + if (!this.pages().length) { + const waitForEvent = _helper.helper.waitForEvent(progress, this, BrowserContext.Events.Page); + + progress.cleanupWhenAborted(() => waitForEvent.dispose); + const page = await waitForEvent.promise; + if (page._pageIsError) throw page._pageIsError; + } + + const pages = this.pages(); + if (pages[0]._pageIsError) throw pages[0]._pageIsError; + await pages[0].mainFrame()._waitForLoadState(progress, 'load'); + return pages; + } + + async _loadDefaultContext(progress) { + const pages = await this._loadDefaultContextAsIs(progress); + + if (this._options.isMobile || this._options.locale) { + // Workaround for: + // - chromium fails to change isMobile for existing page; + // - webkit fails to change locale for existing page. + const oldPage = pages[0]; + await this.newPage(progress.metadata); + await oldPage.close(progress.metadata); + } + } + + _authenticateProxyViaHeader() { + const proxy = this._options.proxy || this._browser.options.proxy || { + username: undefined, + password: undefined + }; + const { + username, + password + } = proxy; + + if (username) { + this._options.httpCredentials = { + username, + password: password + }; + const token = Buffer.from(`${username}:${password}`).toString('base64'); + this._options.extraHTTPHeaders = network.mergeHeaders([this._options.extraHTTPHeaders, network.singleHeader('Proxy-Authorization', `Basic ${token}`)]); + } + } + + _authenticateProxyViaCredentials() { + const proxy = this._options.proxy || this._browser.options.proxy; + if (!proxy) return; + const { + username, + password + } = proxy; + if (username) this._options.httpCredentials = { + username, + password: password || '' + }; + } + + async _setRequestInterceptor(handler) { + this._requestInterceptor = handler; + await this._doUpdateRequestInterception(); + } + + isClosingOrClosed() { + return this._closedStatus !== 'open'; + } + + async _deleteAllDownloads() { + await Promise.all(Array.from(this._downloads).map(download => download.artifact.deleteOnContextClose())); + } + + async close(metadata) { + if (this._closedStatus === 'open') { + var _this$_harRecorder; + + this.emit(BrowserContext.Events.BeforeClose); + this._closedStatus = 'closing'; + await ((_this$_harRecorder = this._harRecorder) === null || _this$_harRecorder === void 0 ? void 0 : _this$_harRecorder.flush()); + await this.tracing.dispose(); // Cleanup. + + const promises = []; + + for (const { + context, + artifact + } of this._browser._idToVideo.values()) { + // Wait for the videos to finish. + if (context === this) promises.push(artifact.finishedPromise()); + } + + if (this._isPersistentContext) { + // Close all the pages instead of the context, + // because we cannot close the default context. + await Promise.all(this.pages().map(page => page.close(metadata))); + } else { + // Close the context. + await this._doClose(); + } // We delete downloads after context closure + // so that browser does not write to the download file anymore. + + + promises.push(this._deleteAllDownloads()); + await Promise.all(promises); // Persistent context should also close the browser. + + if (this._isPersistentContext) await this._browser.close(); // Bookkeeping. + + this._didCloseInternal(); + } + + await this._closePromise; + } + + async newPage(metadata) { + const pageDelegate = await this.newPageDelegate(); + const pageOrError = await pageDelegate.pageOrError(); + + if (pageOrError instanceof _page.Page) { + if (pageOrError.isClosed()) throw new Error('Page has been closed.'); + return pageOrError; + } + + throw pageOrError; + } + + addVisitedOrigin(origin) { + this._origins.add(origin); + } + + async storageState(metadata) { + const result = { + cookies: (await this.cookies()).filter(c => c.value !== ''), + origins: [] + }; + + if (this._origins.size) { + const internalMetadata = (0, _instrumentation.internalCallMetadata)(); + const page = await this.newPage(internalMetadata); + await page._setServerRequestInterceptor(handler => { + handler.fulfill({ + body: '' + }).catch(() => {}); + }); + + for (const origin of this._origins) { + const originStorage = { + origin, + localStorage: [] + }; + const frame = page.mainFrame(); + await frame.goto(internalMetadata, origin); + const storage = await frame.evaluateExpression(`({ + localStorage: Object.keys(localStorage).map(name => ({ name, value: localStorage.getItem(name) })), + })`, false, undefined, 'utility'); + originStorage.localStorage = storage.localStorage; + if (storage.localStorage.length) result.origins.push(originStorage); + } + + await page.close(internalMetadata); + } + + return result; + } + + async setStorageState(metadata, state) { + if (state.cookies) await this.addCookies(state.cookies); + + if (state.origins && state.origins.length) { + const internalMetadata = (0, _instrumentation.internalCallMetadata)(); + const page = await this.newPage(internalMetadata); + await page._setServerRequestInterceptor(handler => { + handler.fulfill({ + body: '' + }).catch(() => {}); + }); + + for (const originState of state.origins) { + const frame = page.mainFrame(); + await frame.goto(metadata, originState.origin); + await frame.evaluateExpression(` + originState => { + for (const { name, value } of (originState.localStorage || [])) + localStorage.setItem(name, value); + }`, true, originState, 'utility'); + } + + await page.close(internalMetadata); + } + } + + async extendInjectedScript(source, arg) { + const installInFrame = frame => frame.extendInjectedScript(source, arg).catch(() => {}); + + const installInPage = page => { + page.on(_page.Page.Events.InternalFrameNavigatedToNewDocument, installInFrame); + return Promise.all(page.frames().map(installInFrame)); + }; + + this.on(BrowserContext.Events.Page, installInPage); + return Promise.all(this.pages().map(installInPage)); + } + +} + +exports.BrowserContext = BrowserContext; +BrowserContext.Events = { + Close: 'close', + Page: 'page', + Request: 'request', + Response: 'response', + RequestFailed: 'requestfailed', + RequestFinished: 'requestfinished', + BeforeClose: 'beforeclose', + VideoStarted: 'videostarted' +}; + +function assertBrowserContextIsNotOwned(context) { + for (const page of context.pages()) { + if (page._ownedContext) throw new Error('Please use browser.newContext() for multi-page scripts that share the context.'); + } +} + +function validateBrowserContextOptions(options, browserOptions) { + if (options.noDefaultViewport && options.deviceScaleFactor !== undefined) throw new Error(`"deviceScaleFactor" option is not supported with null "viewport"`); + if (options.noDefaultViewport && options.isMobile !== undefined) throw new Error(`"isMobile" option is not supported with null "viewport"`); + if (!options.viewport && !options.noDefaultViewport) options.viewport = { + width: 1280, + height: 720 + }; + + if (options.recordVideo) { + if (!options.recordVideo.size) { + if (options.noDefaultViewport) { + options.recordVideo.size = { + width: 800, + height: 600 + }; + } else { + const size = options.viewport; + const scale = Math.min(1, 800 / Math.max(size.width, size.height)); + options.recordVideo.size = { + width: Math.floor(size.width * scale), + height: Math.floor(size.height * scale) + }; + } + } // Make sure both dimensions are odd, this is required for vp8 + + + options.recordVideo.size.width &= ~1; + options.recordVideo.size.height &= ~1; + } + + if (options.proxy) { + if (!browserOptions.proxy && browserOptions.isChromium && os.platform() === 'win32') throw new Error(`Browser needs to be launched with the global proxy. If all contexts override the proxy, global proxy will be never used and can be any string, for example "launch({ proxy: { server: 'http://per-context' } })"`); + options.proxy = normalizeProxySettings(options.proxy); + } + + if ((0, _utils.debugMode)() === 'inspector') options.bypassCSP = true; + verifyGeolocation(options.geolocation); + if (!options._debugName) options._debugName = (0, _utils.createGuid)(); +} + +function verifyGeolocation(geolocation) { + if (!geolocation) return; + geolocation.accuracy = geolocation.accuracy || 0; + const { + longitude, + latitude, + accuracy + } = geolocation; + if (longitude < -180 || longitude > 180) throw new Error(`geolocation.longitude: precondition -180 <= LONGITUDE <= 180 failed.`); + if (latitude < -90 || latitude > 90) throw new Error(`geolocation.latitude: precondition -90 <= LATITUDE <= 90 failed.`); + if (accuracy < 0) throw new Error(`geolocation.accuracy: precondition 0 <= ACCURACY failed.`); +} + +function normalizeProxySettings(proxy) { + let { + server, + bypass + } = proxy; + let url; + + try { + // new URL('127.0.0.1:8080') throws + // new URL('localhost:8080') fails to parse host or protocol + // In both of these cases, we need to try re-parse URL with `http://` prefix. + url = new URL(server); + if (!url.host || !url.protocol) url = new URL('http://' + server); + } catch (e) { + url = new URL('http://' + server); + } + + if (url.protocol === 'socks4:' && (proxy.username || proxy.password)) throw new Error(`Socks4 proxy protocol does not support authentication`); + if (url.protocol === 'socks5:' && (proxy.username || proxy.password)) throw new Error(`Browser does not support socks5 proxy authentication`); + server = url.protocol + '//' + url.host; + if (bypass) bypass = bypass.split(',').map(t => t.trim()).join(','); + return { ...proxy, + server, + bypass + }; +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/browserType.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/browserType.js new file mode 100644 index 00000000..7ded5c21 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/browserType.js @@ -0,0 +1,306 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.BrowserType = void 0; + +var _fs = _interopRequireDefault(require("fs")); + +var os = _interopRequireWildcard(require("os")); + +var _path = _interopRequireDefault(require("path")); + +var _browserContext = require("./browserContext"); + +var _registry = require("../utils/registry"); + +var _transport = require("./transport"); + +var _processLauncher = require("../utils/processLauncher"); + +var _pipeTransport = require("./pipeTransport"); + +var _progress = require("./progress"); + +var _timeoutSettings = require("../utils/timeoutSettings"); + +var _utils = require("../utils/utils"); + +var _helper = require("./helper"); + +var _debugLogger = require("../utils/debugLogger"); + +var _instrumentation = require("./instrumentation"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +const ARTIFACTS_FOLDER = _path.default.join(os.tmpdir(), 'playwright-artifacts-'); + +class BrowserType extends _instrumentation.SdkObject { + constructor(browserName, playwrightOptions) { + super(playwrightOptions.rootSdkObject, 'browser-type'); + this._name = void 0; + this._playwrightOptions = void 0; + this.attribution.browserType = this; + this._playwrightOptions = playwrightOptions; + this._name = browserName; + } + + executablePath() { + return _registry.registry.findExecutable(this._name).executablePath() || ''; + } + + name() { + return this._name; + } + + async launch(metadata, options, protocolLogger) { + options = this._validateLaunchOptions(options); + const controller = new _progress.ProgressController(metadata, this); + controller.setLogName('browser'); + const browser = await controller.run(progress => { + return this._innerLaunchWithRetries(progress, options, undefined, _helper.helper.debugProtocolLogger(protocolLogger)).catch(e => { + throw this._rewriteStartupError(e); + }); + }, _timeoutSettings.TimeoutSettings.timeout(options)); + return browser; + } + + async launchPersistentContext(metadata, userDataDir, options) { + options = this._validateLaunchOptions(options); + const controller = new _progress.ProgressController(metadata, this); + const persistent = options; + controller.setLogName('browser'); + const browser = await controller.run(progress => { + return this._innerLaunchWithRetries(progress, options, persistent, _helper.helper.debugProtocolLogger(), userDataDir).catch(e => { + throw this._rewriteStartupError(e); + }); + }, _timeoutSettings.TimeoutSettings.timeout(options)); + return browser._defaultContext; + } + + async _innerLaunchWithRetries(progress, options, persistent, protocolLogger, userDataDir) { + try { + return this._innerLaunch(progress, options, persistent, protocolLogger, userDataDir); + } catch (error) { + // @see https://github.com/microsoft/playwright/issues/5214 + const errorMessage = typeof error === 'object' && typeof error.message === 'string' ? error.message : ''; + + if (errorMessage.includes('Inconsistency detected by ld.so')) { + progress.log(``); + return this._innerLaunch(progress, options, persistent, protocolLogger, userDataDir); + } + + throw error; + } + } + + async _innerLaunch(progress, options, persistent, protocolLogger, userDataDir) { + options.proxy = options.proxy ? (0, _browserContext.normalizeProxySettings)(options.proxy) : undefined; + const browserLogsCollector = new _debugLogger.RecentLogsCollector(); + const { + browserProcess, + artifactsDir, + transport + } = await this._launchProcess(progress, options, !!persistent, browserLogsCollector, userDataDir); + if (options.__testHookBeforeCreateBrowser) await options.__testHookBeforeCreateBrowser(); + const browserOptions = { ...this._playwrightOptions, + name: this._name, + isChromium: this._name === 'chromium', + channel: options.channel, + slowMo: options.slowMo, + persistent, + headful: !options.headless, + artifactsDir, + downloadsPath: options.downloadsPath || artifactsDir, + tracesDir: options.tracesDir || artifactsDir, + browserProcess, + customExecutablePath: options.executablePath, + proxy: options.proxy, + protocolLogger, + browserLogsCollector, + wsEndpoint: options.useWebSocket ? transport.wsEndpoint : undefined + }; + if (persistent) (0, _browserContext.validateBrowserContextOptions)(persistent, browserOptions); + copyTestHooks(options, browserOptions); + const browser = await this._connectToTransport(transport, browserOptions); // We assume no control when using custom arguments, and do not prepare the default context in that case. + + if (persistent && !options.ignoreAllDefaultArgs) await browser._defaultContext._loadDefaultContext(progress); + return browser; + } + + async _launchProcess(progress, options, isPersistent, browserLogsCollector, userDataDir) { + var _options$args; + + const { + ignoreDefaultArgs, + ignoreAllDefaultArgs, + args = [], + executablePath = null, + handleSIGINT = true, + handleSIGTERM = true, + handleSIGHUP = true + } = options; + const env = options.env ? (0, _processLauncher.envArrayToObject)(options.env) : process.env; + const tempDirectories = []; + if (options.downloadsPath) await _fs.default.promises.mkdir(options.downloadsPath, { + recursive: true + }); + if (options.tracesDir) await _fs.default.promises.mkdir(options.tracesDir, { + recursive: true + }); + const artifactsDir = await _fs.default.promises.mkdtemp(ARTIFACTS_FOLDER); + tempDirectories.push(artifactsDir); + + if (!userDataDir) { + userDataDir = await _fs.default.promises.mkdtemp(_path.default.join(os.tmpdir(), `playwright_${this._name}dev_profile-`)); + tempDirectories.push(userDataDir); + } + + const browserArguments = []; + if (ignoreAllDefaultArgs) browserArguments.push(...args);else if (ignoreDefaultArgs) browserArguments.push(...this._defaultArgs(options, isPersistent, userDataDir).filter(arg => ignoreDefaultArgs.indexOf(arg) === -1));else browserArguments.push(...this._defaultArgs(options, isPersistent, userDataDir)); + let executable; + + if (executablePath) { + if (!(await (0, _utils.existsAsync)(executablePath))) throw new Error(`Failed to launch ${this._name} because executable doesn't exist at ${executablePath}`); + executable = executablePath; + } else { + const registryExecutable = _registry.registry.findExecutable(options.channel || this._name); + + if (!registryExecutable || registryExecutable.browserName !== this._name) throw new Error(`Unsupported ${this._name} channel "${options.channel}"`); + executable = registryExecutable.executablePathOrDie(this._playwrightOptions.sdkLanguage); + await registryExecutable.validateHostRequirements(); + } + + let wsEndpointCallback; + const shouldWaitForWSListening = options.useWebSocket || ((_options$args = options.args) === null || _options$args === void 0 ? void 0 : _options$args.some(a => a.startsWith('--remote-debugging-port'))); + const waitForWSEndpoint = shouldWaitForWSListening ? new Promise(f => wsEndpointCallback = f) : undefined; // Note: it is important to define these variables before launchProcess, so that we don't get + // "Cannot access 'browserServer' before initialization" if something went wrong. + + let transport = undefined; + let browserProcess = undefined; + const { + launchedProcess, + gracefullyClose, + kill + } = await (0, _processLauncher.launchProcess)({ + command: executable, + args: browserArguments, + env: this._amendEnvironment(env, userDataDir, executable, browserArguments), + handleSIGINT, + handleSIGTERM, + handleSIGHUP, + log: message => { + if (wsEndpointCallback) { + const match = message.match(/DevTools listening on (.*)/); + if (match) wsEndpointCallback(match[1]); + } + + progress.log(message); + browserLogsCollector.log(message); + }, + stdio: 'pipe', + tempDirectories, + attemptToGracefullyClose: async () => { + if (options.__testHookGracefullyClose) await options.__testHookGracefullyClose(); // We try to gracefully close to prevent crash reporting and core dumps. + // Note that it's fine to reuse the pipe transport, since + // our connection ignores kBrowserCloseMessageId. + + this._attemptToGracefullyCloseBrowser(transport); + }, + onExit: (exitCode, signal) => { + if (browserProcess && browserProcess.onclose) browserProcess.onclose(exitCode, signal); + } + }); + + async function closeOrKill(timeout) { + let timer; + + try { + await Promise.race([gracefullyClose(), new Promise((resolve, reject) => timer = setTimeout(reject, timeout))]); + } catch (ignored) { + await kill().catch(ignored => {}); // Make sure to await actual process exit. + } finally { + clearTimeout(timer); + } + } + + browserProcess = { + onclose: undefined, + process: launchedProcess, + close: () => closeOrKill(options.__testHookBrowserCloseTimeout || _timeoutSettings.DEFAULT_TIMEOUT), + kill + }; + progress.cleanupWhenAborted(() => closeOrKill(progress.timeUntilDeadline())); + let wsEndpoint; + if (shouldWaitForWSListening) wsEndpoint = await waitForWSEndpoint; + + if (options.useWebSocket) { + transport = await _transport.WebSocketTransport.connect(progress, wsEndpoint); + } else { + const stdio = launchedProcess.stdio; + transport = new _pipeTransport.PipeTransport(stdio[3], stdio[4]); + } + + return { + browserProcess, + artifactsDir, + transport + }; + } + + async connectOverCDP(metadata, endpointURL, options, timeout) { + throw new Error('CDP connections are only supported by Chromium'); + } + + _validateLaunchOptions(options) { + const { + devtools = false + } = options; + let { + headless = !devtools, + downloadsPath, + proxy + } = options; + if ((0, _utils.debugMode)()) headless = false; + if (downloadsPath && !_path.default.isAbsolute(downloadsPath)) downloadsPath = _path.default.join(process.cwd(), downloadsPath); + if (this._playwrightOptions.socksProxyPort) proxy = { + server: `socks5://127.0.0.1:${this._playwrightOptions.socksProxyPort}` + }; + return { ...options, + devtools, + headless, + downloadsPath, + proxy + }; + } + +} + +exports.BrowserType = BrowserType; + +function copyTestHooks(from, to) { + for (const [key, value] of Object.entries(from)) { + if (key.startsWith('__testHook')) to[key] = value; + } +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/appIcon.png b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/appIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..1c898466493ebb26f97a58ea33348cf34a5df648 GIT binary patch literal 16565 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 VN?b*Rn)aU; { + let headersMap; + if (options.headers) headersMap = (0, _utils.headersArrayToObject)(options.headers, false); + const artifactsDir = await _fs.default.promises.mkdtemp(ARTIFACTS_FOLDER); + const chromeTransport = await _transport.WebSocketTransport.connect(progress, await urlToWSEndpoint(endpointURL), headersMap); + const browserProcess = { + close: async () => { + await (0, _utils.removeFolders)([artifactsDir]); + await chromeTransport.closeAndWait(); + }, + kill: async () => { + await (0, _utils.removeFolders)([artifactsDir]); + await chromeTransport.closeAndWait(); + } + }; + const browserOptions = { ...this._playwrightOptions, + slowMo: options.slowMo, + name: 'chromium', + isChromium: true, + persistent: { + noDefaultViewport: true + }, + browserProcess, + protocolLogger: _helper.helper.debugProtocolLogger(), + browserLogsCollector, + artifactsDir, + downloadsPath: artifactsDir, + tracesDir: artifactsDir + }; + return await _crBrowser.CRBrowser.connect(chromeTransport, browserOptions); + }, _timeoutSettings.TimeoutSettings.timeout({ + timeout + })); + } + + _createDevTools() { + // TODO: this is totally wrong when using channels. + const directory = _registry.registry.findExecutable('chromium').directory; + + return directory ? new _crDevTools.CRDevTools(_path.default.join(directory, 'devtools-preferences.json')) : undefined; + } + + async _connectToTransport(transport, options) { + let devtools = this._devtools; + + if (options.__testHookForDevTools) { + devtools = this._createDevTools(); + await options.__testHookForDevTools(devtools); + } + + return _crBrowser.CRBrowser.connect(transport, options, devtools); + } + + _rewriteStartupError(error) { + // These error messages are taken from Chromium source code as of July, 2020: + // https://github.com/chromium/chromium/blob/70565f67e79f79e17663ad1337dc6e63ee207ce9/content/browser/zygote_host/zygote_host_impl_linux.cc + if (!error.message.includes('crbug.com/357670') && !error.message.includes('No usable sandbox!') && !error.message.includes('crbug.com/638180')) return error; + return (0, _stackTrace.rewriteErrorMessage)(error, [`Chromium sandboxing failed!`, `================================`, `To workaround sandboxing issues, do either of the following:`, ` - (preferred): Configure environment to support sandboxing: https://github.com/microsoft/playwright/blob/master/docs/troubleshooting.md`, ` - (alternative): Launch Chromium without sandbox using 'chromiumSandbox: false' option`, `================================`, ``].join('\n')); + } + + _amendEnvironment(env, userDataDir, executable, browserArguments) { + return env; + } + + _attemptToGracefullyCloseBrowser(transport) { + const message = { + method: 'Browser.close', + id: _crConnection.kBrowserCloseMessageId, + params: {} + }; + transport.send(message); + } + + _defaultArgs(options, isPersistent, userDataDir) { + const { + args = [], + proxy + } = options; + const userDataDirArg = args.find(arg => arg.startsWith('--user-data-dir')); + if (userDataDirArg) throw new Error('Pass userDataDir parameter to `browserType.launchPersistentContext(userDataDir, ...)` instead of specifying --user-data-dir argument'); + if (args.find(arg => arg.startsWith('--remote-debugging-pipe'))) throw new Error('Playwright manages remote debugging connection itself.'); + if (args.find(arg => !arg.startsWith('-'))) throw new Error('Arguments can not specify page to be opened'); + const chromeArguments = [...DEFAULT_ARGS]; + chromeArguments.push(`--user-data-dir=${userDataDir}`); // See https://github.com/microsoft/playwright/issues/7362 + + if (_os.default.platform() === 'darwin') chromeArguments.push('--enable-use-zoom-for-dsf=false'); + if (options.useWebSocket) chromeArguments.push('--remote-debugging-port=0');else chromeArguments.push('--remote-debugging-pipe'); + if (options.devtools) chromeArguments.push('--auto-open-devtools-for-tabs'); + + if (options.headless) { + chromeArguments.push('--headless', '--hide-scrollbars', '--mute-audio', '--blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4'); + } + + if (options.chromiumSandbox !== true) chromeArguments.push('--no-sandbox'); + + if (proxy) { + const proxyURL = new URL(proxy.server); + const isSocks = proxyURL.protocol === 'socks5:'; // https://www.chromium.org/developers/design-documents/network-settings + + if (isSocks && !this._playwrightOptions.socksProxyPort) { + // https://www.chromium.org/developers/design-documents/network-stack/socks-proxy + chromeArguments.push(`--host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE ${proxyURL.hostname}"`); + } + + chromeArguments.push(`--proxy-server=${proxy.server}`); + const proxyBypassRules = []; // https://source.chromium.org/chromium/chromium/src/+/master:net/docs/proxy.md;l=548;drc=71698e610121078e0d1a811054dcf9fd89b49578 + + if (this._playwrightOptions.socksProxyPort) proxyBypassRules.push('<-loopback>'); + if (proxy.bypass) proxyBypassRules.push(...proxy.bypass.split(',').map(t => t.trim()).map(t => t.startsWith('.') ? '*' + t : t)); + if (proxyBypassRules.length > 0) chromeArguments.push(`--proxy-bypass-list=${proxyBypassRules.join(';')}`); + } + + chromeArguments.push(...args); + if (isPersistent) chromeArguments.push('about:blank');else chromeArguments.push('--no-startup-window'); + return chromeArguments; + } + +} + +exports.Chromium = Chromium; +const DEFAULT_ARGS = ['--disable-background-networking', '--enable-features=NetworkService,NetworkServiceInProcess', '--disable-background-timer-throttling', '--disable-backgrounding-occluded-windows', '--disable-breakpad', '--disable-client-side-phishing-detection', '--disable-component-extensions-with-background-pages', '--disable-default-apps', '--disable-dev-shm-usage', '--disable-extensions', '--disable-features=ImprovedCookieControls,LazyFrameLoading,GlobalMediaControls,DestroyProfileOnBrowserClose,MediaRouter', '--allow-pre-commit-input', '--disable-hang-monitor', '--disable-ipc-flooding-protection', '--disable-popup-blocking', '--disable-prompt-on-repost', '--disable-renderer-backgrounding', '--disable-sync', '--force-color-profile=srgb', '--metrics-recording-only', '--no-first-run', '--enable-automation', '--password-store=basic', '--use-mock-keychain', // See https://chromium-review.googlesource.com/c/chromium/src/+/2436773 +'--no-service-autorun']; + +async function urlToWSEndpoint(endpointURL) { + if (endpointURL.startsWith('ws')) return endpointURL; + const httpURL = endpointURL.endsWith('/') ? `${endpointURL}json/version/` : `${endpointURL}/json/version/`; + const request = endpointURL.startsWith('https') ? _https.default : _http.default; + const json = await new Promise((resolve, reject) => { + request.get(httpURL, resp => { + if (resp.statusCode < 200 || resp.statusCode >= 400) { + reject(new Error(`Unexpected status ${resp.statusCode} when connecting to ${httpURL}.\n` + `This does not look like a DevTools server, try connecting via ws://.`)); + } + + let data = ''; + resp.on('data', chunk => data += chunk); + resp.on('end', () => resolve(data)); + }).on('error', reject); + }); + return JSON.parse(json).webSocketDebuggerUrl; +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crAccessibility.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crAccessibility.js new file mode 100644 index 00000000..571204db --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crAccessibility.js @@ -0,0 +1,272 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getAccessibilityTree = getAccessibilityTree; + +/** + * Copyright 2018 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +async function getAccessibilityTree(client, needle) { + const { + nodes + } = await client.send('Accessibility.getFullAXTree'); + const tree = CRAXNode.createTree(client, nodes); + return { + tree, + needle: needle ? await tree._findElement(needle) : null + }; +} + +class CRAXNode { + constructor(client, payload) { + this._payload = void 0; + this._children = []; + this._richlyEditable = false; + this._editable = false; + this._focusable = false; + this._expanded = false; + this._hidden = false; + this._name = void 0; + this._role = void 0; + this._cachedHasFocusableChild = void 0; + this._client = void 0; + this._client = client; + this._payload = payload; + this._name = this._payload.name ? this._payload.name.value : ''; + this._role = this._payload.role ? this._payload.role.value : 'Unknown'; + + for (const property of this._payload.properties || []) { + if (property.name === 'editable') { + this._richlyEditable = property.value.value === 'richtext'; + this._editable = true; + } + + if (property.name === 'focusable') this._focusable = property.value.value; + if (property.name === 'expanded') this._expanded = property.value.value; + if (property.name === 'hidden') this._hidden = property.value.value; + } + } + + _isPlainTextField() { + if (this._richlyEditable) return false; + if (this._editable) return true; + return this._role === 'textbox' || this._role === 'ComboBox' || this._role === 'searchbox'; + } + + _isTextOnlyObject() { + const role = this._role; + return role === 'LineBreak' || role === 'text' || role === 'InlineTextBox' || role === 'StaticText'; + } + + _hasFocusableChild() { + if (this._cachedHasFocusableChild === undefined) { + this._cachedHasFocusableChild = false; + + for (const child of this._children) { + if (child._focusable || child._hasFocusableChild()) { + this._cachedHasFocusableChild = true; + break; + } + } + } + + return this._cachedHasFocusableChild; + } + + children() { + return this._children; + } + + async _findElement(element) { + const objectId = element._objectId; + const { + node: { + backendNodeId + } + } = await this._client.send('DOM.describeNode', { + objectId + }); + const needle = this.find(node => node._payload.backendDOMNodeId === backendNodeId); + return needle || null; + } + + find(predicate) { + if (predicate(this)) return this; + + for (const child of this._children) { + const result = child.find(predicate); + if (result) return result; + } + + return null; + } + + isLeafNode() { + if (!this._children.length) return true; // These types of objects may have children that we use as internal + // implementation details, but we want to expose them as leaves to platform + // accessibility APIs because screen readers might be confused if they find + // any children. + + if (this._isPlainTextField() || this._isTextOnlyObject()) return true; // Roles whose children are only presentational according to the ARIA and + // HTML5 Specs should be hidden from screen readers. + // (Note that whilst ARIA buttons can have only presentational children, HTML5 + // buttons are allowed to have content.) + + switch (this._role) { + case 'doc-cover': + case 'graphics-symbol': + case 'img': + case 'Meter': + case 'scrollbar': + case 'slider': + case 'separator': + case 'progressbar': + return true; + + default: + break; + } // Here and below: Android heuristics + + + if (this._hasFocusableChild()) return false; + if (this._focusable && this._role !== 'WebArea' && this._role !== 'RootWebArea' && this._name) return true; + if (this._role === 'heading' && this._name) return true; + return false; + } + + isControl() { + switch (this._role) { + case 'button': + case 'checkbox': + case 'ColorWell': + case 'combobox': + case 'DisclosureTriangle': + case 'listbox': + case 'menu': + case 'menubar': + case 'menuitem': + case 'menuitemcheckbox': + case 'menuitemradio': + case 'radio': + case 'scrollbar': + case 'searchbox': + case 'slider': + case 'spinbutton': + case 'switch': + case 'tab': + case 'textbox': + case 'tree': + return true; + + default: + return false; + } + } + + isInteresting(insideControl) { + const role = this._role; + if (role === 'Ignored' || this._hidden) return false; + if (this._focusable || this._richlyEditable) return true; // If it's not focusable but has a control role, then it's interesting. + + if (this.isControl()) return true; // A non focusable child of a control is not interesting + + if (insideControl) return false; + return this.isLeafNode() && !!this._name; + } + + normalizedRole() { + switch (this._role) { + case 'RootWebArea': + return 'WebArea'; + + case 'StaticText': + return 'text'; + + default: + return this._role; + } + } + + serialize() { + const properties = new Map(); + + for (const property of this._payload.properties || []) properties.set(property.name.toLowerCase(), property.value.value); + + if (this._payload.description) properties.set('description', this._payload.description.value); + const node = { + role: this.normalizedRole(), + name: this._payload.name ? this._payload.name.value || '' : '' + }; + const userStringProperties = ['description', 'keyshortcuts', 'roledescription', 'valuetext']; + + for (const userStringProperty of userStringProperties) { + if (!properties.has(userStringProperty)) continue; + node[userStringProperty] = properties.get(userStringProperty); + } + + const booleanProperties = ['disabled', 'expanded', 'focused', 'modal', 'multiline', 'multiselectable', 'readonly', 'required', 'selected']; + + for (const booleanProperty of booleanProperties) { + // WebArea's treat focus differently than other nodes. They report whether their frame has focus, + // not whether focus is specifically on the root node. + if (booleanProperty === 'focused' && (this._role === 'WebArea' || this._role === 'RootWebArea')) continue; + const value = properties.get(booleanProperty); + if (!value) continue; + node[booleanProperty] = value; + } + + const numericalProperties = ['level', 'valuemax', 'valuemin']; + + for (const numericalProperty of numericalProperties) { + if (!properties.has(numericalProperty)) continue; + node[numericalProperty] = properties.get(numericalProperty); + } + + const tokenProperties = ['autocomplete', 'haspopup', 'invalid', 'orientation']; + + for (const tokenProperty of tokenProperties) { + const value = properties.get(tokenProperty); + if (!value || value === 'false') continue; + node[tokenProperty] = value; + } + + const axNode = node; + + if (this._payload.value) { + if (typeof this._payload.value.value === 'string') axNode.valueString = this._payload.value.value; + if (typeof this._payload.value.value === 'number') axNode.valueNumber = this._payload.value.value; + } + + if (properties.has('checked')) axNode.checked = properties.get('checked') === 'true' ? 'checked' : properties.get('checked') === 'false' ? 'unchecked' : 'mixed'; + if (properties.has('pressed')) axNode.pressed = properties.get('pressed') === 'true' ? 'pressed' : properties.get('pressed') === 'false' ? 'released' : 'mixed'; + return axNode; + } + + static createTree(client, payloads) { + const nodeById = new Map(); + + for (const payload of payloads) nodeById.set(payload.nodeId, new CRAXNode(client, payload)); + + for (const node of nodeById.values()) { + for (const childId of node._payload.childIds || []) node._children.push(nodeById.get(childId)); + } + + return nodeById.values().next().value; + } + +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crApp.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crApp.js new file mode 100644 index 00000000..f1c48171 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crApp.js @@ -0,0 +1,33 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.installAppIcon = installAppIcon; + +var _fs = _interopRequireDefault(require("fs")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +async function installAppIcon(page) { + const icon = await _fs.default.promises.readFile(require.resolve('./appIcon.png')); + const crPage = page._delegate; + await crPage._mainFrameSession._client.send('Browser.setDockTile', { + image: icon.toString('base64') + }); +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crBrowser.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crBrowser.js new file mode 100644 index 00000000..44376882 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crBrowser.js @@ -0,0 +1,591 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CRBrowserContext = exports.CRBrowser = void 0; + +var _browser = require("../browser"); + +var _browserContext = require("../browserContext"); + +var _utils = require("../../utils/utils"); + +var network = _interopRequireWildcard(require("../network")); + +var _page = require("../page"); + +var _frames = require("../frames"); + +var _crConnection = require("./crConnection"); + +var _crPage = require("./crPage"); + +var _crProtocolHelper = require("./crProtocolHelper"); + +var _crExecutionContext = require("./crExecutionContext"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +/** + * Copyright 2017 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +class CRBrowser extends _browser.Browser { + static async connect(transport, options, devtools) { + const connection = new _crConnection.CRConnection(transport, options.protocolLogger, options.browserLogsCollector); + const browser = new CRBrowser(connection, options); + browser._devtools = devtools; + const session = connection.rootSession; + if (options.__testHookOnConnectToBrowser) await options.__testHookOnConnectToBrowser(); + const version = await session.send('Browser.getVersion'); + browser._isMac = version.userAgent.includes('Macintosh'); + browser._version = version.product.substring(version.product.indexOf('/') + 1); + browser._userAgent = version.userAgent; + + if (!options.persistent) { + await session.send('Target.setAutoAttach', { + autoAttach: true, + waitForDebuggerOnStart: true, + flatten: true + }); + return browser; + } + + browser._defaultContext = new CRBrowserContext(browser, undefined, options.persistent); + await Promise.all([session.send('Target.setAutoAttach', { + autoAttach: true, + waitForDebuggerOnStart: true, + flatten: true + }).then(async () => { + // Target.setAutoAttach has a bug where it does not wait for new Targets being attached. + // However making a dummy call afterwards fixes this. + // This can be removed after https://chromium-review.googlesource.com/c/chromium/src/+/2885888 lands in stable. + await session.send('Target.getTargetInfo'); + }), browser._defaultContext._initialize()]); + await browser._waitForAllPagesToBeInitialized(); + return browser; + } + + constructor(connection, options) { + super(options); + this._connection = void 0; + this._session = void 0; + this._clientRootSessionPromise = null; + this._contexts = new Map(); + this._crPages = new Map(); + this._backgroundPages = new Map(); + this._serviceWorkers = new Map(); + this._devtools = void 0; + this._isMac = false; + this._version = ''; + this._tracingRecording = false; + this._tracingPath = ''; + this._tracingClient = void 0; + this._userAgent = ''; + this._connection = connection; + this._session = this._connection.rootSession; + + this._connection.on(_crConnection.ConnectionEvents.Disconnected, () => this._didClose()); + + this._session.on('Target.attachedToTarget', this._onAttachedToTarget.bind(this)); + + this._session.on('Target.detachedFromTarget', this._onDetachedFromTarget.bind(this)); + + this._session.on('Browser.downloadWillBegin', this._onDownloadWillBegin.bind(this)); + + this._session.on('Browser.downloadProgress', this._onDownloadProgress.bind(this)); + } + + async newContext(options) { + (0, _browserContext.validateBrowserContextOptions)(options, this.options); + const { + browserContextId + } = await this._session.send('Target.createBrowserContext', { + disposeOnDetach: true, + proxyServer: options.proxy ? options.proxy.server : undefined, + proxyBypassList: options.proxy ? options.proxy.bypass : undefined + }); + const context = new CRBrowserContext(this, browserContextId, options); + await context._initialize(); + + this._contexts.set(browserContextId, context); + + return context; + } + + contexts() { + return Array.from(this._contexts.values()); + } + + version() { + return this._version; + } + + userAgent() { + return this._userAgent; + } + + isClank() { + return this.options.name === 'clank'; + } + + async _waitForAllPagesToBeInitialized() { + await Promise.all([...this._crPages.values()].map(page => page.pageOrError())); + } + + _onAttachedToTarget({ + targetInfo, + sessionId, + waitingForDebugger + }) { + if (targetInfo.type === 'browser') return; + + const session = this._connection.session(sessionId); + + (0, _utils.assert)(targetInfo.browserContextId, 'targetInfo: ' + JSON.stringify(targetInfo, null, 2)); + let context = this._contexts.get(targetInfo.browserContextId) || null; + + if (!context) { + // TODO: auto attach only to pages from our contexts. + // assert(this._defaultContext); + context = this._defaultContext; + } + + if (targetInfo.type === 'other' && targetInfo.url.startsWith('devtools://devtools') && this._devtools) { + this._devtools.install(session); + + return; + } + + if (targetInfo.type === 'other' || !context) { + if (waitingForDebugger) { + // Ideally, detaching should resume any target, but there is a bug in the backend. + session._sendMayFail('Runtime.runIfWaitingForDebugger').then(() => { + this._session._sendMayFail('Target.detachFromTarget', { + sessionId + }); + }); + } + + return; + } + + (0, _utils.assert)(!this._crPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId); + (0, _utils.assert)(!this._backgroundPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId); + (0, _utils.assert)(!this._serviceWorkers.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId); + + if (targetInfo.type === 'background_page') { + const backgroundPage = new _crPage.CRPage(session, targetInfo.targetId, context, null, false, true); + + this._backgroundPages.set(targetInfo.targetId, backgroundPage); + + return; + } + + if (targetInfo.type === 'page') { + const opener = targetInfo.openerId ? this._crPages.get(targetInfo.openerId) || null : null; + const crPage = new _crPage.CRPage(session, targetInfo.targetId, context, opener, true, false); + + this._crPages.set(targetInfo.targetId, crPage); + + return; + } + + if (targetInfo.type === 'service_worker') { + const serviceWorker = new CRServiceWorker(context, session, targetInfo.url); + + this._serviceWorkers.set(targetInfo.targetId, serviceWorker); + + context.emit(CRBrowserContext.CREvents.ServiceWorker, serviceWorker); + return; + } + + (0, _utils.assert)(false, 'Unknown target type: ' + targetInfo.type); + } + + _onDetachedFromTarget(payload) { + const targetId = payload.targetId; + + const crPage = this._crPages.get(targetId); + + if (crPage) { + this._crPages.delete(targetId); + + crPage.didClose(); + return; + } + + const backgroundPage = this._backgroundPages.get(targetId); + + if (backgroundPage) { + this._backgroundPages.delete(targetId); + + backgroundPage.didClose(); + return; + } + + const serviceWorker = this._serviceWorkers.get(targetId); + + if (serviceWorker) { + this._serviceWorkers.delete(targetId); + + serviceWorker.emit(_page.Worker.Events.Close); + return; + } + } + + _findOwningPage(frameId) { + for (const crPage of this._crPages.values()) { + const frame = crPage._page._frameManager.frame(frameId); + + if (frame) return crPage; + } + + return null; + } + + _onDownloadWillBegin(payload) { + const page = this._findOwningPage(payload.frameId); + + (0, _utils.assert)(page, 'Download started in unknown page: ' + JSON.stringify(payload)); + page.willBeginDownload(); + let originPage = page._initializedPage; // If it's a new window download, report it on the opener page. + + if (!originPage && page._opener) originPage = page._opener._initializedPage; + if (!originPage) return; + + this._downloadCreated(originPage, payload.guid, payload.url, payload.suggestedFilename); + } + + _onDownloadProgress(payload) { + if (payload.state === 'completed') this._downloadFinished(payload.guid, ''); + if (payload.state === 'canceled') this._downloadFinished(payload.guid, 'canceled'); + } + + async _closePage(crPage) { + await this._session.send('Target.closeTarget', { + targetId: crPage._targetId + }); + } + + async newBrowserCDPSession() { + return await this._connection.createBrowserSession(); + } + + async startTracing(page, options = {}) { + (0, _utils.assert)(!this._tracingRecording, 'Cannot start recording trace while already recording trace.'); + this._tracingClient = page ? page._delegate._mainFrameSession._client : this._session; + const defaultCategories = ['-*', 'devtools.timeline', 'v8.execute', 'disabled-by-default-devtools.timeline', 'disabled-by-default-devtools.timeline.frame', 'toplevel', 'blink.console', 'blink.user_timing', 'latencyInfo', 'disabled-by-default-devtools.timeline.stack', 'disabled-by-default-v8.cpu_profiler', 'disabled-by-default-v8.cpu_profiler.hires']; + const { + path = null, + screenshots = false, + categories = defaultCategories + } = options; + if (screenshots) categories.push('disabled-by-default-devtools.screenshot'); + this._tracingPath = path; + this._tracingRecording = true; + await this._tracingClient.send('Tracing.start', { + transferMode: 'ReturnAsStream', + categories: categories.join(',') + }); + } + + async stopTracing() { + (0, _utils.assert)(this._tracingClient, 'Tracing was not started.'); + const [event] = await Promise.all([new Promise(f => this._tracingClient.once('Tracing.tracingComplete', f)), this._tracingClient.send('Tracing.end')]); + const result = await (0, _crProtocolHelper.readProtocolStream)(this._tracingClient, event.stream, this._tracingPath); + this._tracingRecording = false; + return result; + } + + isConnected() { + return !this._connection._closed; + } + + async _clientRootSession() { + if (!this._clientRootSessionPromise) this._clientRootSessionPromise = this._connection.createBrowserSession(); + return this._clientRootSessionPromise; + } + +} + +exports.CRBrowser = CRBrowser; + +class CRServiceWorker extends _page.Worker { + constructor(browserContext, session, url) { + super(browserContext, url); + this._browserContext = void 0; + this._browserContext = browserContext; + session.once('Runtime.executionContextCreated', event => { + this._createExecutionContext(new _crExecutionContext.CRExecutionContext(session, event.context)); + }); // This might fail if the target is closed before we receive all execution contexts. + + session.send('Runtime.enable', {}).catch(e => {}); + session.send('Runtime.runIfWaitingForDebugger').catch(e => {}); + } + +} + +class CRBrowserContext extends _browserContext.BrowserContext { + constructor(browser, browserContextId, options) { + super(browser, options, browserContextId); + this._evaluateOnNewDocumentSources = void 0; + this._evaluateOnNewDocumentSources = []; + + this._authenticateProxyViaCredentials(); + } + + async _initialize() { + (0, _utils.assert)(!Array.from(this._browser._crPages.values()).some(page => page._browserContext === this)); + const promises = [super._initialize()]; + + if (this._browser.options.name !== 'electron' && this._browser.options.name !== 'clank') { + promises.push(this._browser._session.send('Browser.setDownloadBehavior', { + behavior: this._options.acceptDownloads ? 'allowAndName' : 'deny', + browserContextId: this._browserContextId, + downloadPath: this._browser.options.downloadsPath, + eventsEnabled: true + })); + } + + if (this._options.permissions) promises.push(this.grantPermissions(this._options.permissions)); + await Promise.all(promises); + } + + pages() { + const result = []; + + for (const crPage of this._browser._crPages.values()) { + if (crPage._browserContext === this && crPage._initializedPage) result.push(crPage._initializedPage); + } + + return result; + } + + async newPageDelegate() { + (0, _browserContext.assertBrowserContextIsNotOwned)(this); + const oldKeys = this._browser.isClank() ? new Set(this._browser._crPages.keys()) : undefined; + let { + targetId + } = await this._browser._session.send('Target.createTarget', { + url: 'about:blank', + browserContextId: this._browserContextId + }); + + if (oldKeys) { + // Chrome for Android returns tab ids (1, 2, 3, 4, 5) instead of content target ids here, work around it via the + // heuristic assuming that there is only one page created at a time. + const newKeys = new Set(this._browser._crPages.keys()); // Remove old keys. + + for (const key of oldKeys) newKeys.delete(key); // Remove potential concurrent popups. + + + for (const key of newKeys) { + const page = this._browser._crPages.get(key); + + if (page._opener) newKeys.delete(key); + } + + (0, _utils.assert)(newKeys.size === 1); + [targetId] = [...newKeys]; + } + + return this._browser._crPages.get(targetId); + } + + async _doCookies(urls) { + const { + cookies + } = await this._browser._session.send('Storage.getCookies', { + browserContextId: this._browserContextId + }); + return network.filterCookies(cookies.map(c => { + const copy = { + sameSite: 'Lax', + ...c + }; + delete copy.size; + delete copy.priority; + delete copy.session; + delete copy.sameParty; + delete copy.sourceScheme; + delete copy.sourcePort; + return copy; + }), urls); + } + + async addCookies(cookies) { + await this._browser._session.send('Storage.setCookies', { + cookies: network.rewriteCookies(cookies), + browserContextId: this._browserContextId + }); + } + + async clearCookies() { + await this._browser._session.send('Storage.clearCookies', { + browserContextId: this._browserContextId + }); + } + + async _doGrantPermissions(origin, permissions) { + const webPermissionToProtocol = new Map([['geolocation', 'geolocation'], ['midi', 'midi'], ['notifications', 'notifications'], ['camera', 'videoCapture'], ['microphone', 'audioCapture'], ['background-sync', 'backgroundSync'], ['ambient-light-sensor', 'sensors'], ['accelerometer', 'sensors'], ['gyroscope', 'sensors'], ['magnetometer', 'sensors'], ['accessibility-events', 'accessibilityEvents'], ['clipboard-read', 'clipboardReadWrite'], ['clipboard-write', 'clipboardSanitizedWrite'], ['payment-handler', 'paymentHandler'], // chrome-specific permissions we have. + ['midi-sysex', 'midiSysex']]); + const filtered = permissions.map(permission => { + const protocolPermission = webPermissionToProtocol.get(permission); + if (!protocolPermission) throw new Error('Unknown permission: ' + permission); + return protocolPermission; + }); + await this._browser._session.send('Browser.grantPermissions', { + origin: origin === '*' ? undefined : origin, + browserContextId: this._browserContextId, + permissions: filtered + }); + } + + async _doClearPermissions() { + await this._browser._session.send('Browser.resetPermissions', { + browserContextId: this._browserContextId + }); + } + + async setGeolocation(geolocation) { + (0, _browserContext.verifyGeolocation)(geolocation); + this._options.geolocation = geolocation; + + for (const page of this.pages()) await page._delegate.updateGeolocation(); + } + + async setExtraHTTPHeaders(headers) { + this._options.extraHTTPHeaders = headers; + + for (const page of this.pages()) await page._delegate.updateExtraHTTPHeaders(); + } + + async setOffline(offline) { + this._options.offline = offline; + + for (const page of this.pages()) await page._delegate.updateOffline(); + } + + async _doSetHTTPCredentials(httpCredentials) { + this._options.httpCredentials = httpCredentials; + + for (const page of this.pages()) await page._delegate.updateHttpCredentials(); + } + + async _doAddInitScript(source) { + this._evaluateOnNewDocumentSources.push(source); + + for (const page of this.pages()) await page._delegate.evaluateOnNewDocument(source); + } + + async _doExposeBinding(binding) { + for (const page of this.pages()) await page._delegate.exposeBinding(binding); + } + + async _doUpdateRequestInterception() { + for (const page of this.pages()) await page._delegate.updateRequestInterception(); + } + + async _doClose() { + (0, _utils.assert)(this._browserContextId); + await this._browser._session.send('Target.disposeBrowserContext', { + browserContextId: this._browserContextId + }); + + this._browser._contexts.delete(this._browserContextId); + + for (const [targetId, serviceWorker] of this._browser._serviceWorkers) { + if (serviceWorker._browserContext !== this) continue; // When closing a browser context, service workers are shutdown + // asynchronously and we get detached from them later. + // To avoid the wrong order of notifications, we manually fire + // "close" event here and forget about the serivce worker. + + serviceWorker.emit(_page.Worker.Events.Close); + + this._browser._serviceWorkers.delete(targetId); + } + } + + _onClosePersistent() { + // When persistent context is closed, we do not necessary get Target.detachedFromTarget + // for all the background pages. + for (const [targetId, backgroundPage] of this._browser._backgroundPages.entries()) { + if (backgroundPage._browserContext === this && backgroundPage._initializedPage) { + backgroundPage.didClose(); + + this._browser._backgroundPages.delete(targetId); + } + } + } + + async _doCancelDownload(guid) { + // The upstream CDP method is implemented in a way that no explicit error would be given + // regarding the requested `guid`, even if the download is in a state not suitable for + // cancellation (finished, cancelled, etc.) or the guid is invalid at all. + await this._browser._session.send('Browser.cancelDownload', { + guid: guid, + browserContextId: this._browserContextId + }); + } + + backgroundPages() { + const result = []; + + for (const backgroundPage of this._browser._backgroundPages.values()) { + if (backgroundPage._browserContext === this && backgroundPage._initializedPage) result.push(backgroundPage._initializedPage); + } + + return result; + } + + serviceWorkers() { + return Array.from(this._browser._serviceWorkers.values()).filter(serviceWorker => serviceWorker._browserContext === this); + } + + async newCDPSession(page) { + let targetId = null; + + if (page instanceof _page.Page) { + targetId = page._delegate._targetId; + } else if (page instanceof _frames.Frame) { + const session = page._page._delegate._sessions.get(page._id); + + if (!session) throw new Error(`This frame does not have a separate CDP session, it is a part of the parent frame's session`); + targetId = session._targetId; + } else { + throw new Error('page: expected Page or Frame'); + } + + const rootSession = await this._browser._clientRootSession(); + const { + sessionId + } = await rootSession.send('Target.attachToTarget', { + targetId, + flatten: true + }); + return this._browser._connection.session(sessionId); + } + +} + +exports.CRBrowserContext = CRBrowserContext; +CRBrowserContext.CREvents = { + BackgroundPage: 'backgroundpage', + ServiceWorker: 'serviceworker' +}; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crConnection.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crConnection.js new file mode 100644 index 00000000..f539d3b0 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crConnection.js @@ -0,0 +1,264 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CRSession = exports.CRSessionEvents = exports.CRConnection = exports.kBrowserCloseMessageId = exports.ConnectionEvents = void 0; + +var _utils = require("../../utils/utils"); + +var _events = require("events"); + +var _stackTrace = require("../../utils/stackTrace"); + +var _debugLogger = require("../../utils/debugLogger"); + +var _helper = require("../helper"); + +var _protocolError = require("../common/protocolError"); + +/** + * Copyright 2017 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +const ConnectionEvents = { + Disconnected: Symbol('ConnectionEvents.Disconnected') +}; // CRPlaywright uses this special id to issue Browser.close command which we +// should ignore. + +exports.ConnectionEvents = ConnectionEvents; +const kBrowserCloseMessageId = -9999; +exports.kBrowserCloseMessageId = kBrowserCloseMessageId; + +class CRConnection extends _events.EventEmitter { + constructor(transport, protocolLogger, browserLogsCollector) { + super(); + this._lastId = 0; + this._transport = void 0; + this._sessions = new Map(); + this._protocolLogger = void 0; + this._browserLogsCollector = void 0; + this.rootSession = void 0; + this._closed = false; + this.setMaxListeners(0); + this._transport = transport; + this._protocolLogger = protocolLogger; + this._browserLogsCollector = browserLogsCollector; + this._transport.onmessage = this._onMessage.bind(this); + this._transport.onclose = this._onClose.bind(this); + this.rootSession = new CRSession(this, '', 'browser', ''); + + this._sessions.set('', this.rootSession); + } + + static fromSession(session) { + return session._connection; + } + + session(sessionId) { + return this._sessions.get(sessionId) || null; + } + + _rawSend(sessionId, method, params) { + const id = ++this._lastId; + const message = { + id, + method, + params + }; + if (sessionId) message.sessionId = sessionId; + + this._protocolLogger('send', message); + + this._transport.send(message); + + return id; + } + + async _onMessage(message) { + this._protocolLogger('receive', message); + + if (message.id === kBrowserCloseMessageId) return; + + if (message.method === 'Target.attachedToTarget') { + const sessionId = message.params.sessionId; + const rootSessionId = message.sessionId || ''; + const session = new CRSession(this, rootSessionId, message.params.targetInfo.type, sessionId); + + this._sessions.set(sessionId, session); + } else if (message.method === 'Target.detachedFromTarget') { + const session = this._sessions.get(message.params.sessionId); + + if (session) { + session._onClosed(undefined); + + this._sessions.delete(message.params.sessionId); + } + } + + const session = this._sessions.get(message.sessionId || ''); + + if (session) session._onMessage(message); + } + + _onClose() { + this._closed = true; + this._transport.onmessage = undefined; + this._transport.onclose = undefined; + + const browserDisconnectedLogs = _helper.helper.formatBrowserLogs(this._browserLogsCollector.recentLogs()); + + for (const session of this._sessions.values()) session._onClosed(browserDisconnectedLogs); + + this._sessions.clear(); + + Promise.resolve().then(() => this.emit(ConnectionEvents.Disconnected)); + } + + close() { + if (!this._closed) this._transport.close(); + } + + async createSession(targetInfo) { + const { + sessionId + } = await this.rootSession.send('Target.attachToTarget', { + targetId: targetInfo.targetId, + flatten: true + }); + return this._sessions.get(sessionId); + } + + async createBrowserSession() { + const { + sessionId + } = await this.rootSession.send('Target.attachToBrowserTarget'); + return this._sessions.get(sessionId); + } + +} + +exports.CRConnection = CRConnection; +const CRSessionEvents = { + Disconnected: Symbol('Events.CDPSession.Disconnected') +}; +exports.CRSessionEvents = CRSessionEvents; + +class CRSession extends _events.EventEmitter { + constructor(connection, rootSessionId, targetType, sessionId) { + super(); + this._connection = void 0; + this._eventListener = void 0; + this._callbacks = new Map(); + this._targetType = void 0; + this._sessionId = void 0; + this._rootSessionId = void 0; + this._crashed = false; + this._browserDisconnectedLogs = void 0; + this.on = void 0; + this.addListener = void 0; + this.off = void 0; + this.removeListener = void 0; + this.once = void 0; + this.guid = void 0; + this.guid = `cdp-session@${sessionId}`; + this.setMaxListeners(0); + this._connection = connection; + this._rootSessionId = rootSessionId; + this._targetType = targetType; + this._sessionId = sessionId; + this.on = super.on; + this.addListener = super.addListener; + this.off = super.removeListener; + this.removeListener = super.removeListener; + this.once = super.once; + } + + _markAsCrashed() { + this._crashed = true; + } + + async send(method, params) { + if (this._crashed) throw new _protocolError.ProtocolError(true, 'Target crashed'); + if (this._browserDisconnectedLogs !== undefined) throw new _protocolError.ProtocolError(true, `Browser closed.` + this._browserDisconnectedLogs); + if (!this._connection) throw new _protocolError.ProtocolError(true, `Target closed`); + + const id = this._connection._rawSend(this._sessionId, method, params); + + return new Promise((resolve, reject) => { + this._callbacks.set(id, { + resolve, + reject, + error: new _protocolError.ProtocolError(false), + method + }); + }); + } + + _sendMayFail(method, params) { + return this.send(method, params).catch(error => _debugLogger.debugLogger.log('error', error)); + } + + _onMessage(object) { + if (object.id && this._callbacks.has(object.id)) { + const callback = this._callbacks.get(object.id); + + this._callbacks.delete(object.id); + + if (object.error) callback.reject(createProtocolError(callback.error, callback.method, object.error));else callback.resolve(object.result); + } else { + (0, _utils.assert)(!object.id); + Promise.resolve().then(() => { + if (this._eventListener) this._eventListener(object.method, object.params); + this.emit(object.method, object.params); + }); + } + } + + async detach() { + if (!this._connection) throw new Error(`Session already detached. Most likely the ${this._targetType} has been closed.`); + + const rootSession = this._connection.session(this._rootSessionId); + + if (!rootSession) throw new Error('Root session has been closed'); + await rootSession.send('Target.detachFromTarget', { + sessionId: this._sessionId + }); + } + + _onClosed(browserDisconnectedLogs) { + this._browserDisconnectedLogs = browserDisconnectedLogs; + const errorMessage = browserDisconnectedLogs !== undefined ? 'Browser closed.' + browserDisconnectedLogs : 'Target closed'; + + for (const callback of this._callbacks.values()) { + callback.error.sessionClosed = true; + callback.reject((0, _stackTrace.rewriteErrorMessage)(callback.error, errorMessage)); + } + + this._callbacks.clear(); + + this._connection = null; + Promise.resolve().then(() => this.emit(CRSessionEvents.Disconnected)); + } + +} + +exports.CRSession = CRSession; + +function createProtocolError(error, method, protocolError) { + let message = `Protocol error (${method}): ${protocolError.message}`; + if ('data' in protocolError) message += ` ${protocolError.data}`; + return (0, _stackTrace.rewriteErrorMessage)(error, message); +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crCoverage.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crCoverage.js new file mode 100644 index 00000000..2334621e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crCoverage.js @@ -0,0 +1,295 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CRCoverage = void 0; + +var _eventsHelper = require("../../utils/eventsHelper"); + +var _utils = require("../../utils/utils"); + +/** + * Copyright 2017 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +class CRCoverage { + constructor(client) { + this._jsCoverage = void 0; + this._cssCoverage = void 0; + this._jsCoverage = new JSCoverage(client); + this._cssCoverage = new CSSCoverage(client); + } + + async startJSCoverage(options) { + return await this._jsCoverage.start(options); + } + + async stopJSCoverage() { + return await this._jsCoverage.stop(); + } + + async startCSSCoverage(options) { + return await this._cssCoverage.start(options); + } + + async stopCSSCoverage() { + return await this._cssCoverage.stop(); + } + +} + +exports.CRCoverage = CRCoverage; + +class JSCoverage { + constructor(client) { + this._client = void 0; + this._enabled = void 0; + this._scriptIds = void 0; + this._scriptSources = void 0; + this._eventListeners = void 0; + this._resetOnNavigation = void 0; + this._reportAnonymousScripts = false; + this._client = client; + this._enabled = false; + this._scriptIds = new Set(); + this._scriptSources = new Map(); + this._eventListeners = []; + this._resetOnNavigation = false; + } + + async start(options = {}) { + (0, _utils.assert)(!this._enabled, 'JSCoverage is already enabled'); + const { + resetOnNavigation = true, + reportAnonymousScripts = false + } = options; + this._resetOnNavigation = resetOnNavigation; + this._reportAnonymousScripts = reportAnonymousScripts; + this._enabled = true; + + this._scriptIds.clear(); + + this._scriptSources.clear(); + + this._eventListeners = [_eventsHelper.eventsHelper.addEventListener(this._client, 'Debugger.scriptParsed', this._onScriptParsed.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Runtime.executionContextsCleared', this._onExecutionContextsCleared.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Debugger.paused', this._onDebuggerPaused.bind(this))]; + await Promise.all([this._client.send('Profiler.enable'), this._client.send('Profiler.startPreciseCoverage', { + callCount: true, + detailed: true + }), this._client.send('Debugger.enable'), this._client.send('Debugger.setSkipAllPauses', { + skip: true + })]); + } + + _onDebuggerPaused() { + this._client.send('Debugger.resume'); + } + + _onExecutionContextsCleared() { + if (!this._resetOnNavigation) return; + + this._scriptIds.clear(); + + this._scriptSources.clear(); + } + + async _onScriptParsed(event) { + this._scriptIds.add(event.scriptId); // Ignore other anonymous scripts unless the reportAnonymousScripts option is true. + + + if (!event.url && !this._reportAnonymousScripts) return; // This might fail if the page has already navigated away. + + const response = await this._client._sendMayFail('Debugger.getScriptSource', { + scriptId: event.scriptId + }); + if (response) this._scriptSources.set(event.scriptId, response.scriptSource); + } + + async stop() { + (0, _utils.assert)(this._enabled, 'JSCoverage is not enabled'); + this._enabled = false; + const [profileResponse] = await Promise.all([this._client.send('Profiler.takePreciseCoverage'), this._client.send('Profiler.stopPreciseCoverage'), this._client.send('Profiler.disable'), this._client.send('Debugger.disable')]); + + _eventsHelper.eventsHelper.removeEventListeners(this._eventListeners); + + const coverage = []; + + for (const entry of profileResponse.result) { + if (!this._scriptIds.has(entry.scriptId)) continue; + if (!entry.url && !this._reportAnonymousScripts) continue; + + const source = this._scriptSources.get(entry.scriptId); + + if (source) coverage.push({ ...entry, + source + });else coverage.push(entry); + } + + return coverage; + } + +} + +class CSSCoverage { + constructor(client) { + this._client = void 0; + this._enabled = void 0; + this._stylesheetURLs = void 0; + this._stylesheetSources = void 0; + this._eventListeners = void 0; + this._resetOnNavigation = void 0; + this._client = client; + this._enabled = false; + this._stylesheetURLs = new Map(); + this._stylesheetSources = new Map(); + this._eventListeners = []; + this._resetOnNavigation = false; + } + + async start(options = {}) { + (0, _utils.assert)(!this._enabled, 'CSSCoverage is already enabled'); + const { + resetOnNavigation = true + } = options; + this._resetOnNavigation = resetOnNavigation; + this._enabled = true; + + this._stylesheetURLs.clear(); + + this._stylesheetSources.clear(); + + this._eventListeners = [_eventsHelper.eventsHelper.addEventListener(this._client, 'CSS.styleSheetAdded', this._onStyleSheet.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Runtime.executionContextsCleared', this._onExecutionContextsCleared.bind(this))]; + await Promise.all([this._client.send('DOM.enable'), this._client.send('CSS.enable'), this._client.send('CSS.startRuleUsageTracking')]); + } + + _onExecutionContextsCleared() { + if (!this._resetOnNavigation) return; + + this._stylesheetURLs.clear(); + + this._stylesheetSources.clear(); + } + + async _onStyleSheet(event) { + const header = event.header; // Ignore anonymous scripts + + if (!header.sourceURL) return; // This might fail if the page has already navigated away. + + const response = await this._client._sendMayFail('CSS.getStyleSheetText', { + styleSheetId: header.styleSheetId + }); + + if (response) { + this._stylesheetURLs.set(header.styleSheetId, header.sourceURL); + + this._stylesheetSources.set(header.styleSheetId, response.text); + } + } + + async stop() { + (0, _utils.assert)(this._enabled, 'CSSCoverage is not enabled'); + this._enabled = false; + const ruleTrackingResponse = await this._client.send('CSS.stopRuleUsageTracking'); + await Promise.all([this._client.send('CSS.disable'), this._client.send('DOM.disable')]); + + _eventsHelper.eventsHelper.removeEventListeners(this._eventListeners); // aggregate by styleSheetId + + + const styleSheetIdToCoverage = new Map(); + + for (const entry of ruleTrackingResponse.ruleUsage) { + let ranges = styleSheetIdToCoverage.get(entry.styleSheetId); + + if (!ranges) { + ranges = []; + styleSheetIdToCoverage.set(entry.styleSheetId, ranges); + } + + ranges.push({ + startOffset: entry.startOffset, + endOffset: entry.endOffset, + count: entry.used ? 1 : 0 + }); + } + + const coverage = []; + + for (const styleSheetId of this._stylesheetURLs.keys()) { + const url = this._stylesheetURLs.get(styleSheetId); + + const text = this._stylesheetSources.get(styleSheetId); + + const ranges = convertToDisjointRanges(styleSheetIdToCoverage.get(styleSheetId) || []); + coverage.push({ + url, + ranges, + text + }); + } + + return coverage; + } + +} + +function convertToDisjointRanges(nestedRanges) { + const points = []; + + for (const range of nestedRanges) { + points.push({ + offset: range.startOffset, + type: 0, + range + }); + points.push({ + offset: range.endOffset, + type: 1, + range + }); + } // Sort points to form a valid parenthesis sequence. + + + points.sort((a, b) => { + // Sort with increasing offsets. + if (a.offset !== b.offset) return a.offset - b.offset; // All "end" points should go before "start" points. + + if (a.type !== b.type) return b.type - a.type; + const aLength = a.range.endOffset - a.range.startOffset; + const bLength = b.range.endOffset - b.range.startOffset; // For two "start" points, the one with longer range goes first. + + if (a.type === 0) return bLength - aLength; // For two "end" points, the one with shorter range goes first. + + return aLength - bLength; + }); + const hitCountStack = []; + const results = []; + let lastOffset = 0; // Run scanning line to intersect all ranges. + + for (const point of points) { + if (hitCountStack.length && lastOffset < point.offset && hitCountStack[hitCountStack.length - 1] > 0) { + const lastResult = results.length ? results[results.length - 1] : null; + if (lastResult && lastResult.end === lastOffset) lastResult.end = point.offset;else results.push({ + start: lastOffset, + end: point.offset + }); + } + + lastOffset = point.offset; + if (point.type === 0) hitCountStack.push(point.range.count);else hitCountStack.pop(); + } // Filter out empty ranges. + + + return results.filter(range => range.end - range.start > 1); +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crDevTools.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crDevTools.js new file mode 100644 index 00000000..84f727e7 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crDevTools.js @@ -0,0 +1,115 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CRDevTools = void 0; + +var _fs = _interopRequireDefault(require("fs")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +const kBindingName = '__pw_devtools__'; // This class intercepts preferences-related DevTools embedder methods +// and stores preferences as a json file in the browser installation directory. + +class CRDevTools { + constructor(preferencesPath) { + this._preferencesPath = void 0; + this._prefs = void 0; + this._savePromise = void 0; + this.__testHookOnBinding = void 0; + this._preferencesPath = preferencesPath; + this._savePromise = Promise.resolve(); + } + + install(session) { + session.on('Runtime.bindingCalled', async event => { + if (event.name !== kBindingName) return; + const parsed = JSON.parse(event.payload); + let result = undefined; + if (this.__testHookOnBinding) this.__testHookOnBinding(parsed); + + if (parsed.method === 'getPreferences') { + if (this._prefs === undefined) { + try { + const json = await _fs.default.promises.readFile(this._preferencesPath, 'utf8'); + this._prefs = JSON.parse(json); + } catch (e) { + this._prefs = {}; + } + } + + result = this._prefs; + } else if (parsed.method === 'setPreference') { + this._prefs[parsed.params[0]] = parsed.params[1]; + + this._save(); + } else if (parsed.method === 'removePreference') { + delete this._prefs[parsed.params[0]]; + + this._save(); + } else if (parsed.method === 'clearPreferences') { + this._prefs = {}; + + this._save(); + } + + session.send('Runtime.evaluate', { + expression: `window.DevToolsAPI.embedderMessageAck(${parsed.id}, ${JSON.stringify(result)})`, + contextId: event.executionContextId + }).catch(e => null); + }); + Promise.all([session.send('Runtime.enable'), session.send('Runtime.addBinding', { + name: kBindingName + }), session.send('Page.enable'), session.send('Page.addScriptToEvaluateOnNewDocument', { + source: ` + (() => { + const init = () => { + // Lazy init happens when InspectorFrontendHost is initialized. + // At this point DevToolsHost is ready to be used. + const host = window.DevToolsHost; + const old = host.sendMessageToEmbedder.bind(host); + host.sendMessageToEmbedder = message => { + if (['getPreferences', 'setPreference', 'removePreference', 'clearPreferences'].includes(JSON.parse(message).method)) + window.${kBindingName}(message); + else + old(message); + }; + }; + let value; + Object.defineProperty(window, 'InspectorFrontendHost', { + configurable: true, + enumerable: true, + get() { return value; }, + set(v) { value = v; init(); }, + }); + })() + ` + }), session.send('Runtime.runIfWaitingForDebugger')]).catch(e => null); + } + + _save() { + // Serialize saves to avoid corruption. + this._savePromise = this._savePromise.then(async () => { + await _fs.default.promises.writeFile(this._preferencesPath, JSON.stringify(this._prefs)).catch(e => null); + }); + } + +} + +exports.CRDevTools = CRDevTools; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crDragDrop.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crDragDrop.js new file mode 100644 index 00000000..38b87c51 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crDragDrop.js @@ -0,0 +1,160 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.DragManager = void 0; + +var _utils = require("../../utils/utils"); + +var _crProtocolHelper = require("./crProtocolHelper"); + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. +*/ +class DragManager { + constructor(page) { + this._crPage = void 0; + this._dragState = null; + this._lastPosition = { + x: 0, + y: 0 + }; + this._crPage = page; + } + + async cancelDrag() { + if (!this._dragState) return false; + await this._crPage._mainFrameSession._client.send('Input.dispatchDragEvent', { + type: 'dragCancel', + x: this._lastPosition.x, + y: this._lastPosition.y, + data: { + items: [], + dragOperationsMask: 0xFFFF + } + }); + this._dragState = null; + return true; + } + + async interceptDragCausedByMove(x, y, button, buttons, modifiers, moveCallback) { + this._lastPosition = { + x, + y + }; + + if (this._dragState) { + await this._crPage._mainFrameSession._client.send('Input.dispatchDragEvent', { + type: 'dragOver', + x, + y, + data: this._dragState, + modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers) + }); + return; + } + + if (button !== 'left') return moveCallback(); + const client = this._crPage._mainFrameSession._client; + let onDragIntercepted; + const dragInterceptedPromise = new Promise(x => onDragIntercepted = x); + await Promise.all(this._crPage._page.frames().map(async frame => { + await frame.nonStallingEvaluateInExistingContext(function () { + let didStartDrag = Promise.resolve(false); + let dragEvent = null; + + const dragListener = event => dragEvent = event; + + const mouseListener = () => { + didStartDrag = new Promise(callback => { + window.addEventListener('dragstart', dragListener, { + once: true, + capture: true + }); + setTimeout(() => callback(dragEvent ? !dragEvent.defaultPrevented : false), 0); + }); + }; + + window.addEventListener('mousemove', mouseListener, { + once: true, + capture: true + }); + + window.__cleanupDrag = async () => { + const val = await didStartDrag; + window.removeEventListener('mousemove', mouseListener, { + capture: true + }); + window.removeEventListener('dragstart', dragListener, { + capture: true + }); + return val; + }; + }.toString(), true, 'utility').catch(() => {}); + })); + client.on('Input.dragIntercepted', onDragIntercepted); + + try { + await client.send('Input.setInterceptDrags', { + enabled: true + }); + } catch { + // If Input.setInterceptDrags is not supported, just do a regular move. + // This can be removed once we stop supporting old Electron. + client.off('Input.dragIntercepted', onDragIntercepted); + return moveCallback(); + } + + await moveCallback(); + const expectingDrag = (await Promise.all(this._crPage._page.frames().map(async frame => { + return frame.nonStallingEvaluateInExistingContext('window.__cleanupDrag && window.__cleanupDrag()', false, 'utility').catch(() => false); + }))).some(x => x); + this._dragState = expectingDrag ? (await dragInterceptedPromise).data : null; + client.off('Input.dragIntercepted', onDragIntercepted); + await client.send('Input.setInterceptDrags', { + enabled: false + }); + + if (this._dragState) { + await this._crPage._mainFrameSession._client.send('Input.dispatchDragEvent', { + type: 'dragEnter', + x, + y, + data: this._dragState, + modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers) + }); + } + } + + isDragging() { + return !!this._dragState; + } + + async drop(x, y, modifiers) { + (0, _utils.assert)(this._dragState, 'missing drag state'); + await this._crPage._mainFrameSession._client.send('Input.dispatchDragEvent', { + type: 'drop', + x, + y, + data: this._dragState, + modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers) + }); + this._dragState = null; + } + +} + +exports.DragManager = DragManager; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crExecutionContext.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crExecutionContext.js new file mode 100644 index 00000000..b25ea2ce --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crExecutionContext.js @@ -0,0 +1,184 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CRExecutionContext = void 0; + +var _crProtocolHelper = require("./crProtocolHelper"); + +var js = _interopRequireWildcard(require("../javascript")); + +var _stackTrace = require("../../utils/stackTrace"); + +var _utilityScriptSerializers = require("../common/utilityScriptSerializers"); + +var _protocolError = require("../common/protocolError"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +/** + * Copyright 2017 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +class CRExecutionContext { + constructor(client, contextPayload) { + this._client = void 0; + this._contextId = void 0; + this._client = client; + this._contextId = contextPayload.id; + } + + async rawEvaluateJSON(expression) { + const { + exceptionDetails, + result: remoteObject + } = await this._client.send('Runtime.evaluate', { + expression, + contextId: this._contextId, + returnByValue: true + }).catch(rewriteError); + if (exceptionDetails) throw new js.JavaScriptErrorInEvaluate((0, _crProtocolHelper.getExceptionMessage)(exceptionDetails)); + return remoteObject.value; + } + + async rawEvaluateHandle(expression) { + const { + exceptionDetails, + result: remoteObject + } = await this._client.send('Runtime.evaluate', { + expression, + contextId: this._contextId + }).catch(rewriteError); + if (exceptionDetails) throw new js.JavaScriptErrorInEvaluate((0, _crProtocolHelper.getExceptionMessage)(exceptionDetails)); + return remoteObject.objectId; + } + + rawCallFunctionNoReply(func, ...args) { + this._client.send('Runtime.callFunctionOn', { + functionDeclaration: func.toString(), + arguments: args.map(a => a instanceof js.JSHandle ? { + objectId: a._objectId + } : { + value: a + }), + returnByValue: true, + executionContextId: this._contextId, + userGesture: true + }).catch(() => {}); + } + + async evaluateWithArguments(expression, returnByValue, utilityScript, values, objectIds) { + const { + exceptionDetails, + result: remoteObject + } = await this._client.send('Runtime.callFunctionOn', { + functionDeclaration: expression, + objectId: utilityScript._objectId, + arguments: [{ + objectId: utilityScript._objectId + }, ...values.map(value => ({ + value + })), ...objectIds.map(objectId => ({ + objectId + }))], + returnByValue, + awaitPromise: true, + userGesture: true + }).catch(rewriteError); + if (exceptionDetails) throw new js.JavaScriptErrorInEvaluate((0, _crProtocolHelper.getExceptionMessage)(exceptionDetails)); + return returnByValue ? (0, _utilityScriptSerializers.parseEvaluationResultValue)(remoteObject.value) : utilityScript._context.createHandle(remoteObject); + } + + async getProperties(context, objectId) { + const response = await this._client.send('Runtime.getProperties', { + objectId, + ownProperties: true + }); + const result = new Map(); + + for (const property of response.result) { + if (!property.enumerable || !property.value) continue; + result.set(property.name, context.createHandle(property.value)); + } + + return result; + } + + createHandle(context, remoteObject) { + return new js.JSHandle(context, remoteObject.subtype || remoteObject.type, renderPreview(remoteObject), remoteObject.objectId, potentiallyUnserializableValue(remoteObject)); + } + + async releaseHandle(objectId) { + await (0, _crProtocolHelper.releaseObject)(this._client, objectId); + } + +} + +exports.CRExecutionContext = CRExecutionContext; + +function rewriteError(error) { + if (error.message.includes('Object reference chain is too long')) return { + result: { + type: 'undefined' + } + }; + if (error.message.includes('Object couldn\'t be returned by value')) return { + result: { + type: 'undefined' + } + }; + if (error instanceof TypeError && error.message.startsWith('Converting circular structure to JSON')) (0, _stackTrace.rewriteErrorMessage)(error, error.message + ' Are you passing a nested JSHandle?'); + if (!js.isJavaScriptErrorInEvaluate(error) && !(0, _protocolError.isSessionClosedError)(error)) throw new Error('Execution context was destroyed, most likely because of a navigation.'); + throw error; +} + +function potentiallyUnserializableValue(remoteObject) { + const value = remoteObject.value; + const unserializableValue = remoteObject.unserializableValue; + return unserializableValue ? js.parseUnserializableValue(unserializableValue) : value; +} + +function renderPreview(object) { + if (object.type === 'undefined') return 'undefined'; + if ('value' in object) return String(object.value); + if (object.unserializableValue) return String(object.unserializableValue); + + if (object.description === 'Object' && object.preview) { + const tokens = []; + + for (const { + name, + value + } of object.preview.properties) tokens.push(`${name}: ${value}`); + + return `{${tokens.join(', ')}}`; + } + + if (object.subtype === 'array' && object.preview) { + const result = []; + + for (const { + name, + value + } of object.preview.properties) result[+name] = value; + + return '[' + String(result) + ']'; + } + + return object.description; +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crInput.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crInput.js new file mode 100644 index 00000000..ffd58604 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crInput.js @@ -0,0 +1,190 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.RawTouchscreenImpl = exports.RawMouseImpl = exports.RawKeyboardImpl = void 0; + +var input = _interopRequireWildcard(require("../input")); + +var _macEditingCommands = require("../macEditingCommands"); + +var _utils = require("../../utils/utils"); + +var _crProtocolHelper = require("./crProtocolHelper"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +/** + * Copyright 2017 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +class RawKeyboardImpl { + constructor(_client, _isMac, _dragManger) { + this._client = _client; + this._isMac = _isMac; + this._dragManger = _dragManger; + } + + _commandsForCode(code, modifiers) { + if (!this._isMac) return []; + const parts = []; + + for (const modifier of ['Shift', 'Control', 'Alt', 'Meta']) { + if (modifiers.has(modifier)) parts.push(modifier); + } + + parts.push(code); + const shortcut = parts.join('+'); + let commands = _macEditingCommands.macEditingCommands[shortcut] || []; + if ((0, _utils.isString)(commands)) commands = [commands]; // Commands that insert text are not supported + + commands = commands.filter(x => !x.startsWith('insert')); // remove the trailing : to match the Chromium command names. + + return commands.map(c => c.substring(0, c.length - 1)); + } + + async keydown(modifiers, code, keyCode, keyCodeWithoutLocation, key, location, autoRepeat, text) { + if (code === 'Escape' && (await this._dragManger.cancelDrag())) return; + + const commands = this._commandsForCode(code, modifiers); + + await this._client.send('Input.dispatchKeyEvent', { + type: text ? 'keyDown' : 'rawKeyDown', + modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers), + windowsVirtualKeyCode: keyCodeWithoutLocation, + code, + commands, + key, + text, + unmodifiedText: text, + autoRepeat, + location, + isKeypad: location === input.keypadLocation + }); + } + + async keyup(modifiers, code, keyCode, keyCodeWithoutLocation, key, location) { + await this._client.send('Input.dispatchKeyEvent', { + type: 'keyUp', + modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers), + key, + windowsVirtualKeyCode: keyCodeWithoutLocation, + code, + location + }); + } + + async sendText(text) { + await this._client.send('Input.insertText', { + text + }); + } + +} + +exports.RawKeyboardImpl = RawKeyboardImpl; + +class RawMouseImpl { + constructor(page, client, dragManager) { + this._client = void 0; + this._page = void 0; + this._dragManager = void 0; + this._page = page; + this._client = client; + this._dragManager = dragManager; + } + + async move(x, y, button, buttons, modifiers) { + await this._dragManager.interceptDragCausedByMove(x, y, button, buttons, modifiers, async () => { + await this._client.send('Input.dispatchMouseEvent', { + type: 'mouseMoved', + button, + x, + y, + modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers) + }); + }); + } + + async down(x, y, button, buttons, modifiers, clickCount) { + if (this._dragManager.isDragging()) return; + await this._client.send('Input.dispatchMouseEvent', { + type: 'mousePressed', + button, + x, + y, + modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers), + clickCount + }); + } + + async up(x, y, button, buttons, modifiers, clickCount) { + if (this._dragManager.isDragging()) { + await this._dragManager.drop(x, y, modifiers); + return; + } + + await this._client.send('Input.dispatchMouseEvent', { + type: 'mouseReleased', + button, + x, + y, + modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers), + clickCount + }); + } + + async wheel(x, y, buttons, modifiers, deltaX, deltaY) { + await this._client.send('Input.dispatchMouseEvent', { + type: 'mouseWheel', + x, + y, + modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers), + deltaX, + deltaY + }); + } + +} + +exports.RawMouseImpl = RawMouseImpl; + +class RawTouchscreenImpl { + constructor(client) { + this._client = void 0; + this._client = client; + } + + async tap(x, y, modifiers) { + await Promise.all([this._client.send('Input.dispatchTouchEvent', { + type: 'touchStart', + modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers), + touchPoints: [{ + x, + y + }] + }), this._client.send('Input.dispatchTouchEvent', { + type: 'touchEnd', + modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers), + touchPoints: [] + })]); + } + +} + +exports.RawTouchscreenImpl = RawTouchscreenImpl; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crNetworkManager.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crNetworkManager.js new file mode 100644 index 00000000..304313bf --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crNetworkManager.js @@ -0,0 +1,771 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CRNetworkManager = void 0; + +var _helper = require("../helper"); + +var _eventsHelper = require("../../utils/eventsHelper"); + +var network = _interopRequireWildcard(require("../network")); + +var _utils = require("../../utils/utils"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +/** + * Copyright 2017 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +class CRNetworkManager { + constructor(client, page, parentManager) { + this._client = void 0; + this._page = void 0; + this._parentManager = void 0; + this._requestIdToRequest = new Map(); + this._requestIdToRequestWillBeSentEvent = new Map(); + this._credentials = null; + this._attemptedAuthentications = new Set(); + this._userRequestInterceptionEnabled = false; + this._protocolRequestInterceptionEnabled = false; + this._requestIdToRequestPausedEvent = new Map(); + this._eventListeners = void 0; + this._responseExtraInfoTracker = new ResponseExtraInfoTracker(); + this._client = client; + this._page = page; + this._parentManager = parentManager; + this._eventListeners = this.instrumentNetworkEvents(client); + } + + instrumentNetworkEvents(session, workerFrame) { + return [_eventsHelper.eventsHelper.addEventListener(session, 'Fetch.requestPaused', this._onRequestPaused.bind(this, workerFrame)), _eventsHelper.eventsHelper.addEventListener(session, 'Fetch.authRequired', this._onAuthRequired.bind(this)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.requestWillBeSent', this._onRequestWillBeSent.bind(this, workerFrame)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.requestWillBeSentExtraInfo', this._onRequestWillBeSentExtraInfo.bind(this)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.responseReceived', this._onResponseReceived.bind(this)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.responseReceivedExtraInfo', this._onResponseReceivedExtraInfo.bind(this)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.loadingFinished', this._onLoadingFinished.bind(this)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.loadingFailed', this._onLoadingFailed.bind(this)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketCreated', e => this._page._frameManager.onWebSocketCreated(e.requestId, e.url)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketWillSendHandshakeRequest', e => this._page._frameManager.onWebSocketRequest(e.requestId)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketHandshakeResponseReceived', e => this._page._frameManager.onWebSocketResponse(e.requestId, e.response.status, e.response.statusText)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketFrameSent', e => e.response.payloadData && this._page._frameManager.onWebSocketFrameSent(e.requestId, e.response.opcode, e.response.payloadData)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketFrameReceived', e => e.response.payloadData && this._page._frameManager.webSocketFrameReceived(e.requestId, e.response.opcode, e.response.payloadData)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketClosed', e => this._page._frameManager.webSocketClosed(e.requestId)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketFrameError', e => this._page._frameManager.webSocketError(e.requestId, e.errorMessage))]; + } + + async initialize() { + await this._client.send('Network.enable'); + } + + dispose() { + _eventsHelper.eventsHelper.removeEventListeners(this._eventListeners); + } + + async authenticate(credentials) { + this._credentials = credentials; + await this._updateProtocolRequestInterception(); + } + + async setOffline(offline) { + await this._client.send('Network.emulateNetworkConditions', { + offline, + // values of 0 remove any active throttling. crbug.com/456324#c9 + latency: 0, + downloadThroughput: -1, + uploadThroughput: -1 + }); + } + + async setRequestInterception(value) { + this._userRequestInterceptionEnabled = value; + await this._updateProtocolRequestInterception(); + } + + async _updateProtocolRequestInterception() { + const enabled = this._userRequestInterceptionEnabled || !!this._credentials; + if (enabled === this._protocolRequestInterceptionEnabled) return; + this._protocolRequestInterceptionEnabled = enabled; + + if (enabled) { + await Promise.all([this._client.send('Network.setCacheDisabled', { + cacheDisabled: true + }), this._client.send('Fetch.enable', { + handleAuthRequests: true, + patterns: [{ + urlPattern: '*', + requestStage: 'Request' + }, { + urlPattern: '*', + requestStage: 'Response' + }] + })]); + } else { + await Promise.all([this._client.send('Network.setCacheDisabled', { + cacheDisabled: false + }), this._client.send('Fetch.disable')]); + } + } + + _onRequestWillBeSent(workerFrame, event) { + this._responseExtraInfoTracker.requestWillBeSent(event); // Request interception doesn't happen for data URLs with Network Service. + + + if (this._protocolRequestInterceptionEnabled && !event.request.url.startsWith('data:')) { + const requestId = event.requestId; + + const requestPausedEvent = this._requestIdToRequestPausedEvent.get(requestId); + + if (requestPausedEvent) { + this._onRequest(workerFrame, event, requestPausedEvent); + + this._requestIdToRequestPausedEvent.delete(requestId); + } else { + this._requestIdToRequestWillBeSentEvent.set(event.requestId, event); + } + } else { + this._onRequest(workerFrame, event, null); + } + } + + _onRequestWillBeSentExtraInfo(event) { + this._responseExtraInfoTracker.requestWillBeSentExtraInfo(event); + } + + _onAuthRequired(event) { + let response = 'Default'; + + if (this._attemptedAuthentications.has(event.requestId)) { + response = 'CancelAuth'; + } else if (this._credentials) { + response = 'ProvideCredentials'; + + this._attemptedAuthentications.add(event.requestId); + } + + const { + username, + password + } = this._credentials || { + username: undefined, + password: undefined + }; + + this._client._sendMayFail('Fetch.continueWithAuth', { + requestId: event.requestId, + authChallengeResponse: { + response, + username, + password + } + }); + } + + _onRequestPaused(workerFrame, event) { + if (!this._userRequestInterceptionEnabled && this._protocolRequestInterceptionEnabled) { + this._client._sendMayFail('Fetch.continueRequest', { + requestId: event.requestId + }); + } + + if (!event.networkId) { + // Fetch without networkId means that request was not recongnized by inspector, and + // it will never receive Network.requestWillBeSent. Most likely, this is an internal request + // that we can safely fail. + this._client._sendMayFail('Fetch.failRequest', { + requestId: event.requestId, + errorReason: 'Aborted' + }); + + return; + } + + if (event.request.url.startsWith('data:')) return; + + if (event.responseStatusCode || event.responseErrorReason) { + const isRedirect = event.responseStatusCode && event.responseStatusCode >= 300 && event.responseStatusCode < 400; + + const request = this._requestIdToRequest.get(event.networkId); + + const route = request === null || request === void 0 ? void 0 : request._routeForRedirectChain(); + + if (isRedirect || !route || !route._interceptingResponse) { + this._client._sendMayFail('Fetch.continueRequest', { + requestId: event.requestId + }); + + return; + } + + route._responseInterceptedCallback(event); + + return; + } + + const requestId = event.networkId; + + const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(requestId); + + if (requestWillBeSentEvent) { + this._onRequest(workerFrame, requestWillBeSentEvent, event); + + this._requestIdToRequestWillBeSentEvent.delete(requestId); + } else { + this._requestIdToRequestPausedEvent.set(requestId, event); + } + } + + _onRequest(workerFrame, requestWillBeSentEvent, requestPausedEvent) { + if (requestWillBeSentEvent.request.url.startsWith('data:')) return; + let redirectedFrom = null; + + if (requestWillBeSentEvent.redirectResponse) { + const request = this._requestIdToRequest.get(requestWillBeSentEvent.requestId); // If we connect late to the target, we could have missed the requestWillBeSent event. + + + if (request) { + this._handleRequestRedirect(request, requestWillBeSentEvent.redirectResponse, requestWillBeSentEvent.timestamp); + + redirectedFrom = request; + } + } + + let frame = requestWillBeSentEvent.frameId ? this._page._frameManager.frame(requestWillBeSentEvent.frameId) : workerFrame; // Requests from workers lack frameId, because we receive Network.requestWillBeSent + // on the worker target. However, we receive Fetch.requestPaused on the page target, + // and lack workerFrame there. Luckily, Fetch.requestPaused provides a frameId. + + if (!frame && requestPausedEvent && requestPausedEvent.frameId) frame = this._page._frameManager.frame(requestPausedEvent.frameId); // Check if it's main resource request interception (targetId === main frame id). + + if (!frame && requestWillBeSentEvent.frameId === this._page._delegate._targetId) { + // Main resource request for the page is being intercepted so the Frame is not created + // yet. Precreate it here for the purposes of request interception. It will be updated + // later as soon as the request continues and we receive frame tree from the page. + frame = this._page._frameManager.frameAttached(requestWillBeSentEvent.frameId, null); + } // CORS options request is generated by the network stack. If interception is enabled, + // we accept all CORS options, assuming that this was intended when setting route. + // + // Note: it would be better to match the URL against interception patterns, but + // that information is only available to the client. Perhaps we can just route to the client? + + + if (requestPausedEvent && requestPausedEvent.request.method === 'OPTIONS' && this._page._needsRequestInterception()) { + const requestHeaders = requestPausedEvent.request.headers; + const responseHeaders = [{ + name: 'Access-Control-Allow-Origin', + value: requestHeaders['Origin'] || '*' + }, { + name: 'Access-Control-Allow-Methods', + value: requestHeaders['Access-Control-Request-Method'] || 'GET, POST, OPTIONS, DELETE' + }, { + name: 'Access-Control-Allow-Credentials', + value: 'true' + }]; + if (requestHeaders['Access-Control-Request-Headers']) responseHeaders.push({ + name: 'Access-Control-Allow-Headers', + value: requestHeaders['Access-Control-Request-Headers'] + }); + + this._client._sendMayFail('Fetch.fulfillRequest', { + requestId: requestPausedEvent.requestId, + responseCode: 204, + responsePhrase: network.STATUS_TEXTS['204'], + responseHeaders, + body: '' + }); + + return; + } + + if (!frame) { + if (requestPausedEvent) this._client._sendMayFail('Fetch.continueRequest', { + requestId: requestPausedEvent.requestId + }); + return; + } + + let route = null; + + if (requestPausedEvent) { + // We do not support intercepting redirects. + if (redirectedFrom) this._client._sendMayFail('Fetch.continueRequest', { + requestId: requestPausedEvent.requestId + });else route = new RouteImpl(this._client, requestPausedEvent.requestId); + } + + const isNavigationRequest = requestWillBeSentEvent.requestId === requestWillBeSentEvent.loaderId && requestWillBeSentEvent.type === 'Document'; + const documentId = isNavigationRequest ? requestWillBeSentEvent.loaderId : undefined; + const request = new InterceptableRequest({ + frame, + documentId, + route, + requestWillBeSentEvent, + requestPausedEvent, + redirectedFrom + }); + + this._requestIdToRequest.set(requestWillBeSentEvent.requestId, request); + + this._page._frameManager.requestStarted(request.request, route || undefined); + } + + _createResponse(request, responsePayload) { + var _responsePayload$secu, _responsePayload$secu2, _responsePayload$secu3, _responsePayload$secu4, _responsePayload$secu5; + + const getResponseBody = async () => { + const response = await this._client.send('Network.getResponseBody', { + requestId: request._requestId + }); + return Buffer.from(response.body, response.base64Encoded ? 'base64' : 'utf8'); + }; + + const timingPayload = responsePayload.timing; + let timing; + + if (timingPayload) { + timing = { + startTime: (timingPayload.requestTime - request._timestamp + request._wallTime) * 1000, + domainLookupStart: timingPayload.dnsStart, + domainLookupEnd: timingPayload.dnsEnd, + connectStart: timingPayload.connectStart, + secureConnectionStart: timingPayload.sslStart, + connectEnd: timingPayload.connectEnd, + requestStart: timingPayload.sendStart, + responseStart: timingPayload.receiveHeadersEnd + }; + } else { + timing = { + startTime: request._wallTime * 1000, + domainLookupStart: -1, + domainLookupEnd: -1, + connectStart: -1, + secureConnectionStart: -1, + connectEnd: -1, + requestStart: -1, + responseStart: -1 + }; + } + + const response = new network.Response(request.request, responsePayload.status, responsePayload.statusText, (0, _utils.headersObjectToArray)(responsePayload.headers), timing, getResponseBody, responsePayload.protocol); + + if (responsePayload !== null && responsePayload !== void 0 && responsePayload.remoteIPAddress && typeof (responsePayload === null || responsePayload === void 0 ? void 0 : responsePayload.remotePort) === 'number') { + response._serverAddrFinished({ + ipAddress: responsePayload.remoteIPAddress, + port: responsePayload.remotePort + }); + } else { + response._serverAddrFinished(); + } + + response._securityDetailsFinished({ + protocol: responsePayload === null || responsePayload === void 0 ? void 0 : (_responsePayload$secu = responsePayload.securityDetails) === null || _responsePayload$secu === void 0 ? void 0 : _responsePayload$secu.protocol, + subjectName: responsePayload === null || responsePayload === void 0 ? void 0 : (_responsePayload$secu2 = responsePayload.securityDetails) === null || _responsePayload$secu2 === void 0 ? void 0 : _responsePayload$secu2.subjectName, + issuer: responsePayload === null || responsePayload === void 0 ? void 0 : (_responsePayload$secu3 = responsePayload.securityDetails) === null || _responsePayload$secu3 === void 0 ? void 0 : _responsePayload$secu3.issuer, + validFrom: responsePayload === null || responsePayload === void 0 ? void 0 : (_responsePayload$secu4 = responsePayload.securityDetails) === null || _responsePayload$secu4 === void 0 ? void 0 : _responsePayload$secu4.validFrom, + validTo: responsePayload === null || responsePayload === void 0 ? void 0 : (_responsePayload$secu5 = responsePayload.securityDetails) === null || _responsePayload$secu5 === void 0 ? void 0 : _responsePayload$secu5.validTo + }); + + this._responseExtraInfoTracker.processResponse(request._requestId, response, request.wasFulfilled()); + + return response; + } + + _handleRequestRedirect(request, responsePayload, timestamp) { + const response = this._createResponse(request, responsePayload); + + response._requestFinished((timestamp - request._timestamp) * 1000); + + this._requestIdToRequest.delete(request._requestId); + + if (request._interceptionId) this._attemptedAuthentications.delete(request._interceptionId); + + this._page._frameManager.requestReceivedResponse(response); + + this._page._frameManager.reportRequestFinished(request.request, response); + } + + _onResponseReceivedExtraInfo(event) { + this._responseExtraInfoTracker.responseReceivedExtraInfo(event); + } + + _onResponseReceived(event) { + this._responseExtraInfoTracker.responseReceived(event); + + const request = this._requestIdToRequest.get(event.requestId); // FileUpload sends a response without a matching request. + + + if (!request) return; + + const response = this._createResponse(request, event.response); + + this._page._frameManager.requestReceivedResponse(response); + } + + _onLoadingFinished(event) { + this._responseExtraInfoTracker.loadingFinished(event); + + let request = this._requestIdToRequest.get(event.requestId); + + if (!request) request = this._maybeAdoptMainRequest(event.requestId); // For certain requestIds we never receive requestWillBeSent event. + // @see https://crbug.com/750469 + + if (!request) return; // Under certain conditions we never get the Network.responseReceived + // event from protocol. @see https://crbug.com/883475 + + const response = request.request._existingResponse(); + + if (response) { + request.request.responseSize.transferSize = event.encodedDataLength; + request.request.responseSize.encodedBodySize = event.encodedDataLength - request.request.responseSize.responseHeadersSize; + + response._requestFinished(_helper.helper.secondsToRoundishMillis(event.timestamp - request._timestamp)); + } + + this._requestIdToRequest.delete(request._requestId); + + if (request._interceptionId) this._attemptedAuthentications.delete(request._interceptionId); + + this._page._frameManager.reportRequestFinished(request.request, response); + } + + _onLoadingFailed(event) { + this._responseExtraInfoTracker.loadingFailed(event); + + let request = this._requestIdToRequest.get(event.requestId); + + if (!request) request = this._maybeAdoptMainRequest(event.requestId); // For certain requestIds we never receive requestWillBeSent event. + // @see https://crbug.com/750469 + + if (!request) return; + + const response = request.request._existingResponse(); + + if (response) response._requestFinished(_helper.helper.secondsToRoundishMillis(event.timestamp - request._timestamp)); + + this._requestIdToRequest.delete(request._requestId); + + if (request._interceptionId) this._attemptedAuthentications.delete(request._interceptionId); + + request.request._setFailureText(event.errorText); + + this._page._frameManager.requestFailed(request.request, !!event.canceled); + } + + _maybeAdoptMainRequest(requestId) { + // OOPIF has a main request that starts in the parent session but finishes in the child session. + if (!this._parentManager) return; + + const request = this._parentManager._requestIdToRequest.get(requestId); // Main requests have matching loaderId and requestId. + + + if (!request || request._documentId !== requestId) return; + + this._requestIdToRequest.set(requestId, request); + + this._parentManager._requestIdToRequest.delete(requestId); + + if (request._interceptionId && this._parentManager._attemptedAuthentications.has(request._interceptionId)) { + this._parentManager._attemptedAuthentications.delete(request._interceptionId); + + this._attemptedAuthentications.add(request._interceptionId); + } + + return request; + } + +} + +exports.CRNetworkManager = CRNetworkManager; + +class InterceptableRequest { + constructor(options) { + this.request = void 0; + this._requestId = void 0; + this._interceptionId = void 0; + this._documentId = void 0; + this._timestamp = void 0; + this._wallTime = void 0; + this._route = void 0; + this._redirectedFrom = void 0; + const { + frame, + documentId, + route, + requestWillBeSentEvent, + requestPausedEvent, + redirectedFrom + } = options; + this._timestamp = requestWillBeSentEvent.timestamp; + this._wallTime = requestWillBeSentEvent.wallTime; + this._requestId = requestWillBeSentEvent.requestId; + this._interceptionId = requestPausedEvent && requestPausedEvent.requestId; + this._documentId = documentId; + this._route = route; + this._redirectedFrom = redirectedFrom; + const { + headers, + method, + url, + postDataEntries = null + } = requestPausedEvent ? requestPausedEvent.request : requestWillBeSentEvent.request; + const type = (requestWillBeSentEvent.type || '').toLowerCase(); + let postDataBuffer = null; + if (postDataEntries && postDataEntries.length && postDataEntries[0].bytes) postDataBuffer = Buffer.from(postDataEntries[0].bytes, 'base64'); + this.request = new network.Request(frame, (redirectedFrom === null || redirectedFrom === void 0 ? void 0 : redirectedFrom.request) || null, documentId, url, type, method, postDataBuffer, (0, _utils.headersObjectToArray)(headers)); + } + + _routeForRedirectChain() { + let request = this; + + while (request._redirectedFrom) request = request._redirectedFrom; + + return request._route; + } + + wasFulfilled() { + var _this$_routeForRedire; + + return ((_this$_routeForRedire = this._routeForRedirectChain()) === null || _this$_routeForRedire === void 0 ? void 0 : _this$_routeForRedire._wasFulfilled) || false; + } + +} + +class RouteImpl { + constructor(client, interceptionId) { + this._client = void 0; + this._interceptionId = void 0; + this._responseInterceptedPromise = void 0; + + this._responseInterceptedCallback = () => {}; + + this._interceptingResponse = false; + this._wasFulfilled = false; + this._client = client; + this._interceptionId = interceptionId; + this._responseInterceptedPromise = new Promise(resolve => this._responseInterceptedCallback = resolve); + } + + async responseBody() { + const response = await this._client.send('Fetch.getResponseBody', { + requestId: this._interceptionId + }); + return Buffer.from(response.body, response.base64Encoded ? 'base64' : 'utf8'); + } + + async continue(request, overrides) { + this._interceptingResponse = !!overrides.interceptResponse; // In certain cases, protocol will return error if the request was already canceled + // or the page was closed. We should tolerate these errors. + + await this._client._sendMayFail('Fetch.continueRequest', { + requestId: this._interceptionId, + url: overrides.url, + headers: overrides.headers, + method: overrides.method, + postData: overrides.postData ? overrides.postData.toString('base64') : undefined + }); + if (!this._interceptingResponse) return null; + const event = await this._responseInterceptedPromise; + this._interceptionId = event.requestId; // FIXME: plumb status text from browser + + if (event.responseErrorReason) { + this._client._sendMayFail('Fetch.continueRequest', { + requestId: event.requestId + }); + + throw new Error(`Request failed: ${event.responseErrorReason}`); + } + + return new network.InterceptedResponse(request, event.responseStatusCode, '', event.responseHeaders); + } + + async fulfill(response) { + this._wasFulfilled = true; + const body = response.isBase64 ? response.body : Buffer.from(response.body).toString('base64'); // In certain cases, protocol will return error if the request was already canceled + // or the page was closed. We should tolerate these errors. + + await this._client._sendMayFail('Fetch.fulfillRequest', { + requestId: this._interceptionId, + responseCode: response.status, + responsePhrase: network.STATUS_TEXTS[String(response.status)], + responseHeaders: response.headers, + body + }); + } + + async abort(errorCode = 'failed') { + const errorReason = errorReasons[errorCode]; + (0, _utils.assert)(errorReason, 'Unknown error code: ' + errorCode); // In certain cases, protocol will return error if the request was already canceled + // or the page was closed. We should tolerate these errors. + + await this._client._sendMayFail('Fetch.failRequest', { + requestId: this._interceptionId, + errorReason + }); + } + +} + +const errorReasons = { + 'aborted': 'Aborted', + 'accessdenied': 'AccessDenied', + 'addressunreachable': 'AddressUnreachable', + 'blockedbyclient': 'BlockedByClient', + 'blockedbyresponse': 'BlockedByResponse', + 'connectionaborted': 'ConnectionAborted', + 'connectionclosed': 'ConnectionClosed', + 'connectionfailed': 'ConnectionFailed', + 'connectionrefused': 'ConnectionRefused', + 'connectionreset': 'ConnectionReset', + 'internetdisconnected': 'InternetDisconnected', + 'namenotresolved': 'NameNotResolved', + 'timedout': 'TimedOut', + 'failed': 'Failed' +}; + +// This class aligns responses with response headers from extra info: +// - Network.requestWillBeSent, Network.responseReceived, Network.loadingFinished/loadingFailed are +// dispatched using one channel. +// - Network.requestWillBeSentExtraInfo and Network.responseReceivedExtraInfo are dispatches on +// another channel. Those channels are not associated, so events come in random order. +// +// This class will associate responses with the new headers. These extra info headers will become +// available to client reliably upon requestfinished event only. It consumes CDP +// signals on one end and processResponse(network.Response) signals on the other hands. It then makes +// sure that responses have all the extra headers in place by the time request finises. +// +// The shape of the instrumentation API is deliberately following the CDP, so that it +// what clear what is called when and what this means to the tracker without extra +// documentation. +class ResponseExtraInfoTracker { + constructor() { + this._requests = new Map(); + } + + requestWillBeSent(event) { + const info = this._requests.get(event.requestId); + + if (info && event.redirectResponse) this._innerResponseReceived(info, event.redirectResponse);else this._getOrCreateEntry(event.requestId); + } + + requestWillBeSentExtraInfo(event) { + const info = this._getOrCreateEntry(event.requestId); + + if (!info) return; + info.requestWillBeSentExtraInfo.push(event); + + this._patchHeaders(info, info.requestWillBeSentExtraInfo.length - 1); + } + + responseReceived(event) { + const info = this._requests.get(event.requestId); + + if (!info) return; + + this._innerResponseReceived(info, event.response); + } + + _innerResponseReceived(info, response) { + if (!response.connectionId) { + // Starting with this response we no longer can guarantee that response and extra info correspond to the same index. + info.sawResponseWithoutConnectionId = true; + } + } + + responseReceivedExtraInfo(event) { + const info = this._getOrCreateEntry(event.requestId); + + info.responseReceivedExtraInfo.push(event); + + this._patchHeaders(info, info.responseReceivedExtraInfo.length - 1); + + this._checkFinished(info); + } + + processResponse(requestId, response, wasFulfilled) { + // We are not interested in ExtraInfo tracking for fulfilled requests, our Blink + // headers are the ones that contain fulfilled headers. + if (wasFulfilled) { + this._stopTracking(requestId); + + return; + } + + const info = this._requests.get(requestId); + + if (!info || info.sawResponseWithoutConnectionId) return; + response.setWillReceiveExtraHeaders(); + info.responses.push(response); + + this._patchHeaders(info, info.responses.length - 1); + } + + loadingFinished(event) { + const info = this._requests.get(event.requestId); + + if (!info) return; + info.loadingFinished = event; + + this._checkFinished(info); + } + + loadingFailed(event) { + const info = this._requests.get(event.requestId); + + if (!info) return; + info.loadingFailed = event; + + this._checkFinished(info); + } + + _getOrCreateEntry(requestId) { + let info = this._requests.get(requestId); + + if (!info) { + info = { + requestId: requestId, + requestWillBeSentExtraInfo: [], + responseReceivedExtraInfo: [], + responses: [], + sawResponseWithoutConnectionId: false + }; + + this._requests.set(requestId, info); + } + + return info; + } + + _patchHeaders(info, index) { + const response = info.responses[index]; + const requestExtraInfo = info.requestWillBeSentExtraInfo[index]; + if (response && requestExtraInfo) response.setRawRequestHeaders((0, _utils.headersObjectToArray)(requestExtraInfo.headers, '\n')); + const responseExtraInfo = info.responseReceivedExtraInfo[index]; + + if (response && responseExtraInfo) { + var _responseExtraInfo$he; + + response.setRawResponseHeaders((0, _utils.headersObjectToArray)(responseExtraInfo.headers, '\n')); + response.request().responseSize.responseHeadersSize = ((_responseExtraInfo$he = responseExtraInfo.headersText) === null || _responseExtraInfo$he === void 0 ? void 0 : _responseExtraInfo$he.length) || 0; + } + } + + _checkFinished(info) { + if (!info.loadingFinished && !info.loadingFailed) return; + + if (info.responses.length <= info.responseReceivedExtraInfo.length) { + // We have extra info for each response. + // We could have more extra infos because we stopped collecting responses at some point. + this._stopTracking(info.requestId); + + return; + } // We are not done yet. + + } + + _stopTracking(requestId) { + this._requests.delete(requestId); + } + +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crPage.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crPage.js new file mode 100644 index 00000000..38928fce --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crPage.js @@ -0,0 +1,1271 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CRPage = void 0; + +var dom = _interopRequireWildcard(require("../dom")); + +var _helper = require("../helper"); + +var _eventsHelper = require("../../utils/eventsHelper"); + +var network = _interopRequireWildcard(require("../network")); + +var _crConnection = require("./crConnection"); + +var _crExecutionContext = require("./crExecutionContext"); + +var _crNetworkManager = require("./crNetworkManager"); + +var _page = require("../page"); + +var _crProtocolHelper = require("./crProtocolHelper"); + +var dialog = _interopRequireWildcard(require("../dialog")); + +var _path = _interopRequireDefault(require("path")); + +var _crInput = require("./crInput"); + +var _crAccessibility = require("./crAccessibility"); + +var _crCoverage = require("./crCoverage"); + +var _crPdf = require("./crPdf"); + +var _crBrowser = require("./crBrowser"); + +var _stackTrace = require("../../utils/stackTrace"); + +var _utils = require("../../utils/utils"); + +var _videoRecorder = require("./videoRecorder"); + +var _crDragDrop = require("./crDragDrop"); + +var _registry = require("../../utils/registry"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +/** + * Copyright 2017 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +const UTILITY_WORLD_NAME = '__playwright_utility_world__'; + +class CRPage { + // Holds window features for the next popup being opened via window.open, + // until the popup target arrives. This could be racy if two oopifs + // simultaneously call window.open with window features: the order + // of their Page.windowOpen events is not guaranteed to match the order + // of new popup targets. + static mainFrameSession(page) { + const crPage = page._delegate; + return crPage._mainFrameSession; + } + + constructor(client, targetId, browserContext, opener, hasUIWindow, isBackgroundPage) { + this._mainFrameSession = void 0; + this._sessions = new Map(); + this._page = void 0; + this.rawMouse = void 0; + this.rawKeyboard = void 0; + this.rawTouchscreen = void 0; + this._targetId = void 0; + this._opener = void 0; + this._pdf = void 0; + this._coverage = void 0; + this._browserContext = void 0; + this._pagePromise = void 0; + this._initializedPage = null; + this._isBackgroundPage = void 0; + this._nextWindowOpenPopupFeatures = []; + this._targetId = targetId; + this._opener = opener; + this._isBackgroundPage = isBackgroundPage; + const dragManager = new _crDragDrop.DragManager(this); + this.rawKeyboard = new _crInput.RawKeyboardImpl(client, browserContext._browser._isMac, dragManager); + this.rawMouse = new _crInput.RawMouseImpl(this, client, dragManager); + this.rawTouchscreen = new _crInput.RawTouchscreenImpl(client); + this._pdf = new _crPdf.CRPDF(client); + this._coverage = new _crCoverage.CRCoverage(client); + this._browserContext = browserContext; + this._page = new _page.Page(this, browserContext); + this._mainFrameSession = new FrameSession(this, client, targetId, null); + + this._sessions.set(targetId, this._mainFrameSession); + + client.once(_crConnection.CRSessionEvents.Disconnected, () => this._page._didDisconnect()); + + if (opener && !browserContext._options.noDefaultViewport) { + const features = opener._nextWindowOpenPopupFeatures.shift() || []; + + const viewportSize = _helper.helper.getViewportSizeFromWindowFeatures(features); + + if (viewportSize) this._page._state.emulatedSize = { + viewport: viewportSize, + screen: viewportSize + }; + } // Note: it is important to call |reportAsNew| before resolving pageOrError promise, + // so that anyone who awaits pageOrError got a ready and reported page. + + + this._pagePromise = this._mainFrameSession._initialize(hasUIWindow).then(async r => { + await this._page.initOpener(this._opener); + return r; + }).catch(async e => { + await this._page.initOpener(this._opener); + throw e; + }).then(() => { + this._initializedPage = this._page; + + this._reportAsNew(); + + return this._page; + }).catch(e => { + this._reportAsNew(e); + + return e; + }); + } + + _reportAsNew(error) { + if (this._isBackgroundPage) { + if (!error) this._browserContext.emit(_crBrowser.CRBrowserContext.CREvents.BackgroundPage, this._page); + } else { + this._page.reportAsNew(error); + } + } + + async _forAllFrameSessions(cb) { + const frameSessions = Array.from(this._sessions.values()); + await Promise.all(frameSessions.map(frameSession => { + if (frameSession._isMainFrame()) return cb(frameSession); + return cb(frameSession).catch(e => { + // Broadcasting a message to the closed iframe shoule be a noop. + if (e.message && (e.message.includes('Target closed.') || e.message.includes('Session closed.'))) return; + throw e; + }); + })); + } + + _sessionForFrame(frame) { + // Frame id equals target id. + while (!this._sessions.has(frame._id)) { + const parent = frame.parentFrame(); + if (!parent) throw new Error(`Frame has been detached.`); + frame = parent; + } + + return this._sessions.get(frame._id); + } + + _sessionForHandle(handle) { + const frame = handle._context.frame; + return this._sessionForFrame(frame); + } + + willBeginDownload() { + this._mainFrameSession._willBeginDownload(); + } + + async pageOrError() { + return this._pagePromise; + } + + didClose() { + for (const session of this._sessions.values()) session.dispose(); + + this._page._didClose(); + } + + async navigateFrame(frame, url, referrer) { + return this._sessionForFrame(frame)._navigate(frame, url, referrer); + } + + async exposeBinding(binding) { + await this._forAllFrameSessions(frame => frame._initBinding(binding)); + await Promise.all(this._page.frames().map(frame => frame.evaluateExpression(binding.source, false, {}).catch(e => {}))); + } + + async updateExtraHTTPHeaders() { + await this._forAllFrameSessions(frame => frame._updateExtraHTTPHeaders(false)); + } + + async updateGeolocation() { + await this._forAllFrameSessions(frame => frame._updateGeolocation(false)); + } + + async updateOffline() { + await this._forAllFrameSessions(frame => frame._updateOffline(false)); + } + + async updateHttpCredentials() { + await this._forAllFrameSessions(frame => frame._updateHttpCredentials(false)); + } + + async setEmulatedSize(emulatedSize) { + (0, _utils.assert)(this._page._state.emulatedSize === emulatedSize); + await this._mainFrameSession._updateViewport(); + } + + async bringToFront() { + await this._mainFrameSession._client.send('Page.bringToFront'); + } + + async updateEmulateMedia() { + await this._forAllFrameSessions(frame => frame._updateEmulateMedia(false)); + } + + async updateRequestInterception() { + await this._forAllFrameSessions(frame => frame._updateRequestInterception()); + } + + async setFileChooserIntercepted(enabled) { + await this._forAllFrameSessions(frame => frame._setFileChooserIntercepted(enabled)); + } + + async reload() { + await this._mainFrameSession._client.send('Page.reload'); + } + + async _go(delta) { + const history = await this._mainFrameSession._client.send('Page.getNavigationHistory'); + const entry = history.entries[history.currentIndex + delta]; + if (!entry) return false; + await this._mainFrameSession._client.send('Page.navigateToHistoryEntry', { + entryId: entry.id + }); + return true; + } + + goBack() { + return this._go(-1); + } + + goForward() { + return this._go(+1); + } + + async evaluateOnNewDocument(source, world = 'main') { + await this._forAllFrameSessions(frame => frame._evaluateOnNewDocument(source, world)); + } + + async closePage(runBeforeUnload) { + if (runBeforeUnload) await this._mainFrameSession._client.send('Page.close');else await this._browserContext._browser._closePage(this); + } + + canScreenshotOutsideViewport() { + return false; + } + + async setBackgroundColor(color) { + await this._mainFrameSession._client.send('Emulation.setDefaultBackgroundColorOverride', { + color + }); + } + + async takeScreenshot(progress, format, documentRect, viewportRect, quality) { + const { + visualViewport + } = await this._mainFrameSession._client.send('Page.getLayoutMetrics'); + + if (!documentRect) { + documentRect = { + x: visualViewport.pageX + viewportRect.x, + y: visualViewport.pageY + viewportRect.y, + ..._helper.helper.enclosingIntSize({ + width: viewportRect.width / visualViewport.scale, + height: viewportRect.height / visualViewport.scale + }) + }; + } // When taking screenshots with documentRect (based on the page content, not viewport), + // ignore current page scale. + + + const clip = { ...documentRect, + scale: viewportRect ? visualViewport.scale : 1 + }; + progress.throwIfAborted(); + const result = await this._mainFrameSession._client.send('Page.captureScreenshot', { + format, + quality, + clip + }); + return Buffer.from(result.data, 'base64'); + } + + async resetViewport() { + await this._mainFrameSession._client.send('Emulation.setDeviceMetricsOverride', { + mobile: false, + width: 0, + height: 0, + deviceScaleFactor: 0 + }); + } + + async getContentFrame(handle) { + return this._sessionForHandle(handle)._getContentFrame(handle); + } + + async getOwnerFrame(handle) { + return this._sessionForHandle(handle)._getOwnerFrame(handle); + } + + isElementHandle(remoteObject) { + return remoteObject.subtype === 'node'; + } + + async getBoundingBox(handle) { + return this._sessionForHandle(handle)._getBoundingBox(handle); + } + + async scrollRectIntoViewIfNeeded(handle, rect) { + return this._sessionForHandle(handle)._scrollRectIntoViewIfNeeded(handle, rect); + } + + async setScreencastOptions(options) { + if (options) { + await this._mainFrameSession._startScreencast(this, { + format: 'jpeg', + quality: options.quality, + maxWidth: options.width, + maxHeight: options.height + }); + } else { + await this._mainFrameSession._stopScreencast(this); + } + } + + rafCountForStablePosition() { + return 1; + } + + async getContentQuads(handle) { + return this._sessionForHandle(handle)._getContentQuads(handle); + } + + async setInputFiles(handle, files) { + await handle.evaluateInUtility(([injected, node, files]) => injected.setInputFiles(node, files), files); + } + + async adoptElementHandle(handle, to) { + return this._sessionForHandle(handle)._adoptElementHandle(handle, to); + } + + async getAccessibilityTree(needle) { + return (0, _crAccessibility.getAccessibilityTree)(this._mainFrameSession._client, needle); + } + + async inputActionEpilogue() { + await this._mainFrameSession._client.send('Page.enable').catch(e => {}); + } + + async pdf(options) { + return this._pdf.generate(options); + } + + coverage() { + return this._coverage; + } + + async getFrameElement(frame) { + let parent = frame.parentFrame(); + if (!parent) throw new Error('Frame has been detached.'); + + const parentSession = this._sessionForFrame(parent); + + const { + backendNodeId + } = await parentSession._client.send('DOM.getFrameOwner', { + frameId: frame._id + }).catch(e => { + if (e instanceof Error && e.message.includes('Frame with the given id was not found.')) (0, _stackTrace.rewriteErrorMessage)(e, 'Frame has been detached.'); + throw e; + }); + parent = frame.parentFrame(); + if (!parent) throw new Error('Frame has been detached.'); + return parentSession._adoptBackendNodeId(backendNodeId, await parent._mainContext()); + } + +} + +exports.CRPage = CRPage; + +class FrameSession { + // Marks the oopif session that remote -> local transition has happened in the parent. + // See Target.detachedFromTarget handler for details. + constructor(crPage, client, targetId, parentSession) { + this._client = void 0; + this._crPage = void 0; + this._page = void 0; + this._networkManager = void 0; + this._contextIdToContext = new Map(); + this._eventListeners = []; + this._targetId = void 0; + this._firstNonInitialNavigationCommittedPromise = void 0; + + this._firstNonInitialNavigationCommittedFulfill = () => {}; + + this._firstNonInitialNavigationCommittedReject = e => {}; + + this._windowId = void 0; + this._swappedIn = false; + this._videoRecorder = null; + this._screencastId = null; + this._screencastClients = new Set(); + this._client = client; + this._crPage = crPage; + this._page = crPage._page; + this._targetId = targetId; + this._networkManager = new _crNetworkManager.CRNetworkManager(client, this._page, parentSession ? parentSession._networkManager : null); + this._firstNonInitialNavigationCommittedPromise = new Promise((f, r) => { + this._firstNonInitialNavigationCommittedFulfill = f; + this._firstNonInitialNavigationCommittedReject = r; + }); + client.once(_crConnection.CRSessionEvents.Disconnected, () => { + this._firstNonInitialNavigationCommittedReject(new Error('Page closed')); + }); + } + + _isMainFrame() { + return this._targetId === this._crPage._targetId; + } + + _addRendererListeners() { + this._eventListeners.push(...[_eventsHelper.eventsHelper.addEventListener(this._client, 'Log.entryAdded', event => this._onLogEntryAdded(event)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Page.fileChooserOpened', event => this._onFileChooserOpened(event)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Page.frameAttached', event => this._onFrameAttached(event.frameId, event.parentFrameId)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Page.frameDetached', event => this._onFrameDetached(event.frameId, event.reason)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Page.frameNavigated', event => this._onFrameNavigated(event.frame, false)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Page.frameRequestedNavigation', event => this._onFrameRequestedNavigation(event)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Page.frameStoppedLoading', event => this._onFrameStoppedLoading(event.frameId)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Page.javascriptDialogOpening', event => this._onDialog(event)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Page.navigatedWithinDocument', event => this._onFrameNavigatedWithinDocument(event.frameId, event.url)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Runtime.bindingCalled', event => this._onBindingCalled(event)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Runtime.consoleAPICalled', event => this._onConsoleAPI(event)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Runtime.exceptionThrown', exception => this._handleException(exception.exceptionDetails)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Runtime.executionContextCreated', event => this._onExecutionContextCreated(event.context)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Runtime.executionContextDestroyed', event => this._onExecutionContextDestroyed(event.executionContextId)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Runtime.executionContextsCleared', event => this._onExecutionContextsCleared()), _eventsHelper.eventsHelper.addEventListener(this._client, 'Target.attachedToTarget', event => this._onAttachedToTarget(event)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Target.detachedFromTarget', event => this._onDetachedFromTarget(event))]); + } + + _addBrowserListeners() { + this._eventListeners.push(...[_eventsHelper.eventsHelper.addEventListener(this._client, 'Inspector.targetCrashed', event => this._onTargetCrashed()), _eventsHelper.eventsHelper.addEventListener(this._client, 'Page.screencastFrame', event => this._onScreencastFrame(event)), _eventsHelper.eventsHelper.addEventListener(this._client, 'Page.windowOpen', event => this._onWindowOpen(event))]); + } + + async _initialize(hasUIWindow) { + if (hasUIWindow && !this._crPage._browserContext._browser.isClank() && !this._crPage._browserContext._options.noDefaultViewport) { + const { + windowId + } = await this._client.send('Browser.getWindowForTarget'); + this._windowId = windowId; + } + + let screencastOptions; + + if (this._isMainFrame() && this._crPage._browserContext._options.recordVideo && hasUIWindow) { + const screencastId = (0, _utils.createGuid)(); + + const outputFile = _path.default.join(this._crPage._browserContext._options.recordVideo.dir, screencastId + '.webm'); + + screencastOptions = { // validateBrowserContextOptions ensures correct video size. + ...this._crPage._browserContext._options.recordVideo.size, + outputFile + }; + await this._crPage._browserContext._ensureVideosPath(); // Note: it is important to start video recorder before sending Page.startScreencast, + // and it is equally important to send Page.startScreencast before sending Runtime.runIfWaitingForDebugger. + + await this._createVideoRecorder(screencastId, screencastOptions); + + this._crPage.pageOrError().then(p => { + if (p instanceof Error) this._stopVideoRecording().catch(() => {}); + }); + } + + let lifecycleEventsEnabled; + if (!this._isMainFrame()) this._addRendererListeners(); + + this._addBrowserListeners(); + + const promises = [this._client.send('Page.enable'), this._client.send('Page.getFrameTree').then(({ + frameTree + }) => { + if (this._isMainFrame()) { + this._handleFrameTree(frameTree); + + this._addRendererListeners(); + } + + const localFrames = this._isMainFrame() ? this._page.frames() : [this._page._frameManager.frame(this._targetId)]; + + for (const frame of localFrames) { + // Note: frames might be removed before we send these. + this._client._sendMayFail('Page.createIsolatedWorld', { + frameId: frame._id, + grantUniveralAccess: true, + worldName: UTILITY_WORLD_NAME + }); + + for (const binding of this._crPage._browserContext._pageBindings.values()) frame.evaluateExpression(binding.source, false, undefined).catch(e => {}); + + for (const source of this._crPage._browserContext._evaluateOnNewDocumentSources) frame.evaluateExpression(source, false, undefined, 'main').catch(e => {}); + } + + const isInitialEmptyPage = this._isMainFrame() && this._page.mainFrame().url() === ':'; + + if (isInitialEmptyPage) { + // Ignore lifecycle events for the initial empty page. It is never the final page + // hence we are going to get more lifecycle updates after the actual navigation has + // started (even if the target url is about:blank). + lifecycleEventsEnabled.catch(e => {}).then(() => { + this._eventListeners.push(_eventsHelper.eventsHelper.addEventListener(this._client, 'Page.lifecycleEvent', event => this._onLifecycleEvent(event))); + }); + } else { + this._firstNonInitialNavigationCommittedFulfill(); + + this._eventListeners.push(_eventsHelper.eventsHelper.addEventListener(this._client, 'Page.lifecycleEvent', event => this._onLifecycleEvent(event))); + } + }), this._client.send('Log.enable', {}), lifecycleEventsEnabled = this._client.send('Page.setLifecycleEventsEnabled', { + enabled: true + }), this._client.send('Runtime.enable', {}), this._client.send('Page.addScriptToEvaluateOnNewDocument', { + source: '', + worldName: UTILITY_WORLD_NAME + }), this._networkManager.initialize(), this._client.send('Target.setAutoAttach', { + autoAttach: true, + waitForDebuggerOnStart: true, + flatten: true + })]; + if (this._isMainFrame()) promises.push(this._client.send('Emulation.setFocusEmulationEnabled', { + enabled: true + })); + const options = this._crPage._browserContext._options; + if (options.bypassCSP) promises.push(this._client.send('Page.setBypassCSP', { + enabled: true + })); + if (options.ignoreHTTPSErrors) promises.push(this._client.send('Security.setIgnoreCertificateErrors', { + ignore: true + })); + if (this._isMainFrame()) promises.push(this._updateViewport()); + if (options.hasTouch) promises.push(this._client.send('Emulation.setTouchEmulationEnabled', { + enabled: true + })); + if (options.javaScriptEnabled === false) promises.push(this._client.send('Emulation.setScriptExecutionDisabled', { + value: true + })); + if (options.userAgent || options.locale) promises.push(this._client.send('Emulation.setUserAgentOverride', { + userAgent: options.userAgent || '', + acceptLanguage: options.locale + })); + if (options.locale) promises.push(emulateLocale(this._client, options.locale)); + if (options.timezoneId) promises.push(emulateTimezone(this._client, options.timezoneId)); + promises.push(this._updateGeolocation(true)); + promises.push(this._updateExtraHTTPHeaders(true)); + promises.push(this._updateRequestInterception()); + promises.push(this._updateOffline(true)); + promises.push(this._updateHttpCredentials(true)); + promises.push(this._updateEmulateMedia(true)); + + for (const binding of this._crPage._page.allBindings()) promises.push(this._initBinding(binding)); + + for (const source of this._crPage._browserContext._evaluateOnNewDocumentSources) promises.push(this._evaluateOnNewDocument(source, 'main')); + + for (const source of this._crPage._page._evaluateOnNewDocumentSources) promises.push(this._evaluateOnNewDocument(source, 'main')); + + if (screencastOptions) promises.push(this._startVideoRecording(screencastOptions)); + promises.push(this._client.send('Runtime.runIfWaitingForDebugger')); + promises.push(this._firstNonInitialNavigationCommittedPromise); + await Promise.all(promises); + } + + dispose() { + _eventsHelper.eventsHelper.removeEventListeners(this._eventListeners); + + this._networkManager.dispose(); + + this._crPage._sessions.delete(this._targetId); + } + + async _navigate(frame, url, referrer) { + const response = await this._client.send('Page.navigate', { + url, + referrer, + frameId: frame._id + }); + if (response.errorText) throw new Error(`${response.errorText} at ${url}`); + return { + newDocumentId: response.loaderId + }; + } + + _onLifecycleEvent(event) { + if (this._eventBelongsToStaleFrame(event.frameId)) return; + if (event.name === 'load') this._page._frameManager.frameLifecycleEvent(event.frameId, 'load');else if (event.name === 'DOMContentLoaded') this._page._frameManager.frameLifecycleEvent(event.frameId, 'domcontentloaded'); + } + + _onFrameStoppedLoading(frameId) { + if (this._eventBelongsToStaleFrame(frameId)) return; + + this._page._frameManager.frameStoppedLoading(frameId); + } + + _handleFrameTree(frameTree) { + this._onFrameAttached(frameTree.frame.id, frameTree.frame.parentId || null); + + this._onFrameNavigated(frameTree.frame, true); + + if (!frameTree.childFrames) return; + + for (const child of frameTree.childFrames) this._handleFrameTree(child); + } + + _eventBelongsToStaleFrame(frameId) { + const frame = this._page._frameManager.frame(frameId); // Subtree may be already gone because some ancestor navigation destroyed the oopif. + + + if (!frame) return true; // When frame goes remote, parent process may still send some events + // related to the local frame before it sends frameDetached. + // In this case, we already have a new session for this frame, so events + // in the old session should be ignored. + + const session = this._crPage._sessionForFrame(frame); + + return session && session !== this && !session._swappedIn; + } + + _onFrameAttached(frameId, parentFrameId) { + const frameSession = this._crPage._sessions.get(frameId); + + if (frameSession && frameId !== this._targetId) { + // This is a remote -> local frame transition. + frameSession._swappedIn = true; + + const frame = this._page._frameManager.frame(frameId); // Frame or even a whole subtree may be already gone, because some ancestor did navigate. + + + if (frame) this._page._frameManager.removeChildFramesRecursively(frame); + return; + } + + if (parentFrameId && !this._page._frameManager.frame(parentFrameId)) { + // Parent frame may be gone already because some ancestor frame navigated and + // destroyed the whole subtree of some oopif, while oopif's process is still sending us events. + // Be careful to not confuse this with "main frame navigated cross-process" scenario + // where parentFrameId is null. + return; + } + + this._page._frameManager.frameAttached(frameId, parentFrameId); + } + + _onFrameNavigated(framePayload, initial) { + if (this._eventBelongsToStaleFrame(framePayload.id)) return; + + this._page._frameManager.frameCommittedNewDocumentNavigation(framePayload.id, framePayload.url + (framePayload.urlFragment || ''), framePayload.name || '', framePayload.loaderId, initial); + + if (!initial) this._firstNonInitialNavigationCommittedFulfill(); + } + + _onFrameRequestedNavigation(payload) { + if (this._eventBelongsToStaleFrame(payload.frameId)) return; + if (payload.disposition === 'currentTab') this._page._frameManager.frameRequestedNavigation(payload.frameId); + } + + _onFrameNavigatedWithinDocument(frameId, url) { + if (this._eventBelongsToStaleFrame(frameId)) return; + + this._page._frameManager.frameCommittedSameDocumentNavigation(frameId, url); + } + + _onFrameDetached(frameId, reason) { + if (this._crPage._sessions.has(frameId)) { + // This is a local -> remote frame transtion, where + // Page.frameDetached arrives after Target.attachedToTarget. + // We've already handled the new target and frame reattach - nothing to do here. + return; + } + + if (reason === 'swap') { + // This is a local -> remote frame transtion, where + // Page.frameDetached arrives before Target.attachedToTarget. + // We should keep the frame in the tree, and it will be used for the new target. + const frame = this._page._frameManager.frame(frameId); + + if (frame) this._page._frameManager.removeChildFramesRecursively(frame); + return; + } // Just a regular frame detach. + + + this._page._frameManager.frameDetached(frameId); + } + + _onExecutionContextCreated(contextPayload) { + const frame = contextPayload.auxData ? this._page._frameManager.frame(contextPayload.auxData.frameId) : null; + if (!frame || this._eventBelongsToStaleFrame(frame._id)) return; + const delegate = new _crExecutionContext.CRExecutionContext(this._client, contextPayload); + let worldName = null; + if (contextPayload.auxData && !!contextPayload.auxData.isDefault) worldName = 'main';else if (contextPayload.name === UTILITY_WORLD_NAME) worldName = 'utility'; + const context = new dom.FrameExecutionContext(delegate, frame, worldName); + if (worldName) frame._contextCreated(worldName, context); + + this._contextIdToContext.set(contextPayload.id, context); + } + + _onExecutionContextDestroyed(executionContextId) { + const context = this._contextIdToContext.get(executionContextId); + + if (!context) return; + + this._contextIdToContext.delete(executionContextId); + + context.frame._contextDestroyed(context); + } + + _onExecutionContextsCleared() { + for (const contextId of Array.from(this._contextIdToContext.keys())) this._onExecutionContextDestroyed(contextId); + } + + _onAttachedToTarget(event) { + const session = _crConnection.CRConnection.fromSession(this._client).session(event.sessionId); + + if (event.targetInfo.type === 'iframe') { + // Frame id equals target id. + const targetId = event.targetInfo.targetId; + + const frame = this._page._frameManager.frame(targetId); + + if (!frame) return; // Subtree may be already gone due to renderer/browser race. + + this._page._frameManager.removeChildFramesRecursively(frame); + + const frameSession = new FrameSession(this._crPage, session, targetId, this); + + this._crPage._sessions.set(targetId, frameSession); + + frameSession._initialize(false).catch(e => e); + + return; + } + + if (event.targetInfo.type !== 'worker') { + // Ideally, detaching should resume any target, but there is a bug in the backend. + session._sendMayFail('Runtime.runIfWaitingForDebugger').then(() => { + this._client._sendMayFail('Target.detachFromTarget', { + sessionId: event.sessionId + }); + }); + + return; + } + + const url = event.targetInfo.url; + const worker = new _page.Worker(this._page, url); + + this._page._addWorker(event.sessionId, worker); + + session.once('Runtime.executionContextCreated', async event => { + worker._createExecutionContext(new _crExecutionContext.CRExecutionContext(session, event.context)); + }); // This might fail if the target is closed before we initialize. + + session._sendMayFail('Runtime.enable'); + + session._sendMayFail('Network.enable'); + + session._sendMayFail('Runtime.runIfWaitingForDebugger'); + + session.on('Runtime.consoleAPICalled', event => { + const args = event.args.map(o => worker._existingExecutionContext.createHandle(o)); + + this._page._addConsoleMessage(event.type, args, (0, _crProtocolHelper.toConsoleMessageLocation)(event.stackTrace)); + }); + session.on('Runtime.exceptionThrown', exception => this._page.emit(_page.Page.Events.PageError, (0, _crProtocolHelper.exceptionToError)(exception.exceptionDetails))); // TODO: attribute workers to the right frame. + + this._networkManager.instrumentNetworkEvents(session, this._page._frameManager.frame(this._targetId)); + } + + _onDetachedFromTarget(event) { + // This might be a worker... + this._page._removeWorker(event.sessionId); // ... or an oopif. + + + const childFrameSession = this._crPage._sessions.get(event.targetId); + + if (!childFrameSession) return; // Usually, we get frameAttached in this session first and mark child as swappedIn. + + if (childFrameSession._swappedIn) { + childFrameSession.dispose(); + return; + } // However, sometimes we get detachedFromTarget before frameAttached. + // In this case we don't know wheter this is a remote frame detach, + // or just a remote -> local transition. In the latter case, frameAttached + // is already inflight, so let's make a safe roundtrip to ensure it arrives. + + + this._client.send('Page.enable').catch(e => null).then(() => { + // Child was not swapped in - that means frameAttached did not happen and + // this is remote detach rather than remote -> local swap. + if (!childFrameSession._swappedIn) this._page._frameManager.frameDetached(event.targetId); + childFrameSession.dispose(); + }); + } + + _onWindowOpen(event) { + this._crPage._nextWindowOpenPopupFeatures.push(event.windowFeatures); + } + + async _onConsoleAPI(event) { + if (event.executionContextId === 0) { + // DevTools protocol stores the last 1000 console messages. These + // messages are always reported even for removed execution contexts. In + // this case, they are marked with executionContextId = 0 and are + // reported upon enabling Runtime agent. + // + // Ignore these messages since: + // - there's no execution context we can use to operate with message + // arguments + // - these messages are reported before Playwright clients can subscribe + // to the 'console' + // page event. + // + // @see https://github.com/GoogleChrome/puppeteer/issues/3865 + return; + } + + const context = this._contextIdToContext.get(event.executionContextId); + + const values = event.args.map(arg => context.createHandle(arg)); + + this._page._addConsoleMessage(event.type, values, (0, _crProtocolHelper.toConsoleMessageLocation)(event.stackTrace)); + } + + async _initBinding(binding) { + await Promise.all([this._client.send('Runtime.addBinding', { + name: binding.name + }), this._client.send('Page.addScriptToEvaluateOnNewDocument', { + source: binding.source + })]); + } + + async _onBindingCalled(event) { + const context = this._contextIdToContext.get(event.executionContextId); + + const pageOrError = await this._crPage.pageOrError(); + if (!(pageOrError instanceof Error)) await this._page._onBindingCalled(event.payload, context); + } + + _onDialog(event) { + if (!this._page._frameManager.frame(this._targetId)) return; // Our frame/subtree may be gone already. + + this._page.emit(_page.Page.Events.Dialog, new dialog.Dialog(this._page, event.type, event.message, async (accept, promptText) => { + await this._client.send('Page.handleJavaScriptDialog', { + accept, + promptText + }); + }, event.defaultPrompt)); + } + + _handleException(exceptionDetails) { + this._page.firePageError((0, _crProtocolHelper.exceptionToError)(exceptionDetails)); + } + + async _onTargetCrashed() { + this._client._markAsCrashed(); + + this._page._didCrash(); + } + + _onLogEntryAdded(event) { + const { + level, + text, + args, + source, + url, + lineNumber + } = event.entry; + if (args) args.map(arg => (0, _crProtocolHelper.releaseObject)(this._client, arg.objectId)); + + if (source !== 'worker') { + const location = { + url: url || '', + lineNumber: lineNumber || 0, + columnNumber: 0 + }; + + this._page._addConsoleMessage(level, [], location, text); + } + } + + async _onFileChooserOpened(event) { + const frame = this._page._frameManager.frame(event.frameId); + + if (!frame) return; + let handle; + + try { + const utilityContext = await frame._utilityContext(); + handle = await this._adoptBackendNodeId(event.backendNodeId, utilityContext); + } catch (e) { + // During async processing, frame/context may go away. We should not throw. + return; + } + + await this._page._onFileChooserOpened(handle); + } + + _willBeginDownload() { + const originPage = this._crPage._initializedPage; + + if (!originPage) { + // Resume the page creation with an error. The page will automatically close right + // after the download begins. + this._firstNonInitialNavigationCommittedReject(new Error('Starting new page download')); + } + } + + _onScreencastFrame(payload) { + this._client.send('Page.screencastFrameAck', { + sessionId: payload.sessionId + }).catch(() => {}); + + const buffer = Buffer.from(payload.data, 'base64'); + + this._page.emit(_page.Page.Events.ScreencastFrame, { + buffer, + timestamp: payload.metadata.timestamp, + width: payload.metadata.deviceWidth, + height: payload.metadata.deviceHeight + }); + } + + async _createVideoRecorder(screencastId, options) { + (0, _utils.assert)(!this._screencastId); + + const ffmpegPath = _registry.registry.findExecutable('ffmpeg').executablePathOrDie(this._page._browserContext._browser.options.sdkLanguage); + + this._videoRecorder = await _videoRecorder.VideoRecorder.launch(this._crPage._page, ffmpegPath, options); + this._screencastId = screencastId; + } + + async _startVideoRecording(options) { + const screencastId = this._screencastId; + (0, _utils.assert)(screencastId); + + this._page.once(_page.Page.Events.Close, () => this._stopVideoRecording().catch(() => {})); + + const gotFirstFrame = new Promise(f => this._client.once('Page.screencastFrame', f)); + await this._startScreencast(this._videoRecorder, { + format: 'jpeg', + quality: 90, + maxWidth: options.width, + maxHeight: options.height + }); // Wait for the first frame before reporting video to the client. + + gotFirstFrame.then(() => { + this._crPage._browserContext._browser._videoStarted(this._crPage._browserContext, screencastId, options.outputFile, this._crPage.pageOrError()); + }); + } + + async _stopVideoRecording() { + if (!this._screencastId) return; + const screencastId = this._screencastId; + this._screencastId = null; + const recorder = this._videoRecorder; + this._videoRecorder = null; + await this._stopScreencast(recorder); + await recorder.stop().catch(() => {}); // Keep the video artifact in the map utntil encoding is fully finished, if the context + // starts closing before the video is fully written to disk it will wait for it. + + const video = this._crPage._browserContext._browser._takeVideo(screencastId); + + video === null || video === void 0 ? void 0 : video.reportFinished(); + } + + async _startScreencast(client, options = {}) { + this._screencastClients.add(client); + + if (this._screencastClients.size === 1) await this._client.send('Page.startScreencast', options); + } + + async _stopScreencast(client) { + this._screencastClients.delete(client); + + if (!this._screencastClients.size) await this._client._sendMayFail('Page.stopScreencast'); + } + + async _updateExtraHTTPHeaders(initial) { + const headers = network.mergeHeaders([this._crPage._browserContext._options.extraHTTPHeaders, this._page._state.extraHTTPHeaders]); + if (!initial || headers.length) await this._client.send('Network.setExtraHTTPHeaders', { + headers: (0, _utils.headersArrayToObject)(headers, false + /* lowerCase */ + ) + }); + } + + async _updateGeolocation(initial) { + const geolocation = this._crPage._browserContext._options.geolocation; + if (!initial || geolocation) await this._client.send('Emulation.setGeolocationOverride', geolocation || {}); + } + + async _updateOffline(initial) { + const offline = !!this._crPage._browserContext._options.offline; + if (!initial || offline) await this._networkManager.setOffline(offline); + } + + async _updateHttpCredentials(initial) { + const credentials = this._crPage._browserContext._options.httpCredentials || null; + if (!initial || credentials) await this._networkManager.authenticate(credentials); + } + + async _updateViewport() { + if (this._crPage._browserContext._browser.isClank()) return; + (0, _utils.assert)(this._isMainFrame()); + const options = this._crPage._browserContext._options; + const emulatedSize = this._page._state.emulatedSize; + if (emulatedSize === null) return; + const viewportSize = emulatedSize.viewport; + const screenSize = emulatedSize.screen; + const isLandscape = viewportSize.width > viewportSize.height; + const promises = [this._client.send('Emulation.setDeviceMetricsOverride', { + mobile: !!options.isMobile, + width: viewportSize.width, + height: viewportSize.height, + screenWidth: screenSize.width, + screenHeight: screenSize.height, + deviceScaleFactor: options.deviceScaleFactor || 1, + screenOrientation: isLandscape ? { + angle: 90, + type: 'landscapePrimary' + } : { + angle: 0, + type: 'portraitPrimary' + } + })]; + + if (this._windowId) { + let insets = { + width: 0, + height: 0 + }; + + if (this._crPage._browserContext._browser.options.headful) { + // TODO: popup windows have their own insets. + insets = { + width: 24, + height: 88 + }; + if (process.platform === 'win32') insets = { + width: 16, + height: 88 + };else if (process.platform === 'linux') insets = { + width: 8, + height: 85 + };else if (process.platform === 'darwin') insets = { + width: 2, + height: 80 + }; + } + + promises.push(this.setWindowBounds({ + width: viewportSize.width + insets.width, + height: viewportSize.height + insets.height + })); + } + + await Promise.all(promises); + } + + async windowBounds() { + const { + bounds + } = await this._client.send('Browser.getWindowBounds', { + windowId: this._windowId + }); + return bounds; + } + + async setWindowBounds(bounds) { + return await this._client.send('Browser.setWindowBounds', { + windowId: this._windowId, + bounds + }); + } + + async _updateEmulateMedia(initial) { + if (this._crPage._browserContext._browser.isClank()) return; + const colorScheme = this._page._state.colorScheme === null ? '' : this._page._state.colorScheme; + const reducedMotion = this._page._state.reducedMotion === null ? '' : this._page._state.reducedMotion; + const forcedColors = this._page._state.forcedColors === null ? '' : this._page._state.forcedColors; + const features = [{ + name: 'prefers-color-scheme', + value: colorScheme + }, { + name: 'prefers-reduced-motion', + value: reducedMotion + }, { + name: 'forced-colors', + value: forcedColors + }]; // Empty string disables the override. + + await this._client.send('Emulation.setEmulatedMedia', { + media: this._page._state.mediaType || '', + features + }); + } + + async _updateRequestInterception() { + await this._networkManager.setRequestInterception(this._page._needsRequestInterception()); + } + + async _setFileChooserIntercepted(enabled) { + await this._client.send('Page.setInterceptFileChooserDialog', { + enabled + }).catch(e => {}); // target can be closed. + } + + async _evaluateOnNewDocument(source, world) { + const worldName = world === 'utility' ? UTILITY_WORLD_NAME : undefined; + await this._client.send('Page.addScriptToEvaluateOnNewDocument', { + source, + worldName + }); + } + + async _getContentFrame(handle) { + const nodeInfo = await this._client.send('DOM.describeNode', { + objectId: handle._objectId + }); + if (!nodeInfo || typeof nodeInfo.node.frameId !== 'string') return null; + return this._page._frameManager.frame(nodeInfo.node.frameId); + } + + async _getOwnerFrame(handle) { + // document.documentElement has frameId of the owner frame. + const documentElement = await handle.evaluateHandle(node => { + const doc = node; + if (doc.documentElement && doc.documentElement.ownerDocument === doc) return doc.documentElement; + return node.ownerDocument ? node.ownerDocument.documentElement : null; + }); + if (!documentElement) return null; + if (!documentElement._objectId) return null; + const nodeInfo = await this._client.send('DOM.describeNode', { + objectId: documentElement._objectId + }); + const frameId = nodeInfo && typeof nodeInfo.node.frameId === 'string' ? nodeInfo.node.frameId : null; + documentElement.dispose(); + return frameId; + } + + async _getBoundingBox(handle) { + const result = await this._client._sendMayFail('DOM.getBoxModel', { + objectId: handle._objectId + }); + if (!result) return null; + const quad = result.model.border; + const x = Math.min(quad[0], quad[2], quad[4], quad[6]); + const y = Math.min(quad[1], quad[3], quad[5], quad[7]); + const width = Math.max(quad[0], quad[2], quad[4], quad[6]) - x; + const height = Math.max(quad[1], quad[3], quad[5], quad[7]) - y; + const position = await this._framePosition(); + if (!position) return null; + return { + x: x + position.x, + y: y + position.y, + width, + height + }; + } + + async _framePosition() { + const frame = this._page._frameManager.frame(this._targetId); + + if (!frame) return null; + if (frame === this._page.mainFrame()) return { + x: 0, + y: 0 + }; + const element = await frame.frameElement(); + const box = await element.boundingBox(); + return box; + } + + async _scrollRectIntoViewIfNeeded(handle, rect) { + return await this._client.send('DOM.scrollIntoViewIfNeeded', { + objectId: handle._objectId, + rect + }).then(() => 'done').catch(e => { + if (e instanceof Error && e.message.includes('Node does not have a layout object')) return 'error:notvisible'; + if (e instanceof Error && e.message.includes('Node is detached from document')) return 'error:notconnected'; + throw e; + }); + } + + async _getContentQuads(handle) { + const result = await this._client._sendMayFail('DOM.getContentQuads', { + objectId: handle._objectId + }); + if (!result) return null; + const position = await this._framePosition(); + if (!position) return null; + return result.quads.map(quad => [{ + x: quad[0] + position.x, + y: quad[1] + position.y + }, { + x: quad[2] + position.x, + y: quad[3] + position.y + }, { + x: quad[4] + position.x, + y: quad[5] + position.y + }, { + x: quad[6] + position.x, + y: quad[7] + position.y + }]); + } + + async _adoptElementHandle(handle, to) { + const nodeInfo = await this._client.send('DOM.describeNode', { + objectId: handle._objectId + }); + return this._adoptBackendNodeId(nodeInfo.node.backendNodeId, to); + } + + async _adoptBackendNodeId(backendNodeId, to) { + const result = await this._client._sendMayFail('DOM.resolveNode', { + backendNodeId, + executionContextId: to._delegate._contextId + }); + if (!result || result.object.subtype === 'null') throw new Error(dom.kUnableToAdoptErrorMessage); + return to.createHandle(result.object).asElement(); + } + +} + +async function emulateLocale(session, locale) { + try { + await session.send('Emulation.setLocaleOverride', { + locale + }); + } catch (exception) { + // All pages in the same renderer share locale. All such pages belong to the same + // context and if locale is overridden for one of them its value is the same as + // we are trying to set so it's not a problem. + if (exception.message.includes('Another locale override is already in effect')) return; + throw exception; + } +} + +async function emulateTimezone(session, timezoneId) { + try { + await session.send('Emulation.setTimezoneOverride', { + timezoneId: timezoneId + }); + } catch (exception) { + if (exception.message.includes('Timezone override is already in effect')) return; + if (exception.message.includes('Invalid timezone')) throw new Error(`Invalid timezone ID: ${timezoneId}`); + throw exception; + } +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crPdf.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crPdf.js new file mode 100644 index 00000000..9e9cfe24 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crPdf.js @@ -0,0 +1,158 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CRPDF = void 0; + +var _utils = require("../../utils/utils"); + +var _crProtocolHelper = require("./crProtocolHelper"); + +/** + * Copyright 2017 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +const PagePaperFormats = { + letter: { + width: 8.5, + height: 11 + }, + legal: { + width: 8.5, + height: 14 + }, + tabloid: { + width: 11, + height: 17 + }, + ledger: { + width: 17, + height: 11 + }, + a0: { + width: 33.1, + height: 46.8 + }, + a1: { + width: 23.4, + height: 33.1 + }, + a2: { + width: 16.54, + height: 23.4 + }, + a3: { + width: 11.7, + height: 16.54 + }, + a4: { + width: 8.27, + height: 11.7 + }, + a5: { + width: 5.83, + height: 8.27 + }, + a6: { + width: 4.13, + height: 5.83 + } +}; +const unitToPixels = { + 'px': 1, + 'in': 96, + 'cm': 37.8, + 'mm': 3.78 +}; + +function convertPrintParameterToInches(text) { + if (text === undefined) return undefined; + let unit = text.substring(text.length - 2).toLowerCase(); + let valueText = ''; + + if (unitToPixels.hasOwnProperty(unit)) { + valueText = text.substring(0, text.length - 2); + } else { + // In case of unknown unit try to parse the whole parameter as number of pixels. + // This is consistent with phantom's paperSize behavior. + unit = 'px'; + valueText = text; + } + + const value = Number(valueText); + (0, _utils.assert)(!isNaN(value), 'Failed to parse parameter value: ' + text); + const pixels = value * unitToPixels[unit]; + return pixels / 96; +} + +class CRPDF { + constructor(client) { + this._client = void 0; + this._client = client; + } + + async generate(options = {}) { + const { + scale = 1, + displayHeaderFooter = false, + headerTemplate = '', + footerTemplate = '', + printBackground = false, + landscape = false, + pageRanges = '', + preferCSSPageSize = false, + margin = {} + } = options; + let paperWidth = 8.5; + let paperHeight = 11; + + if (options.format) { + const format = PagePaperFormats[options.format.toLowerCase()]; + (0, _utils.assert)(format, 'Unknown paper format: ' + options.format); + paperWidth = format.width; + paperHeight = format.height; + } else { + paperWidth = convertPrintParameterToInches(options.width) || paperWidth; + paperHeight = convertPrintParameterToInches(options.height) || paperHeight; + } + + const marginTop = convertPrintParameterToInches(margin.top) || 0; + const marginLeft = convertPrintParameterToInches(margin.left) || 0; + const marginBottom = convertPrintParameterToInches(margin.bottom) || 0; + const marginRight = convertPrintParameterToInches(margin.right) || 0; + const result = await this._client.send('Page.printToPDF', { + transferMode: 'ReturnAsStream', + landscape, + displayHeaderFooter, + headerTemplate, + footerTemplate, + printBackground, + scale, + paperWidth, + paperHeight, + marginTop, + marginBottom, + marginLeft, + marginRight, + pageRanges, + preferCSSPageSize + }); + return await (0, _crProtocolHelper.readProtocolStream)(this._client, result.stream, null); + } + +} + +exports.CRPDF = CRPDF; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crProtocolHelper.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crProtocolHelper.js new file mode 100644 index 00000000..ec6aab71 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/crProtocolHelper.js @@ -0,0 +1,129 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getExceptionMessage = getExceptionMessage; +exports.releaseObject = releaseObject; +exports.readProtocolStream = readProtocolStream; +exports.toConsoleMessageLocation = toConsoleMessageLocation; +exports.exceptionToError = exceptionToError; +exports.toModifiersMask = toModifiersMask; + +var _fs = _interopRequireDefault(require("fs")); + +var _utils = require("../../utils/utils"); + +var _stackTrace = require("../../utils/stackTrace"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright 2017 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +function getExceptionMessage(exceptionDetails) { + if (exceptionDetails.exception) return exceptionDetails.exception.description || String(exceptionDetails.exception.value); + let message = exceptionDetails.text; + + if (exceptionDetails.stackTrace) { + for (const callframe of exceptionDetails.stackTrace.callFrames) { + const location = callframe.url + ':' + callframe.lineNumber + ':' + callframe.columnNumber; + const functionName = callframe.functionName || ''; + message += `\n at ${functionName} (${location})`; + } + } + + return message; +} + +async function releaseObject(client, objectId) { + await client.send('Runtime.releaseObject', { + objectId + }).catch(error => {}); +} + +async function readProtocolStream(client, handle, path) { + let eof = false; + let fd; + + if (path) { + await (0, _utils.mkdirIfNeeded)(path); + fd = await _fs.default.promises.open(path, 'w'); + } + + const bufs = []; + + while (!eof) { + const response = await client.send('IO.read', { + handle + }); + eof = response.eof; + const buf = Buffer.from(response.data, response.base64Encoded ? 'base64' : undefined); + bufs.push(buf); + if (fd) await fd.write(buf); + } + + if (fd) await fd.close(); + await client.send('IO.close', { + handle + }); + return Buffer.concat(bufs); +} + +function toConsoleMessageLocation(stackTrace) { + return stackTrace && stackTrace.callFrames.length ? { + url: stackTrace.callFrames[0].url, + lineNumber: stackTrace.callFrames[0].lineNumber, + columnNumber: stackTrace.callFrames[0].columnNumber + } : { + url: '', + lineNumber: 0, + columnNumber: 0 + }; +} + +function exceptionToError(exceptionDetails) { + const messageWithStack = getExceptionMessage(exceptionDetails); + const lines = messageWithStack.split('\n'); + const firstStackTraceLine = lines.findIndex(line => line.startsWith(' at')); + let messageWithName = ''; + let stack = ''; + + if (firstStackTraceLine === -1) { + messageWithName = messageWithStack; + } else { + messageWithName = lines.slice(0, firstStackTraceLine).join('\n'); + stack = messageWithStack; + } + + const { + name, + message + } = (0, _stackTrace.splitErrorMessage)(messageWithName); + const err = new Error(message); + err.stack = stack; + err.name = name; + return err; +} + +function toModifiersMask(modifiers) { + let mask = 0; + if (modifiers.has('Alt')) mask |= 1; + if (modifiers.has('Control')) mask |= 2; + if (modifiers.has('Meta')) mask |= 4; + if (modifiers.has('Shift')) mask |= 8; + return mask; +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/videoRecorder.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/videoRecorder.js new file mode 100644 index 00000000..ec376473 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/chromium/videoRecorder.js @@ -0,0 +1,174 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.VideoRecorder = void 0; + +var _utils = require("../../utils/utils"); + +var _page = require("../page"); + +var _processLauncher = require("../../utils/processLauncher"); + +var _progress = require("../progress"); + +var _instrumentation = require("../instrumentation"); + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +const fps = 25; + +class VideoRecorder { + static async launch(page, ffmpegPath, options) { + if (!options.outputFile.endsWith('.webm')) throw new Error('File must have .webm extension'); + const controller = new _progress.ProgressController((0, _instrumentation.internalCallMetadata)(), page); + controller.setLogName('browser'); + return await controller.run(async progress => { + const recorder = new VideoRecorder(page, ffmpegPath, progress); + await recorder._launch(options); + return recorder; + }); + } + + constructor(page, ffmpegPath, progress) { + this._process = null; + this._gracefullyClose = null; + this._lastWritePromise = Promise.resolve(); + this._lastFrameTimestamp = 0; + this._lastFrameBuffer = null; + this._lastWriteTimestamp = 0; + this._progress = void 0; + this._frameQueue = []; + this._isStopped = false; + this._ffmpegPath = void 0; + this._progress = progress; + this._ffmpegPath = ffmpegPath; + page.on(_page.Page.Events.ScreencastFrame, frame => this.writeFrame(frame.buffer, frame.timestamp)); + } + + async _launch(options) { + // How to tune the codec: + // 1. Read vp8 documentation to figure out the options. + // https://www.webmproject.org/docs/encoder-parameters/ + // 2. Use the following command to map the options to ffmpeg arguments. + // $ ./third_party/ffmpeg/ffmpeg-mac -h encoder=vp8 + // 3. A bit more about passing vp8 options to ffmpeg. + // https://trac.ffmpeg.org/wiki/Encode/VP8 + // 4. Tuning for VP9: + // https://developers.google.com/media/vp9/live-encoding + // + // How to stress-test video recording (runs 10 recorders in parallel to book all cpus available): + // $ node ./utils/video_stress.js + // + // We use the following vp8 options: + // "-qmin 0 -qmax 50" - quality variation from 0 to 50. + // Suggested here: https://trac.ffmpeg.org/wiki/Encode/VP8 + // "-crf 8" - constant quality mode, 4-63, lower means better quality. + // "-deadline realtime -speed 8" - do not use too much cpu to keep up with incoming frames. + // "-b:v 1M" - video bitrate. Default value is too low for vp8 + // Suggested here: https://trac.ffmpeg.org/wiki/Encode/VP8 + // Note that we can switch to "-qmin 20 -qmax 50 -crf 30" for smaller video size but worse quality. + // + // We use "pad" and "crop" video filters (-vf option) to resize incoming frames + // that might be of the different size to the desired video size. + // https://ffmpeg.org/ffmpeg-filters.html#pad-1 + // https://ffmpeg.org/ffmpeg-filters.html#crop + // + // We use "image2pipe" mode to pipe frames and get a single video - https://trac.ffmpeg.org/wiki/Slideshow + // "-f image2pipe -c:v mjpeg -i -" forces input to be read from standard input, and forces + // mjpeg input image format. + // "-avioflags direct" reduces general buffering. + // "-fpsprobesize 0 -probesize 32 -analyzeduration 0" reduces initial buffering + // while analyzing input fps and other stats. + // + // "-y" means overwrite output. + // "-an" means no audio. + // "-threads 1" means using one thread. This drastically reduces stalling when + // cpu is overbooked. By default vp8 tries to use all available threads? + const w = options.width; + const h = options.height; + const args = `-loglevel error -f image2pipe -avioflags direct -fpsprobesize 0 -probesize 32 -analyzeduration 0 -c:v mjpeg -i - -y -an -r ${fps} -c:v vp8 -qmin 0 -qmax 50 -crf 8 -deadline realtime -speed 8 -b:v 1M -threads 1 -vf pad=${w}:${h}:0:0:gray,crop=${w}:${h}:0:0`.split(' '); + args.push(options.outputFile); + const progress = this._progress; + const { + launchedProcess, + gracefullyClose + } = await (0, _processLauncher.launchProcess)({ + command: this._ffmpegPath, + args, + stdio: 'stdin', + log: message => progress.log(message), + tempDirectories: [], + attemptToGracefullyClose: async () => { + progress.log('Closing stdin...'); + launchedProcess.stdin.end(); + }, + onExit: (exitCode, signal) => { + progress.log(`ffmpeg onkill exitCode=${exitCode} signal=${signal}`); + } + }); + launchedProcess.stdin.on('finish', () => { + progress.log('ffmpeg finished input.'); + }); + launchedProcess.stdin.on('error', () => { + progress.log('ffmpeg error.'); + }); + this._process = launchedProcess; + this._gracefullyClose = gracefullyClose; + } + + writeFrame(frame, timestamp) { + (0, _utils.assert)(this._process); + if (this._isStopped) return; + + this._progress.log(`writing frame ` + timestamp); + + if (this._lastFrameBuffer) { + const durationSec = timestamp - this._lastFrameTimestamp; + const repeatCount = Math.max(1, Math.round(fps * durationSec)); + + for (let i = 0; i < repeatCount; ++i) this._frameQueue.push(this._lastFrameBuffer); + + this._lastWritePromise = this._lastWritePromise.then(() => this._sendFrames()); + } + + this._lastFrameBuffer = frame; + this._lastFrameTimestamp = timestamp; + this._lastWriteTimestamp = (0, _utils.monotonicTime)(); + } + + async _sendFrames() { + while (this._frameQueue.length) await this._sendFrame(this._frameQueue.shift()); + } + + async _sendFrame(frame) { + return new Promise(f => this._process.stdin.write(frame, f)).then(error => { + if (error) this._progress.log(`ffmpeg failed to write: ${error}`); + }); + } + + async stop() { + if (this._isStopped) return; + this.writeFrame(Buffer.from([]), this._lastFrameTimestamp + ((0, _utils.monotonicTime)() - this._lastWriteTimestamp) / 1000); + this._isStopped = true; + await this._lastWritePromise; + await this._gracefullyClose(); + } + +} + +exports.VideoRecorder = VideoRecorder; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/componentUtils.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/componentUtils.js new file mode 100644 index 00000000..c9182ced --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/componentUtils.js @@ -0,0 +1,189 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.checkComponentAttribute = checkComponentAttribute; +exports.parseComponentSelector = parseComponentSelector; + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +function checkComponentAttribute(obj, attr) { + for (const token of attr.jsonPath) { + if (obj !== undefined && obj !== null) obj = obj[token]; + } + + const objValue = typeof obj === 'string' && !attr.caseSensetive ? obj.toUpperCase() : obj; + const attrValue = typeof attr.value === 'string' && !attr.caseSensetive ? attr.value.toUpperCase() : attr.value; + if (attr.op === '') return !!objValue; + if (attr.op === '=') return objValue === attrValue; + if (typeof objValue !== 'string' || typeof attrValue !== 'string') return false; + if (attr.op === '*=') return objValue.includes(attrValue); + if (attr.op === '^=') return objValue.startsWith(attrValue); + if (attr.op === '$=') return objValue.endsWith(attrValue); + if (attr.op === '|=') return objValue === attrValue || objValue.startsWith(attrValue + '-'); + if (attr.op === '~=') return objValue.split(' ').includes(attrValue); + return false; +} + +function parseComponentSelector(selector) { + let wp = 0; + let EOL = selector.length === 0; + + const next = () => selector[wp] || ''; + + const eat1 = () => { + const result = next(); + ++wp; + EOL = wp >= selector.length; + return result; + }; + + const syntaxError = stage => { + if (EOL) throw new Error(`Unexpected end of selector while parsing selector \`${selector}\``); + throw new Error(`Error while parsing selector \`${selector}\` - unexpected symbol "${next()}" at position ${wp}` + (stage ? ' during ' + stage : '')); + }; + + function skipSpaces() { + while (!EOL && /\s/.test(next())) eat1(); + } + + function readIdentifier() { + let result = ''; + skipSpaces(); + + while (!EOL && /[-$0-9A-Z_]/i.test(next())) result += eat1(); + + return result; + } + + function readQuotedString(quote) { + let result = eat1(); + if (result !== quote) syntaxError('parsing quoted string'); + + while (!EOL && next() !== quote) { + if (next() === '\\') eat1(); + result += eat1(); + } + + if (next() !== quote) syntaxError('parsing quoted string'); + result += eat1(); + return result; + } + + function readAttributeToken() { + let token = ''; + skipSpaces(); + if (next() === `'` || next() === `"`) token = readQuotedString(next()).slice(1, -1);else token = readIdentifier(); + if (!token) syntaxError('parsing property path'); + return token; + } + + function readOperator() { + skipSpaces(); + let op = ''; + if (!EOL) op += eat1(); + if (!EOL && op !== '=') op += eat1(); + if (!['=', '*=', '^=', '$=', '|=', '~='].includes(op)) syntaxError('parsing operator'); + return op; + } + + function readAttribute() { + // skip leading [ + eat1(); // read attribute name: + // foo.bar + // 'foo' . "ba zz" + + const jsonPath = []; + jsonPath.push(readAttributeToken()); + skipSpaces(); + + while (next() === '.') { + eat1(); + jsonPath.push(readAttributeToken()); + skipSpaces(); + } // check property is truthy: [enabled] + + + if (next() === ']') { + eat1(); + return { + jsonPath, + op: '', + value: null, + caseSensetive: false + }; + } + + const operator = readOperator(); + let value = undefined; + let caseSensetive = true; + skipSpaces(); + + if (next() === `'` || next() === `"`) { + value = readQuotedString(next()).slice(1, -1); + skipSpaces(); + + if (next() === 'i' || next() === 'I') { + caseSensetive = false; + eat1(); + } else if (next() === 's' || next() === 'S') { + caseSensetive = true; + eat1(); + } + } else { + value = ''; + + while (!EOL && !/\s/.test(next()) && next() !== ']') value += eat1(); + + if (value === 'true') { + value = true; + } else if (value === 'false') { + value = false; + } else { + value = +value; + if (isNaN(value)) syntaxError('parsing attribute value'); + } + } + + skipSpaces(); + if (next() !== ']') syntaxError('parsing attribute value'); + eat1(); + if (operator !== '=' && typeof value !== 'string') throw new Error(`Error while parsing selector \`${selector}\` - cannot use ${operator} in attribute with non-string matching value - ${value}`); + return { + jsonPath, + op: operator, + value, + caseSensetive + }; + } + + const result = { + name: '', + attributes: [] + }; + result.name = readIdentifier(); + skipSpaces(); + + while (next() === '[') { + result.attributes.push(readAttribute()); + skipSpaces(); + } + + if (!EOL) syntaxError(undefined); + if (!result.name && !result.attributes.length) throw new Error(`Error while parsing selector \`${selector}\` - selector cannot be empty`); + return result; +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/cssParser.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/cssParser.js new file mode 100644 index 00000000..78d268a6 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/cssParser.js @@ -0,0 +1,240 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.parseCSS = parseCSS; +exports.serializeSelector = serializeSelector; + +var css = _interopRequireWildcard(require("./cssTokenizer")); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +function parseCSS(selector, customNames) { + let tokens; + + try { + tokens = css.tokenize(selector); + if (!(tokens[tokens.length - 1] instanceof css.EOFToken)) tokens.push(new css.EOFToken()); + } catch (e) { + const newMessage = e.message + ` while parsing selector "${selector}"`; + const index = (e.stack || '').indexOf(e.message); + if (index !== -1) e.stack = e.stack.substring(0, index) + newMessage + e.stack.substring(index + e.message.length); + e.message = newMessage; + throw e; + } + + const unsupportedToken = tokens.find(token => { + return token instanceof css.AtKeywordToken || token instanceof css.BadStringToken || token instanceof css.BadURLToken || token instanceof css.ColumnToken || token instanceof css.CDOToken || token instanceof css.CDCToken || token instanceof css.SemicolonToken || token instanceof css.OpenCurlyToken || token instanceof css.CloseCurlyToken || token instanceof css.URLToken || token instanceof css.PercentageToken; + }); + if (unsupportedToken) throw new Error(`Unsupported token "${unsupportedToken.toSource()}" while parsing selector "${selector}"`); + let pos = 0; + const names = new Set(); + + function unexpected() { + return new Error(`Unexpected token "${tokens[pos].toSource()}" while parsing selector "${selector}"`); + } + + function skipWhitespace() { + while (tokens[pos] instanceof css.WhitespaceToken) pos++; + } + + function isIdent(p = pos) { + return tokens[p] instanceof css.IdentToken; + } + + function isString(p = pos) { + return tokens[p] instanceof css.StringToken; + } + + function isNumber(p = pos) { + return tokens[p] instanceof css.NumberToken; + } + + function isComma(p = pos) { + return tokens[p] instanceof css.CommaToken; + } + + function isCloseParen(p = pos) { + return tokens[p] instanceof css.CloseParenToken; + } + + function isStar(p = pos) { + return tokens[p] instanceof css.DelimToken && tokens[p].value === '*'; + } + + function isEOF(p = pos) { + return tokens[p] instanceof css.EOFToken; + } + + function isClauseCombinator(p = pos) { + return tokens[p] instanceof css.DelimToken && ['>', '+', '~'].includes(tokens[p].value); + } + + function isSelectorClauseEnd(p = pos) { + return isComma(p) || isCloseParen(p) || isEOF(p) || isClauseCombinator(p) || tokens[p] instanceof css.WhitespaceToken; + } + + function consumeFunctionArguments() { + const result = [consumeArgument()]; + + while (true) { + skipWhitespace(); + if (!isComma()) break; + pos++; + result.push(consumeArgument()); + } + + return result; + } + + function consumeArgument() { + skipWhitespace(); + if (isNumber()) return tokens[pos++].value; + if (isString()) return tokens[pos++].value; + return consumeComplexSelector(); + } + + function consumeComplexSelector() { + skipWhitespace(); + const result = { + simples: [{ + selector: consumeSimpleSelector(), + combinator: '' + }] + }; + + while (true) { + skipWhitespace(); + + if (isClauseCombinator()) { + result.simples[result.simples.length - 1].combinator = tokens[pos++].value; + skipWhitespace(); + } else if (isSelectorClauseEnd()) { + break; + } + + result.simples.push({ + combinator: '', + selector: consumeSimpleSelector() + }); + } + + return result; + } + + function consumeSimpleSelector() { + let rawCSSString = ''; + const functions = []; + + while (!isSelectorClauseEnd()) { + if (isIdent() || isStar()) { + rawCSSString += tokens[pos++].toSource(); + } else if (tokens[pos] instanceof css.HashToken) { + rawCSSString += tokens[pos++].toSource(); + } else if (tokens[pos] instanceof css.DelimToken && tokens[pos].value === '.') { + pos++; + if (isIdent()) rawCSSString += '.' + tokens[pos++].toSource();else throw unexpected(); + } else if (tokens[pos] instanceof css.ColonToken) { + pos++; + + if (isIdent()) { + if (!customNames.has(tokens[pos].value.toLowerCase())) { + rawCSSString += ':' + tokens[pos++].toSource(); + } else { + const name = tokens[pos++].value.toLowerCase(); + functions.push({ + name, + args: [] + }); + names.add(name); + } + } else if (tokens[pos] instanceof css.FunctionToken) { + const name = tokens[pos++].value.toLowerCase(); + + if (!customNames.has(name)) { + rawCSSString += `:${name}(${consumeBuiltinFunctionArguments()})`; + } else { + functions.push({ + name, + args: consumeFunctionArguments() + }); + names.add(name); + } + + skipWhitespace(); + if (!isCloseParen()) throw unexpected(); + pos++; + } else { + throw unexpected(); + } + } else if (tokens[pos] instanceof css.OpenSquareToken) { + rawCSSString += '['; + pos++; + + while (!(tokens[pos] instanceof css.CloseSquareToken) && !isEOF()) rawCSSString += tokens[pos++].toSource(); + + if (!(tokens[pos] instanceof css.CloseSquareToken)) throw unexpected(); + rawCSSString += ']'; + pos++; + } else { + throw unexpected(); + } + } + + if (!rawCSSString && !functions.length) throw unexpected(); + return { + css: rawCSSString || undefined, + functions + }; + } + + function consumeBuiltinFunctionArguments() { + let s = ''; + + while (!isCloseParen() && !isEOF()) s += tokens[pos++].toSource(); + + return s; + } + + const result = consumeFunctionArguments(); + if (!isEOF()) throw new Error(`Error while parsing selector "${selector}"`); + if (result.some(arg => typeof arg !== 'object' || !('simples' in arg))) throw new Error(`Error while parsing selector "${selector}"`); + return { + selector: result, + names: Array.from(names) + }; +} + +function serializeSelector(args) { + return args.map(arg => { + if (typeof arg === 'string') return `"${arg}"`; + if (typeof arg === 'number') return String(arg); + return arg.simples.map(({ + selector, + combinator + }) => { + let s = selector.css || ''; + s = s + selector.functions.map(func => `:${func.name}(${serializeSelector(func.args)})`).join(''); + if (combinator) s += ' ' + combinator; + return s; + }).join(' '); + }).join(', '); +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/cssTokenizer.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/cssTokenizer.js new file mode 100644 index 00000000..e77ddf1d --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/cssTokenizer.js @@ -0,0 +1,950 @@ +/* + * Original at https://github.com/tabatkins/parse-css + * licensed under http://creativecommons.org/publicdomain/zero/1.0/ + * + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ + +// Changes from https://github.com/tabatkins/parse-css +// - Tabs are replaced with two spaces. +// - Everything not related to tokenizing - below the first exports block - is removed. + +// @ts-nocheck + +(function (root, factory) { + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, + // Rhino, and plain browser loading. + if (typeof define === 'function' && define.amd) { + define(['exports'], factory); + } else if (typeof exports !== 'undefined') { + factory(exports); + } else { + factory(root); + } +}(this, function (exports) { + +var between = function (num, first, last) { return num >= first && num <= last; } +function digit(code) { return between(code, 0x30,0x39); } +function hexdigit(code) { return digit(code) || between(code, 0x41,0x46) || between(code, 0x61,0x66); } +function uppercaseletter(code) { return between(code, 0x41,0x5a); } +function lowercaseletter(code) { return between(code, 0x61,0x7a); } +function letter(code) { return uppercaseletter(code) || lowercaseletter(code); } +function nonascii(code) { return code >= 0x80; } +function namestartchar(code) { return letter(code) || nonascii(code) || code == 0x5f; } +function namechar(code) { return namestartchar(code) || digit(code) || code == 0x2d; } +function nonprintable(code) { return between(code, 0,8) || code == 0xb || between(code, 0xe,0x1f) || code == 0x7f; } +function newline(code) { return code == 0xa; } +function whitespace(code) { return newline(code) || code == 9 || code == 0x20; } +function badescape(code) { return newline(code) || isNaN(code); } + +var maximumallowedcodepoint = 0x10ffff; + +var InvalidCharacterError = function(message) { + this.message = message; +}; +InvalidCharacterError.prototype = new Error; +InvalidCharacterError.prototype.name = 'InvalidCharacterError'; + +function preprocess(str) { + // Turn a string into an array of code points, + // following the preprocessing cleanup rules. + var codepoints = []; + for(var i = 0; i < str.length; i++) { + var code = str.charCodeAt(i); + if(code == 0xd && str.charCodeAt(i+1) == 0xa) { + code = 0xa; i++; + } + if(code == 0xd || code == 0xc) code = 0xa; + if(code == 0x0) code = 0xfffd; + if(between(code, 0xd800, 0xdbff) && between(str.charCodeAt(i+1), 0xdc00, 0xdfff)) { + // Decode a surrogate pair into an astral codepoint. + var lead = code - 0xd800; + var trail = str.charCodeAt(i+1) - 0xdc00; + code = Math.pow(2, 16) + lead * Math.pow(2, 10) + trail; + i++; + } + codepoints.push(code); + } + return codepoints; +} + +function stringFromCode(code) { + if(code <= 0xffff) return String.fromCharCode(code); + // Otherwise, encode astral char as surrogate pair. + code -= Math.pow(2, 16); + var lead = Math.floor(code/Math.pow(2, 10)) + 0xd800; + var trail = code % Math.pow(2, 10) + 0xdc00; + return String.fromCharCode(lead) + String.fromCharCode(trail); +} + +function tokenize(str) { + str = preprocess(str); + var i = -1; + var tokens = []; + var code; + + // Line number information. + var line = 0; + var column = 0; + // The only use of lastLineLength is in reconsume(). + var lastLineLength = 0; + var incrLineno = function() { + line += 1; + lastLineLength = column; + column = 0; + }; + var locStart = {line:line, column:column}; + + var codepoint = function(i) { + if(i >= str.length) { + return -1; + } + return str[i]; + } + var next = function(num) { + if(num === undefined) + num = 1; + if(num > 3) + throw "Spec Error: no more than three codepoints of lookahead."; + return codepoint(i+num); + }; + var consume = function(num) { + if(num === undefined) + num = 1; + i += num; + code = codepoint(i); + if(newline(code)) incrLineno(); + else column += num; + //console.log('Consume '+i+' '+String.fromCharCode(code) + ' 0x' + code.toString(16)); + return true; + }; + var reconsume = function() { + i -= 1; + if (newline(code)) { + line -= 1; + column = lastLineLength; + } else { + column -= 1; + } + locStart.line = line; + locStart.column = column; + return true; + }; + var eof = function(codepoint) { + if(codepoint === undefined) codepoint = code; + return codepoint == -1; + }; + var donothing = function() {}; + var parseerror = function() { console.log("Parse error at index " + i + ", processing codepoint 0x" + code.toString(16) + ".");return true; }; + + var consumeAToken = function() { + consumeComments(); + consume(); + if(whitespace(code)) { + while(whitespace(next())) consume(); + return new WhitespaceToken; + } + else if(code == 0x22) return consumeAStringToken(); + else if(code == 0x23) { + if(namechar(next()) || areAValidEscape(next(1), next(2))) { + var token = new HashToken(); + if(wouldStartAnIdentifier(next(1), next(2), next(3))) token.type = "id"; + token.value = consumeAName(); + return token; + } else { + return new DelimToken(code); + } + } + else if(code == 0x24) { + if(next() == 0x3d) { + consume(); + return new SuffixMatchToken(); + } else { + return new DelimToken(code); + } + } + else if(code == 0x27) return consumeAStringToken(); + else if(code == 0x28) return new OpenParenToken(); + else if(code == 0x29) return new CloseParenToken(); + else if(code == 0x2a) { + if(next() == 0x3d) { + consume(); + return new SubstringMatchToken(); + } else { + return new DelimToken(code); + } + } + else if(code == 0x2b) { + if(startsWithANumber()) { + reconsume(); + return consumeANumericToken(); + } else { + return new DelimToken(code); + } + } + else if(code == 0x2c) return new CommaToken(); + else if(code == 0x2d) { + if(startsWithANumber()) { + reconsume(); + return consumeANumericToken(); + } else if(next(1) == 0x2d && next(2) == 0x3e) { + consume(2); + return new CDCToken(); + } else if(startsWithAnIdentifier()) { + reconsume(); + return consumeAnIdentlikeToken(); + } else { + return new DelimToken(code); + } + } + else if(code == 0x2e) { + if(startsWithANumber()) { + reconsume(); + return consumeANumericToken(); + } else { + return new DelimToken(code); + } + } + else if(code == 0x3a) return new ColonToken; + else if(code == 0x3b) return new SemicolonToken; + else if(code == 0x3c) { + if(next(1) == 0x21 && next(2) == 0x2d && next(3) == 0x2d) { + consume(3); + return new CDOToken(); + } else { + return new DelimToken(code); + } + } + else if(code == 0x40) { + if(wouldStartAnIdentifier(next(1), next(2), next(3))) { + return new AtKeywordToken(consumeAName()); + } else { + return new DelimToken(code); + } + } + else if(code == 0x5b) return new OpenSquareToken(); + else if(code == 0x5c) { + if(startsWithAValidEscape()) { + reconsume(); + return consumeAnIdentlikeToken(); + } else { + parseerror(); + return new DelimToken(code); + } + } + else if(code == 0x5d) return new CloseSquareToken(); + else if(code == 0x5e) { + if(next() == 0x3d) { + consume(); + return new PrefixMatchToken(); + } else { + return new DelimToken(code); + } + } + else if(code == 0x7b) return new OpenCurlyToken(); + else if(code == 0x7c) { + if(next() == 0x3d) { + consume(); + return new DashMatchToken(); + } else if(next() == 0x7c) { + consume(); + return new ColumnToken(); + } else { + return new DelimToken(code); + } + } + else if(code == 0x7d) return new CloseCurlyToken(); + else if(code == 0x7e) { + if(next() == 0x3d) { + consume(); + return new IncludeMatchToken(); + } else { + return new DelimToken(code); + } + } + else if(digit(code)) { + reconsume(); + return consumeANumericToken(); + } + else if(namestartchar(code)) { + reconsume(); + return consumeAnIdentlikeToken(); + } + else if(eof()) return new EOFToken(); + else return new DelimToken(code); + }; + + var consumeComments = function() { + while(next(1) == 0x2f && next(2) == 0x2a) { + consume(2); + while(true) { + consume(); + if(code == 0x2a && next() == 0x2f) { + consume(); + break; + } else if(eof()) { + parseerror(); + return; + } + } + } + }; + + var consumeANumericToken = function() { + var num = consumeANumber(); + if(wouldStartAnIdentifier(next(1), next(2), next(3))) { + var token = new DimensionToken(); + token.value = num.value; + token.repr = num.repr; + token.type = num.type; + token.unit = consumeAName(); + return token; + } else if(next() == 0x25) { + consume(); + var token = new PercentageToken(); + token.value = num.value; + token.repr = num.repr; + return token; + } else { + var token = new NumberToken(); + token.value = num.value; + token.repr = num.repr; + token.type = num.type; + return token; + } + }; + + var consumeAnIdentlikeToken = function() { + var str = consumeAName(); + if(str.toLowerCase() == "url" && next() == 0x28) { + consume(); + while(whitespace(next(1)) && whitespace(next(2))) consume(); + if(next() == 0x22 || next() == 0x27) { + return new FunctionToken(str); + } else if(whitespace(next()) && (next(2) == 0x22 || next(2) == 0x27)) { + return new FunctionToken(str); + } else { + return consumeAURLToken(); + } + } else if(next() == 0x28) { + consume(); + return new FunctionToken(str); + } else { + return new IdentToken(str); + } + }; + + var consumeAStringToken = function(endingCodePoint) { + if(endingCodePoint === undefined) endingCodePoint = code; + var string = ""; + while(consume()) { + if(code == endingCodePoint || eof()) { + return new StringToken(string); + } else if(newline(code)) { + parseerror(); + reconsume(); + return new BadStringToken(); + } else if(code == 0x5c) { + if(eof(next())) { + donothing(); + } else if(newline(next())) { + consume(); + } else { + string += stringFromCode(consumeEscape()) + } + } else { + string += stringFromCode(code); + } + } + }; + + var consumeAURLToken = function() { + var token = new URLToken(""); + while(whitespace(next())) consume(); + if(eof(next())) return token; + while(consume()) { + if(code == 0x29 || eof()) { + return token; + } else if(whitespace(code)) { + while(whitespace(next())) consume(); + if(next() == 0x29 || eof(next())) { + consume(); + return token; + } else { + consumeTheRemnantsOfABadURL(); + return new BadURLToken(); + } + } else if(code == 0x22 || code == 0x27 || code == 0x28 || nonprintable(code)) { + parseerror(); + consumeTheRemnantsOfABadURL(); + return new BadURLToken(); + } else if(code == 0x5c) { + if(startsWithAValidEscape()) { + token.value += stringFromCode(consumeEscape()); + } else { + parseerror(); + consumeTheRemnantsOfABadURL(); + return new BadURLToken(); + } + } else { + token.value += stringFromCode(code); + } + } + }; + + var consumeEscape = function() { + // Assume the the current character is the \ + // and the next code point is not a newline. + consume(); + if(hexdigit(code)) { + // Consume 1-6 hex digits + var digits = [code]; + for(var total = 0; total < 5; total++) { + if(hexdigit(next())) { + consume(); + digits.push(code); + } else { + break; + } + } + if(whitespace(next())) consume(); + var value = parseInt(digits.map(function(x){return String.fromCharCode(x);}).join(''), 16); + if( value > maximumallowedcodepoint ) value = 0xfffd; + return value; + } else if(eof()) { + return 0xfffd; + } else { + return code; + } + }; + + var areAValidEscape = function(c1, c2) { + if(c1 != 0x5c) return false; + if(newline(c2)) return false; + return true; + }; + var startsWithAValidEscape = function() { + return areAValidEscape(code, next()); + }; + + var wouldStartAnIdentifier = function(c1, c2, c3) { + if(c1 == 0x2d) { + return namestartchar(c2) || c2 == 0x2d || areAValidEscape(c2, c3); + } else if(namestartchar(c1)) { + return true; + } else if(c1 == 0x5c) { + return areAValidEscape(c1, c2); + } else { + return false; + } + }; + var startsWithAnIdentifier = function() { + return wouldStartAnIdentifier(code, next(1), next(2)); + }; + + var wouldStartANumber = function(c1, c2, c3) { + if(c1 == 0x2b || c1 == 0x2d) { + if(digit(c2)) return true; + if(c2 == 0x2e && digit(c3)) return true; + return false; + } else if(c1 == 0x2e) { + if(digit(c2)) return true; + return false; + } else if(digit(c1)) { + return true; + } else { + return false; + } + }; + var startsWithANumber = function() { + return wouldStartANumber(code, next(1), next(2)); + }; + + var consumeAName = function() { + var result = ""; + while(consume()) { + if(namechar(code)) { + result += stringFromCode(code); + } else if(startsWithAValidEscape()) { + result += stringFromCode(consumeEscape()); + } else { + reconsume(); + return result; + } + } + }; + + var consumeANumber = function() { + var repr = []; + var type = "integer"; + if(next() == 0x2b || next() == 0x2d) { + consume(); + repr += stringFromCode(code); + } + while(digit(next())) { + consume(); + repr += stringFromCode(code); + } + if(next(1) == 0x2e && digit(next(2))) { + consume(); + repr += stringFromCode(code); + consume(); + repr += stringFromCode(code); + type = "number"; + while(digit(next())) { + consume(); + repr += stringFromCode(code); + } + } + var c1 = next(1), c2 = next(2), c3 = next(3); + if((c1 == 0x45 || c1 == 0x65) && digit(c2)) { + consume(); + repr += stringFromCode(code); + consume(); + repr += stringFromCode(code); + type = "number"; + while(digit(next())) { + consume(); + repr += stringFromCode(code); + } + } else if((c1 == 0x45 || c1 == 0x65) && (c2 == 0x2b || c2 == 0x2d) && digit(c3)) { + consume(); + repr += stringFromCode(code); + consume(); + repr += stringFromCode(code); + consume(); + repr += stringFromCode(code); + type = "number"; + while(digit(next())) { + consume(); + repr += stringFromCode(code); + } + } + var value = convertAStringToANumber(repr); + return {type:type, value:value, repr:repr}; + }; + + var convertAStringToANumber = function(string) { + // CSS's number rules are identical to JS, afaik. + return +string; + }; + + var consumeTheRemnantsOfABadURL = function() { + while(consume()) { + if(code == 0x29 || eof()) { + return; + } else if(startsWithAValidEscape()) { + consumeEscape(); + donothing(); + } else { + donothing(); + } + } + }; + + + + var iterationCount = 0; + while(!eof(next())) { + tokens.push(consumeAToken()); + iterationCount++; + if(iterationCount > str.length*2) return "I'm infinite-looping!"; + } + return tokens; +} + +function CSSParserToken() { throw "Abstract Base Class"; } +CSSParserToken.prototype.toJSON = function() { + return {token: this.tokenType}; +} +CSSParserToken.prototype.toString = function() { return this.tokenType; } +CSSParserToken.prototype.toSource = function() { return ''+this; } + +function BadStringToken() { return this; } +BadStringToken.prototype = Object.create(CSSParserToken.prototype); +BadStringToken.prototype.tokenType = "BADSTRING"; + +function BadURLToken() { return this; } +BadURLToken.prototype = Object.create(CSSParserToken.prototype); +BadURLToken.prototype.tokenType = "BADURL"; + +function WhitespaceToken() { return this; } +WhitespaceToken.prototype = Object.create(CSSParserToken.prototype); +WhitespaceToken.prototype.tokenType = "WHITESPACE"; +WhitespaceToken.prototype.toString = function() { return "WS"; } +WhitespaceToken.prototype.toSource = function() { return " "; } + +function CDOToken() { return this; } +CDOToken.prototype = Object.create(CSSParserToken.prototype); +CDOToken.prototype.tokenType = "CDO"; +CDOToken.prototype.toSource = function() { return ""; } + +function ColonToken() { return this; } +ColonToken.prototype = Object.create(CSSParserToken.prototype); +ColonToken.prototype.tokenType = ":"; + +function SemicolonToken() { return this; } +SemicolonToken.prototype = Object.create(CSSParserToken.prototype); +SemicolonToken.prototype.tokenType = ";"; + +function CommaToken() { return this; } +CommaToken.prototype = Object.create(CSSParserToken.prototype); +CommaToken.prototype.tokenType = ","; + +function GroupingToken() { throw "Abstract Base Class"; } +GroupingToken.prototype = Object.create(CSSParserToken.prototype); + +function OpenCurlyToken() { this.value = "{"; this.mirror = "}"; return this; } +OpenCurlyToken.prototype = Object.create(GroupingToken.prototype); +OpenCurlyToken.prototype.tokenType = "{"; + +function CloseCurlyToken() { this.value = "}"; this.mirror = "{"; return this; } +CloseCurlyToken.prototype = Object.create(GroupingToken.prototype); +CloseCurlyToken.prototype.tokenType = "}"; + +function OpenSquareToken() { this.value = "["; this.mirror = "]"; return this; } +OpenSquareToken.prototype = Object.create(GroupingToken.prototype); +OpenSquareToken.prototype.tokenType = "["; + +function CloseSquareToken() { this.value = "]"; this.mirror = "["; return this; } +CloseSquareToken.prototype = Object.create(GroupingToken.prototype); +CloseSquareToken.prototype.tokenType = "]"; + +function OpenParenToken() { this.value = "("; this.mirror = ")"; return this; } +OpenParenToken.prototype = Object.create(GroupingToken.prototype); +OpenParenToken.prototype.tokenType = "("; + +function CloseParenToken() { this.value = ")"; this.mirror = "("; return this; } +CloseParenToken.prototype = Object.create(GroupingToken.prototype); +CloseParenToken.prototype.tokenType = ")"; + +function IncludeMatchToken() { return this; } +IncludeMatchToken.prototype = Object.create(CSSParserToken.prototype); +IncludeMatchToken.prototype.tokenType = "~="; + +function DashMatchToken() { return this; } +DashMatchToken.prototype = Object.create(CSSParserToken.prototype); +DashMatchToken.prototype.tokenType = "|="; + +function PrefixMatchToken() { return this; } +PrefixMatchToken.prototype = Object.create(CSSParserToken.prototype); +PrefixMatchToken.prototype.tokenType = "^="; + +function SuffixMatchToken() { return this; } +SuffixMatchToken.prototype = Object.create(CSSParserToken.prototype); +SuffixMatchToken.prototype.tokenType = "$="; + +function SubstringMatchToken() { return this; } +SubstringMatchToken.prototype = Object.create(CSSParserToken.prototype); +SubstringMatchToken.prototype.tokenType = "*="; + +function ColumnToken() { return this; } +ColumnToken.prototype = Object.create(CSSParserToken.prototype); +ColumnToken.prototype.tokenType = "||"; + +function EOFToken() { return this; } +EOFToken.prototype = Object.create(CSSParserToken.prototype); +EOFToken.prototype.tokenType = "EOF"; +EOFToken.prototype.toSource = function() { return ""; } + +function DelimToken(code) { + this.value = stringFromCode(code); + return this; +} +DelimToken.prototype = Object.create(CSSParserToken.prototype); +DelimToken.prototype.tokenType = "DELIM"; +DelimToken.prototype.toString = function() { return "DELIM("+this.value+")"; } +DelimToken.prototype.toJSON = function() { + var json = this.constructor.prototype.constructor.prototype.toJSON.call(this); + json.value = this.value; + return json; +} +DelimToken.prototype.toSource = function() { + if(this.value == "\\") + return "\\\n"; + else + return this.value; +} + +function StringValuedToken() { throw "Abstract Base Class"; } +StringValuedToken.prototype = Object.create(CSSParserToken.prototype); +StringValuedToken.prototype.ASCIIMatch = function(str) { + return this.value.toLowerCase() == str.toLowerCase(); +} +StringValuedToken.prototype.toJSON = function() { + var json = this.constructor.prototype.constructor.prototype.toJSON.call(this); + json.value = this.value; + return json; +} + +function IdentToken(val) { + this.value = val; +} +IdentToken.prototype = Object.create(StringValuedToken.prototype); +IdentToken.prototype.tokenType = "IDENT"; +IdentToken.prototype.toString = function() { return "IDENT("+this.value+")"; } +IdentToken.prototype.toSource = function() { + return escapeIdent(this.value); +} + +function FunctionToken(val) { + this.value = val; + this.mirror = ")"; +} +FunctionToken.prototype = Object.create(StringValuedToken.prototype); +FunctionToken.prototype.tokenType = "FUNCTION"; +FunctionToken.prototype.toString = function() { return "FUNCTION("+this.value+")"; } +FunctionToken.prototype.toSource = function() { + return escapeIdent(this.value) + "("; +} + +function AtKeywordToken(val) { + this.value = val; +} +AtKeywordToken.prototype = Object.create(StringValuedToken.prototype); +AtKeywordToken.prototype.tokenType = "AT-KEYWORD"; +AtKeywordToken.prototype.toString = function() { return "AT("+this.value+")"; } +AtKeywordToken.prototype.toSource = function() { + return "@" + escapeIdent(this.value); +} + +function HashToken(val) { + this.value = val; + this.type = "unrestricted"; +} +HashToken.prototype = Object.create(StringValuedToken.prototype); +HashToken.prototype.tokenType = "HASH"; +HashToken.prototype.toString = function() { return "HASH("+this.value+")"; } +HashToken.prototype.toJSON = function() { + var json = this.constructor.prototype.constructor.prototype.toJSON.call(this); + json.value = this.value; + json.type = this.type; + return json; +} +HashToken.prototype.toSource = function() { + if(this.type == "id") { + return "#" + escapeIdent(this.value); + } else { + return "#" + escapeHash(this.value); + } +} + +function StringToken(val) { + this.value = val; +} +StringToken.prototype = Object.create(StringValuedToken.prototype); +StringToken.prototype.tokenType = "STRING"; +StringToken.prototype.toString = function() { + return '"' + escapeString(this.value) + '"'; +} + +function URLToken(val) { + this.value = val; +} +URLToken.prototype = Object.create(StringValuedToken.prototype); +URLToken.prototype.tokenType = "URL"; +URLToken.prototype.toString = function() { return "URL("+this.value+")"; } +URLToken.prototype.toSource = function() { + return 'url("' + escapeString(this.value) + '")'; +} + +function NumberToken() { + this.value = null; + this.type = "integer"; + this.repr = ""; +} +NumberToken.prototype = Object.create(CSSParserToken.prototype); +NumberToken.prototype.tokenType = "NUMBER"; +NumberToken.prototype.toString = function() { + if(this.type == "integer") + return "INT("+this.value+")"; + return "NUMBER("+this.value+")"; +} +NumberToken.prototype.toJSON = function() { + var json = this.constructor.prototype.constructor.prototype.toJSON.call(this); + json.value = this.value; + json.type = this.type; + json.repr = this.repr; + return json; +} +NumberToken.prototype.toSource = function() { return this.repr; }; + +function PercentageToken() { + this.value = null; + this.repr = ""; +} +PercentageToken.prototype = Object.create(CSSParserToken.prototype); +PercentageToken.prototype.tokenType = "PERCENTAGE"; +PercentageToken.prototype.toString = function() { return "PERCENTAGE("+this.value+")"; } +PercentageToken.prototype.toJSON = function() { + var json = this.constructor.prototype.constructor.prototype.toJSON.call(this); + json.value = this.value; + json.repr = this.repr; + return json; +} +PercentageToken.prototype.toSource = function() { return this.repr + "%"; } + +function DimensionToken() { + this.value = null; + this.type = "integer"; + this.repr = ""; + this.unit = ""; +} +DimensionToken.prototype = Object.create(CSSParserToken.prototype); +DimensionToken.prototype.tokenType = "DIMENSION"; +DimensionToken.prototype.toString = function() { return "DIM("+this.value+","+this.unit+")"; } +DimensionToken.prototype.toJSON = function() { + var json = this.constructor.prototype.constructor.prototype.toJSON.call(this); + json.value = this.value; + json.type = this.type; + json.repr = this.repr; + json.unit = this.unit; + return json; +} +DimensionToken.prototype.toSource = function() { + var source = this.repr; + var unit = escapeIdent(this.unit); + if(unit[0].toLowerCase() == "e" && (unit[1] == "-" || between(unit.charCodeAt(1), 0x30, 0x39))) { + // Unit is ambiguous with scinot + // Remove the leading "e", replace with escape. + unit = "\\65 " + unit.slice(1, unit.length); + } + return source+unit; +} + +function escapeIdent(string) { + string = ''+string; + var result = ''; + var firstcode = string.charCodeAt(0); + for(var i = 0; i < string.length; i++) { + var code = string.charCodeAt(i); + if(code == 0x0) { + throw new InvalidCharacterError('Invalid character: the input contains U+0000.'); + } + + if( + between(code, 0x1, 0x1f) || code == 0x7f || + (i == 0 && between(code, 0x30, 0x39)) || + (i == 1 && between(code, 0x30, 0x39) && firstcode == 0x2d) + ) { + result += '\\' + code.toString(16) + ' '; + } else if( + code >= 0x80 || + code == 0x2d || + code == 0x5f || + between(code, 0x30, 0x39) || + between(code, 0x41, 0x5a) || + between(code, 0x61, 0x7a) + ) { + result += string[i]; + } else { + result += '\\' + string[i]; + } + } + return result; +} + +function escapeHash(string) { + // Escapes the contents of "unrestricted"-type hash tokens. + // Won't preserve the ID-ness of "id"-type hash tokens; + // use escapeIdent() for that. + string = ''+string; + var result = ''; + var firstcode = string.charCodeAt(0); + for(var i = 0; i < string.length; i++) { + var code = string.charCodeAt(i); + if(code == 0x0) { + throw new InvalidCharacterError('Invalid character: the input contains U+0000.'); + } + + if( + code >= 0x80 || + code == 0x2d || + code == 0x5f || + between(code, 0x30, 0x39) || + between(code, 0x41, 0x5a) || + between(code, 0x61, 0x7a) + ) { + result += string[i]; + } else { + result += '\\' + code.toString(16) + ' '; + } + } + return result; +} + +function escapeString(string) { + string = ''+string; + var result = ''; + for(var i = 0; i < string.length; i++) { + var code = string.charCodeAt(i); + + if(code == 0x0) { + throw new InvalidCharacterError('Invalid character: the input contains U+0000.'); + } + + if(between(code, 0x1, 0x1f) || code == 0x7f) { + result += '\\' + code.toString(16) + ' '; + } else if(code == 0x22 || code == 0x5c) { + result += '\\' + string[i]; + } else { + result += string[i]; + } + } + return result; +} + +// Exportation. +exports.tokenize = tokenize; +exports.IdentToken = IdentToken; +exports.FunctionToken = FunctionToken; +exports.AtKeywordToken = AtKeywordToken; +exports.HashToken = HashToken; +exports.StringToken = StringToken; +exports.BadStringToken = BadStringToken; +exports.URLToken = URLToken; +exports.BadURLToken = BadURLToken; +exports.DelimToken = DelimToken; +exports.NumberToken = NumberToken; +exports.PercentageToken = PercentageToken; +exports.DimensionToken = DimensionToken; +exports.IncludeMatchToken = IncludeMatchToken; +exports.DashMatchToken = DashMatchToken; +exports.PrefixMatchToken = PrefixMatchToken; +exports.SuffixMatchToken = SuffixMatchToken; +exports.SubstringMatchToken = SubstringMatchToken; +exports.ColumnToken = ColumnToken; +exports.WhitespaceToken = WhitespaceToken; +exports.CDOToken = CDOToken; +exports.CDCToken = CDCToken; +exports.ColonToken = ColonToken; +exports.SemicolonToken = SemicolonToken; +exports.CommaToken = CommaToken; +exports.OpenParenToken = OpenParenToken; +exports.CloseParenToken = CloseParenToken; +exports.OpenSquareToken = OpenSquareToken; +exports.CloseSquareToken = CloseSquareToken; +exports.OpenCurlyToken = OpenCurlyToken; +exports.CloseCurlyToken = CloseCurlyToken; +exports.EOFToken = EOFToken; +exports.CSSParserToken = CSSParserToken; +exports.GroupingToken = GroupingToken; + +})); diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/domErrors.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/domErrors.js new file mode 100644 index 00000000..430afc16 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/domErrors.js @@ -0,0 +1,5 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/protocolError.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/protocolError.js new file mode 100644 index 00000000..59c1ec3b --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/protocolError.js @@ -0,0 +1,37 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isSessionClosedError = isSessionClosedError; +exports.ProtocolError = void 0; + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +class ProtocolError extends Error { + constructor(sessionClosed, message) { + super(message); + this.sessionClosed = void 0; + this.sessionClosed = sessionClosed || false; + } + +} + +exports.ProtocolError = ProtocolError; + +function isSessionClosedError(e) { + return e instanceof ProtocolError && e.sessionClosed; +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/selectorParser.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/selectorParser.js new file mode 100644 index 00000000..73400a93 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/selectorParser.js @@ -0,0 +1,130 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.parseSelector = parseSelector; +exports.customCSSNames = void 0; + +var _cssParser = require("./cssParser"); + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +const customCSSNames = new Set(['not', 'is', 'where', 'has', 'scope', 'light', 'visible', 'text', 'text-matches', 'text-is', 'has-text', 'above', 'below', 'right-of', 'left-of', 'near', 'nth-match']); +exports.customCSSNames = customCSSNames; + +function parseSelector(selector) { + const result = parseSelectorString(selector); + const parts = result.parts.map(part => { + if (part.name === 'css' || part.name === 'css:light') { + if (part.name === 'css:light') part.body = ':light(' + part.body + ')'; + const parsedCSS = (0, _cssParser.parseCSS)(part.body, customCSSNames); + return { + name: 'css', + body: parsedCSS.selector + }; + } + + return part; + }); + return { + selector, + capture: result.capture, + parts + }; +} + +function parseSelectorString(selector) { + let index = 0; + let quote; + let start = 0; + const result = { + parts: [] + }; + + const append = () => { + const part = selector.substring(start, index).trim(); + const eqIndex = part.indexOf('='); + let name; + let body; + + if (eqIndex !== -1 && part.substring(0, eqIndex).trim().match(/^[a-zA-Z_0-9-+:*]+$/)) { + name = part.substring(0, eqIndex).trim(); + body = part.substring(eqIndex + 1); + } else if (part.length > 1 && part[0] === '"' && part[part.length - 1] === '"') { + name = 'text'; + body = part; + } else if (part.length > 1 && part[0] === "'" && part[part.length - 1] === "'") { + name = 'text'; + body = part; + } else if (/^\(*\/\//.test(part) || part.startsWith('..')) { + // If selector starts with '//' or '//' prefixed with multiple opening + // parenthesis, consider xpath. @see https://github.com/microsoft/playwright/issues/817 + // If selector starts with '..', consider xpath as well. + name = 'xpath'; + body = part; + } else { + name = 'css'; + body = part; + } + + let capture = false; + + if (name[0] === '*') { + capture = true; + name = name.substring(1); + } + + result.parts.push({ + name, + body + }); + + if (capture) { + if (result.capture !== undefined) throw new Error(`Only one of the selectors can capture using * modifier`); + result.capture = result.parts.length - 1; + } + }; + + if (!selector.includes('>>')) { + index = selector.length; + append(); + return result; + } + + while (index < selector.length) { + const c = selector[index]; + + if (c === '\\' && index + 1 < selector.length) { + index += 2; + } else if (c === quote) { + quote = undefined; + index++; + } else if (!quote && (c === '"' || c === '\'' || c === '`')) { + quote = c; + index++; + } else if (!quote && c === '>' && selector[index + 1] === '>') { + append(); + index += 2; + start = index; + } else { + index++; + } + } + + append(); + return result; +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/utilityScriptSerializers.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/utilityScriptSerializers.js new file mode 100644 index 00000000..48f75b6c --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/common/utilityScriptSerializers.js @@ -0,0 +1,166 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.parseEvaluationResultValue = parseEvaluationResultValue; +exports.serializeAsCallArgument = serializeAsCallArgument; + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +function isRegExp(obj) { + return obj instanceof RegExp || Object.prototype.toString.call(obj) === '[object RegExp]'; +} + +function isDate(obj) { + return obj instanceof Date || Object.prototype.toString.call(obj) === '[object Date]'; +} + +function isError(obj) { + return obj instanceof Error || obj && obj.__proto__ && obj.__proto__.name === 'Error'; +} + +function parseEvaluationResultValue(value, handles = []) { + if (Object.is(value, undefined)) return undefined; + + if (typeof value === 'object' && value) { + if ('v' in value) { + if (value.v === 'undefined') return undefined; + if (value.v === 'null') return null; + if (value.v === 'NaN') return NaN; + if (value.v === 'Infinity') return Infinity; + if (value.v === '-Infinity') return -Infinity; + if (value.v === '-0') return -0; + return undefined; + } + + if ('d' in value) return new Date(value.d); + if ('r' in value) return new RegExp(value.r.p, value.r.f); + if ('a' in value) return value.a.map(a => parseEvaluationResultValue(a, handles)); + + if ('o' in value) { + const result = {}; + + for (const { + k, + v + } of value.o) result[k] = parseEvaluationResultValue(v, handles); + + return result; + } + + if ('h' in value) return handles[value.h]; + } + + return value; +} + +function serializeAsCallArgument(value, handleSerializer) { + return serialize(value, handleSerializer, new Set()); +} + +function serialize(value, handleSerializer, visited) { + const result = handleSerializer(value); + if ('fallThrough' in result) value = result.fallThrough;else return result; + if (visited.has(value)) throw new Error('Argument is a circular structure'); + if (typeof value === 'symbol') return { + v: 'undefined' + }; + if (Object.is(value, undefined)) return { + v: 'undefined' + }; + if (Object.is(value, null)) return { + v: 'null' + }; + if (Object.is(value, NaN)) return { + v: 'NaN' + }; + if (Object.is(value, Infinity)) return { + v: 'Infinity' + }; + if (Object.is(value, -Infinity)) return { + v: '-Infinity' + }; + if (Object.is(value, -0)) return { + v: '-0' + }; + if (typeof value === 'boolean') return value; + if (typeof value === 'number') return value; + if (typeof value === 'string') return value; + + if (isError(value)) { + const error = value; + + if ('captureStackTrace' in global.Error) { + // v8 + return error.stack || ''; + } + + return `${error.name}: ${error.message}\n${error.stack}`; + } + + if (isDate(value)) return { + d: value.toJSON() + }; + if (isRegExp(value)) return { + r: { + p: value.source, + f: value.flags + } + }; + + if (Array.isArray(value)) { + const a = []; + visited.add(value); + + for (let i = 0; i < value.length; ++i) a.push(serialize(value[i], handleSerializer, visited)); + + visited.delete(value); + return { + a + }; + } + + if (typeof value === 'object') { + const o = []; + visited.add(value); + + for (const name of Object.keys(value)) { + let item; + + try { + item = value[name]; + } catch (e) { + continue; // native bindings will throw sometimes + } + + if (name === 'toJSON' && typeof item === 'function') o.push({ + k: name, + v: { + o: [] + } + });else o.push({ + k: name, + v: serialize(item, handleSerializer, visited) + }); + } + + visited.delete(value); + return { + o + }; + } +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/console.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/console.js new file mode 100644 index 00000000..12b692ad --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/console.js @@ -0,0 +1,61 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ConsoleMessage = void 0; + +var _instrumentation = require("./instrumentation"); + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +class ConsoleMessage extends _instrumentation.SdkObject { + constructor(parent, type, text, args, location) { + super(parent, 'console-message'); + this._type = void 0; + this._text = void 0; + this._args = void 0; + this._location = void 0; + this._type = type; + this._text = text; + this._args = args; + this._location = location || { + url: '', + lineNumber: 0, + columnNumber: 0 + }; + } + + type() { + return this._type; + } + + text() { + if (this._text === undefined) this._text = this._args.map(arg => arg.preview()).join(' '); + return this._text; + } + + args() { + return this._args; + } + + location() { + return this._location; + } + +} + +exports.ConsoleMessage = ConsoleMessage; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/deviceDescriptors.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/deviceDescriptors.js new file mode 100644 index 00000000..62806409 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/deviceDescriptors.js @@ -0,0 +1,21 @@ +/** + * Copyright 2017 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ + +/** + * @type {import('./types').Devices} + */ +module.exports = require("./deviceDescriptorsSource.json") diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/deviceDescriptorsSource.json b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/deviceDescriptorsSource.json new file mode 100644 index 00000000..bd93132a --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/deviceDescriptorsSource.json @@ -0,0 +1,1249 @@ +{ + "Blackberry PlayBook": { + "userAgent": "Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/15.0 Safari/536.2+", + "viewport": { + "width": 600, + "height": 1024 + }, + "deviceScaleFactor": 1, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Blackberry PlayBook landscape": { + "userAgent": "Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/15.0 Safari/536.2+", + "viewport": { + "width": 1024, + "height": 600 + }, + "deviceScaleFactor": 1, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "BlackBerry Z30": { + "userAgent": "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/15.0 Mobile Safari/537.10+", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "BlackBerry Z30 landscape": { + "userAgent": "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/15.0 Mobile Safari/537.10+", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy Note 3": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.0 Mobile Safari/534.30", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy Note 3 landscape": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.0 Mobile Safari/534.30", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy Note II": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.0 Mobile Safari/534.30", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy Note II landscape": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.0 Mobile Safari/534.30", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy S III": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.0 Mobile Safari/534.30", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy S III landscape": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.0 Mobile Safari/534.30", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy S5": { + "userAgent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy S5 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy S8": { + "userAgent": "Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 360, + "height": 740 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy S8 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 740, + "height": 360 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy S9+": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 320, + "height": 658 + }, + "deviceScaleFactor": 4.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy S9+ landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 658, + "height": 320 + }, + "deviceScaleFactor": 4.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy Tab S4": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Safari/537.36", + "viewport": { + "width": 712, + "height": 1138 + }, + "deviceScaleFactor": 2.25, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy Tab S4 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Safari/537.36", + "viewport": { + "width": 1138, + "height": 712 + }, + "deviceScaleFactor": 2.25, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "iPad (gen 6)": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 768, + "height": 1024 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad (gen 6) landscape": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 1024, + "height": 768 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad (gen 7)": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 810, + "height": 1080 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad (gen 7) landscape": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 1080, + "height": 810 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad Mini": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 768, + "height": 1024 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad Mini landscape": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 1024, + "height": 768 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad Pro 11": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 834, + "height": 1194 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad Pro 11 landscape": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 1194, + "height": 834 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 6": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 375, + "height": 667 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 6 landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 667, + "height": 375 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 6 Plus": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 414, + "height": 736 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 6 Plus landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 736, + "height": 414 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 7": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 375, + "height": 667 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 7 landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 667, + "height": 375 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 7 Plus": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 414, + "height": 736 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 7 Plus landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 736, + "height": 414 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 8": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 375, + "height": 667 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 8 landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 667, + "height": 375 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 8 Plus": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 414, + "height": 736 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 8 Plus landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 736, + "height": 414 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone SE": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/15.0 Mobile/14E304 Safari/602.1", + "viewport": { + "width": 320, + "height": 568 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone SE landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/15.0 Mobile/14E304 Safari/602.1", + "viewport": { + "width": 568, + "height": 320 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone X": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 375, + "height": 812 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone X landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 812, + "height": 375 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone XR": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 414, + "height": 896 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone XR landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 896, + "height": 414 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 11": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 414, + "height": 896 + }, + "viewport": { + "width": 414, + "height": 715 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 11 landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 414, + "height": 896 + }, + "viewport": { + "width": 800, + "height": 364 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 11 Pro": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 375, + "height": 812 + }, + "viewport": { + "width": 375, + "height": 635 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 11 Pro landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 375, + "height": 812 + }, + "viewport": { + "width": 724, + "height": 325 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 11 Pro Max": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 414, + "height": 896 + }, + "viewport": { + "width": 414, + "height": 715 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 11 Pro Max landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 414, + "height": 896 + }, + "viewport": { + "width": 808, + "height": 364 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 12": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 390, + "height": 844 + }, + "viewport": { + "width": 390, + "height": 664 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 12 landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 390, + "height": 844 + }, + "viewport": { + "width": 750, + "height": 340 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 12 Pro": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 390, + "height": 844 + }, + "viewport": { + "width": 390, + "height": 664 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 12 Pro landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 390, + "height": 844 + }, + "viewport": { + "width": 750, + "height": 340 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 12 Pro Max": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 428, + "height": 926 + }, + "viewport": { + "width": 428, + "height": 746 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 12 Pro Max landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 428, + "height": 926 + }, + "viewport": { + "width": 832, + "height": 378 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "JioPhone 2": { + "userAgent": "Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:89.0 Gecko/48.0 Firefox/92.0 KAIOS/2.5", + "viewport": { + "width": 240, + "height": 320 + }, + "deviceScaleFactor": 1, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "firefox" + }, + "JioPhone 2 landscape": { + "userAgent": "Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:89.0 Gecko/48.0 Firefox/92.0 KAIOS/2.5", + "viewport": { + "width": 320, + "height": 240 + }, + "deviceScaleFactor": 1, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "firefox" + }, + "Kindle Fire HDX": { + "userAgent": "Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true", + "viewport": { + "width": 800, + "height": 1280 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Kindle Fire HDX landscape": { + "userAgent": "Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true", + "viewport": { + "width": 1280, + "height": 800 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "LG Optimus L70": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 384, + "height": 640 + }, + "deviceScaleFactor": 1.25, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "LG Optimus L70 landscape": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 640, + "height": 384 + }, + "deviceScaleFactor": 1.25, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Microsoft Lumia 550": { + "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36 Edge/14.14263", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Microsoft Lumia 550 landscape": { + "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36 Edge/14.14263", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Microsoft Lumia 950": { + "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36 Edge/14.14263", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 4, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Microsoft Lumia 950 landscape": { + "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36 Edge/14.14263", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 4, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 10": { + "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Safari/537.36", + "viewport": { + "width": 800, + "height": 1280 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 10 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Safari/537.36", + "viewport": { + "width": 1280, + "height": 800 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 4": { + "userAgent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 384, + "height": 640 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 4 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 640, + "height": 384 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 5": { + "userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 5 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 5X": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 412, + "height": 732 + }, + "deviceScaleFactor": 2.625, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 5X landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 732, + "height": 412 + }, + "deviceScaleFactor": 2.625, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 6": { + "userAgent": "Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 412, + "height": 732 + }, + "deviceScaleFactor": 3.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 6 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 732, + "height": 412 + }, + "deviceScaleFactor": 3.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 6P": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 412, + "height": 732 + }, + "deviceScaleFactor": 3.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 6P landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 732, + "height": 412 + }, + "deviceScaleFactor": 3.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 7": { + "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Safari/537.36", + "viewport": { + "width": 600, + "height": 960 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 7 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Safari/537.36", + "viewport": { + "width": 960, + "height": 600 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nokia Lumia 520": { + "userAgent": "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)", + "viewport": { + "width": 320, + "height": 533 + }, + "deviceScaleFactor": 1.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nokia Lumia 520 landscape": { + "userAgent": "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)", + "viewport": { + "width": 533, + "height": 320 + }, + "deviceScaleFactor": 1.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nokia N9": { + "userAgent": "Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13", + "viewport": { + "width": 480, + "height": 854 + }, + "deviceScaleFactor": 1, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Nokia N9 landscape": { + "userAgent": "Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13", + "viewport": { + "width": 854, + "height": 480 + }, + "deviceScaleFactor": 1, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Pixel 2": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 411, + "height": 731 + }, + "deviceScaleFactor": 2.625, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 2 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 731, + "height": 411 + }, + "deviceScaleFactor": 2.625, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 2 XL": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 411, + "height": 823 + }, + "deviceScaleFactor": 3.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 2 XL landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 823, + "height": 411 + }, + "deviceScaleFactor": 3.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 3": { + "userAgent": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 393, + "height": 786 + }, + "deviceScaleFactor": 2.75, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 3 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 786, + "height": 393 + }, + "deviceScaleFactor": 2.75, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 4": { + "userAgent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 353, + "height": 745 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 4 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 745, + "height": 353 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 4a (5G)": { + "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "screen": { + "width": 412, + "height": 892 + }, + "viewport": { + "width": 412, + "height": 765 + }, + "deviceScaleFactor": 2.63, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 4a (5G) landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "screen": { + "height": 892, + "width": 412 + }, + "viewport": { + "width": 840, + "height": 312 + }, + "deviceScaleFactor": 2.63, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 5": { + "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "screen": { + "width": 393, + "height": 851 + }, + "viewport": { + "width": 393, + "height": 727 + }, + "deviceScaleFactor": 2.75, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 5 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "screen": { + "width": 851, + "height": 393 + }, + "viewport": { + "width": 802, + "height": 293 + }, + "deviceScaleFactor": 2.75, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Moto G4": { + "userAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Moto G4 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Mobile Safari/537.36", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Desktop Chrome HiDPI": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Safari/537.36", + "screen": { + "width": 1792, + "height": 1120 + }, + "viewport": { + "width": 1280, + "height": 720 + }, + "deviceScaleFactor": 2, + "isMobile": false, + "hasTouch": false, + "defaultBrowserType": "chromium" + }, + "Desktop Edge HiDPI": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Safari/537.36 Edg/96.0.4641.0", + "screen": { + "width": 1792, + "height": 1120 + }, + "viewport": { + "width": 1280, + "height": 720 + }, + "deviceScaleFactor": 2, + "isMobile": false, + "hasTouch": false, + "defaultBrowserType": "chromium" + }, + "Desktop Firefox HiDPI": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0 Gecko/20100101 Firefox/92.0", + "screen": { + "width": 1792, + "height": 1120 + }, + "viewport": { + "width": 1280, + "height": 720 + }, + "deviceScaleFactor": 2, + "isMobile": false, + "hasTouch": false, + "defaultBrowserType": "firefox" + }, + "Desktop Safari": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15", + "screen": { + "width": 1792, + "height": 1120 + }, + "viewport": { + "width": 1280, + "height": 720 + }, + "deviceScaleFactor": 2, + "isMobile": false, + "hasTouch": false, + "defaultBrowserType": "webkit" + }, + "Desktop Chrome": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Safari/537.36", + "screen": { + "width": 1920, + "height": 1080 + }, + "viewport": { + "width": 1280, + "height": 720 + }, + "deviceScaleFactor": 1, + "isMobile": false, + "hasTouch": false, + "defaultBrowserType": "chromium" + }, + "Desktop Edge": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4641.0 Safari/537.36 Edg/96.0.4641.0", + "screen": { + "width": 1920, + "height": 1080 + }, + "viewport": { + "width": 1280, + "height": 720 + }, + "deviceScaleFactor": 1, + "isMobile": false, + "hasTouch": false, + "defaultBrowserType": "chromium" + }, + "Desktop Firefox": { + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0 Gecko/20100101 Firefox/92.0", + "screen": { + "width": 1920, + "height": 1080 + }, + "viewport": { + "width": 1280, + "height": 720 + }, + "deviceScaleFactor": 1, + "isMobile": false, + "hasTouch": false, + "defaultBrowserType": "firefox" + } +} \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/dialog.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/dialog.js new file mode 100644 index 00000000..a68dcf4e --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/dialog.js @@ -0,0 +1,78 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Dialog = void 0; + +var _utils = require("../utils/utils"); + +var _instrumentation = require("./instrumentation"); + +/** + * Copyright 2017 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * 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. + */ +class Dialog extends _instrumentation.SdkObject { + constructor(page, type, message, onHandle, defaultValue) { + super(page, 'dialog'); + this._page = void 0; + this._type = void 0; + this._message = void 0; + this._onHandle = void 0; + this._handled = false; + this._defaultValue = void 0; + this._page = page; + this._type = type; + this._message = message; + this._onHandle = onHandle; + this._defaultValue = defaultValue || ''; + + this._page._frameManager.dialogDidOpen(); + } + + type() { + return this._type; + } + + message() { + return this._message; + } + + defaultValue() { + return this._defaultValue; + } + + async accept(promptText) { + (0, _utils.assert)(!this._handled, 'Cannot accept dialog which is already handled!'); + this._handled = true; + + this._page._frameManager.dialogWillClose(); + + await this._onHandle(true, promptText); + } + + async dismiss() { + (0, _utils.assert)(!this._handled, 'Cannot dismiss dialog which is already handled!'); + this._handled = true; + + this._page._frameManager.dialogWillClose(); + + await this._onHandle(false); + } + +} + +exports.Dialog = Dialog; \ No newline at end of file diff --git a/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/dom.js b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/dom.js new file mode 100644 index 00000000..1a3e6979 --- /dev/null +++ b/dotfiles/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal/node_modules/playwright/lib/server/dom.js @@ -0,0 +1,1180 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.throwFatalDOMError = throwFatalDOMError; +exports.throwRetargetableDOMError = throwRetargetableDOMError; +exports.assertDone = assertDone; +exports.waitForSelectorTask = waitForSelectorTask; +exports.dispatchEventTask = dispatchEventTask; +exports.textContentTask = textContentTask; +exports.innerTextTask = innerTextTask; +exports.innerHTMLTask = innerHTMLTask; +exports.getAttributeTask = getAttributeTask; +exports.inputValueTask = inputValueTask; +exports.elementStateTask = elementStateTask; +exports.kUnableToAdoptErrorMessage = exports.InjectedScriptPollHandler = exports.ElementHandle = exports.FrameExecutionContext = void 0; + +var injectedScriptSource = _interopRequireWildcard(require("../generated/injectedScriptSource")); + +var js = _interopRequireWildcard(require("./javascript")); + +var mime = _interopRequireWildcard(require("mime")); + +var _progress = require("./progress"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +/** + * Copyright (c) Microsoft Corporation. + * + * 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. + */ +class FrameExecutionContext extends js.ExecutionContext { + constructor(delegate, frame, world) { + super(frame, delegate); + this.frame = void 0; + this._injectedScriptPromise = void 0; + this.world = void 0; + this.frame = frame; + this.world = world; + } + + async waitForSignalsCreatedBy(action) { + return this.frame._page._frameManager.waitForSignalsCreatedBy(null, false, action); + } + + adoptIfNeeded(handle) { + if (handle instanceof ElementHandle && handle._context !== this) return this.frame._page._delegate.adoptElementHandle(handle, this); + return null; + } + + async evaluate(pageFunction, arg) { + return js.evaluate(this, true + /* returnByValue */ + , pageFunction, arg); + } + + async evaluateHandle(pageFunction, arg) { + return js.evaluate(this, false + /* returnByValue */ + , pageFunction, arg); + } + + async evaluateExpression(expression, isFunction, arg) { + return js.evaluateExpression(this, true + /* returnByValue */ + , expression, isFunction, arg); + } + + async evaluateAndWaitForSignals(pageFunction, arg) { + return await this.frame._page._frameManager.waitForSignalsCreatedBy(null, false + /* noWaitFor */ + , async () => { + return this.evaluate(pageFunction, arg); + }); + } + + async evaluateExpressionAndWaitForSignals(expression, isFunction, arg) { + return await this.frame._page._frameManager.waitForSignalsCreatedBy(null, false + /* noWaitFor */ + , async () => { + return this.evaluateExpression(expression, isFunction, arg); + }); + } + + async evaluateExpressionHandleAndWaitForSignals(expression, isFunction, arg) { + return await this.frame._page._frameManager.waitForSignalsCreatedBy(null, false + /* noWaitFor */ + , async () => { + return js.evaluateExpression(this, false + /* returnByValue */ + , expression, isFunction, arg); + }); + } + + createHandle(remoteObject) { + if (this.frame._page._delegate.isElementHandle(remoteObject)) return new ElementHandle(this, remoteObject.objectId); + return super.createHandle(remoteObject); + } + + injectedScript() { + if (!this._injectedScriptPromise) { + const custom = []; + + for (const [name, { + source + }] of this.frame._page.selectors._engines) custom.push(`{ name: '${name}', engine: (${source}) }`); + + const source = ` + (() => { + ${injectedScriptSource.source} + return new pwExport( + ${this.frame._page._delegate.rafCountForStablePosition()}, + ${!!process.env.PWTEST_USE_TIMEOUT_FOR_RAF}, + [${custom.join(',\n')}] + ); + })(); + `; + this._injectedScriptPromise = this._delegate.rawEvaluateHandle(source).then(objectId => new js.JSHandle(this, 'object', undefined, objectId)); + } + + return this._injectedScriptPromise; + } + + async doSlowMo() { + return this.frame._page._doSlowMo(); + } + +} + +exports.FrameExecutionContext = FrameExecutionContext; + +class ElementHandle extends js.JSHandle { + constructor(context, objectId) { + super(context, 'node', undefined, objectId); + this._page = void 0; + this._page = context.frame._page; + + this._initializePreview().catch(e => {}); + } + + async _initializePreview() { + const utility = await this._context.injectedScript(); + + this._setPreview(await utility.evaluate((injected, e) => 'JSHandle@' + injected.previewNode(e), this)); + } + + asElement() { + return this; + } + + async _evaluateInMainAndWaitForSignals(pageFunction, arg) { + const main = await this._context.frame._mainContext(); + return main.evaluateAndWaitForSignals(pageFunction, [await main.injectedScript(), this, arg]); + } + + async evaluateInUtility(pageFunction, arg) { + const utility = await this._context.frame._utilityContext(); + return utility.evaluate(pageFunction, [await utility.injectedScript(), this, arg]); + } + + async evaluateHandleInUtility(pageFunction, arg) { + const utility = await this._context.frame._utilityContext(); + return utility.evaluateHandle(pageFunction, [await utility.injectedScript(), this, arg]); + } + + async ownerFrame() { + const frameId = await this._page._delegate.getOwnerFrame(this); + if (!frameId) return null; + + const frame = this._page._frameManager.frame(frameId); + + if (frame) return frame; + + for (const page of this._page._browserContext.pages()) { + const frame = page._frameManager.frame(frameId); + + if (frame) return frame; + } + + return null; + } + + async contentFrame() { + const isFrameElement = await this.evaluateInUtility(([injected, node]) => node && (node.nodeName === 'IFRAME' || node.nodeName === 'FRAME'), {}); + if (!isFrameElement) return null; + return this._page._delegate.getContentFrame(this); + } + + async getAttribute(name) { + return throwFatalDOMError(await this.evaluateInUtility(([injeced, node, name]) => { + if (node.nodeType !== Node.ELEMENT_NODE) return 'error:notelement'; + const element = node; + return { + value: element.getAttribute(name) + }; + }, name)).value; + } + + async inputValue() { + return throwFatalDOMError(await this.evaluateInUtility(([injeced, node]) => { + if (node.nodeType !== Node.ELEMENT_NODE || node.nodeName !== 'INPUT' && node.nodeName !== 'TEXTAREA' && node.nodeName !== 'SELECT') return 'error:hasnovalue'; + const element = node; + return { + value: element.value + }; + }, undefined)).value; + } + + async textContent() { + return this.evaluateInUtility(([injected, node]) => node.textContent, {}); + } + + async innerText() { + return throwFatalDOMError(await this.evaluateInUtility(([injected, node]) => { + if (node.nodeType !== Node.ELEMENT_NODE) return 'error:notelement'; + if (node.namespaceURI !== 'http://www.w3.org/1999/xhtml') return 'error:nothtmlelement'; + const element = node; + return { + value: element.innerText + }; + }, {})).value; + } + + async innerHTML() { + return throwFatalDOMError(await this.evaluateInUtility(([injected, node]) => { + if (node.nodeType !== Node.ELEMENT_NODE) return 'error:notelement'; + const element = node; + return { + value: element.innerHTML + }; + }, {})).value; + } + + async dispatchEvent(type, eventInit = {}) { + await this._evaluateInMainAndWaitForSignals(([injected, node, { + type, + eventInit + }]) => injected.dispatchEvent(node, type, eventInit), { + type, + eventInit + }); + await this._page._doSlowMo(); + } + + async _scrollRectIntoViewIfNeeded(rect) { + return await this._page._delegate.scrollRectIntoViewIfNeeded(this, rect); + } + + async _waitAndScrollIntoViewIfNeeded(progress) { + while (progress.isRunning()) { + assertDone(throwRetargetableDOMError(await this._waitForDisplayedAtStablePosition(progress, false + /* force */ + , false + /* waitForEnabled */ + ))); + progress.throwIfAborted(); // Avoid action that has side-effects. + + const result = throwRetargetableDOMError(await this._scrollRectIntoViewIfNeeded()); + if (result === 'error:notvisible') continue; + assertDone(result); + return; + } + } + + async scrollIntoViewIfNeeded(metadata, options = {}) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(progress => this._waitAndScrollIntoViewIfNeeded(progress), this._page._timeoutSettings.timeout(options)); + } + + async _clickablePoint() { + const intersectQuadWithViewport = quad => { + return quad.map(point => ({ + x: Math.min(Math.max(point.x, 0), metrics.width), + y: Math.min(Math.max(point.y, 0), metrics.height) + })); + }; + + const computeQuadArea = quad => { + // Compute sum of all directed areas of adjacent triangles + // https://en.wikipedia.org/wiki/Polygon#Simple_polygons + let area = 0; + + for (let i = 0; i < quad.length; ++i) { + const p1 = quad[i]; + const p2 = quad[(i + 1) % quad.length]; + area += (p1.x * p2.y - p2.x * p1.y) / 2; + } + + return Math.abs(area); + }; + + const [quads, metrics] = await Promise.all([this._page._delegate.getContentQuads(this), this._page.mainFrame()._utilityContext().then(utility => utility.evaluate(() => ({ + width: innerWidth, + height: innerHeight + })))]); + if (!quads || !quads.length) return 'error:notvisible'; // Allow 1x1 elements. Compensate for rounding errors by comparing with 0.99 instead. + + const filtered = quads.map(quad => intersectQuadWithViewport(quad)).filter(quad => computeQuadArea(quad) > 0.99); + if (!filtered.length) return 'error:notinviewport'; // Return the middle point of the first quad. + + const result = { + x: 0, + y: 0 + }; + + for (const point of filtered[0]) { + result.x += point.x / 4; + result.y += point.y / 4; + } + + compensateHalfIntegerRoundingError(result); + return result; + } + + async _offsetPoint(offset) { + const [box, border] = await Promise.all([this.boundingBox(), this.evaluateInUtility(([injected, node]) => injected.getElementBorderWidth(node), {}).catch(e => {})]); + if (!box || !border) return 'error:notvisible'; // Make point relative to the padding box to align with offsetX/offsetY. + + return { + x: box.x + border.left + offset.x, + y: box.y + border.top + offset.y + }; + } + + async _retryPointerAction(progress, actionName, waitForEnabled, action, options) { + let retry = 0; // We progressively wait longer between retries, up to 500ms. + + const waitTime = [0, 20, 100, 100, 500]; // By default, we scroll with protocol method to reveal the action point. + // However, that might not work to scroll from under position:sticky elements + // that overlay the target element. To fight this, we cycle through different + // scroll alignments. This works in most scenarios. + + const scrollOptions = [undefined, { + block: 'end', + inline: 'end' + }, { + block: 'center', + inline: 'center' + }, { + block: 'start', + inline: 'start' + }]; + + while (progress.isRunning()) { + if (retry) { + progress.log(`retrying ${actionName} action${options.trial ? ' (trial run)' : ''}, attempt #${retry}`); + const timeout = waitTime[Math.min(retry - 1, waitTime.length - 1)]; + + if (timeout) { + progress.log(` waiting ${timeout}ms`); + await this.evaluateInUtility(([injected, node, timeout]) => new Promise(f => setTimeout(f, timeout)), timeout); + } + } else { + progress.log(`attempting ${actionName} action${options.trial ? ' (trial run)' : ''}`); + } + + const forceScrollOptions = scrollOptions[retry % scrollOptions.length]; + const result = await this._performPointerAction(progress, actionName, waitForEnabled, action, forceScrollOptions, options); + ++retry; + + if (result === 'error:notvisible') { + if (options.force) throw new Error('Element is not visible'); + progress.log(' element is not visible'); + continue; + } + + if (result === 'error:notinviewport') { + if (options.force) throw new Error('Element is outside of the viewport'); + progress.log(' element is outside of the viewport'); + continue; + } + + if (typeof result === 'object' && 'hitTargetDescription' in result) { + if (options.force) throw new Error(`Element does not receive pointer events, ${result.hitTargetDescription} intercepts them`); + progress.log(` ${result.hitTargetDescription} intercepts pointer events`); + continue; + } + + return result; + } + + return 'done'; + } + + async _performPointerAction(progress, actionName, waitForEnabled, action, forceScrollOptions, options) { + const { + force = false, + position + } = options; + if (options.__testHookBeforeStable) await options.__testHookBeforeStable(); + const result = await this._waitForDisplayedAtStablePosition(progress, force, waitForEnabled); + if (result !== 'done') return result; + if (options.__testHookAfterStable) await options.__testHookAfterStable(); + progress.log(' scrolling into view if needed'); + progress.throwIfAborted(); // Avoid action that has side-effects. + + if (forceScrollOptions) { + await this.evaluateInUtility(([injected, node, options]) => { + if (node.nodeType === 1 + /* Node.ELEMENT_NODE */ + ) node.scrollIntoView(options); + }, forceScrollOptions); + } else { + const scrolled = await this._scrollRectIntoViewIfNeeded(position ? { + x: position.x, + y: position.y, + width: 0, + height: 0 + } : undefined); + if (scrolled !== 'done') return scrolled; + } + + progress.log(' done scrolling'); + const maybePoint = position ? await this._offsetPoint(position) : await this._clickablePoint(); + if (typeof maybePoint === 'string') return maybePoint; + const point = roundPoint(maybePoint); + + if (!force) { + if (options.__testHookBeforeHitTarget) await options.__testHookBeforeHitTarget(); + progress.log(` checking that element receives pointer events at (${point.x},${point.y})`); + const hitTargetResult = await this._checkHitTargetAt(point); + if (hitTargetResult !== 'done') return hitTargetResult; + progress.log(` element does receive pointer events`); + } + + progress.metadata.point = point; + + if (options.trial) { + progress.log(` trial ${actionName} has finished`); + return 'done'; + } + + await progress.beforeInputAction(this); + await this._page._frameManager.waitForSignalsCreatedBy(progress, options.noWaitAfter, async () => { + if (options.__testHookBeforePointerAction) await options.__testHookBeforePointerAction(); + progress.throwIfAborted(); // Avoid action that has side-effects. + + let restoreModifiers; + if (options && options.modifiers) restoreModifiers = await this._page.keyboard._ensureModifiers(options.modifiers); + progress.log(` performing ${actionName} action`); + await action(point); + progress.log(` ${actionName} action done`); + progress.log(' waiting for scheduled navigations to finish'); + if (options.__testHookAfterPointerAction) await options.__testHookAfterPointerAction(); + if (restoreModifiers) await this._page.keyboard._ensureModifiers(restoreModifiers); + }, 'input'); + progress.log(' navigations have finished'); + return 'done'; + } + + async hover(metadata, options) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + const result = await this._hover(progress, options); + return assertDone(throwRetargetableDOMError(result)); + }, this._page._timeoutSettings.timeout(options)); + } + + _hover(progress, options) { + return this._retryPointerAction(progress, 'hover', false + /* waitForEnabled */ + , point => this._page.mouse.move(point.x, point.y), options); + } + + async click(metadata, options = {}) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + const result = await this._click(progress, options); + return assertDone(throwRetargetableDOMError(result)); + }, this._page._timeoutSettings.timeout(options)); + } + + _click(progress, options) { + return this._retryPointerAction(progress, 'click', true + /* waitForEnabled */ + , point => this._page.mouse.click(point.x, point.y, options), options); + } + + async dblclick(metadata, options) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + const result = await this._dblclick(progress, options); + return assertDone(throwRetargetableDOMError(result)); + }, this._page._timeoutSettings.timeout(options)); + } + + _dblclick(progress, options) { + return this._retryPointerAction(progress, 'dblclick', true + /* waitForEnabled */ + , point => this._page.mouse.dblclick(point.x, point.y, options), options); + } + + async tap(metadata, options = {}) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + const result = await this._tap(progress, options); + return assertDone(throwRetargetableDOMError(result)); + }, this._page._timeoutSettings.timeout(options)); + } + + _tap(progress, options) { + return this._retryPointerAction(progress, 'tap', true + /* waitForEnabled */ + , point => this._page.touchscreen.tap(point.x, point.y), options); + } + + async selectOption(metadata, elements, values, options) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + const result = await this._selectOption(progress, elements, values, options); + return throwRetargetableDOMError(result); + }, this._page._timeoutSettings.timeout(options)); + } + + async _selectOption(progress, elements, values, options) { + const optionsToSelect = [...elements, ...values]; + await progress.beforeInputAction(this); + return this._page._frameManager.waitForSignalsCreatedBy(progress, options.noWaitAfter, async () => { + progress.throwIfAborted(); // Avoid action that has side-effects. + + progress.log(' selecting specified option(s)'); + const poll = await this.evaluateHandleInUtility(([injected, node, { + optionsToSelect, + force + }]) => { + return injected.waitForElementStatesAndPerformAction(node, ['visible', 'enabled'], force, injected.selectOptions.bind(injected, optionsToSelect)); + }, { + optionsToSelect, + force: options.force + }); + const pollHandler = new InjectedScriptPollHandler(progress, poll); + const result = throwFatalDOMError(await pollHandler.finish()); + await this._page._doSlowMo(); + return result; + }); + } + + async fill(metadata, value, options = {}) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + const result = await this._fill(progress, value, options); + assertDone(throwRetargetableDOMError(result)); + }, this._page._timeoutSettings.timeout(options)); + } + + async _fill(progress, value, options) { + progress.log(`elementHandle.fill("${value}")`); + await progress.beforeInputAction(this); + return this._page._frameManager.waitForSignalsCreatedBy(progress, options.noWaitAfter, async () => { + progress.log(' waiting for element to be visible, enabled and editable'); + const poll = await this.evaluateHandleInUtility(([injected, node, { + value, + force + }]) => { + return injected.waitForElementStatesAndPerformAction(node, ['visible', 'enabled', 'editable'], force, injected.fill.bind(injected, value)); + }, { + value, + force: options.force + }); + const pollHandler = new InjectedScriptPollHandler(progress, poll); + const filled = throwFatalDOMError(await pollHandler.finish()); + progress.throwIfAborted(); // Avoid action that has side-effects. + + if (filled === 'error:notconnected') return filled; + progress.log(' element is visible, enabled and editable'); + + if (filled === 'needsinput') { + progress.throwIfAborted(); // Avoid action that has side-effects. + + if (value) await this._page.keyboard.insertText(value);else await this._page.keyboard.press('Delete'); + } else { + assertDone(filled); + } + + return 'done'; + }, 'input'); + } + + async selectText(metadata, options = {}) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + progress.throwIfAborted(); // Avoid action that has side-effects. + + const poll = await this.evaluateHandleInUtility(([injected, node, force]) => { + return injected.waitForElementStatesAndPerformAction(node, ['visible'], force, injected.selectText.bind(injected)); + }, options.force); + const pollHandler = new InjectedScriptPollHandler(progress, poll); + const result = throwFatalDOMError(await pollHandler.finish()); + assertDone(throwRetargetableDOMError(result)); + }, this._page._timeoutSettings.timeout(options)); + } + + async setInputFiles(metadata, files, options) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + const result = await this._setInputFiles(progress, files, options); + return assertDone(throwRetargetableDOMError(result)); + }, this._page._timeoutSettings.timeout(options)); + } + + async _setInputFiles(progress, files, options) { + for (const payload of files) { + if (!payload.mimeType) payload.mimeType = mime.getType(payload.name) || 'application/octet-stream'; + } + + const retargeted = await this.evaluateHandleInUtility(([injected, node, multiple]) => { + const element = injected.retarget(node, 'follow-label'); + if (!element) return 'error:notconnected'; + if (element.tagName !== 'INPUT') return 'error:notinput'; + if (multiple && !element.multiple) return 'error:notmultiplefileinput'; + return element; + }, files.length > 1); + if (!retargeted._objectId) return throwFatalDOMError(retargeted.rawValue()); + await progress.beforeInputAction(this); + await this._page._frameManager.waitForSignalsCreatedBy(progress, options.noWaitAfter, async () => { + progress.throwIfAborted(); // Avoid action that has side-effects. + + await this._page._delegate.setInputFiles(retargeted, files); + }); + await this._page._doSlowMo(); + return 'done'; + } + + async focus(metadata) { + const controller = new _progress.ProgressController(metadata, this); + await controller.run(async progress => { + const result = await this._focus(progress); + await this._page._doSlowMo(); + return assertDone(throwRetargetableDOMError(result)); + }, 0); + } + + async _focus(progress, resetSelectionIfNotFocused) { + progress.throwIfAborted(); // Avoid action that has side-effects. + + const result = await this.evaluateInUtility(([injected, node, resetSelectionIfNotFocused]) => injected.focusNode(node, resetSelectionIfNotFocused), resetSelectionIfNotFocused); + return throwFatalDOMError(result); + } + + async type(metadata, text, options) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + const result = await this._type(progress, text, options); + return assertDone(throwRetargetableDOMError(result)); + }, this._page._timeoutSettings.timeout(options)); + } + + async _type(progress, text, options) { + progress.log(`elementHandle.type("${text}")`); + await progress.beforeInputAction(this); + return this._page._frameManager.waitForSignalsCreatedBy(progress, options.noWaitAfter, async () => { + const result = await this._focus(progress, true + /* resetSelectionIfNotFocused */ + ); + if (result !== 'done') return result; + progress.throwIfAborted(); // Avoid action that has side-effects. + + await this._page.keyboard.type(text, options); + return 'done'; + }, 'input'); + } + + async press(metadata, key, options) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + const result = await this._press(progress, key, options); + return assertDone(throwRetargetableDOMError(result)); + }, this._page._timeoutSettings.timeout(options)); + } + + async _press(progress, key, options) { + progress.log(`elementHandle.press("${key}")`); + await progress.beforeInputAction(this); + return this._page._frameManager.waitForSignalsCreatedBy(progress, options.noWaitAfter, async () => { + const result = await this._focus(progress, true + /* resetSelectionIfNotFocused */ + ); + if (result !== 'done') return result; + progress.throwIfAborted(); // Avoid action that has side-effects. + + await this._page.keyboard.press(key, options); + return 'done'; + }, 'input'); + } + + async check(metadata, options) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + const result = await this._setChecked(progress, true, options); + return assertDone(throwRetargetableDOMError(result)); + }, this._page._timeoutSettings.timeout(options)); + } + + async uncheck(metadata, options) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + const result = await this._setChecked(progress, false, options); + return assertDone(throwRetargetableDOMError(result)); + }, this._page._timeoutSettings.timeout(options)); + } + + async _setChecked(progress, state, options) { + const isChecked = async () => { + const result = await this.evaluateInUtility(([injected, node]) => injected.checkElementState(node, 'checked'), {}); + return throwRetargetableDOMError(throwFatalDOMError(result)); + }; + + if ((await isChecked()) === state) return 'done'; + const result = await this._click(progress, options); + if (result !== 'done') return result; + if (options.trial) return 'done'; + if ((await isChecked()) !== state) throw new Error('Clicking the checkbox did not change its state'); + return 'done'; + } + + async boundingBox() { + return this._page._delegate.getBoundingBox(this); + } + + async screenshot(metadata, options = {}) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(progress => this._page._screenshotter.screenshotElement(progress, this, options), this._page._timeoutSettings.timeout(options)); + } + + async querySelector(selector, options) { + return this._page.selectors.query(this._context.frame, selector, options, this); + } + + async querySelectorAll(selector) { + return this._page.selectors._queryAll(this._context.frame, selector, this, true + /* adoptToMain */ + ); + } + + async evalOnSelectorAndWaitForSignals(selector, strict, expression, isFunction, arg) { + const handle = await this._page.selectors.query(this._context.frame, selector, { + strict + }, this); + if (!handle) throw new Error(`Error: failed to find element matching selector "${selector}"`); + const result = await handle.evaluateExpressionAndWaitForSignals(expression, isFunction, true, arg); + handle.dispose(); + return result; + } + + async evalOnSelectorAllAndWaitForSignals(selector, expression, isFunction, arg) { + const arrayHandle = await this._page.selectors._queryArray(this._context.frame, selector, this); + const result = await arrayHandle.evaluateExpressionAndWaitForSignals(expression, isFunction, true, arg); + arrayHandle.dispose(); + return result; + } + + async isVisible() { + const result = await this.evaluateInUtility(([injected, node]) => injected.checkElementState(node, 'visible'), {}); + if (result === 'error:notconnected') return false; + return throwFatalDOMError(result); + } + + async isHidden() { + const result = await this.evaluateInUtility(([injected, node]) => injected.checkElementState(node, 'hidden'), {}); + return throwRetargetableDOMError(throwFatalDOMError(result)); + } + + async isEnabled() { + const result = await this.evaluateInUtility(([injected, node]) => injected.checkElementState(node, 'enabled'), {}); + return throwRetargetableDOMError(throwFatalDOMError(result)); + } + + async isDisabled() { + const result = await this.evaluateInUtility(([injected, node]) => injected.checkElementState(node, 'disabled'), {}); + return throwRetargetableDOMError(throwFatalDOMError(result)); + } + + async isEditable() { + const result = await this.evaluateInUtility(([injected, node]) => injected.checkElementState(node, 'editable'), {}); + return throwRetargetableDOMError(throwFatalDOMError(result)); + } + + async isChecked() { + const result = await this.evaluateInUtility(([injected, node]) => injected.checkElementState(node, 'checked'), {}); + return throwRetargetableDOMError(throwFatalDOMError(result)); + } + + async waitForElementState(metadata, state, options = {}) { + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + progress.log(` waiting for element to be ${state}`); + const poll = await this.evaluateHandleInUtility(([injected, node, state]) => { + return injected.waitForElementStatesAndPerformAction(node, [state], false, () => 'done'); + }, state); + const pollHandler = new InjectedScriptPollHandler(progress, poll); + assertDone(throwRetargetableDOMError(throwFatalDOMError(await pollHandler.finish()))); + }, this._page._timeoutSettings.timeout(options)); + } + + async waitForSelector(metadata, selector, options = {}) { + const { + state = 'visible' + } = options; + if (!['attached', 'detached', 'visible', 'hidden'].includes(state)) throw new Error(`state: expected one of (attached|detached|visible|hidden)`); + + const info = this._page.parseSelector(selector, options); + + const task = waitForSelectorTask(info, state, this); + const controller = new _progress.ProgressController(metadata, this); + return controller.run(async progress => { + progress.log(`waiting for selector "${selector}"${state === 'attached' ? '' : ' to be ' + state}`); + const context = await this._context.frame._context(info.world); + const injected = await context.injectedScript(); + const pollHandler = new InjectedScriptPollHandler(progress, await task(injected)); + const result = await pollHandler.finishHandle(); + + if (!result.asElement()) { + result.dispose(); + return null; + } + + const handle = result.asElement(); + return handle._adoptTo(await this._context.frame._mainContext()); + }, this._page._timeoutSettings.timeout(options)); + } + + async _adoptTo(context) { + if (this._context !== context) { + const adopted = await this._page._delegate.adoptElementHandle(this, context); + this.dispose(); + return adopted; + } + + return this; + } + + async _waitForDisplayedAtStablePosition(progress, force, waitForEnabled) { + if (waitForEnabled) progress.log(` waiting for element to be visible, enabled and stable`);else progress.log(` waiting for element to be visible and stable`); + const poll = this.evaluateHandleInUtility(([injected, node, { + waitForEnabled, + force + }]) => { + return injected.waitForElementStatesAndPerformAction(node, waitForEnabled ? ['visible', 'stable', 'enabled'] : ['visible', 'stable'], force, () => 'done'); + }, { + waitForEnabled, + force + }); + const pollHandler = new InjectedScriptPollHandler(progress, await poll); + const result = await pollHandler.finish(); + if (waitForEnabled) progress.log(' element is visible, enabled and stable');else progress.log(' element is visible and stable'); + return throwFatalDOMError(result); + } + + async _checkHitTargetAt(point) { + const frame = await this.ownerFrame(); + + if (frame && frame.parentFrame()) { + const element = await frame.frameElement(); + const box = await element.boundingBox(); + if (!box) return 'error:notconnected'; // Translate from viewport coordinates to frame coordinates. + + point = { + x: point.x - box.x, + y: point.y - box.y + }; + } + + return this.evaluateInUtility(([injected, node, point]) => injected.checkHitTargetAt(node, point), point); + } + +} // Handles an InjectedScriptPoll running in injected script: +// - streams logs into progress; +// - cancels the poll when progress cancels. + + +exports.ElementHandle = ElementHandle; + +class InjectedScriptPollHandler { + constructor(progress, poll) { + this._progress = void 0; + this._poll = void 0; + this._progress = progress; + this._poll = poll; // Ensure we cancel the poll before progress aborts and returns: + // - no unnecessary work in the page; + // - no possible side effects after progress promsie rejects. + + this._progress.cleanupWhenAborted(() => this.cancel()); + + this._streamLogs(); + } + + async _streamLogs() { + while (this._poll && this._progress.isRunning()) { + const messages = await this._poll.evaluate(poll => poll.takeNextLogs()).catch(e => []); + if (!this._poll || !this._progress.isRunning()) return; + + for (const message of messages) this._progress.log(message); + } + } + + async finishHandle() { + try { + const result = await this._poll.evaluateHandle(poll => poll.run()); + await this._finishInternal(); + return result; + } finally { + await this.cancel(); + } + } + + async finish() { + try { + const result = await this._poll.evaluate(poll => poll.run()); + await this._finishInternal(); + return result; + } finally { + await this.cancel(); + } + } + + async _finishInternal() { + if (!this._poll) return; // Retrieve all the logs before continuing. + + const messages = await this._poll.evaluate(poll => poll.takeLastLogs()).catch(e => []); + + for (const message of messages) this._progress.log(message); + } + + async cancel() { + if (!this._poll) return; + const copy = this._poll; + this._poll = null; + await copy.evaluate(p => p.cancel()).catch(e => {}); + copy.dispose(); + } + +} + +exports.InjectedScriptPollHandler = InjectedScriptPollHandler; + +function throwFatalDOMError(result) { + if (result === 'error:notelement') throw new Error('Node is not an element'); + if (result === 'error:nothtmlelement') throw new Error('Not an HTMLElement'); + if (result === 'error:notfillableelement') throw new Error('Element is not an ,
    +
    + Grid Playwright Version: + Agent Factory: + Agents: +
    +
    +
  • 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 z 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