From 19af922baf5aa4af0b510e08f75f7a84e0fb7675 Mon Sep 17 00:00:00 2001 From: ip-ram Date: Sat, 2 May 2026 20:27:02 +0500 Subject: [PATCH] 22 - python & all web labs --- labPython/lab20/maze.txt | 18 +- labPython/lab20/task_1.py | 286 +- labPython/lab20/task_2.py | 102 +- labPython/lab21/task_1.py | 29 + labPython/lab21/task_2.py | 25 + labPython/lab21/task_3.py | 26 + labPython/lab21/task_4.py | 36 + labPython/lab21/task_5.py | 64 + labPython/lab22/FileName | 6 + labPython/lab22/FileName1 | 5 + labPython/lab22/FileName2 | 4 + labPython/lab22/task_1.py | 70 + labPython/lab22/task_2.py | 66 + labPython/lab22/task_3.py | 80 + labWeb/kt_3/booking.html | 94 + labWeb/kt_3/cards.html | 49 + labWeb/kt_3/contacts.html | 44 + labWeb/kt_3/figma-link.txt | 7 + labWeb/kt_3/images/photo1.jpg | Bin 0 -> 176406 bytes labWeb/kt_3/images/photo10.webp | Bin 0 -> 67506 bytes labWeb/kt_3/images/photo2.jpeg | Bin 0 -> 12969 bytes labWeb/kt_3/images/photo3.jpeg | Bin 0 -> 10281 bytes labWeb/kt_3/images/photo4.jpeg | Bin 0 -> 10831 bytes labWeb/kt_3/images/photo5.jpeg | Bin 0 -> 14025 bytes labWeb/kt_3/images/photo6.jpeg | Bin 0 -> 9938 bytes labWeb/kt_3/images/photo7.webp | Bin 0 -> 78208 bytes labWeb/kt_3/images/photo8.jpg | Bin 0 -> 115885 bytes labWeb/kt_3/images/photo9.jpg | Bin 0 -> 78665 bytes labWeb/kt_3/index.html | 76 + labWeb/kt_3/news.html | 97 + labWeb/kt_3/script.js | 117 + labWeb/kt_3/styles.css | 375 + labWeb/kt_3/tours.html | 58 + labWeb/lab3/index.html | 84 + labWeb/lab3/style.css | 89 + labWeb/lab4-6/contacts.html | 194 + labWeb/lab4-6/doctors.html | 227 + labWeb/lab4-6/index.html | 200 + labWeb/lab4-6/prices.html | 214 + labWeb/lab4-6/schedule.html | 317 + labWeb/lab4-6/style.css | 29 + labWeb/lab7/index.js | 22 + labWeb/lab7/node_modules/.bin/handlebars | 1 + labWeb/lab7/node_modules/.bin/handlebars.cmd | 17 + labWeb/lab7/node_modules/.bin/handlebars.ps1 | 28 + labWeb/lab7/node_modules/.bin/mime | 12 + labWeb/lab7/node_modules/.bin/mime.cmd | 17 + labWeb/lab7/node_modules/.bin/mime.ps1 | 28 + labWeb/lab7/node_modules/.bin/nodemon | 1 + labWeb/lab7/node_modules/.bin/nodemon.cmd | 17 + labWeb/lab7/node_modules/.bin/nodemon.ps1 | 28 + labWeb/lab7/node_modules/.bin/nodetouch | 12 + labWeb/lab7/node_modules/.bin/nodetouch.cmd | 17 + labWeb/lab7/node_modules/.bin/nodetouch.ps1 | 28 + labWeb/lab7/node_modules/.bin/nopt | 12 + labWeb/lab7/node_modules/.bin/nopt.cmd | 17 + labWeb/lab7/node_modules/.bin/nopt.ps1 | 28 + labWeb/lab7/node_modules/.bin/npm | 1 + labWeb/lab7/node_modules/.bin/npm.cmd | 17 + labWeb/lab7/node_modules/.bin/npm.ps1 | 28 + labWeb/lab7/node_modules/.bin/npx | 1 + labWeb/lab7/node_modules/.bin/npx.cmd | 17 + labWeb/lab7/node_modules/.bin/npx.ps1 | 28 + labWeb/lab7/node_modules/.bin/semver | 12 + labWeb/lab7/node_modules/.bin/semver.cmd | 17 + labWeb/lab7/node_modules/.bin/semver.ps1 | 28 + labWeb/lab7/node_modules/.bin/uglifyjs | 1 + labWeb/lab7/node_modules/.bin/uglifyjs.cmd | 17 + labWeb/lab7/node_modules/.bin/uglifyjs.ps1 | 28 + labWeb/lab7/node_modules/.package-lock.json | 3609 + labWeb/lab7/node_modules/abbrev/LICENSE | 46 + labWeb/lab7/node_modules/abbrev/README.md | 23 + labWeb/lab7/node_modules/abbrev/abbrev.js | 61 + labWeb/lab7/node_modules/abbrev/package.json | 21 + labWeb/lab7/node_modules/accepts/HISTORY.md | 243 + labWeb/lab7/node_modules/accepts/LICENSE | 23 + labWeb/lab7/node_modules/accepts/README.md | 140 + labWeb/lab7/node_modules/accepts/index.js | 238 + labWeb/lab7/node_modules/accepts/package.json | 47 + labWeb/lab7/node_modules/anymatch/LICENSE | 15 + labWeb/lab7/node_modules/anymatch/README.md | 87 + labWeb/lab7/node_modules/anymatch/index.d.ts | 20 + labWeb/lab7/node_modules/anymatch/index.js | 104 + .../lab7/node_modules/anymatch/package.json | 48 + .../lab7/node_modules/array-flatten/LICENSE | 21 + .../lab7/node_modules/array-flatten/README.md | 43 + .../array-flatten/array-flatten.js | 64 + .../node_modules/array-flatten/package.json | 39 + .../node_modules/balanced-match/LICENSE.md | 23 + .../node_modules/balanced-match/README.md | 57 + .../balanced-match/dist/commonjs/index.d.ts | 9 + .../dist/commonjs/index.d.ts.map | 1 + .../balanced-match/dist/commonjs/index.js | 59 + .../balanced-match/dist/commonjs/index.js.map | 1 + .../balanced-match/dist/commonjs/package.json | 3 + .../balanced-match/dist/esm/index.d.ts | 9 + .../balanced-match/dist/esm/index.d.ts.map | 1 + .../balanced-match/dist/esm/index.js | 54 + .../balanced-match/dist/esm/index.js.map | 1 + .../balanced-match/dist/esm/package.json | 3 + .../node_modules/balanced-match/package.json | 68 + .../binary-extensions/binary-extensions.json | 260 + .../binary-extensions.json.d.ts | 3 + .../node_modules/binary-extensions/index.d.ts | 14 + .../node_modules/binary-extensions/index.js | 1 + .../node_modules/binary-extensions/license | 9 + .../binary-extensions/package.json | 38 + .../node_modules/binary-extensions/readme.md | 41 + .../lab7/node_modules/body-parser/HISTORY.md | 680 + labWeb/lab7/node_modules/body-parser/LICENSE | 23 + .../lab7/node_modules/body-parser/README.md | 476 + labWeb/lab7/node_modules/body-parser/index.js | 156 + .../lab7/node_modules/body-parser/lib/read.js | 205 + .../body-parser/lib/types/json.js | 247 + .../node_modules/body-parser/lib/types/raw.js | 101 + .../body-parser/lib/types/text.js | 121 + .../body-parser/lib/types/urlencoded.js | 300 + .../node_modules/body-parser/package.json | 55 + .../lab7/node_modules/brace-expansion/LICENSE | 23 + .../node_modules/brace-expansion/README.md | 94 + .../brace-expansion/dist/commonjs/index.d.ts | 6 + .../dist/commonjs/index.d.ts.map | 1 + .../brace-expansion/dist/commonjs/index.js | 201 + .../dist/commonjs/index.js.map | 1 + .../dist/commonjs/package.json | 3 + .../brace-expansion/dist/esm/index.d.ts | 6 + .../brace-expansion/dist/esm/index.d.ts.map | 1 + .../brace-expansion/dist/esm/index.js | 197 + .../brace-expansion/dist/esm/index.js.map | 1 + .../brace-expansion/dist/esm/package.json | 3 + .../node_modules/brace-expansion/package.json | 64 + labWeb/lab7/node_modules/braces/LICENSE | 21 + labWeb/lab7/node_modules/braces/README.md | 586 + labWeb/lab7/node_modules/braces/index.js | 170 + .../lab7/node_modules/braces/lib/compile.js | 60 + .../lab7/node_modules/braces/lib/constants.js | 57 + labWeb/lab7/node_modules/braces/lib/expand.js | 113 + labWeb/lab7/node_modules/braces/lib/parse.js | 331 + .../lab7/node_modules/braces/lib/stringify.js | 32 + labWeb/lab7/node_modules/braces/lib/utils.js | 122 + labWeb/lab7/node_modules/braces/package.json | 77 + labWeb/lab7/node_modules/bytes/History.md | 97 + labWeb/lab7/node_modules/bytes/LICENSE | 23 + labWeb/lab7/node_modules/bytes/Readme.md | 152 + labWeb/lab7/node_modules/bytes/index.js | 170 + labWeb/lab7/node_modules/bytes/package.json | 42 + .../call-bind-apply-helpers/.eslintrc | 17 + .../.github/FUNDING.yml | 12 + .../call-bind-apply-helpers/.nycrc | 9 + .../call-bind-apply-helpers/CHANGELOG.md | 30 + .../call-bind-apply-helpers/LICENSE | 21 + .../call-bind-apply-helpers/README.md | 62 + .../call-bind-apply-helpers/actualApply.d.ts | 1 + .../call-bind-apply-helpers/actualApply.js | 10 + .../call-bind-apply-helpers/applyBind.d.ts | 19 + .../call-bind-apply-helpers/applyBind.js | 10 + .../functionApply.d.ts | 1 + .../call-bind-apply-helpers/functionApply.js | 4 + .../call-bind-apply-helpers/functionCall.d.ts | 1 + .../call-bind-apply-helpers/functionCall.js | 4 + .../call-bind-apply-helpers/index.d.ts | 64 + .../call-bind-apply-helpers/index.js | 15 + .../call-bind-apply-helpers/package.json | 85 + .../call-bind-apply-helpers/reflectApply.d.ts | 3 + .../call-bind-apply-helpers/reflectApply.js | 4 + .../call-bind-apply-helpers/test/index.js | 63 + .../call-bind-apply-helpers/tsconfig.json | 9 + labWeb/lab7/node_modules/call-bound/.eslintrc | 13 + .../call-bound/.github/FUNDING.yml | 12 + labWeb/lab7/node_modules/call-bound/.nycrc | 9 + .../lab7/node_modules/call-bound/CHANGELOG.md | 42 + labWeb/lab7/node_modules/call-bound/LICENSE | 21 + labWeb/lab7/node_modules/call-bound/README.md | 53 + .../lab7/node_modules/call-bound/index.d.ts | 94 + labWeb/lab7/node_modules/call-bound/index.js | 19 + .../lab7/node_modules/call-bound/package.json | 99 + .../node_modules/call-bound/test/index.js | 61 + .../node_modules/call-bound/tsconfig.json | 10 + labWeb/lab7/node_modules/chokidar/LICENSE | 21 + labWeb/lab7/node_modules/chokidar/README.md | 308 + labWeb/lab7/node_modules/chokidar/index.js | 973 + .../node_modules/chokidar/lib/constants.js | 65 + .../chokidar/lib/fsevents-handler.js | 524 + .../chokidar/lib/nodefs-handler.js | 654 + .../lab7/node_modules/chokidar/package.json | 85 + .../node_modules/chokidar/types/index.d.ts | 188 + .../content-disposition/HISTORY.md | 60 + .../node_modules/content-disposition/LICENSE | 22 + .../content-disposition/README.md | 142 + .../node_modules/content-disposition/index.js | 458 + .../content-disposition/package.json | 44 + .../lab7/node_modules/content-type/HISTORY.md | 29 + labWeb/lab7/node_modules/content-type/LICENSE | 22 + .../lab7/node_modules/content-type/README.md | 94 + .../lab7/node_modules/content-type/index.js | 225 + .../node_modules/content-type/package.json | 42 + .../node_modules/cookie-signature/.npmignore | 4 + .../node_modules/cookie-signature/History.md | 38 + .../node_modules/cookie-signature/Readme.md | 42 + .../node_modules/cookie-signature/index.js | 51 + .../cookie-signature/package.json | 18 + labWeb/lab7/node_modules/cookie/LICENSE | 24 + labWeb/lab7/node_modules/cookie/README.md | 317 + labWeb/lab7/node_modules/cookie/SECURITY.md | 25 + labWeb/lab7/node_modules/cookie/index.js | 335 + labWeb/lab7/node_modules/cookie/package.json | 44 + labWeb/lab7/node_modules/debug/.coveralls.yml | 1 + labWeb/lab7/node_modules/debug/.eslintrc | 11 + labWeb/lab7/node_modules/debug/.npmignore | 9 + labWeb/lab7/node_modules/debug/.travis.yml | 14 + labWeb/lab7/node_modules/debug/CHANGELOG.md | 362 + labWeb/lab7/node_modules/debug/LICENSE | 19 + labWeb/lab7/node_modules/debug/Makefile | 50 + labWeb/lab7/node_modules/debug/README.md | 312 + labWeb/lab7/node_modules/debug/component.json | 19 + labWeb/lab7/node_modules/debug/karma.conf.js | 70 + labWeb/lab7/node_modules/debug/node.js | 1 + labWeb/lab7/node_modules/debug/package.json | 49 + labWeb/lab7/node_modules/debug/src/browser.js | 185 + labWeb/lab7/node_modules/debug/src/debug.js | 202 + labWeb/lab7/node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/inspector-log.js | 15 + labWeb/lab7/node_modules/debug/src/node.js | 248 + labWeb/lab7/node_modules/depd/History.md | 103 + labWeb/lab7/node_modules/depd/LICENSE | 22 + labWeb/lab7/node_modules/depd/Readme.md | 280 + labWeb/lab7/node_modules/depd/index.js | 538 + .../node_modules/depd/lib/browser/index.js | 77 + labWeb/lab7/node_modules/depd/package.json | 45 + labWeb/lab7/node_modules/destroy/LICENSE | 23 + labWeb/lab7/node_modules/destroy/README.md | 63 + labWeb/lab7/node_modules/destroy/index.js | 209 + labWeb/lab7/node_modules/destroy/package.json | 48 + .../lab7/node_modules/dunder-proto/.eslintrc | 5 + .../dunder-proto/.github/FUNDING.yml | 12 + labWeb/lab7/node_modules/dunder-proto/.nycrc | 13 + .../node_modules/dunder-proto/CHANGELOG.md | 24 + labWeb/lab7/node_modules/dunder-proto/LICENSE | 21 + .../lab7/node_modules/dunder-proto/README.md | 54 + .../lab7/node_modules/dunder-proto/get.d.ts | 5 + labWeb/lab7/node_modules/dunder-proto/get.js | 30 + .../node_modules/dunder-proto/package.json | 76 + .../lab7/node_modules/dunder-proto/set.d.ts | 5 + labWeb/lab7/node_modules/dunder-proto/set.js | 35 + .../node_modules/dunder-proto/test/get.js | 34 + .../node_modules/dunder-proto/test/index.js | 4 + .../node_modules/dunder-proto/test/set.js | 50 + .../node_modules/dunder-proto/tsconfig.json | 9 + labWeb/lab7/node_modules/ee-first/LICENSE | 22 + labWeb/lab7/node_modules/ee-first/README.md | 80 + labWeb/lab7/node_modules/ee-first/index.js | 95 + .../lab7/node_modules/ee-first/package.json | 29 + labWeb/lab7/node_modules/encodeurl/LICENSE | 22 + labWeb/lab7/node_modules/encodeurl/README.md | 109 + labWeb/lab7/node_modules/encodeurl/index.js | 60 + .../lab7/node_modules/encodeurl/package.json | 40 + .../node_modules/es-define-property/.eslintrc | 13 + .../es-define-property/.github/FUNDING.yml | 12 + .../node_modules/es-define-property/.nycrc | 9 + .../es-define-property/CHANGELOG.md | 29 + .../node_modules/es-define-property/LICENSE | 21 + .../node_modules/es-define-property/README.md | 49 + .../es-define-property/index.d.ts | 3 + .../node_modules/es-define-property/index.js | 14 + .../es-define-property/package.json | 81 + .../es-define-property/test/index.js | 56 + .../es-define-property/tsconfig.json | 10 + labWeb/lab7/node_modules/es-errors/.eslintrc | 5 + .../es-errors/.github/FUNDING.yml | 12 + .../lab7/node_modules/es-errors/CHANGELOG.md | 40 + labWeb/lab7/node_modules/es-errors/LICENSE | 21 + labWeb/lab7/node_modules/es-errors/README.md | 55 + labWeb/lab7/node_modules/es-errors/eval.d.ts | 3 + labWeb/lab7/node_modules/es-errors/eval.js | 4 + labWeb/lab7/node_modules/es-errors/index.d.ts | 3 + labWeb/lab7/node_modules/es-errors/index.js | 4 + .../lab7/node_modules/es-errors/package.json | 80 + labWeb/lab7/node_modules/es-errors/range.d.ts | 3 + labWeb/lab7/node_modules/es-errors/range.js | 4 + labWeb/lab7/node_modules/es-errors/ref.d.ts | 3 + labWeb/lab7/node_modules/es-errors/ref.js | 4 + .../lab7/node_modules/es-errors/syntax.d.ts | 3 + labWeb/lab7/node_modules/es-errors/syntax.js | 4 + .../lab7/node_modules/es-errors/test/index.js | 19 + .../lab7/node_modules/es-errors/tsconfig.json | 49 + labWeb/lab7/node_modules/es-errors/type.d.ts | 3 + labWeb/lab7/node_modules/es-errors/type.js | 4 + labWeb/lab7/node_modules/es-errors/uri.d.ts | 3 + labWeb/lab7/node_modules/es-errors/uri.js | 4 + .../node_modules/es-object-atoms/.eslintrc | 16 + .../es-object-atoms/.github/FUNDING.yml | 12 + .../node_modules/es-object-atoms/CHANGELOG.md | 37 + .../lab7/node_modules/es-object-atoms/LICENSE | 21 + .../node_modules/es-object-atoms/README.md | 63 + .../RequireObjectCoercible.d.ts | 3 + .../es-object-atoms/RequireObjectCoercible.js | 11 + .../es-object-atoms/ToObject.d.ts | 7 + .../node_modules/es-object-atoms/ToObject.js | 10 + .../node_modules/es-object-atoms/index.d.ts | 3 + .../node_modules/es-object-atoms/index.js | 4 + .../es-object-atoms/isObject.d.ts | 3 + .../node_modules/es-object-atoms/isObject.js | 6 + .../node_modules/es-object-atoms/package.json | 80 + .../es-object-atoms/test/index.js | 38 + .../es-object-atoms/tsconfig.json | 6 + labWeb/lab7/node_modules/escape-html/LICENSE | 24 + .../lab7/node_modules/escape-html/Readme.md | 43 + labWeb/lab7/node_modules/escape-html/index.js | 78 + .../node_modules/escape-html/package.json | 24 + labWeb/lab7/node_modules/etag/HISTORY.md | 83 + labWeb/lab7/node_modules/etag/LICENSE | 22 + labWeb/lab7/node_modules/etag/README.md | 159 + labWeb/lab7/node_modules/etag/index.js | 131 + labWeb/lab7/node_modules/etag/package.json | 47 + labWeb/lab7/node_modules/express/History.md | 3667 + labWeb/lab7/node_modules/express/LICENSE | 24 + labWeb/lab7/node_modules/express/Readme.md | 260 + labWeb/lab7/node_modules/express/index.js | 11 + .../node_modules/express/lib/application.js | 661 + .../lab7/node_modules/express/lib/express.js | 116 + .../express/lib/middleware/init.js | 43 + .../express/lib/middleware/query.js | 47 + .../lab7/node_modules/express/lib/request.js | 525 + .../lab7/node_modules/express/lib/response.js | 1179 + .../node_modules/express/lib/router/index.js | 673 + .../node_modules/express/lib/router/layer.js | 181 + .../node_modules/express/lib/router/route.js | 230 + labWeb/lab7/node_modules/express/lib/utils.js | 303 + labWeb/lab7/node_modules/express/lib/view.js | 182 + labWeb/lab7/node_modules/express/package.json | 102 + labWeb/lab7/node_modules/fill-range/LICENSE | 21 + labWeb/lab7/node_modules/fill-range/README.md | 237 + labWeb/lab7/node_modules/fill-range/index.js | 248 + .../lab7/node_modules/fill-range/package.json | 74 + .../lab7/node_modules/finalhandler/HISTORY.md | 216 + labWeb/lab7/node_modules/finalhandler/LICENSE | 22 + .../lab7/node_modules/finalhandler/README.md | 147 + .../node_modules/finalhandler/SECURITY.md | 25 + .../lab7/node_modules/finalhandler/index.js | 341 + .../node_modules/finalhandler/package.json | 47 + .../lab7/node_modules/foreachasync/.npmignore | 1 + labWeb/lab7/node_modules/foreachasync/LICENSE | 191 + .../lab7/node_modules/foreachasync/README.md | 134 + .../lab7/node_modules/foreachasync/bower.json | 27 + .../node_modules/foreachasync/forEachAsync.js | 35 + .../node_modules/foreachasync/package.json | 31 + labWeb/lab7/node_modules/foreachasync/test.js | 29 + labWeb/lab7/node_modules/forwarded/HISTORY.md | 21 + labWeb/lab7/node_modules/forwarded/LICENSE | 22 + labWeb/lab7/node_modules/forwarded/README.md | 57 + labWeb/lab7/node_modules/forwarded/index.js | 90 + .../lab7/node_modules/forwarded/package.json | 45 + labWeb/lab7/node_modules/fresh/HISTORY.md | 70 + labWeb/lab7/node_modules/fresh/LICENSE | 23 + labWeb/lab7/node_modules/fresh/README.md | 119 + labWeb/lab7/node_modules/fresh/index.js | 137 + labWeb/lab7/node_modules/fresh/package.json | 46 + .../lab7/node_modules/function-bind/.eslintrc | 21 + .../function-bind/.github/FUNDING.yml | 12 + .../function-bind/.github/SECURITY.md | 3 + labWeb/lab7/node_modules/function-bind/.nycrc | 13 + .../node_modules/function-bind/CHANGELOG.md | 136 + .../lab7/node_modules/function-bind/LICENSE | 20 + .../lab7/node_modules/function-bind/README.md | 46 + .../function-bind/implementation.js | 84 + .../lab7/node_modules/function-bind/index.js | 5 + .../node_modules/function-bind/package.json | 87 + .../node_modules/function-bind/test/.eslintrc | 9 + .../node_modules/function-bind/test/index.js | 252 + .../lab7/node_modules/get-intrinsic/.eslintrc | 42 + .../get-intrinsic/.github/FUNDING.yml | 12 + labWeb/lab7/node_modules/get-intrinsic/.nycrc | 9 + .../node_modules/get-intrinsic/CHANGELOG.md | 186 + .../lab7/node_modules/get-intrinsic/LICENSE | 21 + .../lab7/node_modules/get-intrinsic/README.md | 71 + .../lab7/node_modules/get-intrinsic/index.js | 378 + .../node_modules/get-intrinsic/package.json | 97 + .../get-intrinsic/test/GetIntrinsic.js | 274 + labWeb/lab7/node_modules/get-proto/.eslintrc | 10 + .../get-proto/.github/FUNDING.yml | 12 + labWeb/lab7/node_modules/get-proto/.nycrc | 9 + .../lab7/node_modules/get-proto/CHANGELOG.md | 21 + labWeb/lab7/node_modules/get-proto/LICENSE | 21 + .../get-proto/Object.getPrototypeOf.d.ts | 5 + .../get-proto/Object.getPrototypeOf.js | 6 + labWeb/lab7/node_modules/get-proto/README.md | 50 + .../get-proto/Reflect.getPrototypeOf.d.ts | 3 + .../get-proto/Reflect.getPrototypeOf.js | 4 + labWeb/lab7/node_modules/get-proto/index.d.ts | 5 + labWeb/lab7/node_modules/get-proto/index.js | 27 + .../lab7/node_modules/get-proto/package.json | 81 + .../lab7/node_modules/get-proto/test/index.js | 68 + .../lab7/node_modules/get-proto/tsconfig.json | 9 + .../node_modules/glob-parent/CHANGELOG.md | 110 + labWeb/lab7/node_modules/glob-parent/LICENSE | 15 + .../lab7/node_modules/glob-parent/README.md | 137 + labWeb/lab7/node_modules/glob-parent/index.js | 42 + .../node_modules/glob-parent/package.json | 48 + labWeb/lab7/node_modules/gopd/.eslintrc | 16 + .../node_modules/gopd/.github/FUNDING.yml | 12 + labWeb/lab7/node_modules/gopd/CHANGELOG.md | 45 + labWeb/lab7/node_modules/gopd/LICENSE | 21 + labWeb/lab7/node_modules/gopd/README.md | 40 + labWeb/lab7/node_modules/gopd/gOPD.d.ts | 1 + labWeb/lab7/node_modules/gopd/gOPD.js | 4 + labWeb/lab7/node_modules/gopd/index.d.ts | 5 + labWeb/lab7/node_modules/gopd/index.js | 15 + labWeb/lab7/node_modules/gopd/package.json | 77 + labWeb/lab7/node_modules/gopd/test/index.js | 36 + labWeb/lab7/node_modules/gopd/tsconfig.json | 9 + labWeb/lab7/node_modules/handlebars/LICENSE | 19 + .../node_modules/handlebars/README.markdown | 167 + .../node_modules/handlebars/bin/.eslintrc.js | 6 + .../node_modules/handlebars/bin/handlebars | 176 + .../handlebars/dist/amd/handlebars.js | 52 + .../handlebars/dist/amd/handlebars.runtime.js | 44 + .../handlebars/dist/amd/handlebars/base.js | 106 + .../dist/amd/handlebars/compiler/ast.js | 31 + .../dist/amd/handlebars/compiler/base.js | 102 + .../dist/amd/handlebars/compiler/code-gen.js | 165 + .../dist/amd/handlebars/compiler/compiler.js | 562 + .../dist/amd/handlebars/compiler/helpers.js | 228 + .../compiler/javascript-compiler.js | 1158 + .../dist/amd/handlebars/compiler/parser.js | 737 + .../dist/amd/handlebars/compiler/printer.js | 186 + .../dist/amd/handlebars/compiler/visitor.js | 138 + .../handlebars/compiler/whitespace-control.js | 219 + .../dist/amd/handlebars/decorators.js | 16 + .../dist/amd/handlebars/decorators/inline.js | 25 + .../dist/amd/handlebars/exception.js | 64 + .../handlebars/dist/amd/handlebars/helpers.js | 45 + .../helpers/block-helper-missing.js | 35 + .../dist/amd/handlebars/helpers/each.js | 99 + .../amd/handlebars/helpers/helper-missing.js | 22 + .../dist/amd/handlebars/helpers/if.js | 41 + .../dist/amd/handlebars/helpers/log.js | 24 + .../dist/amd/handlebars/helpers/lookup.js | 14 + .../dist/amd/handlebars/helpers/with.js | 38 + .../amd/handlebars/internal/proto-access.js | 76 + .../amd/handlebars/internal/wrapHelper.js | 21 + .../handlebars/dist/amd/handlebars/logger.js | 44 + .../dist/amd/handlebars/no-conflict.js | 28 + .../handlebars/dist/amd/handlebars/runtime.js | 363 + .../dist/amd/handlebars/safe-string.js | 15 + .../handlebars/dist/amd/handlebars/utils.js | 126 + .../handlebars/dist/amd/precompiler.js | 345 + .../handlebars/dist/cjs/handlebars.js | 66 + .../handlebars/dist/cjs/handlebars.runtime.js | 66 + .../handlebars/dist/cjs/handlebars/base.js | 116 + .../dist/cjs/handlebars/compiler/ast.js | 31 + .../dist/cjs/handlebars/compiler/base.js | 116 + .../dist/cjs/handlebars/compiler/code-gen.js | 168 + .../dist/cjs/handlebars/compiler/compiler.js | 566 + .../dist/cjs/handlebars/compiler/helpers.js | 228 + .../compiler/javascript-compiler.js | 1166 + .../dist/cjs/handlebars/compiler/parser.js | 737 + .../dist/cjs/handlebars/compiler/printer.js | 186 + .../dist/cjs/handlebars/compiler/visitor.js | 140 + .../handlebars/compiler/whitespace-control.js | 221 + .../dist/cjs/handlebars/decorators.js | 16 + .../dist/cjs/handlebars/decorators/inline.js | 29 + .../dist/cjs/handlebars/exception.js | 64 + .../handlebars/dist/cjs/handlebars/helpers.js | 57 + .../helpers/block-helper-missing.js | 39 + .../dist/cjs/handlebars/helpers/each.js | 104 + .../cjs/handlebars/helpers/helper-missing.js | 25 + .../dist/cjs/handlebars/helpers/if.js | 46 + .../dist/cjs/handlebars/helpers/log.js | 26 + .../dist/cjs/handlebars/helpers/lookup.js | 16 + .../dist/cjs/handlebars/helpers/with.js | 43 + .../cjs/handlebars/internal/proto-access.js | 78 + .../cjs/handlebars/internal/wrapHelper.js | 19 + .../handlebars/dist/cjs/handlebars/logger.js | 47 + .../dist/cjs/handlebars/no-conflict.js | 30 + .../handlebars/dist/cjs/handlebars/runtime.js | 379 + .../dist/cjs/handlebars/safe-string.js | 15 + .../handlebars/dist/cjs/handlebars/utils.js | 124 + .../handlebars/dist/cjs/precompiler.js | 359 + .../handlebars/dist/handlebars.amd.js | 4694 + .../handlebars/dist/handlebars.amd.min.js | 29 + .../handlebars/dist/handlebars.js | 6026 + .../handlebars/dist/handlebars.min.js | 29 + .../handlebars/dist/handlebars.runtime.amd.js | 1292 + .../dist/handlebars.runtime.amd.min.js | 27 + .../handlebars/dist/handlebars.runtime.js | 2548 + .../handlebars/dist/handlebars.runtime.min.js | 27 + .../node_modules/handlebars/lib/.eslintrc.js | 8 + .../node_modules/handlebars/lib/handlebars.js | 46 + .../handlebars/lib/handlebars.runtime.js | 37 + .../handlebars/lib/handlebars/base.js | 94 + .../handlebars/lib/handlebars/compiler/ast.js | 32 + .../lib/handlebars/compiler/base.js | 101 + .../lib/handlebars/compiler/code-gen.js | 171 + .../lib/handlebars/compiler/compiler.js | 594 + .../lib/handlebars/compiler/helpers.js | 219 + .../compiler/javascript-compiler.js | 1306 + .../lib/handlebars/compiler/parser.js | 622 + .../lib/handlebars/compiler/printer.js | 178 + .../lib/handlebars/compiler/visitor.js | 136 + .../handlebars/compiler/whitespace-control.js | 234 + .../handlebars/lib/handlebars/decorators.js | 5 + .../lib/handlebars/decorators/inline.js | 22 + .../handlebars/lib/handlebars/exception.js | 68 + .../handlebars/lib/handlebars/helpers.js | 27 + .../helpers/block-helper-missing.js | 35 + .../handlebars/lib/handlebars/helpers/each.js | 101 + .../lib/handlebars/helpers/helper-missing.js | 15 + .../handlebars/lib/handlebars/helpers/if.js | 33 + .../handlebars/lib/handlebars/helpers/log.js | 19 + .../lib/handlebars/helpers/lookup.js | 9 + .../handlebars/lib/handlebars/helpers/with.js | 39 + .../lib/handlebars/internal/proto-access.js | 69 + .../lib/handlebars/internal/wrapHelper.js | 13 + .../handlebars/lib/handlebars/logger.js | 39 + .../handlebars/lib/handlebars/no-conflict.js | 23 + .../handlebars/lib/handlebars/runtime.js | 452 + .../handlebars/lib/handlebars/safe-string.js | 10 + .../handlebars/lib/handlebars/utils.js | 116 + .../lab7/node_modules/handlebars/lib/index.js | 26 + .../handlebars/lib/precompiler.js | 378 + .../lab7/node_modules/handlebars/package.json | 134 + .../node_modules/handlebars/release-notes.md | 1112 + .../lab7/node_modules/handlebars/runtime.d.ts | 5 + .../lab7/node_modules/handlebars/runtime.js | 3 + .../node_modules/handlebars/types/index.d.ts | 422 + labWeb/lab7/node_modules/has-flag/index.js | 8 + labWeb/lab7/node_modules/has-flag/license | 9 + .../lab7/node_modules/has-flag/package.json | 44 + labWeb/lab7/node_modules/has-flag/readme.md | 70 + .../lab7/node_modules/has-symbols/.eslintrc | 11 + .../has-symbols/.github/FUNDING.yml | 12 + labWeb/lab7/node_modules/has-symbols/.nycrc | 9 + .../node_modules/has-symbols/CHANGELOG.md | 91 + labWeb/lab7/node_modules/has-symbols/LICENSE | 21 + .../lab7/node_modules/has-symbols/README.md | 46 + .../lab7/node_modules/has-symbols/index.d.ts | 3 + labWeb/lab7/node_modules/has-symbols/index.js | 14 + .../node_modules/has-symbols/package.json | 111 + .../lab7/node_modules/has-symbols/shams.d.ts | 3 + labWeb/lab7/node_modules/has-symbols/shams.js | 45 + .../node_modules/has-symbols/test/index.js | 22 + .../has-symbols/test/shams/core-js.js | 29 + .../test/shams/get-own-property-symbols.js | 29 + .../node_modules/has-symbols/test/tests.js | 58 + .../node_modules/has-symbols/tsconfig.json | 10 + .../node_modules/hasown/.github/FUNDING.yml | 12 + labWeb/lab7/node_modules/hasown/.nycrc | 13 + labWeb/lab7/node_modules/hasown/CHANGELOG.md | 51 + labWeb/lab7/node_modules/hasown/LICENSE | 21 + labWeb/lab7/node_modules/hasown/README.md | 40 + .../node_modules/hasown/eslint.config.mjs | 6 + labWeb/lab7/node_modules/hasown/index.d.ts | 4 + labWeb/lab7/node_modules/hasown/index.js | 8 + labWeb/lab7/node_modules/hasown/package.json | 92 + labWeb/lab7/node_modules/hasown/tsconfig.json | 6 + labWeb/lab7/node_modules/hbs/HISTORY.md | 165 + labWeb/lab7/node_modules/hbs/LICENSE | 22 + labWeb/lab7/node_modules/hbs/README.md | 158 + labWeb/lab7/node_modules/hbs/lib/async.js | 107 + labWeb/lab7/node_modules/hbs/lib/hbs.js | 331 + labWeb/lab7/node_modules/hbs/package.json | 40 + .../lab7/node_modules/http-errors/HISTORY.md | 186 + labWeb/lab7/node_modules/http-errors/LICENSE | 23 + .../lab7/node_modules/http-errors/README.md | 169 + labWeb/lab7/node_modules/http-errors/index.js | 290 + .../node_modules/http-errors/package.json | 54 + .../lab7/node_modules/iconv-lite/Changelog.md | 162 + labWeb/lab7/node_modules/iconv-lite/LICENSE | 21 + labWeb/lab7/node_modules/iconv-lite/README.md | 156 + .../iconv-lite/encodings/dbcs-codec.js | 555 + .../iconv-lite/encodings/dbcs-data.js | 176 + .../iconv-lite/encodings/index.js | 22 + .../iconv-lite/encodings/internal.js | 188 + .../iconv-lite/encodings/sbcs-codec.js | 72 + .../encodings/sbcs-data-generated.js | 451 + .../iconv-lite/encodings/sbcs-data.js | 174 + .../encodings/tables/big5-added.json | 122 + .../iconv-lite/encodings/tables/cp936.json | 264 + .../iconv-lite/encodings/tables/cp949.json | 273 + .../iconv-lite/encodings/tables/cp950.json | 177 + .../iconv-lite/encodings/tables/eucjp.json | 182 + .../encodings/tables/gb18030-ranges.json | 1 + .../encodings/tables/gbk-added.json | 55 + .../iconv-lite/encodings/tables/shiftjis.json | 125 + .../iconv-lite/encodings/utf16.js | 177 + .../node_modules/iconv-lite/encodings/utf7.js | 290 + .../iconv-lite/lib/bom-handling.js | 52 + .../iconv-lite/lib/extend-node.js | 217 + .../node_modules/iconv-lite/lib/index.d.ts | 24 + .../lab7/node_modules/iconv-lite/lib/index.js | 153 + .../node_modules/iconv-lite/lib/streams.js | 121 + .../lab7/node_modules/iconv-lite/package.json | 46 + .../node_modules/ignore-by-default/LICENSE | 14 + .../node_modules/ignore-by-default/README.md | 26 + .../node_modules/ignore-by-default/index.js | 12 + .../ignore-by-default/package.json | 34 + labWeb/lab7/node_modules/inherits/LICENSE | 16 + labWeb/lab7/node_modules/inherits/README.md | 42 + labWeb/lab7/node_modules/inherits/inherits.js | 9 + .../node_modules/inherits/inherits_browser.js | 27 + .../lab7/node_modules/inherits/package.json | 29 + labWeb/lab7/node_modules/ipaddr.js/LICENSE | 19 + labWeb/lab7/node_modules/ipaddr.js/README.md | 233 + .../lab7/node_modules/ipaddr.js/ipaddr.min.js | 1 + .../lab7/node_modules/ipaddr.js/lib/ipaddr.js | 673 + .../node_modules/ipaddr.js/lib/ipaddr.js.d.ts | 68 + .../lab7/node_modules/ipaddr.js/package.json | 35 + .../node_modules/is-binary-path/index.d.ts | 17 + .../lab7/node_modules/is-binary-path/index.js | 7 + .../lab7/node_modules/is-binary-path/license | 9 + .../node_modules/is-binary-path/package.json | 40 + .../node_modules/is-binary-path/readme.md | 34 + labWeb/lab7/node_modules/is-extglob/LICENSE | 21 + labWeb/lab7/node_modules/is-extglob/README.md | 107 + labWeb/lab7/node_modules/is-extglob/index.js | 20 + .../lab7/node_modules/is-extglob/package.json | 69 + labWeb/lab7/node_modules/is-glob/LICENSE | 21 + labWeb/lab7/node_modules/is-glob/README.md | 206 + labWeb/lab7/node_modules/is-glob/index.js | 150 + labWeb/lab7/node_modules/is-glob/package.json | 81 + labWeb/lab7/node_modules/is-number/LICENSE | 21 + labWeb/lab7/node_modules/is-number/README.md | 187 + labWeb/lab7/node_modules/is-number/index.js | 18 + .../lab7/node_modules/is-number/package.json | 82 + labWeb/lab7/node_modules/lru-cache/LICENSE | 15 + labWeb/lab7/node_modules/lru-cache/README.md | 166 + labWeb/lab7/node_modules/lru-cache/index.js | 334 + .../lab7/node_modules/lru-cache/package.json | 34 + .../node_modules/math-intrinsics/.eslintrc | 16 + .../math-intrinsics/.github/FUNDING.yml | 12 + .../node_modules/math-intrinsics/CHANGELOG.md | 24 + .../lab7/node_modules/math-intrinsics/LICENSE | 21 + .../node_modules/math-intrinsics/README.md | 50 + .../node_modules/math-intrinsics/abs.d.ts | 1 + .../lab7/node_modules/math-intrinsics/abs.js | 4 + .../constants/maxArrayLength.d.ts | 3 + .../constants/maxArrayLength.js | 4 + .../constants/maxSafeInteger.d.ts | 3 + .../constants/maxSafeInteger.js | 5 + .../math-intrinsics/constants/maxValue.d.ts | 3 + .../math-intrinsics/constants/maxValue.js | 5 + .../node_modules/math-intrinsics/floor.d.ts | 1 + .../node_modules/math-intrinsics/floor.js | 4 + .../math-intrinsics/isFinite.d.ts | 3 + .../node_modules/math-intrinsics/isFinite.js | 12 + .../math-intrinsics/isInteger.d.ts | 3 + .../node_modules/math-intrinsics/isInteger.js | 16 + .../node_modules/math-intrinsics/isNaN.d.ts | 1 + .../node_modules/math-intrinsics/isNaN.js | 6 + .../math-intrinsics/isNegativeZero.d.ts | 3 + .../math-intrinsics/isNegativeZero.js | 6 + .../node_modules/math-intrinsics/max.d.ts | 1 + .../lab7/node_modules/math-intrinsics/max.js | 4 + .../node_modules/math-intrinsics/min.d.ts | 1 + .../lab7/node_modules/math-intrinsics/min.js | 4 + .../node_modules/math-intrinsics/mod.d.ts | 3 + .../lab7/node_modules/math-intrinsics/mod.js | 9 + .../node_modules/math-intrinsics/package.json | 86 + .../node_modules/math-intrinsics/pow.d.ts | 1 + .../lab7/node_modules/math-intrinsics/pow.js | 4 + .../node_modules/math-intrinsics/round.d.ts | 1 + .../node_modules/math-intrinsics/round.js | 4 + .../node_modules/math-intrinsics/sign.d.ts | 3 + .../lab7/node_modules/math-intrinsics/sign.js | 11 + .../math-intrinsics/test/index.js | 192 + .../math-intrinsics/tsconfig.json | 3 + .../lab7/node_modules/media-typer/HISTORY.md | 22 + labWeb/lab7/node_modules/media-typer/LICENSE | 22 + .../lab7/node_modules/media-typer/README.md | 81 + labWeb/lab7/node_modules/media-typer/index.js | 270 + .../node_modules/media-typer/package.json | 26 + .../node_modules/merge-descriptors/HISTORY.md | 21 + .../node_modules/merge-descriptors/LICENSE | 23 + .../node_modules/merge-descriptors/README.md | 49 + .../node_modules/merge-descriptors/index.js | 60 + .../merge-descriptors/package.json | 39 + labWeb/lab7/node_modules/methods/HISTORY.md | 29 + labWeb/lab7/node_modules/methods/LICENSE | 24 + labWeb/lab7/node_modules/methods/README.md | 51 + labWeb/lab7/node_modules/methods/index.js | 69 + labWeb/lab7/node_modules/methods/package.json | 36 + labWeb/lab7/node_modules/mime-db/HISTORY.md | 507 + labWeb/lab7/node_modules/mime-db/LICENSE | 23 + labWeb/lab7/node_modules/mime-db/README.md | 100 + labWeb/lab7/node_modules/mime-db/db.json | 8519 ++ labWeb/lab7/node_modules/mime-db/index.js | 12 + labWeb/lab7/node_modules/mime-db/package.json | 60 + .../lab7/node_modules/mime-types/HISTORY.md | 397 + labWeb/lab7/node_modules/mime-types/LICENSE | 23 + labWeb/lab7/node_modules/mime-types/README.md | 113 + labWeb/lab7/node_modules/mime-types/index.js | 188 + .../lab7/node_modules/mime-types/package.json | 44 + labWeb/lab7/node_modules/mime/.npmignore | 0 labWeb/lab7/node_modules/mime/CHANGELOG.md | 164 + labWeb/lab7/node_modules/mime/LICENSE | 21 + labWeb/lab7/node_modules/mime/README.md | 90 + labWeb/lab7/node_modules/mime/cli.js | 8 + labWeb/lab7/node_modules/mime/mime.js | 108 + labWeb/lab7/node_modules/mime/package.json | 44 + labWeb/lab7/node_modules/mime/src/build.js | 53 + labWeb/lab7/node_modules/mime/src/test.js | 60 + labWeb/lab7/node_modules/mime/types.json | 1 + labWeb/lab7/node_modules/minimatch/LICENSE.md | 55 + labWeb/lab7/node_modules/minimatch/README.md | 528 + .../dist/commonjs/assert-valid-pattern.d.ts | 2 + .../commonjs/assert-valid-pattern.d.ts.map | 1 + .../dist/commonjs/assert-valid-pattern.js | 14 + .../dist/commonjs/assert-valid-pattern.js.map | 1 + .../minimatch/dist/commonjs/ast.d.ts | 22 + .../minimatch/dist/commonjs/ast.d.ts.map | 1 + .../minimatch/dist/commonjs/ast.js | 845 + .../minimatch/dist/commonjs/ast.js.map | 1 + .../dist/commonjs/brace-expressions.d.ts | 8 + .../dist/commonjs/brace-expressions.d.ts.map | 1 + .../dist/commonjs/brace-expressions.js | 150 + .../dist/commonjs/brace-expressions.js.map | 1 + .../minimatch/dist/commonjs/escape.d.ts | 15 + .../minimatch/dist/commonjs/escape.d.ts.map | 1 + .../minimatch/dist/commonjs/escape.js | 30 + .../minimatch/dist/commonjs/escape.js.map | 1 + .../minimatch/dist/commonjs/index.d.ts | 174 + .../minimatch/dist/commonjs/index.d.ts.map | 1 + .../minimatch/dist/commonjs/index.js | 1127 + .../minimatch/dist/commonjs/index.js.map | 1 + .../minimatch/dist/commonjs/package.json | 3 + .../minimatch/dist/commonjs/unescape.d.ts | 22 + .../minimatch/dist/commonjs/unescape.d.ts.map | 1 + .../minimatch/dist/commonjs/unescape.js | 38 + .../minimatch/dist/commonjs/unescape.js.map | 1 + .../dist/esm/assert-valid-pattern.d.ts | 2 + .../dist/esm/assert-valid-pattern.d.ts.map | 1 + .../dist/esm/assert-valid-pattern.js | 10 + .../dist/esm/assert-valid-pattern.js.map | 1 + .../node_modules/minimatch/dist/esm/ast.d.ts | 22 + .../minimatch/dist/esm/ast.d.ts.map | 1 + .../node_modules/minimatch/dist/esm/ast.js | 841 + .../minimatch/dist/esm/ast.js.map | 1 + .../minimatch/dist/esm/brace-expressions.d.ts | 8 + .../dist/esm/brace-expressions.d.ts.map | 1 + .../minimatch/dist/esm/brace-expressions.js | 146 + .../dist/esm/brace-expressions.js.map | 1 + .../minimatch/dist/esm/escape.d.ts | 15 + .../minimatch/dist/esm/escape.d.ts.map | 1 + .../node_modules/minimatch/dist/esm/escape.js | 26 + .../minimatch/dist/esm/escape.js.map | 1 + .../minimatch/dist/esm/index.d.ts | 174 + .../minimatch/dist/esm/index.d.ts.map | 1 + .../node_modules/minimatch/dist/esm/index.js | 1114 + .../minimatch/dist/esm/index.js.map | 1 + .../minimatch/dist/esm/package.json | 3 + .../minimatch/dist/esm/unescape.d.ts | 22 + .../minimatch/dist/esm/unescape.d.ts.map | 1 + .../minimatch/dist/esm/unescape.js | 34 + .../minimatch/dist/esm/unescape.js.map | 1 + .../lab7/node_modules/minimatch/package.json | 73 + labWeb/lab7/node_modules/minimist/.eslintrc | 29 + .../node_modules/minimist/.github/FUNDING.yml | 12 + labWeb/lab7/node_modules/minimist/.nycrc | 14 + .../lab7/node_modules/minimist/CHANGELOG.md | 298 + labWeb/lab7/node_modules/minimist/LICENSE | 18 + labWeb/lab7/node_modules/minimist/README.md | 121 + .../node_modules/minimist/example/parse.js | 4 + labWeb/lab7/node_modules/minimist/index.js | 263 + .../lab7/node_modules/minimist/package.json | 75 + .../node_modules/minimist/test/all_bool.js | 34 + .../lab7/node_modules/minimist/test/bool.js | 177 + .../lab7/node_modules/minimist/test/dash.js | 43 + .../minimist/test/default_bool.js | 37 + .../lab7/node_modules/minimist/test/dotted.js | 24 + .../node_modules/minimist/test/kv_short.js | 32 + .../lab7/node_modules/minimist/test/long.js | 33 + labWeb/lab7/node_modules/minimist/test/num.js | 38 + .../lab7/node_modules/minimist/test/parse.js | 209 + .../minimist/test/parse_modified.js | 11 + .../lab7/node_modules/minimist/test/proto.js | 64 + .../lab7/node_modules/minimist/test/short.js | 69 + .../node_modules/minimist/test/stop_early.js | 17 + .../node_modules/minimist/test/unknown.js | 104 + .../node_modules/minimist/test/whitespace.js | 10 + labWeb/lab7/node_modules/ms/index.js | 152 + labWeb/lab7/node_modules/ms/license.md | 21 + labWeb/lab7/node_modules/ms/package.json | 37 + labWeb/lab7/node_modules/ms/readme.md | 51 + .../lab7/node_modules/negotiator/HISTORY.md | 108 + labWeb/lab7/node_modules/negotiator/LICENSE | 24 + labWeb/lab7/node_modules/negotiator/README.md | 203 + labWeb/lab7/node_modules/negotiator/index.js | 82 + .../node_modules/negotiator/lib/charset.js | 169 + .../node_modules/negotiator/lib/encoding.js | 184 + .../node_modules/negotiator/lib/language.js | 179 + .../node_modules/negotiator/lib/mediaType.js | 294 + .../lab7/node_modules/negotiator/package.json | 42 + labWeb/lab7/node_modules/neo-async/LICENSE | 22 + labWeb/lab7/node_modules/neo-async/README.md | 273 + labWeb/lab7/node_modules/neo-async/all.js | 3 + .../lab7/node_modules/neo-async/allLimit.js | 3 + .../lab7/node_modules/neo-async/allSeries.js | 3 + .../lab7/node_modules/neo-async/angelFall.js | 3 + labWeb/lab7/node_modules/neo-async/any.js | 3 + .../lab7/node_modules/neo-async/anyLimit.js | 3 + .../lab7/node_modules/neo-async/anySeries.js | 3 + labWeb/lab7/node_modules/neo-async/apply.js | 3 + .../lab7/node_modules/neo-async/applyEach.js | 3 + .../node_modules/neo-async/applyEachSeries.js | 3 + labWeb/lab7/node_modules/neo-async/async.js | 9184 ++ .../lab7/node_modules/neo-async/async.min.js | 80 + .../lab7/node_modules/neo-async/asyncify.js | 3 + labWeb/lab7/node_modules/neo-async/auto.js | 3 + .../lab7/node_modules/neo-async/autoInject.js | 3 + labWeb/lab7/node_modules/neo-async/cargo.js | 3 + labWeb/lab7/node_modules/neo-async/compose.js | 3 + labWeb/lab7/node_modules/neo-async/concat.js | 3 + .../node_modules/neo-async/concatLimit.js | 3 + .../node_modules/neo-async/concatSeries.js | 3 + .../lab7/node_modules/neo-async/constant.js | 3 + .../node_modules/neo-async/createLogger.js | 3 + labWeb/lab7/node_modules/neo-async/detect.js | 3 + .../node_modules/neo-async/detectLimit.js | 3 + .../node_modules/neo-async/detectSeries.js | 3 + labWeb/lab7/node_modules/neo-async/dir.js | 3 + .../lab7/node_modules/neo-async/doDuring.js | 3 + labWeb/lab7/node_modules/neo-async/doUntil.js | 3 + .../lab7/node_modules/neo-async/doWhilst.js | 3 + labWeb/lab7/node_modules/neo-async/during.js | 3 + labWeb/lab7/node_modules/neo-async/each.js | 3 + .../lab7/node_modules/neo-async/eachLimit.js | 3 + labWeb/lab7/node_modules/neo-async/eachOf.js | 3 + .../node_modules/neo-async/eachOfLimit.js | 3 + .../node_modules/neo-async/eachOfSeries.js | 3 + .../lab7/node_modules/neo-async/eachSeries.js | 3 + .../node_modules/neo-async/ensureAsync.js | 3 + labWeb/lab7/node_modules/neo-async/every.js | 3 + .../lab7/node_modules/neo-async/everyLimit.js | 3 + .../node_modules/neo-async/everySeries.js | 3 + labWeb/lab7/node_modules/neo-async/fast.js | 3 + labWeb/lab7/node_modules/neo-async/filter.js | 3 + .../node_modules/neo-async/filterLimit.js | 3 + .../node_modules/neo-async/filterSeries.js | 3 + labWeb/lab7/node_modules/neo-async/find.js | 3 + .../lab7/node_modules/neo-async/findLimit.js | 3 + .../lab7/node_modules/neo-async/findSeries.js | 3 + labWeb/lab7/node_modules/neo-async/foldl.js | 3 + labWeb/lab7/node_modules/neo-async/foldr.js | 3 + labWeb/lab7/node_modules/neo-async/forEach.js | 3 + .../node_modules/neo-async/forEachLimit.js | 3 + .../lab7/node_modules/neo-async/forEachOf.js | 3 + .../node_modules/neo-async/forEachOfLimit.js | 3 + .../node_modules/neo-async/forEachOfSeries.js | 3 + .../node_modules/neo-async/forEachSeries.js | 3 + labWeb/lab7/node_modules/neo-async/forever.js | 3 + labWeb/lab7/node_modules/neo-async/groupBy.js | 3 + .../node_modules/neo-async/groupByLimit.js | 3 + .../node_modules/neo-async/groupBySeries.js | 3 + labWeb/lab7/node_modules/neo-async/inject.js | 3 + .../lab7/node_modules/neo-async/iterator.js | 3 + labWeb/lab7/node_modules/neo-async/log.js | 3 + labWeb/lab7/node_modules/neo-async/map.js | 3 + .../lab7/node_modules/neo-async/mapLimit.js | 3 + .../lab7/node_modules/neo-async/mapSeries.js | 3 + .../lab7/node_modules/neo-async/mapValues.js | 3 + .../node_modules/neo-async/mapValuesLimit.js | 3 + .../node_modules/neo-async/mapValuesSeries.js | 3 + labWeb/lab7/node_modules/neo-async/memoize.js | 3 + .../lab7/node_modules/neo-async/nextTick.js | 3 + labWeb/lab7/node_modules/neo-async/omit.js | 3 + .../lab7/node_modules/neo-async/omitLimit.js | 3 + .../lab7/node_modules/neo-async/omitSeries.js | 3 + .../lab7/node_modules/neo-async/package.json | 57 + .../lab7/node_modules/neo-async/parallel.js | 3 + .../node_modules/neo-async/parallelLimit.js | 3 + labWeb/lab7/node_modules/neo-async/pick.js | 3 + .../lab7/node_modules/neo-async/pickLimit.js | 3 + .../lab7/node_modules/neo-async/pickSeries.js | 3 + .../node_modules/neo-async/priorityQueue.js | 3 + labWeb/lab7/node_modules/neo-async/queue.js | 3 + labWeb/lab7/node_modules/neo-async/race.js | 3 + labWeb/lab7/node_modules/neo-async/reduce.js | 3 + .../node_modules/neo-async/reduceRight.js | 3 + labWeb/lab7/node_modules/neo-async/reflect.js | 3 + .../lab7/node_modules/neo-async/reflectAll.js | 3 + labWeb/lab7/node_modules/neo-async/reject.js | 3 + .../node_modules/neo-async/rejectLimit.js | 3 + .../node_modules/neo-async/rejectSeries.js | 3 + labWeb/lab7/node_modules/neo-async/retry.js | 3 + .../lab7/node_modules/neo-async/retryable.js | 3 + labWeb/lab7/node_modules/neo-async/safe.js | 3 + labWeb/lab7/node_modules/neo-async/select.js | 3 + .../node_modules/neo-async/selectLimit.js | 3 + .../node_modules/neo-async/selectSeries.js | 3 + labWeb/lab7/node_modules/neo-async/seq.js | 3 + labWeb/lab7/node_modules/neo-async/series.js | 3 + .../node_modules/neo-async/setImmediate.js | 3 + labWeb/lab7/node_modules/neo-async/some.js | 3 + .../lab7/node_modules/neo-async/someLimit.js | 3 + .../lab7/node_modules/neo-async/someSeries.js | 3 + labWeb/lab7/node_modules/neo-async/sortBy.js | 3 + .../node_modules/neo-async/sortByLimit.js | 3 + .../node_modules/neo-async/sortBySeries.js | 3 + labWeb/lab7/node_modules/neo-async/timeout.js | 3 + labWeb/lab7/node_modules/neo-async/times.js | 3 + .../lab7/node_modules/neo-async/timesLimit.js | 3 + .../node_modules/neo-async/timesSeries.js | 3 + .../lab7/node_modules/neo-async/transform.js | 3 + .../node_modules/neo-async/transformLimit.js | 3 + .../node_modules/neo-async/transformSeries.js | 3 + labWeb/lab7/node_modules/neo-async/tryEach.js | 3 + .../lab7/node_modules/neo-async/unmemoize.js | 3 + labWeb/lab7/node_modules/neo-async/until.js | 3 + .../lab7/node_modules/neo-async/waterfall.js | 3 + labWeb/lab7/node_modules/neo-async/whilst.js | 3 + .../lab7/node_modules/neo-async/wrapSync.js | 3 + .../node_modules/nodemon/.prettierrc.json | 3 + labWeb/lab7/node_modules/nodemon/LICENSE | 21 + labWeb/lab7/node_modules/nodemon/README.md | 439 + .../lab7/node_modules/nodemon/bin/nodemon.js | 16 + .../node_modules/nodemon/bin/windows-kill.exe | Bin 0 -> 80384 bytes .../node_modules/nodemon/doc/cli/authors.txt | 8 + .../node_modules/nodemon/doc/cli/config.txt | 44 + .../node_modules/nodemon/doc/cli/help.txt | 29 + .../node_modules/nodemon/doc/cli/logo.txt | 20 + .../node_modules/nodemon/doc/cli/options.txt | 36 + .../node_modules/nodemon/doc/cli/topics.txt | 8 + .../node_modules/nodemon/doc/cli/usage.txt | 3 + .../node_modules/nodemon/doc/cli/whoami.txt | 9 + labWeb/lab7/node_modules/nodemon/index.d.ts | 124 + .../lab7/node_modules/nodemon/jsconfig.json | 7 + .../node_modules/nodemon/lib/cli/index.js | 49 + .../node_modules/nodemon/lib/cli/parse.js | 230 + .../nodemon/lib/config/command.js | 43 + .../nodemon/lib/config/defaults.js | 34 + .../node_modules/nodemon/lib/config/exec.js | 240 + .../node_modules/nodemon/lib/config/index.js | 93 + .../node_modules/nodemon/lib/config/load.js | 225 + .../node_modules/nodemon/lib/help/index.js | 27 + labWeb/lab7/node_modules/nodemon/lib/index.js | 1 + .../node_modules/nodemon/lib/monitor/index.js | 4 + .../node_modules/nodemon/lib/monitor/match.js | 288 + .../node_modules/nodemon/lib/monitor/run.js | 562 + .../nodemon/lib/monitor/signals.js | 34 + .../node_modules/nodemon/lib/monitor/watch.js | 244 + .../lab7/node_modules/nodemon/lib/nodemon.js | 317 + .../node_modules/nodemon/lib/rules/add.js | 89 + .../node_modules/nodemon/lib/rules/index.js | 53 + .../node_modules/nodemon/lib/rules/parse.js | 43 + labWeb/lab7/node_modules/nodemon/lib/spawn.js | 74 + .../node_modules/nodemon/lib/utils/bus.js | 44 + .../node_modules/nodemon/lib/utils/clone.js | 40 + .../node_modules/nodemon/lib/utils/colour.js | 26 + .../node_modules/nodemon/lib/utils/index.js | 103 + .../node_modules/nodemon/lib/utils/log.js | 82 + .../node_modules/nodemon/lib/utils/merge.js | 47 + .../lab7/node_modules/nodemon/lib/version.js | 100 + .../nodemon/node_modules/debug/LICENSE | 20 + .../nodemon/node_modules/debug/README.md | 481 + .../nodemon/node_modules/debug/package.json | 64 + .../nodemon/node_modules/debug/src/browser.js | 272 + .../nodemon/node_modules/debug/src/common.js | 292 + .../nodemon/node_modules/debug/src/index.js | 10 + .../nodemon/node_modules/debug/src/node.js | 263 + .../nodemon/node_modules/ms/index.js | 162 + .../nodemon/node_modules/ms/license.md | 21 + .../nodemon/node_modules/ms/package.json | 38 + .../nodemon/node_modules/ms/readme.md | 59 + labWeb/lab7/node_modules/nodemon/package.json | 78 + labWeb/lab7/node_modules/nopt/.npmignore | 0 labWeb/lab7/node_modules/nopt/LICENSE | 23 + labWeb/lab7/node_modules/nopt/README.md | 208 + labWeb/lab7/node_modules/nopt/bin/nopt.js | 44 + .../node_modules/nopt/examples/my-program.js | 30 + labWeb/lab7/node_modules/nopt/lib/nopt.js | 552 + labWeb/lab7/node_modules/nopt/package.json | 12 + .../lab7/node_modules/normalize-path/LICENSE | 21 + .../node_modules/normalize-path/README.md | 127 + .../lab7/node_modules/normalize-path/index.js | 35 + .../node_modules/normalize-path/package.json | 77 + labWeb/lab7/node_modules/npm/LICENSE | 235 + labWeb/lab7/node_modules/npm/README.md | 63 + .../npm/bin/node-gyp-bin/node-gyp | 6 + .../npm/bin/node-gyp-bin/node-gyp.cmd | 5 + labWeb/lab7/node_modules/npm/bin/npm | 65 + labWeb/lab7/node_modules/npm/bin/npm-cli.js | 2 + .../lab7/node_modules/npm/bin/npm-prefix.js | 30 + labWeb/lab7/node_modules/npm/bin/npm.cmd | 20 + labWeb/lab7/node_modules/npm/bin/npm.ps1 | 50 + labWeb/lab7/node_modules/npm/bin/npx | 65 + labWeb/lab7/node_modules/npm/bin/npx-cli.js | 130 + labWeb/lab7/node_modules/npm/bin/npx.cmd | 20 + labWeb/lab7/node_modules/npm/bin/npx.ps1 | 50 + .../npm/docs/content/commands/npm-access.md | 123 + .../npm/docs/content/commands/npm-adduser.md | 86 + .../npm/docs/content/commands/npm-audit.md | 478 + .../npm/docs/content/commands/npm-bugs.md | 109 + .../npm/docs/content/commands/npm-cache.md | 94 + .../npm/docs/content/commands/npm-ci.md | 318 + .../docs/content/commands/npm-completion.md | 41 + .../npm/docs/content/commands/npm-config.md | 182 + .../npm/docs/content/commands/npm-dedupe.md | 320 + .../docs/content/commands/npm-deprecate.md | 73 + .../npm/docs/content/commands/npm-diff.md | 319 + .../npm/docs/content/commands/npm-dist-tag.md | 154 + .../npm/docs/content/commands/npm-docs.md | 108 + .../npm/docs/content/commands/npm-doctor.md | 123 + .../npm/docs/content/commands/npm-edit.md | 46 + .../npm/docs/content/commands/npm-exec.md | 366 + .../npm/docs/content/commands/npm-explain.md | 105 + .../npm/docs/content/commands/npm-explore.md | 49 + .../docs/content/commands/npm-find-dupes.md | 246 + .../npm/docs/content/commands/npm-fund.md | 145 + .../docs/content/commands/npm-help-search.md | 40 + .../npm/docs/content/commands/npm-help.md | 46 + .../npm/docs/content/commands/npm-hook.md | 112 + .../npm/docs/content/commands/npm-init.md | 349 + .../content/commands/npm-install-ci-test.md | 265 + .../docs/content/commands/npm-install-test.md | 372 + .../npm/docs/content/commands/npm-install.md | 806 + .../npm/docs/content/commands/npm-link.md | 396 + .../npm/docs/content/commands/npm-login.md | 93 + .../npm/docs/content/commands/npm-logout.md | 75 + .../npm/docs/content/commands/npm-ls.md | 294 + .../npm/docs/content/commands/npm-org.md | 114 + .../npm/docs/content/commands/npm-outdated.md | 178 + .../npm/docs/content/commands/npm-owner.md | 106 + .../npm/docs/content/commands/npm-pack.md | 126 + .../npm/docs/content/commands/npm-ping.md | 46 + .../npm/docs/content/commands/npm-pkg.md | 272 + .../npm/docs/content/commands/npm-prefix.md | 59 + .../npm/docs/content/commands/npm-profile.md | 120 + .../npm/docs/content/commands/npm-prune.md | 197 + .../npm/docs/content/commands/npm-publish.md | 238 + .../npm/docs/content/commands/npm-query.md | 273 + .../npm/docs/content/commands/npm-rebuild.md | 169 + .../npm/docs/content/commands/npm-repo.md | 102 + .../npm/docs/content/commands/npm-restart.md | 70 + .../npm/docs/content/commands/npm-root.md | 51 + .../docs/content/commands/npm-run-script.md | 254 + .../npm/docs/content/commands/npm-sbom.md | 319 + .../npm/docs/content/commands/npm-search.md | 160 + .../docs/content/commands/npm-shrinkwrap.md | 32 + .../npm/docs/content/commands/npm-star.md | 78 + .../npm/docs/content/commands/npm-stars.md | 40 + .../npm/docs/content/commands/npm-start.md | 80 + .../npm/docs/content/commands/npm-stop.md | 73 + .../npm/docs/content/commands/npm-team.md | 155 + .../npm/docs/content/commands/npm-test.md | 70 + .../npm/docs/content/commands/npm-token.md | 112 + .../docs/content/commands/npm-uninstall.md | 159 + .../docs/content/commands/npm-unpublish.md | 136 + .../npm/docs/content/commands/npm-unstar.md | 74 + .../npm/docs/content/commands/npm-update.md | 446 + .../npm/docs/content/commands/npm-version.md | 235 + .../npm/docs/content/commands/npm-view.md | 200 + .../npm/docs/content/commands/npm-whoami.md | 41 + .../npm/docs/content/commands/npm.md | 175 + .../npm/docs/content/commands/npx.md | 168 + .../docs/content/configuring-npm/folders.md | 219 + .../docs/content/configuring-npm/install.md | 78 + .../configuring-npm/npm-shrinkwrap-json.md | 34 + .../npm/docs/content/configuring-npm/npmrc.md | 140 + .../content/configuring-npm/package-json.md | 1236 + .../configuring-npm/package-lock-json.md | 237 + .../npm/docs/content/using-npm/config.md | 2020 + .../content/using-npm/dependency-selectors.md | 223 + .../npm/docs/content/using-npm/developers.md | 245 + .../npm/docs/content/using-npm/logging.md | 96 + .../npm/docs/content/using-npm/orgs.md | 93 + .../docs/content/using-npm/package-spec.md | 105 + .../npm/docs/content/using-npm/registry.md | 86 + .../npm/docs/content/using-npm/removal.md | 60 + .../npm/docs/content/using-npm/scope.md | 143 + .../npm/docs/content/using-npm/scripts.md | 363 + .../npm/docs/content/using-npm/workspaces.md | 226 + .../lab7/node_modules/npm/docs/lib/index.js | 189 + .../npm/docs/output/commands/npm-access.html | 270 + .../npm/docs/output/commands/npm-adduser.html | 226 + .../npm/docs/output/commands/npm-audit.html | 517 + .../npm/docs/output/commands/npm-bugs.html | 251 + .../npm/docs/output/commands/npm-cache.html | 244 + .../npm/docs/output/commands/npm-ci.html | 406 + .../docs/output/commands/npm-completion.html | 194 + .../npm/docs/output/commands/npm-config.html | 291 + .../npm/docs/output/commands/npm-dedupe.html | 403 + .../docs/output/commands/npm-deprecate.html | 214 + .../npm/docs/output/commands/npm-diff.html | 407 + .../docs/output/commands/npm-dist-tag.html | 289 + .../npm/docs/output/commands/npm-docs.html | 250 + .../npm/docs/output/commands/npm-doctor.html | 262 + .../npm/docs/output/commands/npm-edit.html | 198 + .../npm/docs/output/commands/npm-exec.html | 443 + .../npm/docs/output/commands/npm-explain.html | 250 + .../npm/docs/output/commands/npm-explore.html | 198 + .../docs/output/commands/npm-find-dupes.html | 349 + .../npm/docs/output/commands/npm-fund.html | 275 + .../docs/output/commands/npm-help-search.html | 192 + .../npm/docs/output/commands/npm-help.html | 198 + .../npm/docs/output/commands/npm-hook.html | 234 + .../npm/docs/output/commands/npm-init.html | 430 + .../output/commands/npm-install-ci-test.html | 364 + .../output/commands/npm-install-test.html | 441 + .../npm/docs/output/commands/npm-install.html | 803 + .../npm/docs/output/commands/npm-link.html | 458 + .../npm/docs/output/commands/npm-login.html | 230 + .../npm/docs/output/commands/npm-logout.html | 217 + .../npm/docs/output/commands/npm-ls.html | 386 + .../npm/docs/output/commands/npm-org.html | 239 + .../docs/output/commands/npm-outdated.html | 313 + .../npm/docs/output/commands/npm-owner.html | 251 + .../npm/docs/output/commands/npm-pack.html | 264 + .../npm/docs/output/commands/npm-ping.html | 197 + .../npm/docs/output/commands/npm-pkg.html | 372 + .../npm/docs/output/commands/npm-prefix.html | 208 + .../npm/docs/output/commands/npm-profile.html | 269 + .../npm/docs/output/commands/npm-prune.html | 313 + .../npm/docs/output/commands/npm-publish.html | 359 + .../npm/docs/output/commands/npm-query.html | 394 + .../npm/docs/output/commands/npm-rebuild.html | 297 + .../npm/docs/output/commands/npm-repo.html | 244 + .../npm/docs/output/commands/npm-restart.html | 219 + .../npm/docs/output/commands/npm-root.html | 203 + .../docs/output/commands/npm-run-script.html | 354 + .../npm/docs/output/commands/npm-sbom.html | 447 + .../npm/docs/output/commands/npm-search.html | 281 + .../docs/output/commands/npm-shrinkwrap.html | 190 + .../npm/docs/output/commands/npm-star.html | 217 + .../npm/docs/output/commands/npm-stars.html | 193 + .../npm/docs/output/commands/npm-start.html | 222 + .../npm/docs/output/commands/npm-stop.html | 217 + .../npm/docs/output/commands/npm-team.html | 280 + .../npm/docs/output/commands/npm-test.html | 215 + .../npm/docs/output/commands/npm-token.html | 256 + .../docs/output/commands/npm-uninstall.html | 286 + .../docs/output/commands/npm-unpublish.html | 275 + .../npm/docs/output/commands/npm-unstar.html | 214 + .../npm/docs/output/commands/npm-update.html | 494 + .../npm/docs/output/commands/npm-version.html | 349 + .../npm/docs/output/commands/npm-view.html | 305 + .../npm/docs/output/commands/npm-whoami.html | 193 + .../npm/docs/output/commands/npm.html | 304 + .../npm/docs/output/commands/npx.html | 293 + .../docs/output/configuring-npm/folders.html | 330 + .../docs/output/configuring-npm/install.html | 225 + .../output/configuring-npm/npm-global.html | 330 + .../docs/output/configuring-npm/npm-json.html | 1111 + .../configuring-npm/npm-shrinkwrap-json.html | 192 + .../docs/output/configuring-npm/npmrc.html | 272 + .../output/configuring-npm/package-json.html | 1111 + .../configuring-npm/package-lock-json.html | 399 + .../npm/docs/output/using-npm/config.html | 1618 + .../using-npm/dependency-selectors.html | 356 + .../npm/docs/output/using-npm/developers.html | 360 + .../npm/docs/output/using-npm/logging.html | 236 + .../npm/docs/output/using-npm/orgs.html | 244 + .../docs/output/using-npm/package-spec.html | 263 + .../npm/docs/output/using-npm/registry.html | 234 + .../npm/docs/output/using-npm/removal.html | 205 + .../npm/docs/output/using-npm/scope.html | 265 + .../npm/docs/output/using-npm/scripts.html | 485 + .../npm/docs/output/using-npm/workspaces.html | 321 + labWeb/lab7/node_modules/npm/index.js | 5 + .../lab7/node_modules/npm/lib/arborist-cmd.js | 53 + labWeb/lab7/node_modules/npm/lib/base-cmd.js | 215 + labWeb/lab7/node_modules/npm/lib/cli.js | 12 + labWeb/lab7/node_modules/npm/lib/cli/entry.js | 79 + .../node_modules/npm/lib/cli/exit-handler.js | 174 + .../npm/lib/cli/update-notifier.js | 121 + .../npm/lib/cli/validate-engines.js | 49 + .../node_modules/npm/lib/commands/access.js | 222 + .../node_modules/npm/lib/commands/adduser.js | 50 + .../node_modules/npm/lib/commands/audit.js | 121 + .../node_modules/npm/lib/commands/bugs.js | 34 + .../node_modules/npm/lib/commands/cache.js | 218 + .../lab7/node_modules/npm/lib/commands/ci.js | 129 + .../npm/lib/commands/completion.js | 283 + .../node_modules/npm/lib/commands/config.js | 410 + .../node_modules/npm/lib/commands/dedupe.js | 51 + .../npm/lib/commands/deprecate.js | 76 + .../node_modules/npm/lib/commands/diff.js | 291 + .../node_modules/npm/lib/commands/dist-tag.js | 209 + .../node_modules/npm/lib/commands/docs.js | 21 + .../node_modules/npm/lib/commands/doctor.js | 347 + .../node_modules/npm/lib/commands/edit.js | 64 + .../node_modules/npm/lib/commands/exec.js | 110 + .../node_modules/npm/lib/commands/explain.js | 130 + .../node_modules/npm/lib/commands/explore.js | 74 + .../npm/lib/commands/find-dupes.js | 28 + .../node_modules/npm/lib/commands/fund.js | 221 + .../lab7/node_modules/npm/lib/commands/get.js | 23 + .../npm/lib/commands/help-search.js | 195 + .../node_modules/npm/lib/commands/help.js | 117 + .../node_modules/npm/lib/commands/hook.js | 109 + .../node_modules/npm/lib/commands/init.js | 238 + .../npm/lib/commands/install-ci-test.js | 15 + .../npm/lib/commands/install-test.js | 15 + .../node_modules/npm/lib/commands/install.js | 176 + .../node_modules/npm/lib/commands/link.js | 189 + .../lab7/node_modules/npm/lib/commands/ll.js | 13 + .../node_modules/npm/lib/commands/login.js | 50 + .../node_modules/npm/lib/commands/logout.js | 50 + .../lab7/node_modules/npm/lib/commands/ls.js | 611 + .../lab7/node_modules/npm/lib/commands/org.js | 151 + .../node_modules/npm/lib/commands/outdated.js | 282 + .../node_modules/npm/lib/commands/owner.js | 233 + .../node_modules/npm/lib/commands/pack.js | 85 + .../node_modules/npm/lib/commands/ping.js | 30 + .../lab7/node_modules/npm/lib/commands/pkg.js | 129 + .../node_modules/npm/lib/commands/prefix.js | 15 + .../node_modules/npm/lib/commands/profile.js | 390 + .../node_modules/npm/lib/commands/prune.js | 34 + .../node_modules/npm/lib/commands/publish.js | 227 + .../node_modules/npm/lib/commands/query.js | 126 + .../node_modules/npm/lib/commands/rebuild.js | 84 + .../node_modules/npm/lib/commands/repo.js | 55 + .../node_modules/npm/lib/commands/restart.js | 13 + .../node_modules/npm/lib/commands/root.js | 14 + .../npm/lib/commands/run-script.js | 218 + .../node_modules/npm/lib/commands/sbom.js | 134 + .../node_modules/npm/lib/commands/search.js | 70 + .../lab7/node_modules/npm/lib/commands/set.js | 26 + .../npm/lib/commands/shrinkwrap.js | 73 + .../node_modules/npm/lib/commands/star.js | 72 + .../node_modules/npm/lib/commands/stars.js | 39 + .../node_modules/npm/lib/commands/start.js | 13 + .../node_modules/npm/lib/commands/stop.js | 13 + .../node_modules/npm/lib/commands/team.js | 155 + .../node_modules/npm/lib/commands/test.js | 13 + .../node_modules/npm/lib/commands/token.js | 197 + .../npm/lib/commands/uninstall.js | 56 + .../npm/lib/commands/unpublish.js | 176 + .../node_modules/npm/lib/commands/unstar.js | 8 + .../node_modules/npm/lib/commands/update.js | 68 + .../node_modules/npm/lib/commands/version.js | 151 + .../node_modules/npm/lib/commands/view.js | 472 + .../node_modules/npm/lib/commands/whoami.js | 20 + .../node_modules/npm/lib/lifecycle-cmd.js | 20 + labWeb/lab7/node_modules/npm/lib/npm.js | 475 + .../node_modules/npm/lib/package-url-cmd.js | 64 + .../node_modules/npm/lib/utils/audit-error.js | 40 + .../lab7/node_modules/npm/lib/utils/auth.js | 109 + .../node_modules/npm/lib/utils/cmd-list.js | 178 + .../npm/lib/utils/completion.fish | 40 + .../node_modules/npm/lib/utils/completion.sh | 70 + .../npm/lib/utils/did-you-mean.js | 34 + .../node_modules/npm/lib/utils/display.js | 539 + .../npm/lib/utils/error-message.js | 447 + .../node_modules/npm/lib/utils/explain-dep.js | 116 + .../npm/lib/utils/explain-eresolve.js | 71 + .../npm/lib/utils/format-bytes.js | 30 + .../npm/lib/utils/format-search-stream.js | 174 + .../lab7/node_modules/npm/lib/utils/format.js | 50 + .../npm/lib/utils/get-identity.js | 26 + .../npm/lib/utils/get-workspaces.js | 54 + .../npm/lib/utils/installed-deep.js | 45 + .../npm/lib/utils/installed-shallow.js | 19 + .../node_modules/npm/lib/utils/is-windows.js | 4 + .../node_modules/npm/lib/utils/log-file.js | 261 + .../node_modules/npm/lib/utils/npm-usage.js | 74 + .../node_modules/npm/lib/utils/open-url.js | 98 + .../npm/lib/utils/output-error.js | 29 + .../lab7/node_modules/npm/lib/utils/ping.js | 7 + .../node_modules/npm/lib/utils/queryable.js | 310 + .../npm/lib/utils/read-user-info.js | 67 + .../npm/lib/utils/reify-finish.js | 33 + .../npm/lib/utils/reify-output.js | 199 + .../npm/lib/utils/sbom-cyclonedx.js | 201 + .../node_modules/npm/lib/utils/sbom-spdx.js | 182 + labWeb/lab7/node_modules/npm/lib/utils/tar.js | 110 + .../lab7/node_modules/npm/lib/utils/timers.js | 89 + .../npm/lib/utils/update-workspaces.js | 40 + .../npm/lib/utils/validate-lockfile.js | 29 + .../npm/lib/utils/verify-signatures.js | 386 + .../node_modules/npm/man/man1/npm-access.1 | 115 + .../node_modules/npm/man/man1/npm-adduser.1 | 91 + .../node_modules/npm/man/man1/npm-audit.1 | 448 + .../lab7/node_modules/npm/man/man1/npm-bugs.1 | 115 + .../node_modules/npm/man/man1/npm-cache.1 | 78 + .../lab7/node_modules/npm/man/man1/npm-ci.1 | 289 + .../npm/man/man1/npm-completion.1 | 35 + .../node_modules/npm/man/man1/npm-config.1 | 187 + .../node_modules/npm/man/man1/npm-dedupe.1 | 290 + .../node_modules/npm/man/man1/npm-deprecate.1 | 73 + .../lab7/node_modules/npm/man/man1/npm-diff.1 | 310 + .../node_modules/npm/man/man1/npm-dist-tag.1 | 144 + .../lab7/node_modules/npm/man/man1/npm-docs.1 | 113 + .../node_modules/npm/man/man1/npm-doctor.1 | 82 + .../lab7/node_modules/npm/man/man1/npm-edit.1 | 43 + .../lab7/node_modules/npm/man/man1/npm-exec.1 | 350 + .../node_modules/npm/man/man1/npm-explain.1 | 118 + .../node_modules/npm/man/man1/npm-explore.1 | 49 + .../npm/man/man1/npm-find-dupes.1 | 225 + .../lab7/node_modules/npm/man/man1/npm-fund.1 | 142 + .../npm/man/man1/npm-help-search.1 | 37 + .../lab7/node_modules/npm/man/man1/npm-help.1 | 47 + .../lab7/node_modules/npm/man/man1/npm-hook.1 | 115 + .../lab7/node_modules/npm/man/man1/npm-init.1 | 366 + .../npm/man/man1/npm-install-ci-test.1 | 239 + .../npm/man/man1/npm-install-test.1 | 346 + .../node_modules/npm/man/man1/npm-install.1 | 762 + .../lab7/node_modules/npm/man/man1/npm-link.1 | 355 + .../node_modules/npm/man/man1/npm-login.1 | 95 + .../node_modules/npm/man/man1/npm-logout.1 | 75 + .../lab7/node_modules/npm/man/man1/npm-ls.1 | 283 + .../lab7/node_modules/npm/man/man1/npm-org.1 | 125 + .../node_modules/npm/man/man1/npm-outdated.1 | 182 + .../node_modules/npm/man/man1/npm-owner.1 | 110 + .../lab7/node_modules/npm/man/man1/npm-pack.1 | 130 + .../lab7/node_modules/npm/man/man1/npm-ping.1 | 52 + .../lab7/node_modules/npm/man/man1/npm-pkg.1 | 286 + .../node_modules/npm/man/man1/npm-prefix.1 | 63 + .../node_modules/npm/man/man1/npm-profile.1 | 126 + .../node_modules/npm/man/man1/npm-prune.1 | 184 + .../node_modules/npm/man/man1/npm-publish.1 | 224 + .../node_modules/npm/man/man1/npm-query.1 | 281 + .../node_modules/npm/man/man1/npm-rebuild.1 | 178 + .../lab7/node_modules/npm/man/man1/npm-repo.1 | 103 + .../node_modules/npm/man/man1/npm-restart.1 | 85 + .../lab7/node_modules/npm/man/man1/npm-root.1 | 56 + .../npm/man/man1/npm-run-script.1 | 234 + .../lab7/node_modules/npm/man/man1/npm-sbom.1 | 314 + .../node_modules/npm/man/man1/npm-search.1 | 156 + .../npm/man/man1/npm-shrinkwrap.1 | 32 + .../lab7/node_modules/npm/man/man1/npm-star.1 | 76 + .../node_modules/npm/man/man1/npm-stars.1 | 41 + .../node_modules/npm/man/man1/npm-start.1 | 79 + .../lab7/node_modules/npm/man/man1/npm-stop.1 | 75 + .../lab7/node_modules/npm/man/man1/npm-team.1 | 148 + .../lab7/node_modules/npm/man/man1/npm-test.1 | 73 + .../node_modules/npm/man/man1/npm-token.1 | 112 + .../node_modules/npm/man/man1/npm-uninstall.1 | 159 + .../node_modules/npm/man/man1/npm-unpublish.1 | 137 + .../node_modules/npm/man/man1/npm-unstar.1 | 70 + .../node_modules/npm/man/man1/npm-update.1 | 406 + .../node_modules/npm/man/man1/npm-version.1 | 229 + .../lab7/node_modules/npm/man/man1/npm-view.1 | 213 + .../node_modules/npm/man/man1/npm-whoami.1 | 39 + labWeb/lab7/node_modules/npm/man/man1/npm.1 | 131 + labWeb/lab7/node_modules/npm/man/man1/npx.1 | 156 + .../lab7/node_modules/npm/man/man5/folders.5 | 152 + .../lab7/node_modules/npm/man/man5/install.5 | 57 + .../node_modules/npm/man/man5/npm-global.5 | 152 + .../lab7/node_modules/npm/man/man5/npm-json.5 | 1144 + .../npm/man/man5/npm-shrinkwrap-json.5 | 23 + labWeb/lab7/node_modules/npm/man/man5/npmrc.5 | 132 + .../node_modules/npm/man/man5/package-json.5 | 1144 + .../npm/man/man5/package-lock-json.5 | 158 + .../lab7/node_modules/npm/man/man7/config.7 | 2041 + .../npm/man/man7/dependency-selectors.7 | 331 + .../node_modules/npm/man/man7/developers.7 | 234 + .../lab7/node_modules/npm/man/man7/logging.7 | 108 + labWeb/lab7/node_modules/npm/man/man7/orgs.7 | 145 + .../node_modules/npm/man/man7/package-spec.7 | 126 + .../lab7/node_modules/npm/man/man7/registry.7 | 51 + .../lab7/node_modules/npm/man/man7/removal.7 | 54 + labWeb/lab7/node_modules/npm/man/man7/scope.7 | 113 + .../lab7/node_modules/npm/man/man7/scripts.7 | 406 + .../node_modules/npm/man/man7/workspaces.7 | 214 + .../npm/node_modules/.bin/arborist | 1 + .../node_modules/npm/node_modules/.bin/cssesc | 1 + .../node_modules/npm/node_modules/.bin/glob | 1 + .../.bin/installed-package-contents | 1 + .../npm/node_modules/.bin/node-gyp | 1 + .../npm/node_modules/.bin/node-which | 1 + .../node_modules/npm/node_modules/.bin/nopt | 1 + .../node_modules/npm/node_modules/.bin/pacote | 1 + .../npm/node_modules/.bin/qrcode-terminal | 1 + .../node_modules/npm/node_modules/.bin/semver | 1 + .../node_modules/@isaacs/cliui/LICENSE.txt | 14 + .../@isaacs/cliui/build/index.cjs | 317 + .../@isaacs/cliui/build/index.d.cts | 43 + .../@isaacs/cliui/build/lib/index.js | 302 + .../npm/node_modules/@isaacs/cliui/index.mjs | 14 + .../cliui/node_modules/ansi-regex/index.js | 14 + .../cliui/node_modules/ansi-regex/license | 9 + .../node_modules/ansi-regex/package.json | 61 + .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 + .../node_modules/emoji-regex/RGI_Emoji.js | 6 + .../emoji-regex/es2015/RGI_Emoji.js | 6 + .../node_modules/emoji-regex/es2015/index.js | 6 + .../node_modules/emoji-regex/es2015/text.js | 6 + .../cliui/node_modules/emoji-regex/index.js | 6 + .../node_modules/emoji-regex/package.json | 52 + .../cliui/node_modules/emoji-regex/text.js | 6 + .../cliui/node_modules/string-width/index.js | 54 + .../cliui/node_modules/string-width/license | 9 + .../node_modules/string-width/package.json | 59 + .../cliui/node_modules/strip-ansi/index.js | 19 + .../cliui/node_modules/strip-ansi/license | 9 + .../node_modules/strip-ansi/package.json | 59 + .../node_modules/@isaacs/cliui/package.json | 86 + .../node_modules/@isaacs/fs-minipass/LICENSE | 15 + .../fs-minipass/dist/commonjs/index.js | 430 + .../fs-minipass/dist/commonjs/package.json | 3 + .../@isaacs/fs-minipass/dist/esm/index.js | 420 + .../@isaacs/fs-minipass/dist/esm/package.json | 3 + .../@isaacs/fs-minipass/package.json | 72 + .../@isaacs/string-locale-compare/LICENSE | 15 + .../@isaacs/string-locale-compare/index.js | 42 + .../string-locale-compare/package.json | 28 + .../node_modules/@npmcli/agent/lib/agents.js | 206 + .../npm/node_modules/@npmcli/agent/lib/dns.js | 53 + .../node_modules/@npmcli/agent/lib/errors.js | 61 + .../node_modules/@npmcli/agent/lib/index.js | 56 + .../node_modules/@npmcli/agent/lib/options.js | 86 + .../node_modules/@npmcli/agent/lib/proxy.js | 88 + .../node_modules/@npmcli/agent/package.json | 60 + .../node_modules/@npmcli/arborist/LICENSE.md | 20 + .../node_modules/@npmcli/arborist/README.md | 349 + .../@npmcli/arborist/bin/actual.js | 19 + .../@npmcli/arborist/bin/audit.js | 51 + .../@npmcli/arborist/bin/funding.js | 38 + .../@npmcli/arborist/bin/ideal.js | 14 + .../@npmcli/arborist/bin/index.js | 112 + .../@npmcli/arborist/bin/lib/logging.js | 77 + .../@npmcli/arborist/bin/lib/options.js | 123 + .../@npmcli/arborist/bin/lib/print-tree.js | 4 + .../@npmcli/arborist/bin/lib/timers.js | 33 + .../@npmcli/arborist/bin/license.js | 48 + .../@npmcli/arborist/bin/prune.js | 48 + .../@npmcli/arborist/bin/reify.js | 48 + .../@npmcli/arborist/bin/shrinkwrap.js | 7 + .../@npmcli/arborist/bin/virtual.js | 14 + .../@npmcli/arborist/lib/add-rm-pkg-deps.js | 143 + .../arborist/lib/arborist/build-ideal-tree.js | 1523 + .../@npmcli/arborist/lib/arborist/index.js | 280 + .../arborist/lib/arborist/isolated-reifier.js | 477 + .../arborist/lib/arborist/load-actual.js | 438 + .../arborist/lib/arborist/load-virtual.js | 303 + .../@npmcli/arborist/lib/arborist/rebuild.js | 408 + .../@npmcli/arborist/lib/arborist/reify.js | 1637 + .../@npmcli/arborist/lib/audit-report.js | 415 + .../@npmcli/arborist/lib/calc-dep-flags.js | 126 + .../@npmcli/arborist/lib/can-place-dep.js | 436 + .../arborist/lib/case-insensitive-map.js | 50 + .../arborist/lib/consistent-resolve.js | 45 + .../@npmcli/arborist/lib/debug.js | 32 + .../arborist/lib/deepest-nesting-target.js | 18 + .../@npmcli/arborist/lib/dep-valid.js | 150 + .../node_modules/@npmcli/arborist/lib/diff.js | 312 + .../node_modules/@npmcli/arborist/lib/edge.js | 301 + .../@npmcli/arborist/lib/from-path.js | 30 + .../@npmcli/arborist/lib/gather-dep-set.js | 43 + .../@npmcli/arborist/lib/index.js | 6 + .../@npmcli/arborist/lib/inventory.js | 137 + .../@npmcli/arborist/lib/isolated-classes.js | 138 + .../node_modules/@npmcli/arborist/lib/link.js | 126 + .../node_modules/@npmcli/arborist/lib/node.js | 1495 + .../@npmcli/arborist/lib/optional-set.js | 38 + .../@npmcli/arborist/lib/override-resolves.js | 11 + .../@npmcli/arborist/lib/override-set.js | 302 + .../@npmcli/arborist/lib/packument-cache.js | 77 + .../@npmcli/arborist/lib/peer-entry-sets.js | 77 + .../@npmcli/arborist/lib/place-dep.js | 569 + .../@npmcli/arborist/lib/printable.js | 198 + .../arborist/lib/query-selector-all.js | 950 + .../@npmcli/arborist/lib/realpath.js | 95 + .../@npmcli/arborist/lib/relpath.js | 3 + .../@npmcli/arborist/lib/reset-dep-flags.js | 15 + .../@npmcli/arborist/lib/retire-path.js | 19 + .../@npmcli/arborist/lib/shrinkwrap.js | 1181 + .../@npmcli/arborist/lib/signal-handling.js | 74 + .../@npmcli/arborist/lib/signals.js | 58 + .../@npmcli/arborist/lib/spec-from-lock.js | 34 + .../@npmcli/arborist/lib/tracker.js | 86 + .../@npmcli/arborist/lib/tree-check.js | 155 + .../@npmcli/arborist/lib/version-from-tgz.js | 47 + .../node_modules/@npmcli/arborist/lib/vuln.js | 214 + .../@npmcli/arborist/lib/yarn-lock.js | 377 + .../@npmcli/arborist/package.json | 100 + .../npm/node_modules/@npmcli/config/LICENSE | 15 + .../npm/node_modules/@npmcli/config/README.md | 257 + .../config/lib/definitions/definition.js | 253 + .../config/lib/definitions/definitions.js | 2282 + .../@npmcli/config/lib/definitions/index.js | 66 + .../@npmcli/config/lib/env-replace.js | 14 + .../node_modules/@npmcli/config/lib/errors.js | 23 + .../node_modules/@npmcli/config/lib/index.js | 931 + .../@npmcli/config/lib/nerf-dart.js | 18 + .../@npmcli/config/lib/parse-field.js | 86 + .../@npmcli/config/lib/set-envs.js | 108 + .../@npmcli/config/lib/type-defs.js | 61 + .../@npmcli/config/lib/type-description.js | 21 + .../node_modules/@npmcli/config/lib/umask.js | 35 + .../node_modules/@npmcli/config/package.json | 57 + .../npm/node_modules/@npmcli/fs/LICENSE.md | 20 + .../@npmcli/fs/lib/common/get-options.js | 20 + .../@npmcli/fs/lib/common/node.js | 9 + .../node_modules/@npmcli/fs/lib/cp/LICENSE | 15 + .../node_modules/@npmcli/fs/lib/cp/errors.js | 129 + .../node_modules/@npmcli/fs/lib/cp/index.js | 22 + .../@npmcli/fs/lib/cp/polyfill.js | 428 + .../npm/node_modules/@npmcli/fs/lib/index.js | 13 + .../node_modules/@npmcli/fs/lib/move-file.js | 78 + .../@npmcli/fs/lib/readdir-scoped.js | 20 + .../@npmcli/fs/lib/with-temp-dir.js | 39 + .../npm/node_modules/@npmcli/fs/package.json | 54 + .../npm/node_modules/@npmcli/git/LICENSE | 15 + .../npm/node_modules/@npmcli/git/lib/clone.js | 172 + .../node_modules/@npmcli/git/lib/errors.js | 36 + .../npm/node_modules/@npmcli/git/lib/find.js | 15 + .../npm/node_modules/@npmcli/git/lib/index.js | 9 + .../node_modules/@npmcli/git/lib/is-clean.js | 6 + .../npm/node_modules/@npmcli/git/lib/is.js | 4 + .../@npmcli/git/lib/lines-to-revs.js | 147 + .../@npmcli/git/lib/make-error.js | 33 + .../npm/node_modules/@npmcli/git/lib/opts.js | 57 + .../npm/node_modules/@npmcli/git/lib/revs.js | 22 + .../npm/node_modules/@npmcli/git/lib/spawn.js | 44 + .../npm/node_modules/@npmcli/git/lib/utils.js | 3 + .../npm/node_modules/@npmcli/git/lib/which.js | 18 + .../npm/node_modules/@npmcli/git/package.json | 58 + .../installed-package-contents/LICENSE | 15 + .../installed-package-contents/README.md | 109 + .../installed-package-contents/bin/index.js | 44 + .../installed-package-contents/lib/index.js | 181 + .../installed-package-contents/package.json | 52 + .../@npmcli/map-workspaces/LICENSE.md | 20 + .../@npmcli/map-workspaces/lib/index.js | 226 + .../@npmcli/map-workspaces/package.json | 61 + .../@npmcli/metavuln-calculator/LICENSE | 15 + .../metavuln-calculator/lib/advisory.js | 435 + .../metavuln-calculator/lib/get-dep-spec.js | 15 + .../@npmcli/metavuln-calculator/lib/hash.js | 5 + .../@npmcli/metavuln-calculator/lib/index.js | 128 + .../node_modules/.bin/pacote | 1 + .../node_modules/pacote/LICENSE | 15 + .../node_modules/pacote/README.md | 283 + .../node_modules/pacote/bin/index.js | 158 + .../node_modules/pacote/lib/dir.js | 105 + .../node_modules/pacote/lib/fetcher.js | 497 + .../node_modules/pacote/lib/file.js | 94 + .../node_modules/pacote/lib/git.js | 317 + .../node_modules/pacote/lib/index.js | 23 + .../node_modules/pacote/lib/registry.js | 369 + .../node_modules/pacote/lib/remote.js | 89 + .../pacote/lib/util/add-git-sha.js | 15 + .../node_modules/pacote/lib/util/cache-dir.js | 15 + .../pacote/lib/util/is-package-bin.js | 25 + .../node_modules/pacote/lib/util/npm.js | 14 + .../node_modules/pacote/lib/util/protected.js | 5 + .../pacote/lib/util/tar-create-options.js | 31 + .../pacote/lib/util/trailing-slashes.js | 10 + .../node_modules/pacote/package.json | 80 + .../@npmcli/metavuln-calculator/package.json | 62 + .../@npmcli/name-from-folder/LICENSE | 15 + .../@npmcli/name-from-folder/lib/index.js | 7 + .../@npmcli/name-from-folder/package.json | 45 + .../npm/node_modules/@npmcli/node-gyp/LICENSE | 7 + .../@npmcli/node-gyp/lib/index.js | 14 + .../@npmcli/node-gyp/package.json | 50 + .../node_modules/@npmcli/package-json/LICENSE | 18 + .../@npmcli/package-json/lib/index.js | 286 + .../package-json/lib/normalize-data.js | 257 + .../@npmcli/package-json/lib/normalize.js | 601 + .../@npmcli/package-json/lib/read-package.js | 39 + .../@npmcli/package-json/lib/sort.js | 101 + .../package-json/lib/update-dependencies.js | 75 + .../package-json/lib/update-scripts.js | 29 + .../package-json/lib/update-workspaces.js | 26 + .../@npmcli/package-json/package.json | 61 + .../@npmcli/promise-spawn/LICENSE | 15 + .../@npmcli/promise-spawn/lib/escape.js | 68 + .../@npmcli/promise-spawn/lib/index.js | 218 + .../@npmcli/promise-spawn/package.json | 51 + .../npm/node_modules/@npmcli/query/LICENSE | 20 + .../node_modules/@npmcli/query/lib/index.js | 255 + .../node_modules/@npmcli/query/package.json | 64 + .../npm/node_modules/@npmcli/redact/LICENSE | 21 + .../@npmcli/redact/lib/deep-map.js | 71 + .../node_modules/@npmcli/redact/lib/error.js | 28 + .../node_modules/@npmcli/redact/lib/index.js | 44 + .../@npmcli/redact/lib/matchers.js | 88 + .../node_modules/@npmcli/redact/lib/server.js | 59 + .../node_modules/@npmcli/redact/lib/utils.js | 202 + .../node_modules/@npmcli/redact/package.json | 52 + .../node_modules/@npmcli/run-script/LICENSE | 15 + .../run-script/lib/is-server-package.js | 11 + .../@npmcli/run-script/lib/make-spawn-args.js | 53 + .../run-script/lib/node-gyp-bin/node-gyp | 2 + .../run-script/lib/node-gyp-bin/node-gyp.cmd | 1 + .../@npmcli/run-script/lib/package-envs.js | 29 + .../@npmcli/run-script/lib/run-script-pkg.js | 114 + .../@npmcli/run-script/lib/run-script.js | 15 + .../@npmcli/run-script/lib/set-path.js | 45 + .../@npmcli/run-script/lib/signal-manager.js | 50 + .../run-script/lib/validate-options.js | 39 + .../@npmcli/run-script/package.json | 54 + .../npm/node_modules/@pkgjs/parseargs/LICENSE | 201 + .../parseargs/examples/is-default-value.js | 25 + .../parseargs/examples/limit-long-syntax.js | 35 + .../@pkgjs/parseargs/examples/negate.js | 43 + .../parseargs/examples/no-repeated-options.js | 31 + .../parseargs/examples/ordered-options.mjs | 41 + .../parseargs/examples/simple-hard-coded.js | 26 + .../node_modules/@pkgjs/parseargs/index.js | 396 + .../@pkgjs/parseargs/internal/errors.js | 47 + .../@pkgjs/parseargs/internal/primordials.js | 393 + .../@pkgjs/parseargs/internal/util.js | 14 + .../@pkgjs/parseargs/internal/validators.js | 89 + .../@pkgjs/parseargs/package.json | 36 + .../node_modules/@pkgjs/parseargs/utils.js | 198 + .../npm/node_modules/@sigstore/bundle/LICENSE | 202 + .../@sigstore/bundle/dist/build.js | 100 + .../@sigstore/bundle/dist/bundle.js | 24 + .../@sigstore/bundle/dist/error.js | 25 + .../@sigstore/bundle/dist/index.js | 43 + .../@sigstore/bundle/dist/serialized.js | 49 + .../@sigstore/bundle/dist/utility.js | 2 + .../@sigstore/bundle/dist/validate.js | 199 + .../@sigstore/bundle/package.json | 35 + .../npm/node_modules/@sigstore/core/LICENSE | 202 + .../@sigstore/core/dist/asn1/error.js | 24 + .../@sigstore/core/dist/asn1/index.js | 20 + .../@sigstore/core/dist/asn1/length.js | 62 + .../@sigstore/core/dist/asn1/obj.js | 152 + .../@sigstore/core/dist/asn1/parse.js | 124 + .../@sigstore/core/dist/asn1/tag.js | 86 + .../@sigstore/core/dist/crypto.js | 60 + .../node_modules/@sigstore/core/dist/dsse.js | 30 + .../@sigstore/core/dist/encoding.js | 27 + .../node_modules/@sigstore/core/dist/index.js | 56 + .../node_modules/@sigstore/core/dist/json.js | 60 + .../node_modules/@sigstore/core/dist/oid.js | 14 + .../node_modules/@sigstore/core/dist/pem.js | 43 + .../@sigstore/core/dist/rfc3161/error.js | 21 + .../@sigstore/core/dist/rfc3161/index.js | 20 + .../@sigstore/core/dist/rfc3161/timestamp.js | 201 + .../@sigstore/core/dist/rfc3161/tstinfo.js | 61 + .../@sigstore/core/dist/stream.js | 115 + .../@sigstore/core/dist/x509/cert.js | 230 + .../@sigstore/core/dist/x509/ext.js | 145 + .../@sigstore/core/dist/x509/index.js | 23 + .../@sigstore/core/dist/x509/sct.js | 141 + .../node_modules/@sigstore/core/package.json | 31 + .../@sigstore/protobuf-specs/LICENSE | 202 + .../dist/__generated__/envelope.js | 59 + .../dist/__generated__/events.js | 174 + .../google/api/field_behavior.js | 141 + .../dist/__generated__/google/protobuf/any.js | 35 + .../google/protobuf/descriptor.js | 2042 + .../google/protobuf/timestamp.js | 29 + .../dist/__generated__/rekor/v2/dsse.js | 55 + .../dist/__generated__/rekor/v2/entry.js | 81 + .../__generated__/rekor/v2/hashedrekord.js | 56 + .../dist/__generated__/rekor/v2/verifier.js | 74 + .../dist/__generated__/sigstore_bundle.js | 103 + .../dist/__generated__/sigstore_common.js | 596 + .../dist/__generated__/sigstore_rekor.js | 137 + .../dist/__generated__/sigstore_trustroot.js | 284 + .../__generated__/sigstore_verification.js | 281 + .../@sigstore/protobuf-specs/dist/index.js | 37 + .../@sigstore/protobuf-specs/package.json | 31 + .../npm/node_modules/@sigstore/sign/LICENSE | 202 + .../@sigstore/sign/dist/bundler/base.js | 50 + .../@sigstore/sign/dist/bundler/bundle.js | 81 + .../@sigstore/sign/dist/bundler/dsse.js | 46 + .../@sigstore/sign/dist/bundler/index.js | 7 + .../@sigstore/sign/dist/bundler/message.js | 30 + .../node_modules/@sigstore/sign/dist/error.js | 39 + .../@sigstore/sign/dist/external/error.js | 26 + .../@sigstore/sign/dist/external/fetch.js | 98 + .../@sigstore/sign/dist/external/fulcio.js | 41 + .../@sigstore/sign/dist/external/rekor.js | 80 + .../@sigstore/sign/dist/external/tsa.js | 38 + .../@sigstore/sign/dist/identity/ci.js | 73 + .../@sigstore/sign/dist/identity/index.js | 20 + .../@sigstore/sign/dist/identity/provider.js | 2 + .../node_modules/@sigstore/sign/dist/index.js | 17 + .../@sigstore/sign/dist/signer/fulcio/ca.js | 59 + .../sign/dist/signer/fulcio/ephemeral.js | 45 + .../sign/dist/signer/fulcio/index.js | 87 + .../@sigstore/sign/dist/signer/index.js | 22 + .../@sigstore/sign/dist/signer/signer.js | 17 + .../@sigstore/sign/dist/types/fetch.js | 2 + .../@sigstore/sign/dist/util/index.js | 59 + .../@sigstore/sign/dist/util/oidc.js | 30 + .../@sigstore/sign/dist/util/ua.js | 32 + .../@sigstore/sign/dist/witness/index.js | 24 + .../sign/dist/witness/tlog/client.js | 61 + .../@sigstore/sign/dist/witness/tlog/entry.js | 140 + .../@sigstore/sign/dist/witness/tlog/index.js | 82 + .../@sigstore/sign/dist/witness/tsa/client.js | 46 + .../@sigstore/sign/dist/witness/tsa/index.js | 44 + .../@sigstore/sign/dist/witness/witness.js | 2 + .../node_modules/@sigstore/sign/package.json | 46 + .../npm/node_modules/@sigstore/tuf/LICENSE | 202 + .../@sigstore/tuf/dist/appdata.js | 43 + .../node_modules/@sigstore/tuf/dist/client.js | 111 + .../node_modules/@sigstore/tuf/dist/error.js | 12 + .../node_modules/@sigstore/tuf/dist/index.js | 56 + .../node_modules/@sigstore/tuf/dist/target.js | 79 + .../node_modules/@sigstore/tuf/package.json | 41 + .../npm/node_modules/@sigstore/tuf/seeds.json | 1 + .../@sigstore/verify/dist/bundle/dsse.js | 43 + .../@sigstore/verify/dist/bundle/index.js | 57 + .../@sigstore/verify/dist/bundle/message.js | 36 + .../@sigstore/verify/dist/error.js | 32 + .../@sigstore/verify/dist/index.js | 28 + .../@sigstore/verify/dist/key/certificate.js | 211 + .../@sigstore/verify/dist/key/index.js | 67 + .../@sigstore/verify/dist/key/sct.js | 78 + .../@sigstore/verify/dist/policy.js | 24 + .../@sigstore/verify/dist/shared.types.js | 2 + .../verify/dist/timestamp/checkpoint.js | 157 + .../@sigstore/verify/dist/timestamp/index.js | 46 + .../@sigstore/verify/dist/timestamp/merkle.js | 104 + .../@sigstore/verify/dist/timestamp/set.js | 60 + .../@sigstore/verify/dist/timestamp/tsa.js | 63 + .../@sigstore/verify/dist/tlog/dsse.js | 57 + .../verify/dist/tlog/hashedrekord.js | 51 + .../@sigstore/verify/dist/tlog/index.js | 47 + .../@sigstore/verify/dist/tlog/intoto.js | 62 + .../@sigstore/verify/dist/trust/filter.js | 23 + .../@sigstore/verify/dist/trust/index.js | 86 + .../verify/dist/trust/trust.types.js | 2 + .../@sigstore/verify/dist/verifier.js | 141 + .../@sigstore/verify/package.json | 36 + .../@tufjs/canonical-json/LICENSE | 21 + .../@tufjs/canonical-json/lib/index.js | 64 + .../@tufjs/canonical-json/package.json | 35 + .../npm/node_modules/abbrev/LICENSE | 46 + .../npm/node_modules/abbrev/lib/index.js | 53 + .../npm/node_modules/abbrev/package.json | 45 + .../npm/node_modules/agent-base/LICENSE | 22 + .../node_modules/agent-base/dist/helpers.js | 66 + .../npm/node_modules/agent-base/dist/index.js | 178 + .../npm/node_modules/agent-base/package.json | 46 + .../npm/node_modules/ansi-regex/index.js | 10 + .../npm/node_modules/ansi-regex/license | 9 + .../npm/node_modules/ansi-regex/package.json | 55 + .../npm/node_modules/ansi-styles/index.js | 223 + .../npm/node_modules/ansi-styles/license | 9 + .../npm/node_modules/ansi-styles/package.json | 54 + .../npm/node_modules/aproba/LICENSE | 14 + .../npm/node_modules/aproba/index.js | 105 + .../npm/node_modules/aproba/package.json | 35 + .../npm/node_modules/archy/LICENSE | 18 + .../npm/node_modules/archy/examples/beep.js | 24 + .../node_modules/archy/examples/multi_line.js | 25 + .../npm/node_modules/archy/index.js | 35 + .../npm/node_modules/archy/package.json | 40 + .../npm/node_modules/archy/test/beep.js | 40 + .../npm/node_modules/archy/test/multi_line.js | 45 + .../node_modules/archy/test/non_unicode.js | 40 + .../node_modules/balanced-match/LICENSE.md | 21 + .../npm/node_modules/balanced-match/index.js | 62 + .../node_modules/balanced-match/package.json | 48 + .../npm/node_modules/bin-links/LICENSE | 15 + .../node_modules/bin-links/lib/bin-target.js | 9 + .../node_modules/bin-links/lib/check-bin.js | 74 + .../node_modules/bin-links/lib/check-bins.js | 18 + .../npm/node_modules/bin-links/lib/fix-bin.js | 42 + .../bin-links/lib/get-node-modules.js | 19 + .../node_modules/bin-links/lib/get-paths.js | 42 + .../node_modules/bin-links/lib/get-prefix.js | 3 + .../npm/node_modules/bin-links/lib/index.js | 44 + .../node_modules/bin-links/lib/is-windows.js | 2 + .../node_modules/bin-links/lib/link-bin.js | 9 + .../node_modules/bin-links/lib/link-bins.js | 23 + .../node_modules/bin-links/lib/link-gently.js | 96 + .../node_modules/bin-links/lib/link-mans.js | 53 + .../node_modules/bin-links/lib/man-target.js | 6 + .../node_modules/bin-links/lib/shim-bin.js | 86 + .../npm/node_modules/bin-links/package.json | 61 + .../binary-extensions/binary-extensions.json | 263 + .../node_modules/binary-extensions/index.js | 1 + .../node_modules/binary-extensions/license | 10 + .../binary-extensions/package.json | 40 + .../npm/node_modules/brace-expansion/LICENSE | 21 + .../npm/node_modules/brace-expansion/index.js | 203 + .../node_modules/brace-expansion/package.json | 49 + .../npm/node_modules/cacache/LICENSE.md | 16 + .../node_modules/cacache/lib/content/path.js | 29 + .../node_modules/cacache/lib/content/read.js | 165 + .../node_modules/cacache/lib/content/rm.js | 18 + .../node_modules/cacache/lib/content/write.js | 206 + .../node_modules/cacache/lib/entry-index.js | 336 + .../npm/node_modules/cacache/lib/get.js | 170 + .../npm/node_modules/cacache/lib/index.js | 42 + .../node_modules/cacache/lib/memoization.js | 72 + .../npm/node_modules/cacache/lib/put.js | 80 + .../npm/node_modules/cacache/lib/rm.js | 31 + .../npm/node_modules/cacache/lib/util/glob.js | 7 + .../cacache/lib/util/hash-to-segments.js | 7 + .../npm/node_modules/cacache/lib/util/tmp.js | 26 + .../npm/node_modules/cacache/lib/verify.js | 258 + .../npm/node_modules/cacache/package.json | 83 + .../npm/node_modules/chalk/license | 9 + .../npm/node_modules/chalk/package.json | 83 + .../npm/node_modules/chalk/source/index.js | 225 + .../node_modules/chalk/source/utilities.js | 33 + .../chalk/source/vendor/ansi-styles/index.js | 223 + .../source/vendor/supports-color/browser.js | 34 + .../source/vendor/supports-color/index.js | 190 + .../npm/node_modules/chownr/LICENSE.md | 63 + .../chownr/dist/commonjs/index.js | 93 + .../chownr/dist/commonjs/package.json | 3 + .../npm/node_modules/chownr/dist/esm/index.js | 85 + .../node_modules/chownr/dist/esm/package.json | 3 + .../npm/node_modules/chownr/package.json | 69 + .../npm/node_modules/ci-info/LICENSE | 21 + .../npm/node_modules/ci-info/index.js | 104 + .../npm/node_modules/ci-info/package.json | 54 + .../npm/node_modules/ci-info/vendors.json | 363 + .../npm/node_modules/cidr-regex/LICENSE | 22 + .../npm/node_modules/cidr-regex/dist/index.js | 15 + .../npm/node_modules/cidr-regex/package.json | 39 + .../npm/node_modules/cli-columns/color.js | 16 + .../npm/node_modules/cli-columns/index.js | 82 + .../npm/node_modules/cli-columns/license | 20 + .../npm/node_modules/cli-columns/package.json | 54 + .../npm/node_modules/cli-columns/test.js | 101 + .../npm/node_modules/cmd-shim/LICENSE | 15 + .../npm/node_modules/cmd-shim/lib/index.js | 247 + .../cmd-shim/lib/to-batch-syntax.js | 49 + .../npm/node_modules/cmd-shim/package.json | 48 + .../npm/node_modules/color-convert/LICENSE | 21 + .../node_modules/color-convert/conversions.js | 839 + .../npm/node_modules/color-convert/index.js | 81 + .../node_modules/color-convert/package.json | 48 + .../npm/node_modules/color-convert/route.js | 97 + .../npm/node_modules/color-name/LICENSE | 8 + .../npm/node_modules/color-name/index.js | 152 + .../npm/node_modules/color-name/package.json | 28 + .../node_modules/common-ancestor-path/LICENSE | 15 + .../common-ancestor-path/index.js | 17 + .../common-ancestor-path/package.json | 28 + .../npm/node_modules/cross-spawn/LICENSE | 21 + .../npm/node_modules/cross-spawn/index.js | 39 + .../node_modules/cross-spawn/lib/enoent.js | 59 + .../npm/node_modules/cross-spawn/lib/parse.js | 91 + .../cross-spawn/lib/util/escape.js | 47 + .../cross-spawn/lib/util/readShebang.js | 23 + .../cross-spawn/lib/util/resolveCommand.js | 52 + .../cross-spawn/node_modules/.bin/node-which | 1 + .../cross-spawn/node_modules/which/LICENSE | 15 + .../cross-spawn/node_modules/which/README.md | 54 + .../node_modules/which/bin/node-which | 52 + .../node_modules/which/package.json | 43 + .../cross-spawn/node_modules/which/which.js | 125 + .../npm/node_modules/cross-spawn/package.json | 73 + .../npm/node_modules/cssesc/LICENSE-MIT.txt | 20 + .../npm/node_modules/cssesc/README.md | 201 + .../npm/node_modules/cssesc/bin/cssesc | 116 + .../npm/node_modules/cssesc/cssesc.js | 110 + .../npm/node_modules/cssesc/man/cssesc.1 | 70 + .../npm/node_modules/cssesc/package.json | 51 + .../npm/node_modules/debug/LICENSE | 20 + .../npm/node_modules/debug/package.json | 64 + .../npm/node_modules/debug/src/browser.js | 272 + .../npm/node_modules/debug/src/common.js | 292 + .../npm/node_modules/debug/src/index.js | 10 + .../npm/node_modules/debug/src/node.js | 263 + .../npm/node_modules/diff/CONTRIBUTING.md | 36 + .../npm/node_modules/diff/LICENSE | 29 + .../npm/node_modules/diff/dist/diff.js | 1730 + .../npm/node_modules/diff/dist/diff.min.js | 1 + .../npm/node_modules/diff/lib/convert/dmp.js | 32 + .../npm/node_modules/diff/lib/convert/xml.js | 42 + .../npm/node_modules/diff/lib/diff/array.js | 45 + .../npm/node_modules/diff/lib/diff/base.js | 358 + .../node_modules/diff/lib/diff/character.js | 37 + .../npm/node_modules/diff/lib/diff/css.js | 41 + .../npm/node_modules/diff/lib/diff/json.js | 163 + .../npm/node_modules/diff/lib/diff/line.js | 94 + .../node_modules/diff/lib/diff/sentence.js | 41 + .../npm/node_modules/diff/lib/diff/word.js | 108 + .../npm/node_modules/diff/lib/index.es6.js | 1699 + .../npm/node_modules/diff/lib/index.js | 234 + .../npm/node_modules/diff/lib/index.mjs | 1699 + .../npm/node_modules/diff/lib/patch/apply.js | 238 + .../npm/node_modules/diff/lib/patch/create.js | 276 + .../npm/node_modules/diff/lib/patch/merge.js | 613 + .../npm/node_modules/diff/lib/patch/parse.js | 167 + .../node_modules/diff/lib/patch/reverse.js | 63 + .../npm/node_modules/diff/lib/util/array.js | 32 + .../diff/lib/util/distance-iterator.js | 57 + .../npm/node_modules/diff/lib/util/params.js | 24 + .../npm/node_modules/diff/package.json | 90 + .../npm/node_modules/diff/release-notes.md | 317 + .../npm/node_modules/diff/runtime.js | 3 + .../eastasianwidth/eastasianwidth.js | 311 + .../node_modules/eastasianwidth/package.json | 18 + .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 + .../node_modules/emoji-regex/es2015/index.js | 6 + .../node_modules/emoji-regex/es2015/text.js | 6 + .../npm/node_modules/emoji-regex/index.js | 6 + .../npm/node_modules/emoji-regex/package.json | 50 + .../npm/node_modules/emoji-regex/text.js | 6 + .../npm/node_modules/encoding/LICENSE | 16 + .../npm/node_modules/encoding/lib/encoding.js | 83 + .../npm/node_modules/encoding/package.json | 18 + .../npm/node_modules/encoding/test/test.js | 49 + .../npm/node_modules/env-paths/index.js | 74 + .../npm/node_modules/env-paths/license | 9 + .../npm/node_modules/env-paths/package.json | 45 + .../npm/node_modules/err-code/bower.json | 30 + .../npm/node_modules/err-code/index.js | 47 + .../npm/node_modules/err-code/index.umd.js | 51 + .../npm/node_modules/err-code/package.json | 34 + .../npm/node_modules/err-code/test/test.js | 159 + .../node_modules/exponential-backoff/LICENSE | 202 + .../exponential-backoff/dist/backoff.js | 124 + .../dist/delay/always/always.delay.js | 25 + .../dist/delay/delay.base.js | 45 + .../dist/delay/delay.factory.js | 17 + .../dist/delay/delay.interface.js | 3 + .../dist/delay/skip-first/skip-first.delay.js | 82 + .../dist/jitter/full/full.jitter.js | 8 + .../dist/jitter/jitter.factory.js | 15 + .../dist/jitter/no/no.jitter.js | 7 + .../exponential-backoff/dist/options.js | 31 + .../exponential-backoff/package.json | 62 + .../fastest-levenshtein/LICENSE.md | 21 + .../node_modules/fastest-levenshtein/bench.js | 96 + .../fastest-levenshtein/esm/mod.js | 138 + .../node_modules/fastest-levenshtein/mod.js | 142 + .../fastest-levenshtein/package.json | 72 + .../node_modules/fastest-levenshtein/test.js | 55 + .../npm/node_modules/fdir/LICENSE | 7 + .../npm/node_modules/fdir/dist/index.cjs | 588 + .../npm/node_modules/fdir/dist/index.d.cts | 155 + .../npm/node_modules/fdir/dist/index.d.mts | 155 + .../npm/node_modules/fdir/dist/index.mjs | 570 + .../npm/node_modules/fdir/package.json | 103 + .../npm/node_modules/foreground-child/LICENSE | 15 + .../dist/commonjs/all-signals.js | 58 + .../foreground-child/dist/commonjs/index.js | 123 + .../dist/commonjs/package.json | 3 + .../dist/commonjs/proxy-signals.js | 38 + .../dist/commonjs/watchdog.js | 50 + .../foreground-child/dist/esm/all-signals.js | 52 + .../foreground-child/dist/esm/index.js | 115 + .../foreground-child/dist/esm/package.json | 3 + .../dist/esm/proxy-signals.js | 34 + .../foreground-child/dist/esm/watchdog.js | 46 + .../foreground-child/package.json | 106 + .../npm/node_modules/fs-minipass/LICENSE | 15 + .../npm/node_modules/fs-minipass/lib/index.js | 443 + .../npm/node_modules/fs-minipass/package.json | 54 + .../npm/node_modules/glob/LICENSE | 15 + .../npm/node_modules/glob/README.md | 1265 + .../node_modules/glob/dist/commonjs/glob.d.ts | 388 + .../glob/dist/commonjs/glob.d.ts.map | 1 + .../node_modules/glob/dist/commonjs/glob.js | 247 + .../glob/dist/commonjs/glob.js.map | 1 + .../glob/dist/commonjs/has-magic.d.ts | 14 + .../glob/dist/commonjs/has-magic.d.ts.map | 1 + .../glob/dist/commonjs/has-magic.js | 27 + .../glob/dist/commonjs/has-magic.js.map | 1 + .../glob/dist/commonjs/ignore.d.ts | 24 + .../glob/dist/commonjs/ignore.d.ts.map | 1 + .../node_modules/glob/dist/commonjs/ignore.js | 119 + .../glob/dist/commonjs/ignore.js.map | 1 + .../glob/dist/commonjs/index.d.ts | 97 + .../glob/dist/commonjs/index.d.ts.map | 1 + .../node_modules/glob/dist/commonjs/index.js | 68 + .../glob/dist/commonjs/index.js.map | 1 + .../glob/dist/commonjs/package.json | 3 + .../glob/dist/commonjs/pattern.d.ts | 76 + .../glob/dist/commonjs/pattern.d.ts.map | 1 + .../glob/dist/commonjs/pattern.js | 219 + .../glob/dist/commonjs/pattern.js.map | 1 + .../glob/dist/commonjs/processor.d.ts | 59 + .../glob/dist/commonjs/processor.d.ts.map | 1 + .../glob/dist/commonjs/processor.js | 301 + .../glob/dist/commonjs/processor.js.map | 1 + .../glob/dist/commonjs/walker.d.ts | 97 + .../glob/dist/commonjs/walker.d.ts.map | 1 + .../node_modules/glob/dist/commonjs/walker.js | 387 + .../glob/dist/commonjs/walker.js.map | 1 + .../npm/node_modules/glob/dist/esm/bin.d.mts | 3 + .../node_modules/glob/dist/esm/bin.d.mts.map | 1 + .../npm/node_modules/glob/dist/esm/bin.mjs | 346 + .../node_modules/glob/dist/esm/bin.mjs.map | 1 + .../npm/node_modules/glob/dist/esm/glob.d.ts | 388 + .../node_modules/glob/dist/esm/glob.d.ts.map | 1 + .../npm/node_modules/glob/dist/esm/glob.js | 243 + .../node_modules/glob/dist/esm/glob.js.map | 1 + .../node_modules/glob/dist/esm/has-magic.d.ts | 14 + .../glob/dist/esm/has-magic.d.ts.map | 1 + .../node_modules/glob/dist/esm/has-magic.js | 23 + .../glob/dist/esm/has-magic.js.map | 1 + .../node_modules/glob/dist/esm/ignore.d.ts | 24 + .../glob/dist/esm/ignore.d.ts.map | 1 + .../npm/node_modules/glob/dist/esm/ignore.js | 115 + .../node_modules/glob/dist/esm/ignore.js.map | 1 + .../npm/node_modules/glob/dist/esm/index.d.ts | 97 + .../node_modules/glob/dist/esm/index.d.ts.map | 1 + .../npm/node_modules/glob/dist/esm/index.js | 55 + .../node_modules/glob/dist/esm/index.js.map | 1 + .../node_modules/glob/dist/esm/package.json | 3 + .../node_modules/glob/dist/esm/pattern.d.ts | 76 + .../glob/dist/esm/pattern.d.ts.map | 1 + .../npm/node_modules/glob/dist/esm/pattern.js | 215 + .../node_modules/glob/dist/esm/pattern.js.map | 1 + .../node_modules/glob/dist/esm/processor.d.ts | 59 + .../glob/dist/esm/processor.d.ts.map | 1 + .../node_modules/glob/dist/esm/processor.js | 294 + .../glob/dist/esm/processor.js.map | 1 + .../node_modules/glob/dist/esm/walker.d.ts | 97 + .../glob/dist/esm/walker.d.ts.map | 1 + .../npm/node_modules/glob/dist/esm/walker.js | 381 + .../node_modules/glob/dist/esm/walker.js.map | 1 + .../npm/node_modules/glob/package.json | 99 + .../npm/node_modules/graceful-fs/LICENSE | 15 + .../npm/node_modules/graceful-fs/clone.js | 23 + .../node_modules/graceful-fs/graceful-fs.js | 448 + .../graceful-fs/legacy-streams.js | 118 + .../npm/node_modules/graceful-fs/package.json | 53 + .../npm/node_modules/graceful-fs/polyfills.js | 355 + .../npm/node_modules/hosted-git-info/LICENSE | 13 + .../hosted-git-info/lib/from-url.js | 122 + .../node_modules/hosted-git-info/lib/hosts.js | 231 + .../node_modules/hosted-git-info/lib/index.js | 227 + .../hosted-git-info/lib/parse-url.js | 78 + .../node_modules/hosted-git-info/package.json | 61 + .../node_modules/http-cache-semantics/LICENSE | 9 + .../http-cache-semantics/index.js | 928 + .../http-cache-semantics/package.json | 22 + .../npm/node_modules/http-proxy-agent/LICENSE | 22 + .../http-proxy-agent/dist/index.js | 148 + .../http-proxy-agent/package.json | 47 + .../node_modules/https-proxy-agent/LICENSE | 22 + .../https-proxy-agent/dist/index.js | 180 + .../dist/parse-proxy-response.js | 101 + .../https-proxy-agent/package.json | 50 + .../npm/node_modules/iconv-lite/LICENSE | 21 + .../iconv-lite/encodings/dbcs-codec.js | 597 + .../iconv-lite/encodings/dbcs-data.js | 188 + .../iconv-lite/encodings/index.js | 23 + .../iconv-lite/encodings/internal.js | 198 + .../iconv-lite/encodings/sbcs-codec.js | 72 + .../encodings/sbcs-data-generated.js | 451 + .../iconv-lite/encodings/sbcs-data.js | 179 + .../encodings/tables/big5-added.json | 122 + .../iconv-lite/encodings/tables/cp936.json | 264 + .../iconv-lite/encodings/tables/cp949.json | 273 + .../iconv-lite/encodings/tables/cp950.json | 177 + .../iconv-lite/encodings/tables/eucjp.json | 182 + .../encodings/tables/gb18030-ranges.json | 1 + .../encodings/tables/gbk-added.json | 56 + .../iconv-lite/encodings/tables/shiftjis.json | 125 + .../iconv-lite/encodings/utf16.js | 197 + .../iconv-lite/encodings/utf32.js | 319 + .../node_modules/iconv-lite/encodings/utf7.js | 290 + .../iconv-lite/lib/bom-handling.js | 52 + .../npm/node_modules/iconv-lite/lib/index.js | 180 + .../node_modules/iconv-lite/lib/streams.js | 109 + .../npm/node_modules/iconv-lite/package.json | 44 + .../npm/node_modules/ignore-walk/LICENSE | 15 + .../npm/node_modules/ignore-walk/lib/index.js | 310 + .../npm/node_modules/ignore-walk/package.json | 64 + .../node_modules/imurmurhash/imurmurhash.js | 138 + .../imurmurhash/imurmurhash.min.js | 12 + .../npm/node_modules/imurmurhash/package.json | 40 + .../node_modules/npm/node_modules/ini/LICENSE | 15 + .../npm/node_modules/ini/lib/ini.js | 280 + .../npm/node_modules/ini/package.json | 45 + .../node_modules/init-package-json/LICENSE.md | 18 + .../init-package-json/lib/default-input.js | 263 + .../lib/init-package-json.js | 147 + .../init-package-json/package.json | 67 + .../npm/node_modules/ip-address/LICENSE | 19 + .../ip-address/dist/address-error.js | 12 + .../node_modules/ip-address/dist/common.js | 46 + .../ip-address/dist/ip-address.js | 35 + .../npm/node_modules/ip-address/dist/ipv4.js | 360 + .../npm/node_modules/ip-address/dist/ipv6.js | 1003 + .../ip-address/dist/v4/constants.js | 8 + .../ip-address/dist/v6/constants.js | 76 + .../ip-address/dist/v6/helpers.js | 45 + .../ip-address/dist/v6/regular-expressions.js | 95 + .../npm/node_modules/ip-address/package.json | 78 + .../npm/node_modules/ip-regex/index.js | 36 + .../npm/node_modules/ip-regex/license | 9 + .../npm/node_modules/ip-regex/package.json | 47 + .../npm/node_modules/is-cidr/LICENSE | 22 + .../npm/node_modules/is-cidr/dist/index.js | 11 + .../npm/node_modules/is-cidr/package.json | 39 + .../is-fullwidth-code-point/index.js | 50 + .../is-fullwidth-code-point/license | 9 + .../is-fullwidth-code-point/package.json | 42 + .../npm/node_modules/isexe/LICENSE | 15 + .../npm/node_modules/isexe/index.js | 57 + .../npm/node_modules/isexe/mode.js | 41 + .../npm/node_modules/isexe/package.json | 31 + .../npm/node_modules/isexe/test/basic.js | 221 + .../npm/node_modules/isexe/windows.js | 42 + .../npm/node_modules/jackspeak/LICENSE.md | 55 + .../jackspeak/dist/commonjs/index.js | 1010 + .../jackspeak/dist/commonjs/package.json | 3 + .../jackspeak/dist/commonjs/parse-args.js | 50 + .../node_modules/jackspeak/dist/esm/index.js | 1000 + .../jackspeak/dist/esm/package.json | 3 + .../jackspeak/dist/esm/parse-args.js | 26 + .../npm/node_modules/jackspeak/package.json | 95 + .../json-parse-even-better-errors/LICENSE.md | 25 + .../lib/index.js | 137 + .../package.json | 50 + .../node_modules/json-stringify-nice/LICENSE | 15 + .../node_modules/json-stringify-nice/index.js | 38 + .../json-stringify-nice/package.json | 40 + .../npm/node_modules/jsonparse/LICENSE | 24 + .../npm/node_modules/jsonparse/bench.js | 26 + .../jsonparse/examples/twitterfeed.js | 30 + .../npm/node_modules/jsonparse/jsonparse.js | 413 + .../npm/node_modules/jsonparse/package.json | 22 + .../jsonparse/samplejson/basic.json | 167 + .../jsonparse/samplejson/basic2.json | 180 + .../node_modules/jsonparse/test/big-token.js | 24 + .../node_modules/jsonparse/test/boundary.js | 110 + .../npm/node_modules/jsonparse/test/offset.js | 67 + .../node_modules/jsonparse/test/primitives.js | 57 + .../node_modules/jsonparse/test/surrogate.js | 26 + .../node_modules/jsonparse/test/unvalid.js | 15 + .../npm/node_modules/jsonparse/test/utf8.js | 38 + .../npm/node_modules/just-diff-apply/LICENSE | 21 + .../node_modules/just-diff-apply/index.cjs | 161 + .../node_modules/just-diff-apply/index.mjs | 158 + .../node_modules/just-diff-apply/package.json | 34 + .../just-diff-apply/rollup.config.js | 3 + .../npm/node_modules/just-diff/LICENSE | 21 + .../npm/node_modules/just-diff/index.cjs | 230 + .../npm/node_modules/just-diff/index.mjs | 227 + .../npm/node_modules/just-diff/package.json | 33 + .../node_modules/just-diff/rollup.config.js | 3 + .../npm/node_modules/libnpmaccess/LICENSE | 13 + .../npm/node_modules/libnpmaccess/README.md | 93 + .../node_modules/libnpmaccess/lib/index.js | 140 + .../node_modules/libnpmaccess/package.json | 54 + .../npm/node_modules/libnpmdiff/LICENSE | 15 + .../npm/node_modules/libnpmdiff/README.md | 96 + .../libnpmdiff/lib/format-diff.js | 118 + .../npm/node_modules/libnpmdiff/lib/index.js | 62 + .../libnpmdiff/lib/should-print-patch.js | 22 + .../node_modules/libnpmdiff/lib/tarball.js | 38 + .../npm/node_modules/libnpmdiff/lib/untar.js | 95 + .../npm/node_modules/libnpmdiff/package.json | 70 + .../npm/node_modules/libnpmexec/LICENSE | 15 + .../npm/node_modules/libnpmexec/README.md | 47 + .../libnpmexec/lib/file-exists.js | 33 + .../libnpmexec/lib/get-bin-from-manifest.js | 22 + .../npm/node_modules/libnpmexec/lib/index.js | 301 + .../node_modules/libnpmexec/lib/is-windows.js | 1 + .../npm/node_modules/libnpmexec/lib/no-tty.js | 1 + .../node_modules/libnpmexec/lib/run-script.js | 61 + .../npm/node_modules/libnpmexec/package.json | 79 + .../npm/node_modules/libnpmfund/LICENSE | 15 + .../npm/node_modules/libnpmfund/README.md | 131 + .../npm/node_modules/libnpmfund/lib/index.js | 210 + .../npm/node_modules/libnpmfund/package.json | 65 + .../npm/node_modules/libnpmhook/LICENSE.md | 16 + .../npm/node_modules/libnpmhook/README.md | 271 + .../npm/node_modules/libnpmhook/lib/index.js | 70 + .../npm/node_modules/libnpmhook/package.json | 57 + .../npm/node_modules/libnpmorg/LICENSE | 13 + .../npm/node_modules/libnpmorg/README.md | 148 + .../npm/node_modules/libnpmorg/lib/index.js | 64 + .../npm/node_modules/libnpmorg/package.json | 62 + .../npm/node_modules/libnpmpack/LICENSE | 13 + .../npm/node_modules/libnpmpack/README.md | 55 + .../npm/node_modules/libnpmpack/lib/index.js | 62 + .../npm/node_modules/libnpmpack/package.json | 59 + .../npm/node_modules/libnpmpublish/LICENSE | 13 + .../npm/node_modules/libnpmpublish/README.md | 120 + .../node_modules/libnpmpublish/lib/index.js | 4 + .../libnpmpublish/lib/provenance.js | 245 + .../node_modules/libnpmpublish/lib/publish.js | 225 + .../libnpmpublish/lib/unpublish.js | 119 + .../node_modules/libnpmpublish/package.json | 65 + .../npm/node_modules/libnpmsearch/LICENSE | 13 + .../npm/node_modules/libnpmsearch/README.md | 173 + .../node_modules/libnpmsearch/lib/index.js | 71 + .../node_modules/libnpmsearch/package.json | 58 + .../npm/node_modules/libnpmteam/LICENSE | 13 + .../npm/node_modules/libnpmteam/README.md | 188 + .../npm/node_modules/libnpmteam/lib/index.js | 92 + .../npm/node_modules/libnpmteam/package.json | 52 + .../npm/node_modules/libnpmversion/LICENSE | 15 + .../npm/node_modules/libnpmversion/README.md | 163 + .../node_modules/libnpmversion/lib/commit.js | 17 + .../libnpmversion/lib/enforce-clean.js | 32 + .../node_modules/libnpmversion/lib/index.js | 38 + .../libnpmversion/lib/read-json.js | 6 + .../libnpmversion/lib/retrieve-tag.js | 13 + .../npm/node_modules/libnpmversion/lib/tag.js | 30 + .../node_modules/libnpmversion/lib/version.js | 136 + .../libnpmversion/lib/write-json.js | 15 + .../node_modules/libnpmversion/package.json | 55 + .../npm/node_modules/lru-cache/LICENSE | 15 + .../lru-cache/dist/commonjs/index.js | 1546 + .../lru-cache/dist/commonjs/index.min.js | 2 + .../lru-cache/dist/commonjs/package.json | 3 + .../node_modules/lru-cache/dist/esm/index.js | 1542 + .../lru-cache/dist/esm/index.min.js | 2 + .../lru-cache/dist/esm/package.json | 3 + .../npm/node_modules/lru-cache/package.json | 116 + .../node_modules/make-fetch-happen/LICENSE | 16 + .../make-fetch-happen/lib/cache/entry.js | 471 + .../make-fetch-happen/lib/cache/errors.js | 11 + .../make-fetch-happen/lib/cache/index.js | 49 + .../make-fetch-happen/lib/cache/key.js | 17 + .../make-fetch-happen/lib/cache/policy.js | 161 + .../make-fetch-happen/lib/fetch.js | 118 + .../make-fetch-happen/lib/index.js | 41 + .../make-fetch-happen/lib/options.js | 59 + .../make-fetch-happen/lib/pipeline.js | 41 + .../make-fetch-happen/lib/remote.js | 132 + .../make-fetch-happen/package.json | 74 + .../npm/node_modules/minimatch/LICENSE | 15 + .../dist/commonjs/assert-valid-pattern.js | 14 + .../minimatch/dist/commonjs/ast.js | 747 + .../dist/commonjs/brace-expressions.js | 152 + .../minimatch/dist/commonjs/escape.js | 22 + .../minimatch/dist/commonjs/index.js | 1023 + .../minimatch/dist/commonjs/package.json | 3 + .../minimatch/dist/commonjs/unescape.js | 24 + .../dist/esm/assert-valid-pattern.js | 10 + .../node_modules/minimatch/dist/esm/ast.js | 743 + .../minimatch/dist/esm/brace-expressions.js | 148 + .../node_modules/minimatch/dist/esm/escape.js | 18 + .../node_modules/minimatch/dist/esm/index.js | 1007 + .../minimatch/dist/esm/package.json | 3 + .../minimatch/dist/esm/unescape.js | 20 + .../npm/node_modules/minimatch/package.json | 82 + .../npm/node_modules/minipass-collect/LICENSE | 15 + .../node_modules/minipass-collect/index.js | 71 + .../minipass-collect/package.json | 30 + .../npm/node_modules/minipass-fetch/LICENSE | 28 + .../minipass-fetch/lib/abort-error.js | 17 + .../node_modules/minipass-fetch/lib/blob.js | 97 + .../node_modules/minipass-fetch/lib/body.js | 350 + .../minipass-fetch/lib/fetch-error.js | 32 + .../minipass-fetch/lib/headers.js | 267 + .../node_modules/minipass-fetch/lib/index.js | 376 + .../minipass-fetch/lib/request.js | 282 + .../minipass-fetch/lib/response.js | 90 + .../node_modules/minipass-fetch/package.json | 70 + .../npm/node_modules/minipass-flush/LICENSE | 15 + .../npm/node_modules/minipass-flush/index.js | 39 + .../node_modules/minipass/LICENSE | 15 + .../node_modules/minipass/index.js | 649 + .../node_modules/minipass/package.json | 56 + .../node_modules/yallist/LICENSE | 15 + .../node_modules/yallist/iterator.js | 8 + .../node_modules/yallist/package.json | 29 + .../node_modules/yallist/yallist.js | 426 + .../node_modules/minipass-flush/package.json | 39 + .../node_modules/minipass-pipeline/LICENSE | 15 + .../node_modules/minipass-pipeline/index.js | 128 + .../node_modules/minipass/LICENSE | 15 + .../node_modules/minipass/index.js | 649 + .../node_modules/minipass/package.json | 56 + .../node_modules/yallist/LICENSE | 15 + .../node_modules/yallist/iterator.js | 8 + .../node_modules/yallist/package.json | 29 + .../node_modules/yallist/yallist.js | 426 + .../minipass-pipeline/package.json | 29 + .../npm/node_modules/minipass-sized/LICENSE | 15 + .../npm/node_modules/minipass-sized/index.js | 67 + .../node_modules/minipass/LICENSE | 15 + .../node_modules/minipass/index.js | 649 + .../node_modules/minipass/package.json | 56 + .../node_modules/yallist/LICENSE | 15 + .../node_modules/yallist/iterator.js | 8 + .../node_modules/yallist/package.json | 29 + .../node_modules/yallist/yallist.js | 426 + .../node_modules/minipass-sized/package.json | 39 + .../node_modules/minipass-sized/test/basic.js | 83 + .../npm/node_modules/minipass/LICENSE.md | 55 + .../minipass/dist/commonjs/index.js | 1038 + .../minipass/dist/commonjs/package.json | 3 + .../node_modules/minipass/dist/esm/index.js | 1020 + .../minipass/dist/esm/package.json | 3 + .../npm/node_modules/minipass/package.json | 77 + .../npm/node_modules/minizlib/LICENSE | 26 + .../minizlib/dist/commonjs/constants.js | 123 + .../minizlib/dist/commonjs/index.js | 416 + .../minizlib/dist/commonjs/package.json | 3 + .../minizlib/dist/esm/constants.js | 117 + .../node_modules/minizlib/dist/esm/index.js | 363 + .../minizlib/dist/esm/package.json | 3 + .../npm/node_modules/minizlib/package.json | 80 + .../node_modules/npm/node_modules/ms/index.js | 162 + .../npm/node_modules/ms/license.md | 21 + .../npm/node_modules/ms/package.json | 38 + .../npm/node_modules/mute-stream/LICENSE | 15 + .../npm/node_modules/mute-stream/lib/index.js | 142 + .../npm/node_modules/mute-stream/package.json | 54 + .../npm/node_modules/negotiator/HISTORY.md | 114 + .../npm/node_modules/negotiator/LICENSE | 24 + .../npm/node_modules/negotiator/index.js | 83 + .../node_modules/negotiator/lib/charset.js | 169 + .../node_modules/negotiator/lib/encoding.js | 205 + .../node_modules/negotiator/lib/language.js | 179 + .../node_modules/negotiator/lib/mediaType.js | 294 + .../npm/node_modules/negotiator/package.json | 43 + .../node-gyp/.release-please-manifest.json | 3 + .../npm/node_modules/node-gyp/CHANGELOG.md | 1131 + .../node_modules/node-gyp/CODE_OF_CONDUCT.md | 4 + .../npm/node_modules/node-gyp/CONTRIBUTING.md | 34 + .../npm/node_modules/node-gyp/LICENSE | 24 + .../npm/node_modules/node-gyp/README.md | 292 + .../npm/node_modules/node-gyp/SECURITY.md | 2 + .../npm/node_modules/node-gyp/addon.gypi | 204 + .../npm/node_modules/node-gyp/bin/node-gyp.js | 138 + .../node_modules/node-gyp/eslint.config.js | 3 + .../gyp/.release-please-manifest.json | 3 + .../npm/node_modules/node-gyp/gyp/LICENSE | 28 + .../node-gyp/gyp/data/ninja/build.ninja | 4 + .../node-gyp/gyp/data/win/large-pdb-shim.cc | 12 + .../node-gyp/gyp/docs/GypVsCMake.md | 116 + .../node_modules/node-gyp/gyp/docs/Hacking.md | 46 + .../node-gyp/gyp/docs/InputFormatReference.md | 1083 + .../gyp/docs/LanguageSpecification.md | 430 + .../node_modules/node-gyp/gyp/docs/README.md | 27 + .../node_modules/node-gyp/gyp/docs/Testing.md | 450 + .../node-gyp/gyp/docs/UserDocumentation.md | 965 + .../npm/node_modules/node-gyp/gyp/gyp | 8 + .../npm/node_modules/node-gyp/gyp/gyp.bat | 5 + .../npm/node_modules/node-gyp/gyp/gyp_main.py | 45 + .../node-gyp/gyp/pylib/gyp/MSVSNew.py | 365 + .../node-gyp/gyp/pylib/gyp/MSVSProject.py | 206 + .../node-gyp/gyp/pylib/gyp/MSVSSettings.py | 1283 + .../gyp/pylib/gyp/MSVSSettings_test.py | 1545 + .../node-gyp/gyp/pylib/gyp/MSVSToolFile.py | 59 + .../node-gyp/gyp/pylib/gyp/MSVSUserFile.py | 152 + .../node-gyp/gyp/pylib/gyp/MSVSUtil.py | 270 + .../node-gyp/gyp/pylib/gyp/MSVSVersion.py | 574 + .../node-gyp/gyp/pylib/gyp/__init__.py | 707 + .../gyp/__pycache__/MSVSUtil.cpython-313.pyc | Bin 0 -> 9482 bytes .../__pycache__/MSVSVersion.cpython-313.pyc | Bin 0 -> 18221 bytes .../gyp/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 24004 bytes .../gyp/__pycache__/common.cpython-313.pyc | Bin 0 -> 28033 bytes .../gyp/__pycache__/input.cpython-313.pyc | Bin 0 -> 86866 bytes .../msvs_emulation.cpython-313.pyc | Bin 0 -> 57976 bytes .../__pycache__/ninja_syntax.cpython-313.pyc | Bin 0 -> 7774 bytes .../__pycache__/simple_copy.cpython-313.pyc | Bin 0 -> 2149 bytes .../xcode_emulation.cpython-313.pyc | Bin 0 -> 89428 bytes .../__pycache__/xcode_ninja.cpython-313.pyc | Bin 0 -> 11602 bytes .../xcodeproj_file.cpython-313.pyc | Bin 0 -> 115289 bytes .../node-gyp/gyp/pylib/gyp/common.py | 725 + .../node-gyp/gyp/pylib/gyp/common_test.py | 186 + .../node-gyp/gyp/pylib/gyp/easy_xml.py | 170 + .../node-gyp/gyp/pylib/gyp/easy_xml_test.py | 113 + .../node-gyp/gyp/pylib/gyp/flock_tool.py | 55 + .../gyp/pylib/gyp/generator/__init__.py | 0 .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 199 bytes .../__pycache__/make.cpython-313.pyc | Bin 0 -> 104296 bytes .../__pycache__/ninja.cpython-313.pyc | Bin 0 -> 111481 bytes .../__pycache__/xcode.cpython-313.pyc | Bin 0 -> 41542 bytes .../gyp/pylib/gyp/generator/analyzer.py | 805 + .../gyp/pylib/gyp/generator/android.py | 1169 + .../node-gyp/gyp/pylib/gyp/generator/cmake.py | 1316 + .../gyp/generator/compile_commands_json.py | 128 + .../gyp/generator/dump_dependency_json.py | 104 + .../gyp/pylib/gyp/generator/eclipse.py | 461 + .../node-gyp/gyp/pylib/gyp/generator/gypd.py | 88 + .../node-gyp/gyp/pylib/gyp/generator/gypsh.py | 55 + .../node-gyp/gyp/pylib/gyp/generator/make.py | 2755 + .../node-gyp/gyp/pylib/gyp/generator/msvs.py | 3970 + .../gyp/pylib/gyp/generator/msvs_test.py | 44 + .../node-gyp/gyp/pylib/gyp/generator/ninja.py | 2957 + .../gyp/pylib/gyp/generator/ninja_test.py | 67 + .../node-gyp/gyp/pylib/gyp/generator/xcode.py | 1389 + .../gyp/pylib/gyp/generator/xcode_test.py | 26 + .../node-gyp/gyp/pylib/gyp/input.py | 3097 + .../node-gyp/gyp/pylib/gyp/input_test.py | 99 + .../node-gyp/gyp/pylib/gyp/mac_tool.py | 765 + .../node-gyp/gyp/pylib/gyp/msvs_emulation.py | 1255 + .../node-gyp/gyp/pylib/gyp/ninja_syntax.py | 174 + .../node-gyp/gyp/pylib/gyp/simple_copy.py | 61 + .../node-gyp/gyp/pylib/gyp/win_tool.py | 371 + .../node-gyp/gyp/pylib/gyp/xcode_emulation.py | 1936 + .../gyp/pylib/gyp/xcode_emulation_test.py | 54 + .../node-gyp/gyp/pylib/gyp/xcode_ninja.py | 301 + .../node-gyp/gyp/pylib/gyp/xcodeproj_file.py | 3180 + .../node-gyp/gyp/pylib/gyp/xml_fix.py | 64 + .../node-gyp/gyp/pylib/packaging/LICENSE | 3 + .../gyp/pylib/packaging/LICENSE.APACHE | 177 + .../node-gyp/gyp/pylib/packaging/LICENSE.BSD | 23 + .../node-gyp/gyp/pylib/packaging/__init__.py | 15 + .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 565 bytes .../__pycache__/_structures.cpython-313.pyc | Bin 0 -> 3355 bytes .../__pycache__/version.cpython-313.pyc | Bin 0 -> 19506 bytes .../node-gyp/gyp/pylib/packaging/_elffile.py | 107 + .../gyp/pylib/packaging/_manylinux.py | 252 + .../gyp/pylib/packaging/_musllinux.py | 83 + .../node-gyp/gyp/pylib/packaging/_parser.py | 359 + .../gyp/pylib/packaging/_structures.py | 61 + .../gyp/pylib/packaging/_tokenizer.py | 192 + .../node-gyp/gyp/pylib/packaging/markers.py | 251 + .../node-gyp/gyp/pylib/packaging/metadata.py | 824 + .../node-gyp/gyp/pylib/packaging/py.typed | 0 .../gyp/pylib/packaging/requirements.py | 90 + .../gyp/pylib/packaging/specifiers.py | 1030 + .../node-gyp/gyp/pylib/packaging/tags.py | 553 + .../node-gyp/gyp/pylib/packaging/utils.py | 172 + .../node-gyp/gyp/pylib/packaging/version.py | 563 + .../node_modules/node-gyp/gyp/pyproject.toml | 114 + .../node-gyp/gyp/release-please-config.json | 11 + .../npm/node_modules/node-gyp/gyp/test_gyp.py | 260 + .../node-gyp/lib/Find-VisualStudio.cs | 250 + .../npm/node_modules/node-gyp/lib/build.js | 230 + .../npm/node_modules/node-gyp/lib/clean.js | 15 + .../node_modules/node-gyp/lib/configure.js | 328 + .../node-gyp/lib/create-config-gypi.js | 153 + .../npm/node_modules/node-gyp/lib/download.js | 39 + .../node-gyp/lib/find-node-directory.js | 63 + .../node_modules/node-gyp/lib/find-python.js | 310 + .../node-gyp/lib/find-visualstudio.js | 600 + .../npm/node_modules/node-gyp/lib/install.js | 411 + .../npm/node_modules/node-gyp/lib/list.js | 26 + .../npm/node_modules/node-gyp/lib/log.js | 168 + .../npm/node_modules/node-gyp/lib/node-gyp.js | 199 + .../node-gyp/lib/process-release.js | 146 + .../npm/node_modules/node-gyp/lib/rebuild.js | 12 + .../npm/node_modules/node-gyp/lib/remove.js | 43 + .../npm/node_modules/node-gyp/lib/util.js | 81 + .../node-gyp/macOS_Catalina_acid_test.sh | 21 + .../npm/node_modules/node-gyp/package.json | 52 + .../node-gyp/release-please-config.json | 40 + .../node-gyp/src/win_delay_load_hook.cc | 41 + .../npm/node_modules/nopt/LICENSE | 15 + .../npm/node_modules/nopt/README.md | 214 + .../npm/node_modules/nopt/bin/nopt.js | 29 + .../npm/node_modules/nopt/lib/debug.js | 5 + .../npm/node_modules/nopt/lib/nopt-lib.js | 514 + .../npm/node_modules/nopt/lib/nopt.js | 34 + .../npm/node_modules/nopt/lib/type-defs.js | 91 + .../npm/node_modules/nopt/package.json | 52 + .../normalize-package-data/LICENSE | 15 + .../lib/extract_description.js | 24 + .../normalize-package-data/lib/fixer.js | 472 + .../lib/make_warning.js | 22 + .../normalize-package-data/lib/normalize.js | 48 + .../normalize-package-data/lib/safe_format.js | 11 + .../normalize-package-data/lib/typos.json | 25 + .../lib/warning_messages.json | 30 + .../normalize-package-data/package.json | 56 + .../npm/node_modules/npm-audit-report/LICENSE | 16 + .../npm-audit-report/lib/colors.js | 22 + .../npm-audit-report/lib/exit-code.js | 14 + .../npm-audit-report/lib/index.js | 41 + .../npm-audit-report/lib/reporters/detail.js | 86 + .../npm-audit-report/lib/reporters/install.js | 75 + .../npm-audit-report/lib/reporters/json.js | 1 + .../npm-audit-report/lib/reporters/quiet.js | 1 + .../npm-audit-report/package.json | 62 + .../npm/node_modules/npm-bundled/LICENSE | 15 + .../npm/node_modules/npm-bundled/lib/index.js | 254 + .../npm/node_modules/npm-bundled/package.json | 49 + .../node_modules/npm-install-checks/LICENSE | 27 + .../npm-install-checks/lib/current-env.js | 91 + .../npm-install-checks/lib/dev-engines.js | 145 + .../npm-install-checks/lib/index.js | 90 + .../npm-install-checks/package.json | 52 + .../npm-normalize-package-bin/LICENSE | 15 + .../npm-normalize-package-bin/lib/index.js | 64 + .../npm-normalize-package-bin/package.json | 45 + .../npm/node_modules/npm-package-arg/LICENSE | 15 + .../node_modules/npm-package-arg/lib/npa.js | 481 + .../node_modules/npm-package-arg/package.json | 61 + .../npm/node_modules/npm-packlist/LICENSE | 15 + .../node_modules/npm-packlist/lib/index.js | 456 + .../node_modules/npm-packlist/package.json | 61 + .../node_modules/npm-pick-manifest/LICENSE.md | 16 + .../npm-pick-manifest/lib/index.js | 224 + .../npm-pick-manifest/package.json | 58 + .../npm/node_modules/npm-profile/LICENSE.md | 20 + .../npm/node_modules/npm-profile/lib/index.js | 278 + .../npm/node_modules/npm-profile/package.json | 52 + .../npm-registry-fetch/LICENSE.md | 20 + .../npm-registry-fetch/lib/auth.js | 181 + .../npm-registry-fetch/lib/check-response.js | 108 + .../npm-registry-fetch/lib/default-opts.js | 19 + .../npm-registry-fetch/lib/errors.js | 80 + .../npm-registry-fetch/lib/index.js | 247 + .../npm-registry-fetch/lib/json-stream.js | 223 + .../npm-registry-fetch/package.json | 68 + .../node_modules/npm-user-validate/LICENSE | 27 + .../npm-user-validate/lib/index.js | 61 + .../npm-user-validate/package.json | 50 + .../npm/node_modules/p-map/index.js | 283 + .../npm/node_modules/p-map/license | 9 + .../npm/node_modules/p-map/package.json | 57 + .../package-json-from-dist/LICENSE.md | 63 + .../dist/commonjs/index.js | 134 + .../dist/commonjs/package.json | 3 + .../package-json-from-dist/dist/esm/index.js | 129 + .../dist/esm/package.json | 3 + .../package-json-from-dist/package.json | 68 + .../npm/node_modules/pacote/LICENSE | 15 + .../npm/node_modules/pacote/README.md | 283 + .../npm/node_modules/pacote/bin/index.js | 158 + .../npm/node_modules/pacote/lib/dir.js | 102 + .../npm/node_modules/pacote/lib/fetcher.js | 497 + .../npm/node_modules/pacote/lib/file.js | 94 + .../npm/node_modules/pacote/lib/git.js | 317 + .../npm/node_modules/pacote/lib/index.js | 23 + .../npm/node_modules/pacote/lib/registry.js | 369 + .../npm/node_modules/pacote/lib/remote.js | 89 + .../pacote/lib/util/add-git-sha.js | 15 + .../node_modules/pacote/lib/util/cache-dir.js | 15 + .../pacote/lib/util/is-package-bin.js | 25 + .../npm/node_modules/pacote/lib/util/npm.js | 14 + .../node_modules/pacote/lib/util/protected.js | 5 + .../pacote/lib/util/tar-create-options.js | 31 + .../pacote/lib/util/trailing-slashes.js | 10 + .../npm/node_modules/pacote/package.json | 80 + .../parse-conflict-json/LICENSE.md | 20 + .../parse-conflict-json/lib/index.js | 104 + .../parse-conflict-json/package.json | 51 + .../npm/node_modules/path-key/index.js | 16 + .../npm/node_modules/path-key/license | 9 + .../npm/node_modules/path-key/package.json | 39 + .../npm/node_modules/path-scurry/LICENSE.md | 55 + .../path-scurry/dist/commonjs/index.js | 2014 + .../path-scurry/dist/commonjs/package.json | 3 + .../path-scurry/dist/esm/index.js | 1979 + .../path-scurry/dist/esm/package.json | 3 + .../npm/node_modules/path-scurry/package.json | 89 + .../npm/node_modules/picomatch/LICENSE | 21 + .../npm/node_modules/picomatch/index.js | 17 + .../node_modules/picomatch/lib/constants.js | 180 + .../npm/node_modules/picomatch/lib/parse.js | 1085 + .../node_modules/picomatch/lib/picomatch.js | 341 + .../npm/node_modules/picomatch/lib/scan.js | 391 + .../npm/node_modules/picomatch/lib/utils.js | 72 + .../npm/node_modules/picomatch/package.json | 83 + .../npm/node_modules/picomatch/posix.js | 3 + .../postcss-selector-parser/API.md | 874 + .../postcss-selector-parser/LICENSE-MIT | 22 + .../postcss-selector-parser/dist/index.js | 17 + .../postcss-selector-parser/dist/parser.js | 1015 + .../postcss-selector-parser/dist/processor.js | 170 + .../dist/selectors/attribute.js | 448 + .../dist/selectors/className.js | 50 + .../dist/selectors/combinator.js | 21 + .../dist/selectors/comment.js | 21 + .../dist/selectors/constructors.js | 65 + .../dist/selectors/container.js | 321 + .../dist/selectors/guards.js | 58 + .../dist/selectors/id.js | 25 + .../dist/selectors/index.js | 21 + .../dist/selectors/namespace.js | 80 + .../dist/selectors/nesting.js | 22 + .../dist/selectors/node.js | 192 + .../dist/selectors/pseudo.js | 26 + .../dist/selectors/root.js | 44 + .../dist/selectors/selector.js | 21 + .../dist/selectors/string.js | 21 + .../dist/selectors/tag.js | 21 + .../dist/selectors/types.js | 28 + .../dist/selectors/universal.js | 22 + .../dist/sortAscending.js | 11 + .../dist/tokenTypes.js | 70 + .../postcss-selector-parser/dist/tokenize.js | 239 + .../dist/util/ensureObject.js | 17 + .../dist/util/getProp.js | 18 + .../dist/util/index.js | 13 + .../dist/util/stripComments.js | 21 + .../dist/util/unesc.js | 76 + .../postcss-selector-parser/package.json | 81 + .../npm/node_modules/proc-log/LICENSE | 15 + .../npm/node_modules/proc-log/lib/index.js | 153 + .../npm/node_modules/proc-log/package.json | 46 + .../npm/node_modules/proggy/LICENSE | 15 + .../npm/node_modules/proggy/lib/client.js | 114 + .../npm/node_modules/proggy/lib/index.js | 15 + .../npm/node_modules/proggy/lib/tracker.js | 68 + .../npm/node_modules/proggy/package.json | 50 + .../promise-all-reject-late/LICENSE | 15 + .../promise-all-reject-late/index.js | 27 + .../promise-all-reject-late/package.json | 22 + .../promise-all-reject-late/test/index.js | 88 + .../node_modules/promise-call-limit/LICENSE | 15 + .../promise-call-limit/dist/commonjs/index.js | 87 + .../dist/commonjs/package.json | 3 + .../promise-call-limit/dist/esm/index.js | 60 + .../promise-call-limit/dist/esm/package.json | 3 + .../promise-call-limit/package.json | 68 + .../npm/node_modules/promise-retry/LICENSE | 19 + .../npm/node_modules/promise-retry/index.js | 52 + .../node_modules/promise-retry/package.json | 37 + .../node_modules/promise-retry/test/test.js | 263 + .../npm/node_modules/promzard/LICENSE | 15 + .../npm/node_modules/promzard/lib/index.js | 176 + .../npm/node_modules/promzard/package.json | 50 + .../node_modules/qrcode-terminal/.travis.yml | 3 + .../npm/node_modules/qrcode-terminal/LICENSE | 222 + .../node_modules/qrcode-terminal/README.md | 82 + .../qrcode-terminal/bin/qrcode-terminal.js | 101 + .../qrcode-terminal/example/basic.js | 2 + .../qrcode-terminal/example/basic.png | Bin 0 -> 46426 bytes .../qrcode-terminal/example/callback.js | 4 + .../qrcode-terminal/example/small-qrcode.js | 6 + .../node_modules/qrcode-terminal/lib/main.js | 100 + .../node_modules/qrcode-terminal/package.json | 37 + .../node_modules/qrcode-terminal/test/main.js | 63 + .../vendor/QRCode/QR8bitByte.js | 22 + .../vendor/QRCode/QRBitBuffer.js | 38 + .../vendor/QRCode/QRErrorCorrectLevel.js | 7 + .../vendor/QRCode/QRMaskPattern.js | 10 + .../qrcode-terminal/vendor/QRCode/QRMath.js | 44 + .../qrcode-terminal/vendor/QRCode/QRMode.js | 6 + .../vendor/QRCode/QRPolynomial.js | 66 + .../vendor/QRCode/QRRSBlock.js | 298 + .../qrcode-terminal/vendor/QRCode/QRUtil.js | 272 + .../qrcode-terminal/vendor/QRCode/index.js | 462 + .../npm/node_modules/read-cmd-shim/LICENSE | 14 + .../node_modules/read-cmd-shim/lib/index.js | 75 + .../node_modules/read-cmd-shim/package.json | 48 + .../read-package-json-fast/LICENSE | 15 + .../read-package-json-fast/lib/index.js | 141 + .../read-package-json-fast/package.json | 49 + .../npm/node_modules/read/LICENSE | 15 + .../read/dist/commonjs/package.json | 3 + .../node_modules/read/dist/commonjs/read.js | 94 + .../node_modules/read/dist/esm/package.json | 3 + .../npm/node_modules/read/dist/esm/read.js | 88 + .../npm/node_modules/read/package.json | 88 + .../npm/node_modules/retry/License | 21 + .../npm/node_modules/retry/Makefile | 18 + .../npm/node_modules/retry/equation.gif | Bin 0 -> 1209 bytes .../npm/node_modules/retry/example/dns.js | 31 + .../npm/node_modules/retry/example/stop.js | 40 + .../npm/node_modules/retry/index.js | 1 + .../npm/node_modules/retry/lib/retry.js | 100 + .../node_modules/retry/lib/retry_operation.js | 158 + .../npm/node_modules/retry/package.json | 32 + .../npm/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 + .../npm/node_modules/safer-buffer/LICENSE | 21 + .../safer-buffer/Porting-Buffer.md | 268 + .../node_modules/safer-buffer/dangerous.js | 58 + .../node_modules/safer-buffer/package.json | 34 + .../npm/node_modules/safer-buffer/safer.js | 77 + .../npm/node_modules/safer-buffer/tests.js | 406 + .../npm/node_modules/semver/LICENSE | 15 + .../npm/node_modules/semver/README.md | 665 + .../npm/node_modules/semver/bin/semver.js | 191 + .../node_modules/semver/classes/comparator.js | 143 + .../npm/node_modules/semver/classes/index.js | 7 + .../npm/node_modules/semver/classes/range.js | 557 + .../npm/node_modules/semver/classes/semver.js | 333 + .../node_modules/semver/functions/clean.js | 8 + .../npm/node_modules/semver/functions/cmp.js | 54 + .../node_modules/semver/functions/coerce.js | 62 + .../semver/functions/compare-build.js | 9 + .../semver/functions/compare-loose.js | 5 + .../node_modules/semver/functions/compare.js | 7 + .../npm/node_modules/semver/functions/diff.js | 60 + .../npm/node_modules/semver/functions/eq.js | 5 + .../npm/node_modules/semver/functions/gt.js | 5 + .../npm/node_modules/semver/functions/gte.js | 5 + .../npm/node_modules/semver/functions/inc.js | 21 + .../npm/node_modules/semver/functions/lt.js | 5 + .../npm/node_modules/semver/functions/lte.js | 5 + .../node_modules/semver/functions/major.js | 5 + .../node_modules/semver/functions/minor.js | 5 + .../npm/node_modules/semver/functions/neq.js | 5 + .../node_modules/semver/functions/parse.js | 18 + .../node_modules/semver/functions/patch.js | 5 + .../semver/functions/prerelease.js | 8 + .../node_modules/semver/functions/rcompare.js | 5 + .../node_modules/semver/functions/rsort.js | 5 + .../semver/functions/satisfies.js | 12 + .../npm/node_modules/semver/functions/sort.js | 5 + .../node_modules/semver/functions/valid.js | 8 + .../npm/node_modules/semver/index.js | 91 + .../node_modules/semver/internal/constants.js | 37 + .../npm/node_modules/semver/internal/debug.js | 11 + .../semver/internal/identifiers.js | 29 + .../node_modules/semver/internal/lrucache.js | 42 + .../semver/internal/parse-options.js | 17 + .../npm/node_modules/semver/internal/re.js | 223 + .../npm/node_modules/semver/package.json | 78 + .../npm/node_modules/semver/preload.js | 4 + .../npm/node_modules/semver/range.bnf | 16 + .../npm/node_modules/semver/ranges/gtr.js | 6 + .../node_modules/semver/ranges/intersects.js | 9 + .../npm/node_modules/semver/ranges/ltr.js | 6 + .../semver/ranges/max-satisfying.js | 27 + .../semver/ranges/min-satisfying.js | 26 + .../node_modules/semver/ranges/min-version.js | 63 + .../npm/node_modules/semver/ranges/outside.js | 82 + .../node_modules/semver/ranges/simplify.js | 49 + .../npm/node_modules/semver/ranges/subset.js | 249 + .../semver/ranges/to-comparators.js | 10 + .../npm/node_modules/semver/ranges/valid.js | 13 + .../npm/node_modules/shebang-command/index.js | 19 + .../npm/node_modules/shebang-command/license | 9 + .../node_modules/shebang-command/package.json | 34 + .../npm/node_modules/shebang-regex/index.js | 2 + .../npm/node_modules/shebang-regex/license | 9 + .../node_modules/shebang-regex/package.json | 35 + .../npm/node_modules/signal-exit/LICENSE.txt | 16 + .../signal-exit/dist/cjs/browser.js | 10 + .../signal-exit/dist/cjs/index.js | 279 + .../signal-exit/dist/cjs/package.json | 3 + .../signal-exit/dist/cjs/signals.js | 42 + .../signal-exit/dist/mjs/browser.js | 4 + .../signal-exit/dist/mjs/index.js | 275 + .../signal-exit/dist/mjs/package.json | 3 + .../signal-exit/dist/mjs/signals.js | 39 + .../npm/node_modules/signal-exit/package.json | 106 + .../npm/node_modules/sigstore/LICENSE | 202 + .../npm/node_modules/sigstore/dist/config.js | 120 + .../npm/node_modules/sigstore/dist/index.js | 34 + .../node_modules/sigstore/dist/sigstore.js | 112 + .../npm/node_modules/sigstore/package.json | 47 + .../npm/node_modules/smart-buffer/LICENSE | 20 + .../smart-buffer/build/smartbuffer.js | 1233 + .../node_modules/smart-buffer/build/utils.js | 108 + .../node_modules/smart-buffer/docs/ROADMAP.md | 0 .../node_modules/smart-buffer/package.json | 79 + .../node_modules/socks-proxy-agent/LICENSE | 22 + .../socks-proxy-agent/dist/index.js | 195 + .../socks-proxy-agent/package.json | 142 + .../npm/node_modules/socks/LICENSE | 20 + .../socks/build/client/socksclient.js | 793 + .../socks/build/common/constants.js | 108 + .../socks/build/common/helpers.js | 167 + .../socks/build/common/receivebuffer.js | 43 + .../node_modules/socks/build/common/util.js | 25 + .../npm/node_modules/socks/build/index.js | 18 + .../node_modules/socks/docs/examples/index.md | 17 + .../examples/javascript/associateExample.md | 90 + .../docs/examples/javascript/bindExample.md | 83 + .../examples/javascript/connectExample.md | 258 + .../examples/typescript/associateExample.md | 93 + .../docs/examples/typescript/bindExample.md | 86 + .../examples/typescript/connectExample.md | 265 + .../npm/node_modules/socks/docs/index.md | 5 + .../socks/docs/migratingFromV1.md | 86 + .../npm/node_modules/socks/package.json | 58 + .../npm/node_modules/spdx-correct/LICENSE | 202 + .../npm/node_modules/spdx-correct/index.js | 386 + .../spdx-expression-parse/AUTHORS | 4 + .../spdx-expression-parse/LICENSE | 22 + .../spdx-expression-parse/index.js | 8 + .../spdx-expression-parse/package.json | 39 + .../spdx-expression-parse/parse.js | 138 + .../spdx-expression-parse/scan.js | 131 + .../node_modules/spdx-correct/package.json | 32 + .../spdx-exceptions/deprecated.json | 3 + .../node_modules/spdx-exceptions/index.json | 68 + .../node_modules/spdx-exceptions/package.json | 19 + .../spdx-expression-parse/AUTHORS | 4 + .../spdx-expression-parse/LICENSE | 22 + .../spdx-expression-parse/index.js | 8 + .../spdx-expression-parse/package.json | 39 + .../spdx-expression-parse/parse.js | 138 + .../spdx-expression-parse/scan.js | 131 + .../spdx-license-ids/deprecated.json | 28 + .../node_modules/spdx-license-ids/index.json | 697 + .../spdx-license-ids/package.json | 29 + .../npm/node_modules/ssri/LICENSE.md | 16 + .../npm/node_modules/ssri/lib/index.js | 580 + .../npm/node_modules/ssri/package.json | 66 + .../node_modules/string-width-cjs/index.js | 47 + .../npm/node_modules/string-width-cjs/license | 9 + .../string-width-cjs/package.json | 56 + .../npm/node_modules/string-width/index.js | 47 + .../npm/node_modules/string-width/license | 9 + .../node_modules/string-width/package.json | 56 + .../npm/node_modules/strip-ansi-cjs/index.js | 4 + .../npm/node_modules/strip-ansi-cjs/license | 9 + .../node_modules/strip-ansi-cjs/package.json | 54 + .../npm/node_modules/strip-ansi/index.js | 4 + .../npm/node_modules/strip-ansi/license | 9 + .../npm/node_modules/strip-ansi/package.json | 54 + .../node_modules/supports-color/browser.js | 30 + .../npm/node_modules/supports-color/index.js | 182 + .../npm/node_modules/supports-color/license | 9 + .../node_modules/supports-color/package.json | 60 + .../npm/node_modules/tar/LICENSE.md | 55 + .../node_modules/tar/dist/commonjs/create.js | 83 + .../tar/dist/commonjs/cwd-error.js | 18 + .../node_modules/tar/dist/commonjs/extract.js | 88 + .../tar/dist/commonjs/get-write-flag.js | 29 + .../node_modules/tar/dist/commonjs/header.js | 325 + .../node_modules/tar/dist/commonjs/index.js | 64 + .../tar/dist/commonjs/index.min.js | 4 + .../tar/dist/commonjs/large-numbers.js | 99 + .../node_modules/tar/dist/commonjs/list.js | 150 + .../tar/dist/commonjs/make-command.js | 61 + .../node_modules/tar/dist/commonjs/mkdir.js | 188 + .../tar/dist/commonjs/mode-fix.js | 29 + .../tar/dist/commonjs/normalize-unicode.js | 38 + .../dist/commonjs/normalize-windows-path.js | 12 + .../node_modules/tar/dist/commonjs/options.js | 66 + .../node_modules/tar/dist/commonjs/pack.js | 516 + .../tar/dist/commonjs/package.json | 3 + .../node_modules/tar/dist/commonjs/parse.js | 620 + .../tar/dist/commonjs/path-reservations.js | 170 + .../npm/node_modules/tar/dist/commonjs/pax.js | 158 + .../tar/dist/commonjs/process-umask.js | 7 + .../tar/dist/commonjs/read-entry.js | 140 + .../node_modules/tar/dist/commonjs/replace.js | 232 + .../tar/dist/commonjs/strip-absolute-path.js | 29 + .../dist/commonjs/strip-trailing-slashes.js | 18 + .../tar/dist/commonjs/symlink-error.js | 19 + .../node_modules/tar/dist/commonjs/types.js | 50 + .../node_modules/tar/dist/commonjs/unpack.js | 957 + .../node_modules/tar/dist/commonjs/update.js | 33 + .../tar/dist/commonjs/warn-method.js | 31 + .../tar/dist/commonjs/winchars.js | 14 + .../tar/dist/commonjs/write-entry.js | 699 + .../npm/node_modules/tar/dist/esm/create.js | 77 + .../node_modules/tar/dist/esm/cwd-error.js | 14 + .../npm/node_modules/tar/dist/esm/extract.js | 49 + .../tar/dist/esm/get-write-flag.js | 23 + .../npm/node_modules/tar/dist/esm/header.js | 288 + .../npm/node_modules/tar/dist/esm/index.js | 20 + .../node_modules/tar/dist/esm/index.min.js | 4 + .../tar/dist/esm/large-numbers.js | 94 + .../npm/node_modules/tar/dist/esm/list.js | 110 + .../node_modules/tar/dist/esm/make-command.js | 57 + .../npm/node_modules/tar/dist/esm/mkdir.js | 180 + .../npm/node_modules/tar/dist/esm/mode-fix.js | 25 + .../tar/dist/esm/normalize-unicode.js | 34 + .../tar/dist/esm/normalize-windows-path.js | 9 + .../npm/node_modules/tar/dist/esm/options.js | 54 + .../npm/node_modules/tar/dist/esm/pack.js | 474 + .../node_modules/tar/dist/esm/package.json | 3 + .../npm/node_modules/tar/dist/esm/parse.js | 616 + .../tar/dist/esm/path-reservations.js | 166 + .../npm/node_modules/tar/dist/esm/pax.js | 154 + .../tar/dist/esm/process-umask.js | 3 + .../node_modules/tar/dist/esm/read-entry.js | 136 + .../npm/node_modules/tar/dist/esm/replace.js | 226 + .../tar/dist/esm/strip-absolute-path.js | 25 + .../tar/dist/esm/strip-trailing-slashes.js | 14 + .../tar/dist/esm/symlink-error.js | 15 + .../npm/node_modules/tar/dist/esm/types.js | 45 + .../npm/node_modules/tar/dist/esm/unpack.js | 916 + .../npm/node_modules/tar/dist/esm/update.js | 30 + .../node_modules/tar/dist/esm/warn-method.js | 27 + .../npm/node_modules/tar/dist/esm/winchars.js | 9 + .../node_modules/tar/dist/esm/write-entry.js | 657 + .../npm/node_modules/tar/package.json | 292 + .../npm/node_modules/text-table/LICENSE | 18 + .../node_modules/text-table/example/align.js | 8 + .../node_modules/text-table/example/center.js | 8 + .../text-table/example/dotalign.js | 9 + .../text-table/example/doubledot.js | 11 + .../node_modules/text-table/example/table.js | 6 + .../npm/node_modules/text-table/index.js | 86 + .../npm/node_modules/text-table/package.json | 44 + .../npm/node_modules/text-table/test/align.js | 18 + .../text-table/test/ansi-colors.js | 32 + .../node_modules/text-table/test/center.js | 18 + .../node_modules/text-table/test/dotalign.js | 20 + .../node_modules/text-table/test/doubledot.js | 24 + .../npm/node_modules/text-table/test/table.js | 14 + .../tiny-relative-date/LICENSE.md | 21 + .../tiny-relative-date/lib/factory.js | 100 + .../tiny-relative-date/lib/index.js | 18 + .../tiny-relative-date/package.json | 39 + .../tiny-relative-date/src/factory.js | 89 + .../tiny-relative-date/src/index.js | 4 + .../tiny-relative-date/translations/da.js | 31 + .../tiny-relative-date/translations/de.js | 31 + .../translations/en-short.js | 31 + .../tiny-relative-date/translations/en.js | 31 + .../tiny-relative-date/translations/es.js | 31 + .../npm/node_modules/tinyglobby/LICENSE | 21 + .../node_modules/tinyglobby/dist/index.cjs | 350 + .../node_modules/tinyglobby/dist/index.d.cts | 147 + .../node_modules/tinyglobby/dist/index.d.mts | 147 + .../node_modules/tinyglobby/dist/index.mjs | 318 + .../npm/node_modules/tinyglobby/package.json | 73 + .../npm/node_modules/treeverse/LICENSE | 15 + .../npm/node_modules/treeverse/lib/breadth.js | 67 + .../treeverse/lib/depth-descent.js | 88 + .../npm/node_modules/treeverse/lib/depth.js | 76 + .../npm/node_modules/treeverse/lib/index.js | 4 + .../npm/node_modules/treeverse/package.json | 51 + .../npm/node_modules/tuf-js/LICENSE | 21 + .../npm/node_modules/tuf-js/dist/config.js | 15 + .../npm/node_modules/tuf-js/dist/error.js | 49 + .../npm/node_modules/tuf-js/dist/fetcher.js | 86 + .../npm/node_modules/tuf-js/dist/index.js | 9 + .../npm/node_modules/tuf-js/dist/store.js | 219 + .../npm/node_modules/tuf-js/dist/updater.js | 368 + .../node_modules/tuf-js/dist/utils/tmpfile.js | 25 + .../npm/node_modules/tuf-js/dist/utils/url.js | 13 + .../tuf-js/node_modules/@tufjs/models/LICENSE | 21 + .../node_modules/@tufjs/models/dist/base.js | 92 + .../@tufjs/models/dist/delegations.js | 115 + .../node_modules/@tufjs/models/dist/error.js | 27 + .../node_modules/@tufjs/models/dist/file.js | 183 + .../node_modules/@tufjs/models/dist/index.js | 24 + .../node_modules/@tufjs/models/dist/key.js | 85 + .../@tufjs/models/dist/metadata.js | 160 + .../node_modules/@tufjs/models/dist/role.js | 299 + .../node_modules/@tufjs/models/dist/root.js | 116 + .../@tufjs/models/dist/signature.js | 38 + .../@tufjs/models/dist/snapshot.js | 71 + .../@tufjs/models/dist/targets.js | 92 + .../@tufjs/models/dist/timestamp.js | 58 + .../@tufjs/models/dist/utils/guard.js | 32 + .../@tufjs/models/dist/utils/index.js | 28 + .../@tufjs/models/dist/utils/key.js | 142 + .../@tufjs/models/dist/utils/oid.js | 26 + .../@tufjs/models/dist/utils/types.js | 2 + .../@tufjs/models/dist/utils/verify.js | 13 + .../node_modules/@tufjs/models/package.json | 37 + .../npm/node_modules/tuf-js/package.json | 43 + .../npm/node_modules/unique-filename/LICENSE | 5 + .../node_modules/unique-filename/lib/index.js | 7 + .../node_modules/unique-filename/package.json | 53 + .../npm/node_modules/unique-slug/LICENSE | 15 + .../npm/node_modules/unique-slug/lib/index.js | 11 + .../npm/node_modules/unique-slug/package.json | 49 + .../node_modules/util-deprecate/History.md | 16 + .../npm/node_modules/util-deprecate/LICENSE | 24 + .../node_modules/util-deprecate/browser.js | 67 + .../npm/node_modules/util-deprecate/node.js | 6 + .../node_modules/util-deprecate/package.json | 27 + .../validate-npm-package-license/LICENSE | 202 + .../validate-npm-package-license/index.js | 86 + .../spdx-expression-parse/AUTHORS | 4 + .../spdx-expression-parse/LICENSE | 22 + .../spdx-expression-parse/index.js | 8 + .../spdx-expression-parse/package.json | 39 + .../spdx-expression-parse/parse.js | 138 + .../spdx-expression-parse/scan.js | 131 + .../validate-npm-package-license/package.json | 28 + .../validate-npm-package-name/LICENSE | 6 + .../validate-npm-package-name/lib/index.js | 110 + .../validate-npm-package-name/package.json | 61 + .../npm/node_modules/walk-up-path/LICENSE | 15 + .../walk-up-path/dist/cjs/index.js | 18 + .../walk-up-path/dist/cjs/package.json | 3 + .../walk-up-path/dist/mjs/index.js | 14 + .../walk-up-path/dist/mjs/package.json | 3 + .../node_modules/walk-up-path/package.json | 72 + .../npm/node_modules/which/LICENSE | 15 + .../npm/node_modules/which/README.md | 51 + .../npm/node_modules/which/bin/which.js | 52 + .../npm/node_modules/which/lib/index.js | 111 + .../which/node_modules/isexe/LICENSE.md | 55 + .../node_modules/isexe/dist/commonjs/index.js | 56 + .../isexe/dist/commonjs/index.min.js | 2 + .../isexe/dist/commonjs/options.js | 3 + .../isexe/dist/commonjs/package.json | 3 + .../node_modules/isexe/dist/commonjs/posix.js | 67 + .../node_modules/isexe/dist/commonjs/win32.js | 63 + .../node_modules/isexe/dist/esm/index.js | 16 + .../node_modules/isexe/dist/esm/index.min.js | 2 + .../node_modules/isexe/dist/esm/options.js | 2 + .../node_modules/isexe/dist/esm/package.json | 3 + .../node_modules/isexe/dist/esm/posix.js | 62 + .../node_modules/isexe/dist/esm/win32.js | 58 + .../which/node_modules/isexe/package.json | 78 + .../npm/node_modules/which/package.json | 52 + .../npm/node_modules/wrap-ansi-cjs/index.js | 216 + .../npm/node_modules/wrap-ansi-cjs/license | 9 + .../node_modules/ansi-styles/index.js | 163 + .../node_modules/ansi-styles/license | 9 + .../node_modules/ansi-styles/package.json | 56 + .../node_modules/wrap-ansi-cjs/package.json | 62 + .../npm/node_modules/wrap-ansi/index.js | 214 + .../npm/node_modules/wrap-ansi/license | 9 + .../node_modules/ansi-regex/index.js | 14 + .../wrap-ansi/node_modules/ansi-regex/license | 9 + .../node_modules/ansi-regex/package.json | 61 + .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 + .../node_modules/emoji-regex/RGI_Emoji.js | 6 + .../emoji-regex/es2015/RGI_Emoji.js | 6 + .../node_modules/emoji-regex/es2015/index.js | 6 + .../node_modules/emoji-regex/es2015/text.js | 6 + .../node_modules/emoji-regex/index.js | 6 + .../node_modules/emoji-regex/package.json | 52 + .../node_modules/emoji-regex/text.js | 6 + .../node_modules/string-width/index.js | 54 + .../node_modules/string-width/license | 9 + .../node_modules/string-width/package.json | 59 + .../node_modules/strip-ansi/index.js | 19 + .../wrap-ansi/node_modules/strip-ansi/license | 9 + .../node_modules/strip-ansi/package.json | 59 + .../npm/node_modules/wrap-ansi/package.json | 69 + .../node_modules/write-file-atomic/LICENSE.md | 6 + .../write-file-atomic/lib/index.js | 267 + .../write-file-atomic/package.json | 58 + .../npm/node_modules/yallist/LICENSE.md | 63 + .../yallist/dist/commonjs/index.js | 384 + .../yallist/dist/commonjs/package.json | 3 + .../node_modules/yallist/dist/esm/index.js | 379 + .../yallist/dist/esm/package.json | 3 + .../npm/node_modules/yallist/package.json | 68 + labWeb/lab7/node_modules/npm/package.json | 264 + .../node_modules/object-inspect/.eslintrc | 53 + .../object-inspect/.github/FUNDING.yml | 12 + .../lab7/node_modules/object-inspect/.nycrc | 13 + .../node_modules/object-inspect/CHANGELOG.md | 424 + .../lab7/node_modules/object-inspect/LICENSE | 21 + .../object-inspect/example/all.js | 23 + .../object-inspect/example/circular.js | 6 + .../node_modules/object-inspect/example/fn.js | 5 + .../object-inspect/example/inspect.js | 10 + .../lab7/node_modules/object-inspect/index.js | 544 + .../object-inspect/package-support.json | 20 + .../node_modules/object-inspect/package.json | 105 + .../object-inspect/readme.markdown | 84 + .../object-inspect/test-core-js.js | 26 + .../object-inspect/test/bigint.js | 58 + .../object-inspect/test/browser/dom.js | 15 + .../object-inspect/test/circular.js | 16 + .../node_modules/object-inspect/test/deep.js | 12 + .../object-inspect/test/element.js | 53 + .../node_modules/object-inspect/test/err.js | 48 + .../node_modules/object-inspect/test/fakes.js | 29 + .../node_modules/object-inspect/test/fn.js | 76 + .../object-inspect/test/global.js | 17 + .../node_modules/object-inspect/test/has.js | 15 + .../node_modules/object-inspect/test/holes.js | 15 + .../object-inspect/test/indent-option.js | 271 + .../object-inspect/test/inspect.js | 139 + .../object-inspect/test/lowbyte.js | 12 + .../object-inspect/test/number.js | 58 + .../object-inspect/test/quoteStyle.js | 26 + .../object-inspect/test/toStringTag.js | 40 + .../node_modules/object-inspect/test/undef.js | 12 + .../object-inspect/test/values.js | 261 + .../object-inspect/util.inspect.js | 1 + .../lab7/node_modules/on-finished/HISTORY.md | 98 + labWeb/lab7/node_modules/on-finished/LICENSE | 23 + .../lab7/node_modules/on-finished/README.md | 162 + labWeb/lab7/node_modules/on-finished/index.js | 234 + .../node_modules/on-finished/package.json | 39 + labWeb/lab7/node_modules/parseurl/HISTORY.md | 58 + labWeb/lab7/node_modules/parseurl/LICENSE | 24 + labWeb/lab7/node_modules/parseurl/README.md | 133 + labWeb/lab7/node_modules/parseurl/index.js | 158 + .../lab7/node_modules/parseurl/package.json | 40 + .../lab7/node_modules/path-to-regexp/LICENSE | 21 + .../node_modules/path-to-regexp/Readme.md | 35 + .../lab7/node_modules/path-to-regexp/index.js | 158 + .../node_modules/path-to-regexp/package.json | 30 + labWeb/lab7/node_modules/picomatch/LICENSE | 21 + labWeb/lab7/node_modules/picomatch/README.md | 716 + labWeb/lab7/node_modules/picomatch/index.js | 3 + .../node_modules/picomatch/lib/constants.js | 184 + .../lab7/node_modules/picomatch/lib/parse.js | 1392 + .../node_modules/picomatch/lib/picomatch.js | 342 + .../lab7/node_modules/picomatch/lib/scan.js | 391 + .../lab7/node_modules/picomatch/lib/utils.js | 64 + .../lab7/node_modules/picomatch/package.json | 81 + .../lab7/node_modules/proxy-addr/HISTORY.md | 161 + labWeb/lab7/node_modules/proxy-addr/LICENSE | 22 + labWeb/lab7/node_modules/proxy-addr/README.md | 139 + labWeb/lab7/node_modules/proxy-addr/index.js | 327 + .../lab7/node_modules/proxy-addr/package.json | 47 + .../lab7/node_modules/pstree.remy/.travis.yml | 8 + labWeb/lab7/node_modules/pstree.remy/LICENSE | 7 + .../lab7/node_modules/pstree.remy/README.md | 26 + .../node_modules/pstree.remy/lib/index.js | 37 + .../lab7/node_modules/pstree.remy/lib/tree.js | 37 + .../node_modules/pstree.remy/lib/utils.js | 53 + .../node_modules/pstree.remy/package.json | 33 + .../pstree.remy/tests/fixtures/index.js | 13 + .../pstree.remy/tests/fixtures/out1 | 10 + .../pstree.remy/tests/fixtures/out2 | 29 + .../pstree.remy/tests/index.test.js | 51 + labWeb/lab7/node_modules/qs/.editorconfig | 46 + .../lab7/node_modules/qs/.github/FUNDING.yml | 12 + .../lab7/node_modules/qs/.github/SECURITY.md | 11 + .../node_modules/qs/.github/THREAT_MODEL.md | 78 + labWeb/lab7/node_modules/qs/.nycrc | 13 + labWeb/lab7/node_modules/qs/CHANGELOG.md | 644 + labWeb/lab7/node_modules/qs/LICENSE.md | 29 + labWeb/lab7/node_modules/qs/README.md | 740 + labWeb/lab7/node_modules/qs/dist/qs.js | 141 + labWeb/lab7/node_modules/qs/eslint.config.mjs | 56 + labWeb/lab7/node_modules/qs/lib/formats.js | 23 + labWeb/lab7/node_modules/qs/lib/index.js | 11 + labWeb/lab7/node_modules/qs/lib/parse.js | 371 + labWeb/lab7/node_modules/qs/lib/stringify.js | 356 + labWeb/lab7/node_modules/qs/lib/utils.js | 340 + labWeb/lab7/node_modules/qs/package.json | 94 + .../node_modules/qs/test/empty-keys-cases.js | 267 + labWeb/lab7/node_modules/qs/test/parse.js | 1512 + labWeb/lab7/node_modules/qs/test/stringify.js | 1310 + labWeb/lab7/node_modules/qs/test/utils.js | 397 + .../lab7/node_modules/range-parser/HISTORY.md | 56 + labWeb/lab7/node_modules/range-parser/LICENSE | 23 + .../lab7/node_modules/range-parser/README.md | 84 + .../lab7/node_modules/range-parser/index.js | 162 + .../node_modules/range-parser/package.json | 44 + labWeb/lab7/node_modules/raw-body/LICENSE | 22 + labWeb/lab7/node_modules/raw-body/README.md | 223 + labWeb/lab7/node_modules/raw-body/index.d.ts | 87 + labWeb/lab7/node_modules/raw-body/index.js | 336 + .../lab7/node_modules/raw-body/package.json | 47 + labWeb/lab7/node_modules/readdirp/LICENSE | 21 + labWeb/lab7/node_modules/readdirp/README.md | 122 + labWeb/lab7/node_modules/readdirp/index.d.ts | 43 + labWeb/lab7/node_modules/readdirp/index.js | 287 + .../lab7/node_modules/readdirp/package.json | 122 + labWeb/lab7/node_modules/safe-buffer/LICENSE | 21 + .../lab7/node_modules/safe-buffer/README.md | 584 + .../lab7/node_modules/safe-buffer/index.d.ts | 187 + labWeb/lab7/node_modules/safe-buffer/index.js | 65 + .../node_modules/safe-buffer/package.json | 51 + labWeb/lab7/node_modules/safer-buffer/LICENSE | 21 + .../safer-buffer/Porting-Buffer.md | 268 + .../lab7/node_modules/safer-buffer/Readme.md | 156 + .../node_modules/safer-buffer/dangerous.js | 58 + .../node_modules/safer-buffer/package.json | 34 + .../lab7/node_modules/safer-buffer/safer.js | 77 + .../lab7/node_modules/safer-buffer/tests.js | 406 + labWeb/lab7/node_modules/semver/LICENSE | 15 + labWeb/lab7/node_modules/semver/README.md | 637 + labWeb/lab7/node_modules/semver/bin/semver.js | 197 + .../node_modules/semver/classes/comparator.js | 141 + .../lab7/node_modules/semver/classes/index.js | 5 + .../lab7/node_modules/semver/classes/range.js | 539 + .../node_modules/semver/classes/semver.js | 302 + .../node_modules/semver/functions/clean.js | 6 + .../lab7/node_modules/semver/functions/cmp.js | 52 + .../node_modules/semver/functions/coerce.js | 52 + .../semver/functions/compare-build.js | 7 + .../semver/functions/compare-loose.js | 3 + .../node_modules/semver/functions/compare.js | 5 + .../node_modules/semver/functions/diff.js | 65 + .../lab7/node_modules/semver/functions/eq.js | 3 + .../lab7/node_modules/semver/functions/gt.js | 3 + .../lab7/node_modules/semver/functions/gte.js | 3 + .../lab7/node_modules/semver/functions/inc.js | 19 + .../lab7/node_modules/semver/functions/lt.js | 3 + .../lab7/node_modules/semver/functions/lte.js | 3 + .../node_modules/semver/functions/major.js | 3 + .../node_modules/semver/functions/minor.js | 3 + .../lab7/node_modules/semver/functions/neq.js | 3 + .../node_modules/semver/functions/parse.js | 16 + .../node_modules/semver/functions/patch.js | 3 + .../semver/functions/prerelease.js | 6 + .../node_modules/semver/functions/rcompare.js | 3 + .../node_modules/semver/functions/rsort.js | 3 + .../semver/functions/satisfies.js | 10 + .../node_modules/semver/functions/sort.js | 3 + .../node_modules/semver/functions/valid.js | 6 + labWeb/lab7/node_modules/semver/index.js | 89 + .../node_modules/semver/internal/constants.js | 35 + .../node_modules/semver/internal/debug.js | 9 + .../semver/internal/identifiers.js | 23 + .../semver/internal/parse-options.js | 15 + .../lab7/node_modules/semver/internal/re.js | 212 + labWeb/lab7/node_modules/semver/package.json | 87 + labWeb/lab7/node_modules/semver/preload.js | 2 + labWeb/lab7/node_modules/semver/range.bnf | 16 + labWeb/lab7/node_modules/semver/ranges/gtr.js | 4 + .../node_modules/semver/ranges/intersects.js | 7 + labWeb/lab7/node_modules/semver/ranges/ltr.js | 4 + .../semver/ranges/max-satisfying.js | 25 + .../semver/ranges/min-satisfying.js | 24 + .../node_modules/semver/ranges/min-version.js | 61 + .../node_modules/semver/ranges/outside.js | 80 + .../node_modules/semver/ranges/simplify.js | 47 + .../lab7/node_modules/semver/ranges/subset.js | 247 + .../semver/ranges/to-comparators.js | 8 + .../lab7/node_modules/semver/ranges/valid.js | 11 + labWeb/lab7/node_modules/send/HISTORY.md | 538 + labWeb/lab7/node_modules/send/LICENSE | 23 + labWeb/lab7/node_modules/send/README.md | 327 + labWeb/lab7/node_modules/send/SECURITY.md | 24 + labWeb/lab7/node_modules/send/index.js | 1142 + .../send/node_modules/ms/index.js | 162 + .../send/node_modules/ms/license.md | 21 + .../send/node_modules/ms/package.json | 38 + .../send/node_modules/ms/readme.md | 59 + labWeb/lab7/node_modules/send/package.json | 62 + .../lab7/node_modules/serve-static/HISTORY.md | 493 + labWeb/lab7/node_modules/serve-static/LICENSE | 25 + .../lab7/node_modules/serve-static/README.md | 257 + .../lab7/node_modules/serve-static/index.js | 209 + .../node_modules/serve-static/package.json | 42 + .../lab7/node_modules/setprototypeof/LICENSE | 13 + .../node_modules/setprototypeof/README.md | 31 + .../node_modules/setprototypeof/index.d.ts | 2 + .../lab7/node_modules/setprototypeof/index.js | 17 + .../node_modules/setprototypeof/package.json | 38 + .../node_modules/setprototypeof/test/index.js | 24 + .../side-channel-list/.editorconfig | 9 + .../node_modules/side-channel-list/.eslintrc | 11 + .../side-channel-list/.github/FUNDING.yml | 12 + .../node_modules/side-channel-list/.nycrc | 13 + .../side-channel-list/CHANGELOG.md | 36 + .../node_modules/side-channel-list/LICENSE | 21 + .../node_modules/side-channel-list/README.md | 62 + .../node_modules/side-channel-list/index.d.ts | 13 + .../node_modules/side-channel-list/index.js | 111 + .../node_modules/side-channel-list/list.d.ts | 14 + .../side-channel-list/package.json | 77 + .../side-channel-list/test/index.js | 154 + .../side-channel-list/tsconfig.json | 9 + .../side-channel-map/.editorconfig | 9 + .../node_modules/side-channel-map/.eslintrc | 11 + .../side-channel-map/.github/FUNDING.yml | 12 + .../lab7/node_modules/side-channel-map/.nycrc | 13 + .../side-channel-map/CHANGELOG.md | 22 + .../node_modules/side-channel-map/LICENSE | 21 + .../node_modules/side-channel-map/README.md | 62 + .../node_modules/side-channel-map/index.d.ts | 15 + .../node_modules/side-channel-map/index.js | 68 + .../side-channel-map/package.json | 80 + .../side-channel-map/test/index.js | 114 + .../side-channel-map/tsconfig.json | 9 + .../side-channel-weakmap/.editorconfig | 9 + .../side-channel-weakmap/.eslintrc | 12 + .../side-channel-weakmap/.github/FUNDING.yml | 12 + .../node_modules/side-channel-weakmap/.nycrc | 13 + .../side-channel-weakmap/CHANGELOG.md | 28 + .../node_modules/side-channel-weakmap/LICENSE | 21 + .../side-channel-weakmap/README.md | 62 + .../side-channel-weakmap/index.d.ts | 15 + .../side-channel-weakmap/index.js | 84 + .../side-channel-weakmap/package.json | 87 + .../side-channel-weakmap/test/index.js | 114 + .../side-channel-weakmap/tsconfig.json | 9 + .../node_modules/side-channel/.editorconfig | 9 + .../lab7/node_modules/side-channel/.eslintrc | 12 + .../side-channel/.github/FUNDING.yml | 12 + labWeb/lab7/node_modules/side-channel/.nycrc | 13 + .../node_modules/side-channel/CHANGELOG.md | 110 + labWeb/lab7/node_modules/side-channel/LICENSE | 21 + .../lab7/node_modules/side-channel/README.md | 61 + .../lab7/node_modules/side-channel/index.d.ts | 14 + .../lab7/node_modules/side-channel/index.js | 43 + .../node_modules/side-channel/package.json | 85 + .../node_modules/side-channel/test/index.js | 104 + .../node_modules/side-channel/tsconfig.json | 9 + .../simple-update-notifier/LICENSE | 21 + .../simple-update-notifier/README.md | 82 + .../simple-update-notifier/build/index.d.ts | 13 + .../simple-update-notifier/build/index.js | 210 + .../simple-update-notifier/package.json | 100 + .../src/borderedText.ts | 12 + .../simple-update-notifier/src/cache.spec.ts | 17 + .../simple-update-notifier/src/cache.ts | 44 + .../src/getDistVersion.spec.ts | 35 + .../src/getDistVersion.ts | 29 + .../src/hasNewVersion.spec.ts | 82 + .../src/hasNewVersion.ts | 40 + .../simple-update-notifier/src/index.spec.ts | 27 + .../simple-update-notifier/src/index.ts | 34 + .../simple-update-notifier/src/isNpmOrYarn.ts | 12 + .../simple-update-notifier/src/types.ts | 8 + .../lab7/node_modules/source-map/CHANGELOG.md | 301 + labWeb/lab7/node_modules/source-map/LICENSE | 28 + labWeb/lab7/node_modules/source-map/README.md | 742 + .../source-map/dist/source-map.debug.js | 3234 + .../source-map/dist/source-map.js | 3233 + .../source-map/dist/source-map.min.js | 2 + .../source-map/dist/source-map.min.js.map | 1 + .../node_modules/source-map/lib/array-set.js | 121 + .../node_modules/source-map/lib/base64-vlq.js | 140 + .../node_modules/source-map/lib/base64.js | 67 + .../source-map/lib/binary-search.js | 111 + .../source-map/lib/mapping-list.js | 79 + .../node_modules/source-map/lib/quick-sort.js | 114 + .../source-map/lib/source-map-consumer.js | 1145 + .../source-map/lib/source-map-generator.js | 425 + .../source-map/lib/source-node.js | 413 + .../lab7/node_modules/source-map/lib/util.js | 488 + .../lab7/node_modules/source-map/package.json | 73 + .../node_modules/source-map/source-map.d.ts | 98 + .../node_modules/source-map/source-map.js | 8 + labWeb/lab7/node_modules/statuses/HISTORY.md | 87 + labWeb/lab7/node_modules/statuses/LICENSE | 23 + labWeb/lab7/node_modules/statuses/README.md | 139 + labWeb/lab7/node_modules/statuses/codes.json | 65 + labWeb/lab7/node_modules/statuses/index.js | 146 + .../lab7/node_modules/statuses/package.json | 49 + .../node_modules/supports-color/browser.js | 5 + .../lab7/node_modules/supports-color/index.js | 131 + .../lab7/node_modules/supports-color/license | 9 + .../node_modules/supports-color/package.json | 53 + .../node_modules/supports-color/readme.md | 66 + .../lab7/node_modules/to-regex-range/LICENSE | 21 + .../node_modules/to-regex-range/README.md | 305 + .../lab7/node_modules/to-regex-range/index.js | 288 + .../node_modules/to-regex-range/package.json | 88 + .../lab7/node_modules/toidentifier/HISTORY.md | 9 + labWeb/lab7/node_modules/toidentifier/LICENSE | 21 + .../lab7/node_modules/toidentifier/README.md | 61 + .../lab7/node_modules/toidentifier/index.js | 32 + .../node_modules/toidentifier/package.json | 38 + labWeb/lab7/node_modules/touch/LICENSE | 15 + labWeb/lab7/node_modules/touch/README.md | 52 + .../lab7/node_modules/touch/bin/nodetouch.js | 112 + labWeb/lab7/node_modules/touch/index.js | 224 + labWeb/lab7/node_modules/touch/package.json | 28 + labWeb/lab7/node_modules/type-is/HISTORY.md | 259 + labWeb/lab7/node_modules/type-is/LICENSE | 23 + labWeb/lab7/node_modules/type-is/README.md | 170 + labWeb/lab7/node_modules/type-is/index.js | 266 + labWeb/lab7/node_modules/type-is/package.json | 45 + labWeb/lab7/node_modules/uglify-js/LICENSE | 29 + labWeb/lab7/node_modules/uglify-js/README.md | 1479 + .../lab7/node_modules/uglify-js/bin/uglifyjs | 624 + labWeb/lab7/node_modules/uglify-js/lib/ast.js | 2357 + .../node_modules/uglify-js/lib/compress.js | 14650 +++ .../lab7/node_modules/uglify-js/lib/minify.js | 278 + .../node_modules/uglify-js/lib/mozilla-ast.js | 1338 + .../lab7/node_modules/uglify-js/lib/output.js | 1983 + .../lab7/node_modules/uglify-js/lib/parse.js | 2589 + .../node_modules/uglify-js/lib/propmangle.js | 328 + .../lab7/node_modules/uglify-js/lib/scope.js | 883 + .../node_modules/uglify-js/lib/sourcemap.js | 195 + .../node_modules/uglify-js/lib/transform.js | 250 + .../lab7/node_modules/uglify-js/lib/utils.js | 300 + .../lab7/node_modules/uglify-js/package.json | 56 + .../uglify-js/tools/domprops.html | 456 + .../uglify-js/tools/domprops.json | 8327 ++ .../node_modules/uglify-js/tools/exports.js | 8 + .../lab7/node_modules/uglify-js/tools/node.js | 115 + .../lab7/node_modules/uglify-js/tools/tty.js | 22 + .../undefsafe/.github/workflows/release.yml | 25 + labWeb/lab7/node_modules/undefsafe/.jscsrc | 13 + labWeb/lab7/node_modules/undefsafe/.jshintrc | 16 + .../lab7/node_modules/undefsafe/.travis.yml | 18 + labWeb/lab7/node_modules/undefsafe/LICENSE | 22 + labWeb/lab7/node_modules/undefsafe/README.md | 63 + labWeb/lab7/node_modules/undefsafe/example.js | 14 + .../node_modules/undefsafe/lib/undefsafe.js | 125 + .../lab7/node_modules/undefsafe/package.json | 34 + labWeb/lab7/node_modules/unpipe/HISTORY.md | 4 + labWeb/lab7/node_modules/unpipe/LICENSE | 22 + labWeb/lab7/node_modules/unpipe/README.md | 43 + labWeb/lab7/node_modules/unpipe/index.js | 69 + labWeb/lab7/node_modules/unpipe/package.json | 27 + .../lab7/node_modules/utils-merge/.npmignore | 9 + labWeb/lab7/node_modules/utils-merge/LICENSE | 20 + .../lab7/node_modules/utils-merge/README.md | 34 + labWeb/lab7/node_modules/utils-merge/index.js | 23 + .../node_modules/utils-merge/package.json | 40 + labWeb/lab7/node_modules/vary/HISTORY.md | 39 + labWeb/lab7/node_modules/vary/LICENSE | 22 + labWeb/lab7/node_modules/vary/README.md | 101 + labWeb/lab7/node_modules/vary/index.js | 149 + labWeb/lab7/node_modules/vary/package.json | 43 + labWeb/lab7/node_modules/walk/LICENSE | 41 + labWeb/lab7/node_modules/walk/README.md | 306 + .../walk/lib/node-type-emitter.js | 92 + .../node_modules/walk/lib/walk-async-only.js | 93 + labWeb/lab7/node_modules/walk/lib/walk.js | 302 + labWeb/lab7/node_modules/walk/package.json | 40 + labWeb/lab7/node_modules/wordwrap/LICENSE | 18 + .../node_modules/wordwrap/README.markdown | 70 + .../node_modules/wordwrap/example/center.js | 10 + .../node_modules/wordwrap/example/meat.js | 3 + labWeb/lab7/node_modules/wordwrap/index.js | 76 + .../lab7/node_modules/wordwrap/package.json | 34 + .../lab7/node_modules/wordwrap/test/break.js | 32 + .../node_modules/wordwrap/test/idleness.txt | 63 + .../lab7/node_modules/wordwrap/test/wrap.js | 33 + labWeb/lab7/node_modules/yallist/LICENSE | 15 + labWeb/lab7/node_modules/yallist/README.md | 204 + labWeb/lab7/node_modules/yallist/iterator.js | 8 + labWeb/lab7/node_modules/yallist/package.json | 29 + labWeb/lab7/node_modules/yallist/yallist.js | 426 + labWeb/lab7/package-lock.json | 3636 + labWeb/lab7/package.json | 20 + labWeb/lab7/prepros.config | 896 + labWeb/lab7/public/assets/Imglogo.svg | 9 + labWeb/lab7/public/assets/Vector.svg | 3 + .../lab7/public/assets/buttons/arrow-left.svg | 3 + .../public/assets/buttons/arrow-right.svg | 3 + labWeb/lab7/public/assets/chart.png | Bin 0 -> 97408 bytes labWeb/lab7/public/assets/company/logo-1.png | Bin 0 -> 5240 bytes labWeb/lab7/public/assets/company/logo-10.png | Bin 0 -> 2024 bytes labWeb/lab7/public/assets/company/logo-11.png | Bin 0 -> 1934 bytes labWeb/lab7/public/assets/company/logo-12.png | Bin 0 -> 4753 bytes labWeb/lab7/public/assets/company/logo-13.png | Bin 0 -> 3053 bytes labWeb/lab7/public/assets/company/logo-14.png | Bin 0 -> 11345 bytes labWeb/lab7/public/assets/company/logo-2.png | Bin 0 -> 5252 bytes labWeb/lab7/public/assets/company/logo-3.png | Bin 0 -> 6516 bytes labWeb/lab7/public/assets/company/logo-4.png | Bin 0 -> 9405 bytes labWeb/lab7/public/assets/company/logo-5.png | Bin 0 -> 11268 bytes labWeb/lab7/public/assets/company/logo-6.png | Bin 0 -> 8215 bytes labWeb/lab7/public/assets/company/logo-7.png | Bin 0 -> 7091 bytes labWeb/lab7/public/assets/company/logo-8.png | Bin 0 -> 4898 bytes labWeb/lab7/public/assets/company/logo-9.png | Bin 0 -> 1883 bytes .../lab7/public/assets/form__items/imgs.png | Bin 0 -> 584518 bytes .../lab7/public/assets/form__items/mail.svg | 5 + labWeb/lab7/public/assets/form__items/map.svg | 3 + .../lab7/public/assets/form__items/phone.svg | 3 + labWeb/lab7/public/assets/instagram.svg | 4 + labWeb/lab7/public/assets/rect.png | Bin 0 -> 884135 bytes labWeb/lab7/public/assets/tiktok.svg | 4 + labWeb/lab7/public/css/head_and_footer.css | 506 + labWeb/lab7/public/css/main.css | 768 + labWeb/lab7/public/js/burger_menu.js | 12 + labWeb/lab7/public/js/courses.js | 62 + labWeb/lab7/public/js/main.js | 0 labWeb/lab7/scss/head_and_footer.scss | 443 + labWeb/lab7/scss/main.scss | 578 + labWeb/lab7/views/head_and_footer.hbs | 94 + labWeb/lab7/views/main.hbs | 250 + labWeb/lab8/contacts.html | 162 + labWeb/lab8/css/style.css | 181 + labWeb/lab8/index.html | 151 + labWeb/lab8/news.html | 137 + labWeb/lab8/order.html | 260 + labWeb/lab8/products.html | 174 + labWeb/lab8/script.js | 85 + labWeb/lab8/style.css | 29 + labWeb/lab9/index.html | 103 + labWeb/lab9/script.js | 180 + labWeb/lab9/style.css | 146 + labWeb/node_modules/.bin/autoprefixer | 1 + .../.bin/baseline-browser-mapping | 1 + labWeb/node_modules/.bin/browserslist | 1 + labWeb/node_modules/.bin/cssesc | 1 + labWeb/node_modules/.bin/jiti | 1 + labWeb/node_modules/.bin/nanoid | 1 + labWeb/node_modules/.bin/resolve | 1 + labWeb/node_modules/.bin/sucrase | 1 + labWeb/node_modules/.bin/sucrase-node | 1 + labWeb/node_modules/.bin/tailwind | 1 + labWeb/node_modules/.bin/tailwindcss | 1 + .../node_modules/.bin/update-browserslist-db | 1 + labWeb/node_modules/.package-lock.json | 1179 + .../node_modules/@alloc/quick-lru/index.d.ts | 128 + labWeb/node_modules/@alloc/quick-lru/index.js | 263 + labWeb/node_modules/@alloc/quick-lru/license | 9 + .../@alloc/quick-lru/package.json | 43 + .../node_modules/@alloc/quick-lru/readme.md | 139 + .../@jridgewell/gen-mapping/LICENSE | 19 + .../@jridgewell/gen-mapping/README.md | 227 + .../gen-mapping/dist/gen-mapping.mjs | 292 + .../gen-mapping/dist/gen-mapping.mjs.map | 6 + .../gen-mapping/dist/gen-mapping.umd.js | 358 + .../gen-mapping/dist/gen-mapping.umd.js.map | 6 + .../gen-mapping/dist/types/gen-mapping.d.ts | 88 + .../gen-mapping/dist/types/set-array.d.ts | 32 + .../dist/types/sourcemap-segment.d.ts | 12 + .../gen-mapping/dist/types/types.d.ts | 43 + .../@jridgewell/gen-mapping/package.json | 67 + .../gen-mapping/src/gen-mapping.ts | 614 + .../@jridgewell/gen-mapping/src/set-array.ts | 82 + .../gen-mapping/src/sourcemap-segment.ts | 16 + .../@jridgewell/gen-mapping/src/types.ts | 61 + .../gen-mapping/types/gen-mapping.d.cts | 89 + .../gen-mapping/types/gen-mapping.d.cts.map | 1 + .../gen-mapping/types/gen-mapping.d.mts | 89 + .../gen-mapping/types/gen-mapping.d.mts.map | 1 + .../gen-mapping/types/set-array.d.cts | 33 + .../gen-mapping/types/set-array.d.cts.map | 1 + .../gen-mapping/types/set-array.d.mts | 33 + .../gen-mapping/types/set-array.d.mts.map | 1 + .../gen-mapping/types/sourcemap-segment.d.cts | 13 + .../types/sourcemap-segment.d.cts.map | 1 + .../gen-mapping/types/sourcemap-segment.d.mts | 13 + .../types/sourcemap-segment.d.mts.map | 1 + .../@jridgewell/gen-mapping/types/types.d.cts | 44 + .../gen-mapping/types/types.d.cts.map | 1 + .../@jridgewell/gen-mapping/types/types.d.mts | 44 + .../gen-mapping/types/types.d.mts.map | 1 + .../@jridgewell/resolve-uri/LICENSE | 19 + .../@jridgewell/resolve-uri/README.md | 40 + .../resolve-uri/dist/resolve-uri.mjs | 232 + .../resolve-uri/dist/resolve-uri.mjs.map | 1 + .../resolve-uri/dist/resolve-uri.umd.js | 240 + .../resolve-uri/dist/resolve-uri.umd.js.map | 1 + .../resolve-uri/dist/types/resolve-uri.d.ts | 4 + .../@jridgewell/resolve-uri/package.json | 69 + .../@jridgewell/sourcemap-codec/LICENSE | 19 + .../@jridgewell/sourcemap-codec/README.md | 264 + .../sourcemap-codec/dist/sourcemap-codec.mjs | 423 + .../dist/sourcemap-codec.mjs.map | 6 + .../dist/sourcemap-codec.umd.js | 464 + .../dist/sourcemap-codec.umd.js.map | 6 + .../@jridgewell/sourcemap-codec/package.json | 63 + .../@jridgewell/sourcemap-codec/src/scopes.ts | 345 + .../sourcemap-codec/src/sourcemap-codec.ts | 111 + .../sourcemap-codec/src/strings.ts | 65 + .../@jridgewell/sourcemap-codec/src/vlq.ts | 55 + .../sourcemap-codec/types/scopes.d.cts | 50 + .../sourcemap-codec/types/scopes.d.cts.map | 1 + .../sourcemap-codec/types/scopes.d.mts | 50 + .../sourcemap-codec/types/scopes.d.mts.map | 1 + .../types/sourcemap-codec.d.cts | 9 + .../types/sourcemap-codec.d.cts.map | 1 + .../types/sourcemap-codec.d.mts | 9 + .../types/sourcemap-codec.d.mts.map | 1 + .../sourcemap-codec/types/strings.d.cts | 16 + .../sourcemap-codec/types/strings.d.cts.map | 1 + .../sourcemap-codec/types/strings.d.mts | 16 + .../sourcemap-codec/types/strings.d.mts.map | 1 + .../sourcemap-codec/types/vlq.d.cts | 7 + .../sourcemap-codec/types/vlq.d.cts.map | 1 + .../sourcemap-codec/types/vlq.d.mts | 7 + .../sourcemap-codec/types/vlq.d.mts.map | 1 + .../@jridgewell/trace-mapping/LICENSE | 19 + .../@jridgewell/trace-mapping/README.md | 348 + .../trace-mapping/dist/trace-mapping.mjs | 493 + .../trace-mapping/dist/trace-mapping.mjs.map | 6 + .../trace-mapping/dist/trace-mapping.umd.js | 559 + .../dist/trace-mapping.umd.js.map | 6 + .../@jridgewell/trace-mapping/package.json | 67 + .../trace-mapping/src/binary-search.ts | 115 + .../trace-mapping/src/by-source.ts | 41 + .../trace-mapping/src/flatten-map.ts | 192 + .../@jridgewell/trace-mapping/src/resolve.ts | 16 + .../@jridgewell/trace-mapping/src/sort.ts | 45 + .../trace-mapping/src/sourcemap-segment.ts | 23 + .../trace-mapping/src/strip-filename.ts | 8 + .../trace-mapping/src/trace-mapping.ts | 502 + .../@jridgewell/trace-mapping/src/types.ts | 114 + .../trace-mapping/types/binary-search.d.cts | 33 + .../types/binary-search.d.cts.map | 1 + .../trace-mapping/types/binary-search.d.mts | 33 + .../types/binary-search.d.mts.map | 1 + .../trace-mapping/types/by-source.d.cts | 4 + .../trace-mapping/types/by-source.d.cts.map | 1 + .../trace-mapping/types/by-source.d.mts | 4 + .../trace-mapping/types/by-source.d.mts.map | 1 + .../trace-mapping/types/flatten-map.d.cts | 9 + .../trace-mapping/types/flatten-map.d.cts.map | 1 + .../trace-mapping/types/flatten-map.d.mts | 9 + .../trace-mapping/types/flatten-map.d.mts.map | 1 + .../trace-mapping/types/resolve.d.cts | 4 + .../trace-mapping/types/resolve.d.cts.map | 1 + .../trace-mapping/types/resolve.d.mts | 4 + .../trace-mapping/types/resolve.d.mts.map | 1 + .../trace-mapping/types/sort.d.cts | 4 + .../trace-mapping/types/sort.d.cts.map | 1 + .../trace-mapping/types/sort.d.mts | 4 + .../trace-mapping/types/sort.d.mts.map | 1 + .../types/sourcemap-segment.d.cts | 17 + .../types/sourcemap-segment.d.cts.map | 1 + .../types/sourcemap-segment.d.mts | 17 + .../types/sourcemap-segment.d.mts.map | 1 + .../trace-mapping/types/strip-filename.d.cts | 5 + .../types/strip-filename.d.cts.map | 1 + .../trace-mapping/types/strip-filename.d.mts | 5 + .../types/strip-filename.d.mts.map | 1 + .../trace-mapping/types/trace-mapping.d.cts | 80 + .../types/trace-mapping.d.cts.map | 1 + .../trace-mapping/types/trace-mapping.d.mts | 80 + .../types/trace-mapping.d.mts.map | 1 + .../trace-mapping/types/types.d.cts | 107 + .../trace-mapping/types/types.d.cts.map | 1 + .../trace-mapping/types/types.d.mts | 107 + .../trace-mapping/types/types.d.mts.map | 1 + .../node_modules/@nodelib/fs.scandir/LICENSE | 21 + .../@nodelib/fs.scandir/README.md | 171 + .../@nodelib/fs.scandir/out/adapters/fs.d.ts | 20 + .../@nodelib/fs.scandir/out/adapters/fs.js | 19 + .../@nodelib/fs.scandir/out/constants.d.ts | 4 + .../@nodelib/fs.scandir/out/constants.js | 17 + .../@nodelib/fs.scandir/out/index.d.ts | 12 + .../@nodelib/fs.scandir/out/index.js | 26 + .../fs.scandir/out/providers/async.d.ts | 7 + .../fs.scandir/out/providers/async.js | 104 + .../fs.scandir/out/providers/common.d.ts | 1 + .../fs.scandir/out/providers/common.js | 13 + .../fs.scandir/out/providers/sync.d.ts | 5 + .../@nodelib/fs.scandir/out/providers/sync.js | 54 + .../@nodelib/fs.scandir/out/settings.d.ts | 20 + .../@nodelib/fs.scandir/out/settings.js | 24 + .../@nodelib/fs.scandir/out/types/index.d.ts | 20 + .../@nodelib/fs.scandir/out/types/index.js | 2 + .../@nodelib/fs.scandir/out/utils/fs.d.ts | 2 + .../@nodelib/fs.scandir/out/utils/fs.js | 19 + .../@nodelib/fs.scandir/out/utils/index.d.ts | 2 + .../@nodelib/fs.scandir/out/utils/index.js | 5 + .../@nodelib/fs.scandir/package.json | 44 + labWeb/node_modules/@nodelib/fs.stat/LICENSE | 21 + .../node_modules/@nodelib/fs.stat/README.md | 126 + .../@nodelib/fs.stat/out/adapters/fs.d.ts | 13 + .../@nodelib/fs.stat/out/adapters/fs.js | 17 + .../@nodelib/fs.stat/out/index.d.ts | 12 + .../@nodelib/fs.stat/out/index.js | 26 + .../@nodelib/fs.stat/out/providers/async.d.ts | 4 + .../@nodelib/fs.stat/out/providers/async.js | 36 + .../@nodelib/fs.stat/out/providers/sync.d.ts | 3 + .../@nodelib/fs.stat/out/providers/sync.js | 23 + .../@nodelib/fs.stat/out/settings.d.ts | 16 + .../@nodelib/fs.stat/out/settings.js | 16 + .../@nodelib/fs.stat/out/types/index.d.ts | 4 + .../@nodelib/fs.stat/out/types/index.js | 2 + .../@nodelib/fs.stat/package.json | 37 + labWeb/node_modules/@nodelib/fs.walk/LICENSE | 21 + .../node_modules/@nodelib/fs.walk/README.md | 215 + .../@nodelib/fs.walk/out/index.d.ts | 14 + .../@nodelib/fs.walk/out/index.js | 34 + .../@nodelib/fs.walk/out/providers/async.d.ts | 12 + .../@nodelib/fs.walk/out/providers/async.js | 30 + .../@nodelib/fs.walk/out/providers/index.d.ts | 4 + .../@nodelib/fs.walk/out/providers/index.js | 9 + .../fs.walk/out/providers/stream.d.ts | 12 + .../@nodelib/fs.walk/out/providers/stream.js | 34 + .../@nodelib/fs.walk/out/providers/sync.d.ts | 10 + .../@nodelib/fs.walk/out/providers/sync.js | 14 + .../@nodelib/fs.walk/out/readers/async.d.ts | 30 + .../@nodelib/fs.walk/out/readers/async.js | 97 + .../@nodelib/fs.walk/out/readers/common.d.ts | 7 + .../@nodelib/fs.walk/out/readers/common.js | 31 + .../@nodelib/fs.walk/out/readers/reader.d.ts | 6 + .../@nodelib/fs.walk/out/readers/reader.js | 11 + .../@nodelib/fs.walk/out/readers/sync.d.ts | 15 + .../@nodelib/fs.walk/out/readers/sync.js | 59 + .../@nodelib/fs.walk/out/settings.d.ts | 30 + .../@nodelib/fs.walk/out/settings.js | 26 + .../@nodelib/fs.walk/out/types/index.d.ts | 8 + .../@nodelib/fs.walk/out/types/index.js | 2 + .../@nodelib/fs.walk/package.json | 44 + labWeb/node_modules/any-promise/.jshintrc | 4 + labWeb/node_modules/any-promise/.npmignore | 7 + labWeb/node_modules/any-promise/LICENSE | 19 + labWeb/node_modules/any-promise/README.md | 161 + .../any-promise/implementation.d.ts | 3 + .../any-promise/implementation.js | 1 + labWeb/node_modules/any-promise/index.d.ts | 73 + labWeb/node_modules/any-promise/index.js | 1 + labWeb/node_modules/any-promise/loader.js | 78 + labWeb/node_modules/any-promise/optional.js | 6 + labWeb/node_modules/any-promise/package.json | 45 + .../node_modules/any-promise/register-shim.js | 18 + labWeb/node_modules/any-promise/register.d.ts | 17 + labWeb/node_modules/any-promise/register.js | 94 + .../any-promise/register/bluebird.d.ts | 1 + .../any-promise/register/bluebird.js | 2 + .../any-promise/register/es6-promise.d.ts | 1 + .../any-promise/register/es6-promise.js | 2 + .../any-promise/register/lie.d.ts | 1 + .../node_modules/any-promise/register/lie.js | 2 + .../register/native-promise-only.d.ts | 1 + .../register/native-promise-only.js | 2 + .../any-promise/register/pinkie.d.ts | 1 + .../any-promise/register/pinkie.js | 2 + .../any-promise/register/promise.d.ts | 1 + .../any-promise/register/promise.js | 2 + .../node_modules/any-promise/register/q.d.ts | 1 + labWeb/node_modules/any-promise/register/q.js | 2 + .../any-promise/register/rsvp.d.ts | 1 + .../node_modules/any-promise/register/rsvp.js | 2 + .../any-promise/register/vow.d.ts | 1 + .../node_modules/any-promise/register/vow.js | 2 + .../any-promise/register/when.d.ts | 1 + .../node_modules/any-promise/register/when.js | 2 + labWeb/node_modules/anymatch/LICENSE | 15 + labWeb/node_modules/anymatch/README.md | 87 + labWeb/node_modules/anymatch/index.d.ts | 20 + labWeb/node_modules/anymatch/index.js | 104 + labWeb/node_modules/anymatch/package.json | 48 + labWeb/node_modules/arg/LICENSE.md | 21 + labWeb/node_modules/arg/README.md | 317 + labWeb/node_modules/arg/index.d.ts | 44 + labWeb/node_modules/arg/index.js | 195 + labWeb/node_modules/arg/package.json | 28 + labWeb/node_modules/autoprefixer/LICENSE | 20 + labWeb/node_modules/autoprefixer/README.md | 56 + .../autoprefixer/bin/autoprefixer | 22 + .../autoprefixer/data/prefixes.js | 1141 + .../node_modules/autoprefixer/lib/at-rule.js | 35 + .../autoprefixer/lib/autoprefixer.d.ts | 95 + .../autoprefixer/lib/autoprefixer.js | 164 + .../node_modules/autoprefixer/lib/brackets.js | 51 + .../node_modules/autoprefixer/lib/browsers.js | 79 + .../autoprefixer/lib/declaration.js | 187 + .../autoprefixer/lib/hacks/align-content.js | 49 + .../autoprefixer/lib/hacks/align-items.js | 46 + .../autoprefixer/lib/hacks/align-self.js | 56 + .../autoprefixer/lib/hacks/animation.js | 17 + .../autoprefixer/lib/hacks/appearance.js | 23 + .../autoprefixer/lib/hacks/autofill.js | 26 + .../autoprefixer/lib/hacks/backdrop-filter.js | 20 + .../autoprefixer/lib/hacks/background-clip.js | 24 + .../autoprefixer/lib/hacks/background-size.js | 23 + .../autoprefixer/lib/hacks/block-logical.js | 40 + .../autoprefixer/lib/hacks/border-image.js | 15 + .../autoprefixer/lib/hacks/border-radius.js | 40 + .../autoprefixer/lib/hacks/break-props.js | 63 + .../autoprefixer/lib/hacks/cross-fade.js | 35 + .../autoprefixer/lib/hacks/display-flex.js | 65 + .../autoprefixer/lib/hacks/display-grid.js | 21 + .../lib/hacks/file-selector-button.js | 26 + .../autoprefixer/lib/hacks/filter-value.js | 14 + .../autoprefixer/lib/hacks/filter.js | 19 + .../autoprefixer/lib/hacks/flex-basis.js | 39 + .../autoprefixer/lib/hacks/flex-direction.js | 72 + .../autoprefixer/lib/hacks/flex-flow.js | 53 + .../autoprefixer/lib/hacks/flex-grow.js | 30 + .../autoprefixer/lib/hacks/flex-shrink.js | 39 + .../autoprefixer/lib/hacks/flex-spec.js | 19 + .../autoprefixer/lib/hacks/flex-wrap.js | 19 + .../autoprefixer/lib/hacks/flex.js | 54 + .../autoprefixer/lib/hacks/fullscreen.js | 20 + .../autoprefixer/lib/hacks/gradient.js | 450 + .../autoprefixer/lib/hacks/grid-area.js | 34 + .../lib/hacks/grid-column-align.js | 28 + .../autoprefixer/lib/hacks/grid-end.js | 52 + .../autoprefixer/lib/hacks/grid-row-align.js | 28 + .../autoprefixer/lib/hacks/grid-row-column.js | 33 + .../lib/hacks/grid-rows-columns.js | 125 + .../autoprefixer/lib/hacks/grid-start.js | 33 + .../lib/hacks/grid-template-areas.js | 84 + .../autoprefixer/lib/hacks/grid-template.js | 69 + .../autoprefixer/lib/hacks/grid-utils.js | 1117 + .../autoprefixer/lib/hacks/image-rendering.js | 48 + .../autoprefixer/lib/hacks/image-set.js | 18 + .../autoprefixer/lib/hacks/inline-logical.js | 34 + .../autoprefixer/lib/hacks/intrinsic.js | 61 + .../autoprefixer/lib/hacks/justify-content.js | 54 + .../autoprefixer/lib/hacks/mask-border.js | 38 + .../autoprefixer/lib/hacks/mask-composite.js | 88 + .../autoprefixer/lib/hacks/order.js | 42 + .../lib/hacks/overscroll-behavior.js | 33 + .../autoprefixer/lib/hacks/pixelated.js | 34 + .../autoprefixer/lib/hacks/place-self.js | 32 + .../lib/hacks/placeholder-shown.js | 19 + .../autoprefixer/lib/hacks/placeholder.js | 33 + .../lib/hacks/print-color-adjust.js | 25 + .../lib/hacks/text-decoration-skip-ink.js | 23 + .../autoprefixer/lib/hacks/text-decoration.js | 25 + .../lib/hacks/text-emphasis-position.js | 14 + .../autoprefixer/lib/hacks/transform-decl.js | 79 + .../autoprefixer/lib/hacks/user-select.js | 33 + .../autoprefixer/lib/hacks/writing-mode.js | 42 + labWeb/node_modules/autoprefixer/lib/info.js | 123 + .../autoprefixer/lib/old-selector.js | 67 + .../autoprefixer/lib/old-value.js | 22 + .../node_modules/autoprefixer/lib/prefixer.js | 144 + .../node_modules/autoprefixer/lib/prefixes.js | 428 + .../autoprefixer/lib/processor.js | 710 + .../autoprefixer/lib/resolution.js | 97 + .../node_modules/autoprefixer/lib/selector.js | 150 + .../node_modules/autoprefixer/lib/supports.js | 302 + .../autoprefixer/lib/transition.js | 329 + labWeb/node_modules/autoprefixer/lib/utils.js | 93 + labWeb/node_modules/autoprefixer/lib/value.js | 125 + .../node_modules/autoprefixer/lib/vendor.js | 14 + labWeb/node_modules/autoprefixer/package.json | 48 + .../baseline-browser-mapping/LICENSE.txt | 201 + .../baseline-browser-mapping/README.md | 467 + .../baseline-browser-mapping/dist/cli.cjs | 2 + .../baseline-browser-mapping/dist/index.cjs | 1 + .../baseline-browser-mapping/dist/index.d.ts | 104 + .../baseline-browser-mapping/dist/index.js | 1 + .../baseline-browser-mapping/package.json | 68 + .../binary-extensions/binary-extensions.json | 263 + .../binary-extensions.json.d.ts | 3 + .../node_modules/binary-extensions/index.d.ts | 14 + .../node_modules/binary-extensions/index.js | 1 + labWeb/node_modules/binary-extensions/license | 10 + .../binary-extensions/package.json | 40 + .../node_modules/binary-extensions/readme.md | 25 + labWeb/node_modules/braces/LICENSE | 21 + labWeb/node_modules/braces/README.md | 586 + labWeb/node_modules/braces/index.js | 170 + labWeb/node_modules/braces/lib/compile.js | 60 + labWeb/node_modules/braces/lib/constants.js | 57 + labWeb/node_modules/braces/lib/expand.js | 113 + labWeb/node_modules/braces/lib/parse.js | 331 + labWeb/node_modules/braces/lib/stringify.js | 32 + labWeb/node_modules/braces/lib/utils.js | 122 + labWeb/node_modules/braces/package.json | 77 + labWeb/node_modules/browserslist/LICENSE | 20 + labWeb/node_modules/browserslist/README.md | 64 + labWeb/node_modules/browserslist/browser.js | 54 + labWeb/node_modules/browserslist/cli.js | 156 + labWeb/node_modules/browserslist/error.d.ts | 7 + labWeb/node_modules/browserslist/error.js | 12 + labWeb/node_modules/browserslist/index.d.ts | 224 + labWeb/node_modules/browserslist/index.js | 1339 + labWeb/node_modules/browserslist/node.js | 502 + labWeb/node_modules/browserslist/package.json | 45 + labWeb/node_modules/browserslist/parse.js | 78 + labWeb/node_modules/camelcase-css/README.md | 27 + .../node_modules/camelcase-css/index-es5.js | 24 + labWeb/node_modules/camelcase-css/index.js | 30 + labWeb/node_modules/camelcase-css/license | 21 + .../node_modules/camelcase-css/package.json | 34 + labWeb/node_modules/caniuse-lite/LICENSE | 395 + labWeb/node_modules/caniuse-lite/README.md | 6 + .../node_modules/caniuse-lite/data/agents.js | 1 + .../caniuse-lite/data/browserVersions.js | 1 + .../caniuse-lite/data/browsers.js | 1 + .../caniuse-lite/data/features.js | 1 + .../caniuse-lite/data/features/aac.js | 1 + .../data/features/abortcontroller.js | 1 + .../caniuse-lite/data/features/ac3-ec3.js | 1 + .../data/features/accelerometer.js | 1 + .../data/features/addeventlistener.js | 1 + .../data/features/alternate-stylesheet.js | 1 + .../data/features/ambient-light.js | 1 + .../caniuse-lite/data/features/apng.js | 1 + .../data/features/array-find-index.js | 1 + .../caniuse-lite/data/features/array-find.js | 1 + .../caniuse-lite/data/features/array-flat.js | 1 + .../data/features/array-includes.js | 1 + .../data/features/arrow-functions.js | 1 + .../caniuse-lite/data/features/asmjs.js | 1 + .../data/features/async-clipboard.js | 1 + .../data/features/async-functions.js | 1 + .../caniuse-lite/data/features/atob-btoa.js | 1 + .../caniuse-lite/data/features/audio-api.js | 1 + .../caniuse-lite/data/features/audio.js | 1 + .../caniuse-lite/data/features/audiotracks.js | 1 + .../caniuse-lite/data/features/autofocus.js | 1 + .../caniuse-lite/data/features/auxclick.js | 1 + .../caniuse-lite/data/features/av1.js | 1 + .../caniuse-lite/data/features/avif.js | 1 + .../data/features/background-attachment.js | 1 + .../data/features/background-clip-text.js | 1 + .../data/features/background-img-opts.js | 1 + .../data/features/background-position-x-y.js | 1 + .../features/background-repeat-round-space.js | 1 + .../data/features/background-sync.js | 1 + .../data/features/battery-status.js | 1 + .../caniuse-lite/data/features/beacon.js | 1 + .../data/features/beforeafterprint.js | 1 + .../caniuse-lite/data/features/bigint.js | 1 + .../caniuse-lite/data/features/blobbuilder.js | 1 + .../caniuse-lite/data/features/bloburls.js | 1 + .../data/features/border-image.js | 1 + .../data/features/border-radius.js | 1 + .../data/features/broadcastchannel.js | 1 + .../caniuse-lite/data/features/brotli.js | 1 + .../caniuse-lite/data/features/calc.js | 1 + .../data/features/canvas-blending.js | 1 + .../caniuse-lite/data/features/canvas-text.js | 1 + .../caniuse-lite/data/features/canvas.js | 1 + .../caniuse-lite/data/features/ch-unit.js | 1 + .../data/features/chacha20-poly1305.js | 1 + .../data/features/channel-messaging.js | 1 + .../data/features/childnode-remove.js | 1 + .../caniuse-lite/data/features/classlist.js | 1 + .../client-hints-dpr-width-viewport.js | 1 + .../caniuse-lite/data/features/clipboard.js | 1 + .../caniuse-lite/data/features/colr-v1.js | 1 + .../caniuse-lite/data/features/colr.js | 1 + .../data/features/comparedocumentposition.js | 1 + .../data/features/console-basic.js | 1 + .../data/features/console-time.js | 1 + .../caniuse-lite/data/features/const.js | 1 + .../data/features/constraint-validation.js | 1 + .../data/features/contenteditable.js | 1 + .../data/features/contentsecuritypolicy.js | 1 + .../data/features/contentsecuritypolicy2.js | 1 + .../data/features/cookie-store-api.js | 1 + .../caniuse-lite/data/features/cors.js | 1 + .../data/features/createimagebitmap.js | 1 + .../data/features/credential-management.js | 1 + .../cross-document-view-transitions.js | 1 + .../data/features/cryptography.js | 1 + .../caniuse-lite/data/features/css-all.js | 1 + .../data/features/css-anchor-positioning.js | 1 + .../data/features/css-animation.js | 1 + .../data/features/css-any-link.js | 1 + .../data/features/css-appearance.js | 1 + .../data/features/css-at-counter-style.js | 1 + .../data/features/css-autofill.js | 1 + .../data/features/css-backdrop-filter.js | 1 + .../data/features/css-background-offsets.js | 1 + .../data/features/css-backgroundblendmode.js | 1 + .../data/features/css-boxdecorationbreak.js | 1 + .../data/features/css-boxshadow.js | 1 + .../caniuse-lite/data/features/css-canvas.js | 1 + .../data/features/css-caret-color.js | 1 + .../data/features/css-cascade-layers.js | 1 + .../data/features/css-cascade-scope.js | 1 + .../data/features/css-case-insensitive.js | 1 + .../data/features/css-clip-path.js | 1 + .../data/features/css-color-adjust.js | 1 + .../data/features/css-color-function.js | 1 + .../data/features/css-conic-gradients.js | 1 + .../features/css-container-queries-style.js | 1 + .../data/features/css-container-queries.js | 1 + .../features/css-container-query-units.js | 1 + .../data/features/css-containment.js | 1 + .../data/features/css-content-visibility.js | 1 + .../data/features/css-counters.js | 1 + .../data/features/css-crisp-edges.js | 1 + .../data/features/css-cross-fade.js | 1 + .../data/features/css-default-pseudo.js | 1 + .../data/features/css-descendant-gtgt.js | 1 + .../data/features/css-deviceadaptation.js | 1 + .../data/features/css-dir-pseudo.js | 1 + .../data/features/css-display-contents.js | 1 + .../data/features/css-element-function.js | 1 + .../data/features/css-env-function.js | 1 + .../data/features/css-exclusions.js | 1 + .../data/features/css-featurequeries.js | 1 + .../data/features/css-file-selector-button.js | 1 + .../data/features/css-filter-function.js | 1 + .../caniuse-lite/data/features/css-filters.js | 1 + .../data/features/css-first-letter.js | 1 + .../data/features/css-first-line.js | 1 + .../caniuse-lite/data/features/css-fixed.js | 1 + .../data/features/css-focus-visible.js | 1 + .../data/features/css-focus-within.js | 1 + .../data/features/css-font-palette.js | 1 + .../features/css-font-rendering-controls.js | 1 + .../data/features/css-font-stretch.js | 1 + .../data/features/css-gencontent.js | 1 + .../data/features/css-gradients.js | 1 + .../data/features/css-grid-animation.js | 1 + .../data/features/css-grid-lanes.js | 1 + .../caniuse-lite/data/features/css-grid.js | 1 + .../data/features/css-hanging-punctuation.js | 1 + .../caniuse-lite/data/features/css-has.js | 1 + .../caniuse-lite/data/features/css-hyphens.js | 1 + .../caniuse-lite/data/features/css-if.js | 1 + .../data/features/css-image-orientation.js | 1 + .../data/features/css-image-set.js | 1 + .../data/features/css-in-out-of-range.js | 1 + .../data/features/css-indeterminate-pseudo.js | 1 + .../data/features/css-initial-letter.js | 1 + .../data/features/css-initial-value.js | 1 + .../caniuse-lite/data/features/css-lch-lab.js | 1 + .../data/features/css-letter-spacing.js | 1 + .../data/features/css-line-clamp.js | 1 + .../data/features/css-logical-props.js | 1 + .../data/features/css-marker-pseudo.js | 1 + .../caniuse-lite/data/features/css-masks.js | 1 + .../data/features/css-matches-pseudo.js | 1 + .../data/features/css-math-functions.js | 1 + .../data/features/css-media-interaction.js | 1 + .../data/features/css-media-range-syntax.js | 1 + .../data/features/css-media-resolution.js | 1 + .../data/features/css-media-scripting.js | 1 + .../data/features/css-mediaqueries.js | 1 + .../data/features/css-mixblendmode.js | 1 + .../data/features/css-module-scripts.js | 1 + .../data/features/css-motion-paths.js | 1 + .../data/features/css-namespaces.js | 1 + .../caniuse-lite/data/features/css-nesting.js | 1 + .../data/features/css-not-sel-list.js | 1 + .../data/features/css-nth-child-of.js | 1 + .../caniuse-lite/data/features/css-opacity.js | 1 + .../data/features/css-optional-pseudo.js | 1 + .../data/features/css-overflow-anchor.js | 1 + .../data/features/css-overflow-overlay.js | 1 + .../data/features/css-overflow.js | 1 + .../data/features/css-overscroll-behavior.js | 1 + .../data/features/css-page-break.js | 1 + .../data/features/css-paged-media.js | 1 + .../data/features/css-paint-api.js | 1 + .../data/features/css-placeholder-shown.js | 1 + .../data/features/css-placeholder.js | 1 + .../data/features/css-print-color-adjust.js | 1 + .../data/features/css-read-only-write.js | 1 + .../data/features/css-rebeccapurple.js | 1 + .../data/features/css-reflections.js | 1 + .../caniuse-lite/data/features/css-regions.js | 1 + .../data/features/css-relative-colors.js | 1 + .../data/features/css-repeating-gradients.js | 1 + .../caniuse-lite/data/features/css-resize.js | 1 + .../data/features/css-revert-value.js | 1 + .../data/features/css-rrggbbaa.js | 1 + .../data/features/css-scroll-behavior.js | 1 + .../data/features/css-scrollbar.js | 1 + .../caniuse-lite/data/features/css-sel2.js | 1 + .../caniuse-lite/data/features/css-sel3.js | 1 + .../data/features/css-selection.js | 1 + .../caniuse-lite/data/features/css-shapes.js | 1 + .../data/features/css-snappoints.js | 1 + .../caniuse-lite/data/features/css-sticky.js | 1 + .../caniuse-lite/data/features/css-subgrid.js | 1 + .../data/features/css-supports-api.js | 1 + .../caniuse-lite/data/features/css-table.js | 1 + .../data/features/css-text-align-last.js | 1 + .../data/features/css-text-box-trim.js | 1 + .../data/features/css-text-indent.js | 1 + .../data/features/css-text-justify.js | 1 + .../data/features/css-text-orientation.js | 1 + .../data/features/css-text-spacing.js | 1 + .../data/features/css-text-wrap-balance.js | 1 + .../data/features/css-textshadow.js | 1 + .../data/features/css-touch-action.js | 1 + .../data/features/css-transitions.js | 1 + .../data/features/css-unicode-bidi.js | 1 + .../data/features/css-unset-value.js | 1 + .../data/features/css-variables.js | 1 + .../data/features/css-when-else.js | 1 + .../data/features/css-widows-orphans.js | 1 + .../data/features/css-width-stretch.js | 1 + .../data/features/css-writing-mode.js | 1 + .../caniuse-lite/data/features/css-zoom.js | 1 + .../caniuse-lite/data/features/css3-attr.js | 1 + .../data/features/css3-boxsizing.js | 1 + .../caniuse-lite/data/features/css3-colors.js | 1 + .../data/features/css3-cursors-grab.js | 1 + .../data/features/css3-cursors-newer.js | 1 + .../data/features/css3-cursors.js | 1 + .../data/features/css3-tabsize.js | 1 + .../data/features/currentcolor.js | 1 + .../data/features/custom-elements.js | 1 + .../data/features/custom-elementsv1.js | 1 + .../caniuse-lite/data/features/customevent.js | 1 + .../data/features/customizable-select.js | 1 + .../caniuse-lite/data/features/datalist.js | 1 + .../caniuse-lite/data/features/dataset.js | 1 + .../caniuse-lite/data/features/datauri.js | 1 + .../data/features/date-tolocaledatestring.js | 1 + .../data/features/declarative-shadow-dom.js | 1 + .../caniuse-lite/data/features/decorators.js | 1 + .../caniuse-lite/data/features/details.js | 1 + .../data/features/deviceorientation.js | 1 + .../data/features/devicepixelratio.js | 1 + .../caniuse-lite/data/features/dialog.js | 1 + .../data/features/dispatchevent.js | 1 + .../caniuse-lite/data/features/dnssec.js | 1 + .../data/features/do-not-track.js | 1 + .../data/features/document-currentscript.js | 1 + .../data/features/document-evaluate-xpath.js | 1 + .../data/features/document-execcommand.js | 1 + .../data/features/document-policy.js | 1 + .../features/document-scrollingelement.js | 1 + .../data/features/documenthead.js | 1 + .../data/features/dom-manip-convenience.js | 1 + .../caniuse-lite/data/features/dom-range.js | 1 + .../data/features/domcontentloaded.js | 1 + .../caniuse-lite/data/features/dommatrix.js | 1 + .../caniuse-lite/data/features/download.js | 1 + .../caniuse-lite/data/features/dragndrop.js | 1 + .../data/features/element-closest.js | 1 + .../data/features/element-from-point.js | 1 + .../data/features/element-scroll-methods.js | 1 + .../caniuse-lite/data/features/eme.js | 1 + .../caniuse-lite/data/features/eot.js | 1 + .../caniuse-lite/data/features/es5.js | 1 + .../caniuse-lite/data/features/es6-class.js | 1 + .../data/features/es6-generators.js | 1 + .../features/es6-module-dynamic-import.js | 1 + .../caniuse-lite/data/features/es6-module.js | 1 + .../caniuse-lite/data/features/es6-number.js | 1 + .../data/features/es6-string-includes.js | 1 + .../caniuse-lite/data/features/es6.js | 1 + .../caniuse-lite/data/features/eventsource.js | 1 + .../data/features/extended-system-fonts.js | 1 + .../data/features/feature-policy.js | 1 + .../caniuse-lite/data/features/fetch.js | 1 + .../data/features/fieldset-disabled.js | 1 + .../caniuse-lite/data/features/fileapi.js | 1 + .../caniuse-lite/data/features/filereader.js | 1 + .../data/features/filereadersync.js | 1 + .../caniuse-lite/data/features/filesystem.js | 1 + .../caniuse-lite/data/features/flac.js | 1 + .../caniuse-lite/data/features/flexbox-gap.js | 1 + .../caniuse-lite/data/features/flexbox.js | 1 + .../caniuse-lite/data/features/flow-root.js | 1 + .../data/features/focusin-focusout-events.js | 1 + .../data/features/font-family-system-ui.js | 1 + .../data/features/font-feature.js | 1 + .../data/features/font-kerning.js | 1 + .../data/features/font-loading.js | 1 + .../data/features/font-size-adjust.js | 1 + .../caniuse-lite/data/features/font-smooth.js | 1 + .../data/features/font-unicode-range.js | 1 + .../data/features/font-variant-alternates.js | 1 + .../data/features/font-variant-numeric.js | 1 + .../caniuse-lite/data/features/fontface.js | 1 + .../data/features/form-attribute.js | 1 + .../data/features/form-submit-attributes.js | 1 + .../data/features/form-validation.js | 1 + .../caniuse-lite/data/features/forms.js | 1 + .../caniuse-lite/data/features/fullscreen.js | 1 + .../caniuse-lite/data/features/gamepad.js | 1 + .../caniuse-lite/data/features/geolocation.js | 1 + .../data/features/getboundingclientrect.js | 1 + .../data/features/getcomputedstyle.js | 1 + .../data/features/getelementsbyclassname.js | 1 + .../data/features/getrandomvalues.js | 1 + .../caniuse-lite/data/features/gyroscope.js | 1 + .../data/features/hardwareconcurrency.js | 1 + .../caniuse-lite/data/features/hashchange.js | 1 + .../caniuse-lite/data/features/heif.js | 1 + .../caniuse-lite/data/features/hevc.js | 1 + .../caniuse-lite/data/features/hidden.js | 1 + .../data/features/high-resolution-time.js | 1 + .../caniuse-lite/data/features/history.js | 1 + .../data/features/html-media-capture.js | 1 + .../data/features/html5semantic.js | 1 + .../data/features/http-live-streaming.js | 1 + .../caniuse-lite/data/features/http2.js | 1 + .../caniuse-lite/data/features/http3.js | 1 + .../data/features/iframe-sandbox.js | 1 + .../data/features/iframe-seamless.js | 1 + .../data/features/iframe-srcdoc.js | 1 + .../data/features/imagecapture.js | 1 + .../caniuse-lite/data/features/ime.js | 1 + .../img-naturalwidth-naturalheight.js | 1 + .../caniuse-lite/data/features/import-maps.js | 1 + .../caniuse-lite/data/features/imports.js | 1 + .../data/features/indeterminate-checkbox.js | 1 + .../caniuse-lite/data/features/indexeddb.js | 1 + .../caniuse-lite/data/features/indexeddb2.js | 1 + .../data/features/inline-block.js | 1 + .../caniuse-lite/data/features/innertext.js | 1 + .../data/features/input-autocomplete-onoff.js | 1 + .../caniuse-lite/data/features/input-color.js | 1 + .../data/features/input-datetime.js | 1 + .../data/features/input-email-tel-url.js | 1 + .../caniuse-lite/data/features/input-event.js | 1 + .../data/features/input-file-accept.js | 1 + .../data/features/input-file-directory.js | 1 + .../data/features/input-file-multiple.js | 1 + .../data/features/input-inputmode.js | 1 + .../data/features/input-minlength.js | 1 + .../data/features/input-number.js | 1 + .../data/features/input-pattern.js | 1 + .../data/features/input-placeholder.js | 1 + .../caniuse-lite/data/features/input-range.js | 1 + .../data/features/input-search.js | 1 + .../data/features/input-selection.js | 1 + .../data/features/insert-adjacent.js | 1 + .../data/features/insertadjacenthtml.js | 1 + .../data/features/internationalization.js | 1 + .../data/features/intersectionobserver-v2.js | 1 + .../data/features/intersectionobserver.js | 1 + .../data/features/intl-pluralrules.js | 1 + .../data/features/intrinsic-width.js | 1 + .../caniuse-lite/data/features/jpeg2000.js | 1 + .../caniuse-lite/data/features/jpegxl.js | 1 + .../caniuse-lite/data/features/jpegxr.js | 1 + .../data/features/js-regexp-lookbehind.js | 1 + .../caniuse-lite/data/features/json.js | 1 + .../features/justify-content-space-evenly.js | 1 + .../data/features/kerning-pairs-ligatures.js | 1 + .../data/features/keyboardevent-charcode.js | 1 + .../data/features/keyboardevent-code.js | 1 + .../keyboardevent-getmodifierstate.js | 1 + .../data/features/keyboardevent-key.js | 1 + .../data/features/keyboardevent-location.js | 1 + .../data/features/keyboardevent-which.js | 1 + .../caniuse-lite/data/features/lazyload.js | 1 + .../caniuse-lite/data/features/let.js | 1 + .../data/features/link-icon-png.js | 1 + .../data/features/link-icon-svg.js | 1 + .../data/features/link-rel-dns-prefetch.js | 1 + .../data/features/link-rel-modulepreload.js | 1 + .../data/features/link-rel-preconnect.js | 1 + .../data/features/link-rel-prefetch.js | 1 + .../data/features/link-rel-preload.js | 1 + .../data/features/link-rel-prerender.js | 1 + .../data/features/loading-lazy-attr.js | 1 + .../data/features/loading-lazy-media.js | 1 + .../data/features/localecompare.js | 1 + .../data/features/magnetometer.js | 1 + .../data/features/matchesselector.js | 1 + .../caniuse-lite/data/features/matchmedia.js | 1 + .../caniuse-lite/data/features/mathml.js | 1 + .../caniuse-lite/data/features/maxlength.js | 1 + .../mdn-css-backdrop-pseudo-element.js | 1 + .../mdn-css-unicode-bidi-isolate-override.js | 1 + .../features/mdn-css-unicode-bidi-isolate.js | 1 + .../mdn-css-unicode-bidi-plaintext.js | 1 + .../features/mdn-text-decoration-color.js | 1 + .../data/features/mdn-text-decoration-line.js | 1 + .../features/mdn-text-decoration-shorthand.js | 1 + .../features/mdn-text-decoration-style.js | 1 + .../data/features/media-fragments.js | 1 + .../data/features/mediacapture-fromelement.js | 1 + .../data/features/mediarecorder.js | 1 + .../caniuse-lite/data/features/mediasource.js | 1 + .../caniuse-lite/data/features/menu.js | 1 + .../data/features/meta-theme-color.js | 1 + .../caniuse-lite/data/features/meter.js | 1 + .../caniuse-lite/data/features/midi.js | 1 + .../caniuse-lite/data/features/minmaxwh.js | 1 + .../caniuse-lite/data/features/mp3.js | 1 + .../caniuse-lite/data/features/mpeg-dash.js | 1 + .../caniuse-lite/data/features/mpeg4.js | 1 + .../data/features/multibackgrounds.js | 1 + .../caniuse-lite/data/features/multicolumn.js | 1 + .../data/features/mutation-events.js | 1 + .../data/features/mutationobserver.js | 1 + .../data/features/namevalue-storage.js | 1 + .../data/features/native-filesystem-api.js | 1 + .../caniuse-lite/data/features/nav-timing.js | 1 + .../caniuse-lite/data/features/netinfo.js | 1 + .../data/features/notifications.js | 1 + .../data/features/object-entries.js | 1 + .../caniuse-lite/data/features/object-fit.js | 1 + .../data/features/object-observe.js | 1 + .../data/features/object-values.js | 1 + .../caniuse-lite/data/features/objectrtc.js | 1 + .../data/features/offline-apps.js | 1 + .../data/features/offscreencanvas.js | 1 + .../caniuse-lite/data/features/ogg-vorbis.js | 1 + .../caniuse-lite/data/features/ogv.js | 1 + .../caniuse-lite/data/features/ol-reversed.js | 1 + .../data/features/once-event-listener.js | 1 + .../data/features/online-status.js | 1 + .../caniuse-lite/data/features/opus.js | 1 + .../data/features/orientation-sensor.js | 1 + .../caniuse-lite/data/features/outline.js | 1 + .../data/features/pad-start-end.js | 1 + .../data/features/page-transition-events.js | 1 + .../data/features/pagevisibility.js | 1 + .../data/features/passive-event-listener.js | 1 + .../caniuse-lite/data/features/passkeys.js | 1 + .../data/features/passwordrules.js | 1 + .../caniuse-lite/data/features/path2d.js | 1 + .../data/features/payment-request.js | 1 + .../caniuse-lite/data/features/pdf-viewer.js | 1 + .../data/features/permissions-api.js | 1 + .../data/features/permissions-policy.js | 1 + .../data/features/picture-in-picture.js | 1 + .../caniuse-lite/data/features/picture.js | 1 + .../caniuse-lite/data/features/ping.js | 1 + .../caniuse-lite/data/features/png-alpha.js | 1 + .../data/features/pointer-events.js | 1 + .../caniuse-lite/data/features/pointer.js | 1 + .../caniuse-lite/data/features/pointerlock.js | 1 + .../caniuse-lite/data/features/portals.js | 1 + .../data/features/prefers-color-scheme.js | 1 + .../data/features/prefers-reduced-motion.js | 1 + .../caniuse-lite/data/features/progress.js | 1 + .../data/features/promise-finally.js | 1 + .../caniuse-lite/data/features/promises.js | 1 + .../caniuse-lite/data/features/proximity.js | 1 + .../caniuse-lite/data/features/proxy.js | 1 + .../data/features/publickeypinning.js | 1 + .../caniuse-lite/data/features/push-api.js | 1 + .../data/features/queryselector.js | 1 + .../data/features/readonly-attr.js | 1 + .../data/features/referrer-policy.js | 1 + .../data/features/registerprotocolhandler.js | 1 + .../data/features/rel-noopener.js | 1 + .../data/features/rel-noreferrer.js | 1 + .../caniuse-lite/data/features/rellist.js | 1 + .../caniuse-lite/data/features/rem.js | 1 + .../data/features/requestanimationframe.js | 1 + .../data/features/requestidlecallback.js | 1 + .../data/features/resizeobserver.js | 1 + .../data/features/resource-timing.js | 1 + .../data/features/rest-parameters.js | 1 + .../data/features/rtcpeerconnection.js | 1 + .../caniuse-lite/data/features/ruby.js | 1 + .../caniuse-lite/data/features/run-in.js | 1 + .../features/same-site-cookie-attribute.js | 1 + .../data/features/screen-orientation.js | 1 + .../data/features/script-async.js | 1 + .../data/features/script-defer.js | 1 + .../data/features/scrollintoview.js | 1 + .../data/features/scrollintoviewifneeded.js | 1 + .../caniuse-lite/data/features/sdch.js | 1 + .../data/features/selection-api.js | 1 + .../data/features/server-timing.js | 1 + .../data/features/serviceworkers.js | 1 + .../data/features/setimmediate.js | 1 + .../caniuse-lite/data/features/shadowdom.js | 1 + .../caniuse-lite/data/features/shadowdomv1.js | 1 + .../data/features/sharedarraybuffer.js | 1 + .../data/features/sharedworkers.js | 1 + .../caniuse-lite/data/features/sni.js | 1 + .../caniuse-lite/data/features/spdy.js | 1 + .../data/features/speech-recognition.js | 1 + .../data/features/speech-synthesis.js | 1 + .../data/features/spellcheck-attribute.js | 1 + .../caniuse-lite/data/features/sql-storage.js | 1 + .../caniuse-lite/data/features/srcset.js | 1 + .../caniuse-lite/data/features/stream.js | 1 + .../caniuse-lite/data/features/streams.js | 1 + .../data/features/stricttransportsecurity.js | 1 + .../data/features/style-scoped.js | 1 + .../data/features/subresource-bundling.js | 1 + .../data/features/subresource-integrity.js | 1 + .../caniuse-lite/data/features/svg-css.js | 1 + .../caniuse-lite/data/features/svg-filters.js | 1 + .../caniuse-lite/data/features/svg-fonts.js | 1 + .../data/features/svg-fragment.js | 1 + .../caniuse-lite/data/features/svg-html.js | 1 + .../caniuse-lite/data/features/svg-html5.js | 1 + .../caniuse-lite/data/features/svg-img.js | 1 + .../caniuse-lite/data/features/svg-smil.js | 1 + .../caniuse-lite/data/features/svg.js | 1 + .../caniuse-lite/data/features/sxg.js | 1 + .../data/features/tabindex-attr.js | 1 + .../data/features/template-literals.js | 1 + .../caniuse-lite/data/features/template.js | 1 + .../caniuse-lite/data/features/temporal.js | 1 + .../caniuse-lite/data/features/testfeat.js | 1 + .../data/features/text-decoration.js | 1 + .../data/features/text-emphasis.js | 1 + .../data/features/text-overflow.js | 1 + .../data/features/text-size-adjust.js | 1 + .../caniuse-lite/data/features/text-stroke.js | 1 + .../caniuse-lite/data/features/textcontent.js | 1 + .../caniuse-lite/data/features/textencoder.js | 1 + .../caniuse-lite/data/features/tls1-1.js | 1 + .../caniuse-lite/data/features/tls1-2.js | 1 + .../caniuse-lite/data/features/tls1-3.js | 1 + .../caniuse-lite/data/features/touch.js | 1 + .../data/features/transforms2d.js | 1 + .../data/features/transforms3d.js | 1 + .../data/features/trusted-types.js | 1 + .../caniuse-lite/data/features/ttf.js | 1 + .../caniuse-lite/data/features/typedarrays.js | 1 + .../caniuse-lite/data/features/u2f.js | 1 + .../data/features/unhandledrejection.js | 1 + .../data/features/upgradeinsecurerequests.js | 1 + .../features/url-scroll-to-text-fragment.js | 1 + .../caniuse-lite/data/features/url.js | 1 + .../data/features/urlsearchparams.js | 1 + .../caniuse-lite/data/features/use-strict.js | 1 + .../data/features/user-select-none.js | 1 + .../caniuse-lite/data/features/user-timing.js | 1 + .../data/features/variable-fonts.js | 1 + .../data/features/vector-effect.js | 1 + .../caniuse-lite/data/features/vibration.js | 1 + .../caniuse-lite/data/features/video.js | 1 + .../caniuse-lite/data/features/videotracks.js | 1 + .../data/features/view-transitions.js | 1 + .../data/features/viewport-unit-variants.js | 1 + .../data/features/viewport-units.js | 1 + .../caniuse-lite/data/features/wai-aria.js | 1 + .../caniuse-lite/data/features/wake-lock.js | 1 + .../caniuse-lite/data/features/wasm-bigint.js | 1 + .../data/features/wasm-bulk-memory.js | 1 + .../data/features/wasm-extended-const.js | 1 + .../caniuse-lite/data/features/wasm-gc.js | 1 + .../data/features/wasm-multi-memory.js | 1 + .../data/features/wasm-multi-value.js | 1 + .../data/features/wasm-mutable-globals.js | 1 + .../data/features/wasm-nontrapping-fptoint.js | 1 + .../data/features/wasm-reference-types.js | 1 + .../data/features/wasm-relaxed-simd.js | 1 + .../data/features/wasm-signext.js | 1 + .../caniuse-lite/data/features/wasm-simd.js | 1 + .../data/features/wasm-tail-calls.js | 1 + .../data/features/wasm-threads.js | 1 + .../caniuse-lite/data/features/wasm.js | 1 + .../caniuse-lite/data/features/wav.js | 1 + .../caniuse-lite/data/features/wbr-element.js | 1 + .../data/features/web-animation.js | 1 + .../data/features/web-app-manifest.js | 1 + .../data/features/web-bluetooth.js | 1 + .../caniuse-lite/data/features/web-serial.js | 1 + .../caniuse-lite/data/features/web-share.js | 1 + .../caniuse-lite/data/features/webauthn.js | 1 + .../caniuse-lite/data/features/webcodecs.js | 1 + .../caniuse-lite/data/features/webgl.js | 1 + .../caniuse-lite/data/features/webgl2.js | 1 + .../caniuse-lite/data/features/webgpu.js | 1 + .../caniuse-lite/data/features/webhid.js | 1 + .../data/features/webkit-user-drag.js | 1 + .../caniuse-lite/data/features/webm.js | 1 + .../caniuse-lite/data/features/webnfc.js | 1 + .../caniuse-lite/data/features/webp.js | 1 + .../caniuse-lite/data/features/websockets.js | 1 + .../data/features/webtransport.js | 1 + .../caniuse-lite/data/features/webusb.js | 1 + .../caniuse-lite/data/features/webvr.js | 1 + .../caniuse-lite/data/features/webvtt.js | 1 + .../caniuse-lite/data/features/webworkers.js | 1 + .../caniuse-lite/data/features/webxr.js | 1 + .../caniuse-lite/data/features/will-change.js | 1 + .../caniuse-lite/data/features/woff.js | 1 + .../caniuse-lite/data/features/woff2.js | 1 + .../caniuse-lite/data/features/word-break.js | 1 + .../caniuse-lite/data/features/wordwrap.js | 1 + .../data/features/x-doc-messaging.js | 1 + .../data/features/x-frame-options.js | 1 + .../caniuse-lite/data/features/xhr2.js | 1 + .../caniuse-lite/data/features/xhtml.js | 1 + .../caniuse-lite/data/features/xhtmlsmil.js | 1 + .../data/features/xml-serializer.js | 1 + .../caniuse-lite/data/features/zstd.js | 1 + .../caniuse-lite/data/regions/AD.js | 1 + .../caniuse-lite/data/regions/AE.js | 1 + .../caniuse-lite/data/regions/AF.js | 1 + .../caniuse-lite/data/regions/AG.js | 1 + .../caniuse-lite/data/regions/AI.js | 1 + .../caniuse-lite/data/regions/AL.js | 1 + .../caniuse-lite/data/regions/AM.js | 1 + .../caniuse-lite/data/regions/AO.js | 1 + .../caniuse-lite/data/regions/AR.js | 1 + .../caniuse-lite/data/regions/AS.js | 1 + .../caniuse-lite/data/regions/AT.js | 1 + .../caniuse-lite/data/regions/AU.js | 1 + .../caniuse-lite/data/regions/AW.js | 1 + .../caniuse-lite/data/regions/AX.js | 1 + .../caniuse-lite/data/regions/AZ.js | 1 + .../caniuse-lite/data/regions/BA.js | 1 + .../caniuse-lite/data/regions/BB.js | 1 + .../caniuse-lite/data/regions/BD.js | 1 + .../caniuse-lite/data/regions/BE.js | 1 + .../caniuse-lite/data/regions/BF.js | 1 + .../caniuse-lite/data/regions/BG.js | 1 + .../caniuse-lite/data/regions/BH.js | 1 + .../caniuse-lite/data/regions/BI.js | 1 + .../caniuse-lite/data/regions/BJ.js | 1 + .../caniuse-lite/data/regions/BM.js | 1 + .../caniuse-lite/data/regions/BN.js | 1 + .../caniuse-lite/data/regions/BO.js | 1 + .../caniuse-lite/data/regions/BR.js | 1 + .../caniuse-lite/data/regions/BS.js | 1 + .../caniuse-lite/data/regions/BT.js | 1 + .../caniuse-lite/data/regions/BW.js | 1 + .../caniuse-lite/data/regions/BY.js | 1 + .../caniuse-lite/data/regions/BZ.js | 1 + .../caniuse-lite/data/regions/CA.js | 1 + .../caniuse-lite/data/regions/CD.js | 1 + .../caniuse-lite/data/regions/CF.js | 1 + .../caniuse-lite/data/regions/CG.js | 1 + .../caniuse-lite/data/regions/CH.js | 1 + .../caniuse-lite/data/regions/CI.js | 1 + .../caniuse-lite/data/regions/CK.js | 1 + .../caniuse-lite/data/regions/CL.js | 1 + .../caniuse-lite/data/regions/CM.js | 1 + .../caniuse-lite/data/regions/CN.js | 1 + .../caniuse-lite/data/regions/CO.js | 1 + .../caniuse-lite/data/regions/CR.js | 1 + .../caniuse-lite/data/regions/CU.js | 1 + .../caniuse-lite/data/regions/CV.js | 1 + .../caniuse-lite/data/regions/CX.js | 1 + .../caniuse-lite/data/regions/CY.js | 1 + .../caniuse-lite/data/regions/CZ.js | 1 + .../caniuse-lite/data/regions/DE.js | 1 + .../caniuse-lite/data/regions/DJ.js | 1 + .../caniuse-lite/data/regions/DK.js | 1 + .../caniuse-lite/data/regions/DM.js | 1 + .../caniuse-lite/data/regions/DO.js | 1 + .../caniuse-lite/data/regions/DZ.js | 1 + .../caniuse-lite/data/regions/EC.js | 1 + .../caniuse-lite/data/regions/EE.js | 1 + .../caniuse-lite/data/regions/EG.js | 1 + .../caniuse-lite/data/regions/ER.js | 1 + .../caniuse-lite/data/regions/ES.js | 1 + .../caniuse-lite/data/regions/ET.js | 1 + .../caniuse-lite/data/regions/FI.js | 1 + .../caniuse-lite/data/regions/FJ.js | 1 + .../caniuse-lite/data/regions/FK.js | 1 + .../caniuse-lite/data/regions/FM.js | 1 + .../caniuse-lite/data/regions/FO.js | 1 + .../caniuse-lite/data/regions/FR.js | 1 + .../caniuse-lite/data/regions/GA.js | 1 + .../caniuse-lite/data/regions/GB.js | 1 + .../caniuse-lite/data/regions/GD.js | 1 + .../caniuse-lite/data/regions/GE.js | 1 + .../caniuse-lite/data/regions/GF.js | 1 + .../caniuse-lite/data/regions/GG.js | 1 + .../caniuse-lite/data/regions/GH.js | 1 + .../caniuse-lite/data/regions/GI.js | 1 + .../caniuse-lite/data/regions/GL.js | 1 + .../caniuse-lite/data/regions/GM.js | 1 + .../caniuse-lite/data/regions/GN.js | 1 + .../caniuse-lite/data/regions/GP.js | 1 + .../caniuse-lite/data/regions/GQ.js | 1 + .../caniuse-lite/data/regions/GR.js | 1 + .../caniuse-lite/data/regions/GT.js | 1 + .../caniuse-lite/data/regions/GU.js | 1 + .../caniuse-lite/data/regions/GW.js | 1 + .../caniuse-lite/data/regions/GY.js | 1 + .../caniuse-lite/data/regions/HK.js | 1 + .../caniuse-lite/data/regions/HN.js | 1 + .../caniuse-lite/data/regions/HR.js | 1 + .../caniuse-lite/data/regions/HT.js | 1 + .../caniuse-lite/data/regions/HU.js | 1 + .../caniuse-lite/data/regions/ID.js | 1 + .../caniuse-lite/data/regions/IE.js | 1 + .../caniuse-lite/data/regions/IL.js | 1 + .../caniuse-lite/data/regions/IM.js | 1 + .../caniuse-lite/data/regions/IN.js | 1 + .../caniuse-lite/data/regions/IQ.js | 1 + .../caniuse-lite/data/regions/IR.js | 1 + .../caniuse-lite/data/regions/IS.js | 1 + .../caniuse-lite/data/regions/IT.js | 1 + .../caniuse-lite/data/regions/JE.js | 1 + .../caniuse-lite/data/regions/JM.js | 1 + .../caniuse-lite/data/regions/JO.js | 1 + .../caniuse-lite/data/regions/JP.js | 1 + .../caniuse-lite/data/regions/KE.js | 1 + .../caniuse-lite/data/regions/KG.js | 1 + .../caniuse-lite/data/regions/KH.js | 1 + .../caniuse-lite/data/regions/KI.js | 1 + .../caniuse-lite/data/regions/KM.js | 1 + .../caniuse-lite/data/regions/KN.js | 1 + .../caniuse-lite/data/regions/KP.js | 1 + .../caniuse-lite/data/regions/KR.js | 1 + .../caniuse-lite/data/regions/KW.js | 1 + .../caniuse-lite/data/regions/KY.js | 1 + .../caniuse-lite/data/regions/KZ.js | 1 + .../caniuse-lite/data/regions/LA.js | 1 + .../caniuse-lite/data/regions/LB.js | 1 + .../caniuse-lite/data/regions/LC.js | 1 + .../caniuse-lite/data/regions/LI.js | 1 + .../caniuse-lite/data/regions/LK.js | 1 + .../caniuse-lite/data/regions/LR.js | 1 + .../caniuse-lite/data/regions/LS.js | 1 + .../caniuse-lite/data/regions/LT.js | 1 + .../caniuse-lite/data/regions/LU.js | 1 + .../caniuse-lite/data/regions/LV.js | 1 + .../caniuse-lite/data/regions/LY.js | 1 + .../caniuse-lite/data/regions/MA.js | 1 + .../caniuse-lite/data/regions/MC.js | 1 + .../caniuse-lite/data/regions/MD.js | 1 + .../caniuse-lite/data/regions/ME.js | 1 + .../caniuse-lite/data/regions/MG.js | 1 + .../caniuse-lite/data/regions/MH.js | 1 + .../caniuse-lite/data/regions/MK.js | 1 + .../caniuse-lite/data/regions/ML.js | 1 + .../caniuse-lite/data/regions/MM.js | 1 + .../caniuse-lite/data/regions/MN.js | 1 + .../caniuse-lite/data/regions/MO.js | 1 + .../caniuse-lite/data/regions/MP.js | 1 + .../caniuse-lite/data/regions/MQ.js | 1 + .../caniuse-lite/data/regions/MR.js | 1 + .../caniuse-lite/data/regions/MS.js | 1 + .../caniuse-lite/data/regions/MT.js | 1 + .../caniuse-lite/data/regions/MU.js | 1 + .../caniuse-lite/data/regions/MV.js | 1 + .../caniuse-lite/data/regions/MW.js | 1 + .../caniuse-lite/data/regions/MX.js | 1 + .../caniuse-lite/data/regions/MY.js | 1 + .../caniuse-lite/data/regions/MZ.js | 1 + .../caniuse-lite/data/regions/NA.js | 1 + .../caniuse-lite/data/regions/NC.js | 1 + .../caniuse-lite/data/regions/NE.js | 1 + .../caniuse-lite/data/regions/NF.js | 1 + .../caniuse-lite/data/regions/NG.js | 1 + .../caniuse-lite/data/regions/NI.js | 1 + .../caniuse-lite/data/regions/NL.js | 1 + .../caniuse-lite/data/regions/NO.js | 1 + .../caniuse-lite/data/regions/NP.js | 1 + .../caniuse-lite/data/regions/NR.js | 1 + .../caniuse-lite/data/regions/NU.js | 1 + .../caniuse-lite/data/regions/NZ.js | 1 + .../caniuse-lite/data/regions/OM.js | 1 + .../caniuse-lite/data/regions/PA.js | 1 + .../caniuse-lite/data/regions/PE.js | 1 + .../caniuse-lite/data/regions/PF.js | 1 + .../caniuse-lite/data/regions/PG.js | 1 + .../caniuse-lite/data/regions/PH.js | 1 + .../caniuse-lite/data/regions/PK.js | 1 + .../caniuse-lite/data/regions/PL.js | 1 + .../caniuse-lite/data/regions/PM.js | 1 + .../caniuse-lite/data/regions/PN.js | 1 + .../caniuse-lite/data/regions/PR.js | 1 + .../caniuse-lite/data/regions/PS.js | 1 + .../caniuse-lite/data/regions/PT.js | 1 + .../caniuse-lite/data/regions/PW.js | 1 + .../caniuse-lite/data/regions/PY.js | 1 + .../caniuse-lite/data/regions/QA.js | 1 + .../caniuse-lite/data/regions/RE.js | 1 + .../caniuse-lite/data/regions/RO.js | 1 + .../caniuse-lite/data/regions/RS.js | 1 + .../caniuse-lite/data/regions/RU.js | 1 + .../caniuse-lite/data/regions/RW.js | 1 + .../caniuse-lite/data/regions/SA.js | 1 + .../caniuse-lite/data/regions/SB.js | 1 + .../caniuse-lite/data/regions/SC.js | 1 + .../caniuse-lite/data/regions/SD.js | 1 + .../caniuse-lite/data/regions/SE.js | 1 + .../caniuse-lite/data/regions/SG.js | 1 + .../caniuse-lite/data/regions/SH.js | 1 + .../caniuse-lite/data/regions/SI.js | 1 + .../caniuse-lite/data/regions/SK.js | 1 + .../caniuse-lite/data/regions/SL.js | 1 + .../caniuse-lite/data/regions/SM.js | 1 + .../caniuse-lite/data/regions/SN.js | 1 + .../caniuse-lite/data/regions/SO.js | 1 + .../caniuse-lite/data/regions/SR.js | 1 + .../caniuse-lite/data/regions/ST.js | 1 + .../caniuse-lite/data/regions/SV.js | 1 + .../caniuse-lite/data/regions/SY.js | 1 + .../caniuse-lite/data/regions/SZ.js | 1 + .../caniuse-lite/data/regions/TC.js | 1 + .../caniuse-lite/data/regions/TD.js | 1 + .../caniuse-lite/data/regions/TG.js | 1 + .../caniuse-lite/data/regions/TH.js | 1 + .../caniuse-lite/data/regions/TJ.js | 1 + .../caniuse-lite/data/regions/TL.js | 1 + .../caniuse-lite/data/regions/TM.js | 1 + .../caniuse-lite/data/regions/TN.js | 1 + .../caniuse-lite/data/regions/TO.js | 1 + .../caniuse-lite/data/regions/TR.js | 1 + .../caniuse-lite/data/regions/TT.js | 1 + .../caniuse-lite/data/regions/TV.js | 1 + .../caniuse-lite/data/regions/TW.js | 1 + .../caniuse-lite/data/regions/TZ.js | 1 + .../caniuse-lite/data/regions/UA.js | 1 + .../caniuse-lite/data/regions/UG.js | 1 + .../caniuse-lite/data/regions/US.js | 1 + .../caniuse-lite/data/regions/UY.js | 1 + .../caniuse-lite/data/regions/UZ.js | 1 + .../caniuse-lite/data/regions/VA.js | 1 + .../caniuse-lite/data/regions/VC.js | 1 + .../caniuse-lite/data/regions/VE.js | 1 + .../caniuse-lite/data/regions/VG.js | 1 + .../caniuse-lite/data/regions/VI.js | 1 + .../caniuse-lite/data/regions/VN.js | 1 + .../caniuse-lite/data/regions/VU.js | 1 + .../caniuse-lite/data/regions/WF.js | 1 + .../caniuse-lite/data/regions/WS.js | 1 + .../caniuse-lite/data/regions/YE.js | 1 + .../caniuse-lite/data/regions/YT.js | 1 + .../caniuse-lite/data/regions/ZA.js | 1 + .../caniuse-lite/data/regions/ZM.js | 1 + .../caniuse-lite/data/regions/ZW.js | 1 + .../caniuse-lite/data/regions/alt-af.js | 1 + .../caniuse-lite/data/regions/alt-an.js | 1 + .../caniuse-lite/data/regions/alt-as.js | 1 + .../caniuse-lite/data/regions/alt-eu.js | 1 + .../caniuse-lite/data/regions/alt-na.js | 1 + .../caniuse-lite/data/regions/alt-oc.js | 1 + .../caniuse-lite/data/regions/alt-sa.js | 1 + .../caniuse-lite/data/regions/alt-ww.js | 1 + .../caniuse-lite/dist/lib/statuses.js | 9 + .../caniuse-lite/dist/lib/supported.js | 9 + .../caniuse-lite/dist/unpacker/agents.js | 47 + .../dist/unpacker/browserVersions.js | 1 + .../caniuse-lite/dist/unpacker/browsers.js | 1 + .../caniuse-lite/dist/unpacker/feature.js | 52 + .../caniuse-lite/dist/unpacker/features.js | 6 + .../caniuse-lite/dist/unpacker/index.js | 4 + .../caniuse-lite/dist/unpacker/region.js | 22 + labWeb/node_modules/caniuse-lite/package.json | 34 + labWeb/node_modules/chokidar/LICENSE | 21 + labWeb/node_modules/chokidar/README.md | 308 + labWeb/node_modules/chokidar/index.js | 973 + labWeb/node_modules/chokidar/lib/constants.js | 66 + .../chokidar/lib/fsevents-handler.js | 526 + .../chokidar/lib/nodefs-handler.js | 654 + .../node_modules/glob-parent/CHANGELOG.md | 110 + .../chokidar/node_modules/glob-parent/LICENSE | 15 + .../node_modules/glob-parent/README.md | 137 + .../node_modules/glob-parent/index.js | 42 + .../node_modules/glob-parent/package.json | 48 + labWeb/node_modules/chokidar/package.json | 70 + labWeb/node_modules/chokidar/types/index.d.ts | 192 + labWeb/node_modules/commander/CHANGELOG.md | 436 + labWeb/node_modules/commander/LICENSE | 22 + labWeb/node_modules/commander/Readme.md | 713 + labWeb/node_modules/commander/index.js | 1649 + labWeb/node_modules/commander/package.json | 41 + .../node_modules/commander/typings/index.d.ts | 311 + labWeb/node_modules/cssesc/LICENSE-MIT.txt | 20 + labWeb/node_modules/cssesc/README.md | 201 + labWeb/node_modules/cssesc/bin/cssesc | 116 + labWeb/node_modules/cssesc/cssesc.js | 110 + labWeb/node_modules/cssesc/man/cssesc.1 | 70 + labWeb/node_modules/cssesc/package.json | 51 + labWeb/node_modules/didyoumean/LICENSE | 14 + labWeb/node_modules/didyoumean/README.md | 134 + .../didyoumean/didYouMean-1.2.1.js | 274 + .../didyoumean/didYouMean-1.2.1.min.js | 17 + labWeb/node_modules/didyoumean/package.json | 27 + labWeb/node_modules/dlv/README.md | 76 + labWeb/node_modules/dlv/dist/dlv.es.js | 2 + labWeb/node_modules/dlv/dist/dlv.es.js.map | 1 + labWeb/node_modules/dlv/dist/dlv.js | 2 + labWeb/node_modules/dlv/dist/dlv.js.map | 1 + labWeb/node_modules/dlv/dist/dlv.umd.js | 2 + labWeb/node_modules/dlv/dist/dlv.umd.js.map | 1 + labWeb/node_modules/dlv/index.js | 7 + labWeb/node_modules/dlv/package.json | 30 + .../node_modules/electron-to-chromium/LICENSE | 5 + .../electron-to-chromium/README.md | 186 + .../electron-to-chromium/chromium-versions.js | 87 + .../chromium-versions.json | 1 + .../full-chromium-versions.js | 2776 + .../full-chromium-versions.json | 1 + .../electron-to-chromium/full-versions.js | 1764 + .../electron-to-chromium/full-versions.json | 1 + .../electron-to-chromium/index.js | 36 + .../electron-to-chromium/package.json | 43 + .../electron-to-chromium/versions.js | 244 + .../electron-to-chromium/versions.json | 1 + labWeb/node_modules/es-errors/.eslintrc | 5 + .../es-errors/.github/FUNDING.yml | 12 + labWeb/node_modules/es-errors/CHANGELOG.md | 40 + labWeb/node_modules/es-errors/LICENSE | 21 + labWeb/node_modules/es-errors/README.md | 55 + labWeb/node_modules/es-errors/eval.d.ts | 3 + labWeb/node_modules/es-errors/eval.js | 4 + labWeb/node_modules/es-errors/index.d.ts | 3 + labWeb/node_modules/es-errors/index.js | 4 + labWeb/node_modules/es-errors/package.json | 80 + labWeb/node_modules/es-errors/range.d.ts | 3 + labWeb/node_modules/es-errors/range.js | 4 + labWeb/node_modules/es-errors/ref.d.ts | 3 + labWeb/node_modules/es-errors/ref.js | 4 + labWeb/node_modules/es-errors/syntax.d.ts | 3 + labWeb/node_modules/es-errors/syntax.js | 4 + labWeb/node_modules/es-errors/test/index.js | 19 + labWeb/node_modules/es-errors/tsconfig.json | 49 + labWeb/node_modules/es-errors/type.d.ts | 3 + labWeb/node_modules/es-errors/type.js | 4 + labWeb/node_modules/es-errors/uri.d.ts | 3 + labWeb/node_modules/es-errors/uri.js | 4 + labWeb/node_modules/escalade/dist/index.js | 22 + labWeb/node_modules/escalade/dist/index.mjs | 22 + labWeb/node_modules/escalade/index.d.mts | 11 + labWeb/node_modules/escalade/index.d.ts | 15 + labWeb/node_modules/escalade/license | 9 + labWeb/node_modules/escalade/package.json | 74 + labWeb/node_modules/escalade/readme.md | 211 + labWeb/node_modules/escalade/sync/index.d.mts | 9 + labWeb/node_modules/escalade/sync/index.d.ts | 13 + labWeb/node_modules/escalade/sync/index.js | 18 + labWeb/node_modules/escalade/sync/index.mjs | 18 + labWeb/node_modules/fast-glob/LICENSE | 21 + labWeb/node_modules/fast-glob/README.md | 830 + .../node_modules/glob-parent/CHANGELOG.md | 110 + .../node_modules/glob-parent/LICENSE | 15 + .../node_modules/glob-parent/README.md | 137 + .../node_modules/glob-parent/index.js | 42 + .../node_modules/glob-parent/package.json | 48 + labWeb/node_modules/fast-glob/out/index.d.ts | 40 + labWeb/node_modules/fast-glob/out/index.js | 102 + .../fast-glob/out/managers/tasks.d.ts | 22 + .../fast-glob/out/managers/tasks.js | 110 + .../fast-glob/out/providers/async.d.ts | 9 + .../fast-glob/out/providers/async.js | 23 + .../fast-glob/out/providers/filters/deep.d.ts | 16 + .../fast-glob/out/providers/filters/deep.js | 62 + .../out/providers/filters/entry.d.ts | 17 + .../fast-glob/out/providers/filters/entry.js | 85 + .../out/providers/filters/error.d.ts | 8 + .../fast-glob/out/providers/filters/error.js | 15 + .../out/providers/matchers/matcher.d.ts | 33 + .../out/providers/matchers/matcher.js | 45 + .../out/providers/matchers/partial.d.ts | 4 + .../out/providers/matchers/partial.js | 38 + .../fast-glob/out/providers/provider.d.ts | 19 + .../fast-glob/out/providers/provider.js | 48 + .../fast-glob/out/providers/stream.d.ts | 11 + .../fast-glob/out/providers/stream.js | 31 + .../fast-glob/out/providers/sync.d.ts | 9 + .../fast-glob/out/providers/sync.js | 23 + .../out/providers/transformers/entry.d.ts | 8 + .../out/providers/transformers/entry.js | 26 + .../fast-glob/out/readers/async.d.ts | 10 + .../fast-glob/out/readers/async.js | 35 + .../fast-glob/out/readers/reader.d.ts | 15 + .../fast-glob/out/readers/reader.js | 33 + .../fast-glob/out/readers/stream.d.ts | 14 + .../fast-glob/out/readers/stream.js | 55 + .../fast-glob/out/readers/sync.d.ts | 12 + .../fast-glob/out/readers/sync.js | 43 + .../node_modules/fast-glob/out/settings.d.ts | 164 + labWeb/node_modules/fast-glob/out/settings.js | 59 + .../fast-glob/out/types/index.d.ts | 31 + .../node_modules/fast-glob/out/types/index.js | 2 + .../fast-glob/out/utils/array.d.ts | 2 + .../node_modules/fast-glob/out/utils/array.js | 22 + .../fast-glob/out/utils/errno.d.ts | 2 + .../node_modules/fast-glob/out/utils/errno.js | 7 + .../node_modules/fast-glob/out/utils/fs.d.ts | 4 + labWeb/node_modules/fast-glob/out/utils/fs.js | 19 + .../fast-glob/out/utils/index.d.ts | 8 + .../node_modules/fast-glob/out/utils/index.js | 17 + .../fast-glob/out/utils/path.d.ts | 13 + .../node_modules/fast-glob/out/utils/path.js | 68 + .../fast-glob/out/utils/pattern.d.ts | 49 + .../fast-glob/out/utils/pattern.js | 206 + .../fast-glob/out/utils/stream.d.ts | 4 + .../fast-glob/out/utils/stream.js | 17 + .../fast-glob/out/utils/string.d.ts | 2 + .../fast-glob/out/utils/string.js | 11 + labWeb/node_modules/fast-glob/package.json | 81 + labWeb/node_modules/fastq/LICENSE | 13 + labWeb/node_modules/fastq/README.md | 310 + labWeb/node_modules/fastq/SECURITY.md | 15 + labWeb/node_modules/fastq/bench.js | 66 + labWeb/node_modules/fastq/eslint.config.js | 11 + labWeb/node_modules/fastq/example.js | 14 + labWeb/node_modules/fastq/example.mjs | 9 + labWeb/node_modules/fastq/index.d.ts | 59 + labWeb/node_modules/fastq/package.json | 49 + labWeb/node_modules/fastq/queue.js | 346 + labWeb/node_modules/fastq/test/example.ts | 83 + labWeb/node_modules/fastq/test/promise.js | 325 + labWeb/node_modules/fastq/test/test.js | 733 + labWeb/node_modules/fastq/test/tsconfig.json | 11 + labWeb/node_modules/fill-range/LICENSE | 21 + labWeb/node_modules/fill-range/README.md | 237 + labWeb/node_modules/fill-range/index.js | 248 + labWeb/node_modules/fill-range/package.json | 74 + labWeb/node_modules/fraction.js/CHANGELOG.md | 38 + labWeb/node_modules/fraction.js/LICENSE | 21 + labWeb/node_modules/fraction.js/README.md | 520 + .../node_modules/fraction.js/dist/fraction.js | 1045 + .../fraction.js/dist/fraction.min.js | 21 + .../fraction.js/dist/fraction.mjs | 1043 + .../fraction.js/examples/angles.js | 26 + .../fraction.js/examples/approx.js | 54 + .../fraction.js/examples/egyptian.js | 24 + .../fraction.js/examples/hesse-convergence.js | 111 + .../fraction.js/examples/integrate.js | 67 + .../fraction.js/examples/ratio-chain.js | 24 + .../fraction.js/examples/rational-pow.js | 29 + .../fraction.js/examples/tape-measure.js | 16 + .../fraction.js/examples/toFraction.js | 35 + .../fraction.js/examples/valueOfPi.js | 42 + .../node_modules/fraction.js/fraction.d.mts | 79 + labWeb/node_modules/fraction.js/fraction.d.ts | 79 + labWeb/node_modules/fraction.js/package.json | 81 + .../node_modules/fraction.js/src/fraction.js | 1046 + .../fraction.js/tests/fraction.test.js | 1806 + labWeb/node_modules/function-bind/.eslintrc | 21 + .../function-bind/.github/FUNDING.yml | 12 + .../function-bind/.github/SECURITY.md | 3 + labWeb/node_modules/function-bind/.nycrc | 13 + .../node_modules/function-bind/CHANGELOG.md | 136 + labWeb/node_modules/function-bind/LICENSE | 20 + labWeb/node_modules/function-bind/README.md | 46 + .../function-bind/implementation.js | 84 + labWeb/node_modules/function-bind/index.js | 5 + .../node_modules/function-bind/package.json | 87 + .../node_modules/function-bind/test/.eslintrc | 9 + .../node_modules/function-bind/test/index.js | 252 + labWeb/node_modules/glob-parent/LICENSE | 15 + labWeb/node_modules/glob-parent/README.md | 134 + labWeb/node_modules/glob-parent/index.js | 75 + labWeb/node_modules/glob-parent/package.json | 54 + .../node_modules/hasown/.github/FUNDING.yml | 12 + labWeb/node_modules/hasown/.nycrc | 13 + labWeb/node_modules/hasown/CHANGELOG.md | 51 + labWeb/node_modules/hasown/LICENSE | 21 + labWeb/node_modules/hasown/README.md | 40 + labWeb/node_modules/hasown/eslint.config.mjs | 6 + labWeb/node_modules/hasown/index.d.ts | 4 + labWeb/node_modules/hasown/index.js | 8 + labWeb/node_modules/hasown/package.json | 92 + labWeb/node_modules/hasown/tsconfig.json | 6 + labWeb/node_modules/is-binary-path/index.d.ts | 17 + labWeb/node_modules/is-binary-path/index.js | 7 + labWeb/node_modules/is-binary-path/license | 9 + .../node_modules/is-binary-path/package.json | 40 + labWeb/node_modules/is-binary-path/readme.md | 34 + labWeb/node_modules/is-core-module/.eslintrc | 18 + labWeb/node_modules/is-core-module/.nycrc | 9 + .../node_modules/is-core-module/CHANGELOG.md | 218 + labWeb/node_modules/is-core-module/LICENSE | 20 + labWeb/node_modules/is-core-module/README.md | 40 + labWeb/node_modules/is-core-module/core.json | 162 + labWeb/node_modules/is-core-module/index.js | 69 + .../node_modules/is-core-module/package.json | 76 + .../node_modules/is-core-module/test/index.js | 157 + labWeb/node_modules/is-extglob/LICENSE | 21 + labWeb/node_modules/is-extglob/README.md | 107 + labWeb/node_modules/is-extglob/index.js | 20 + labWeb/node_modules/is-extglob/package.json | 69 + labWeb/node_modules/is-glob/LICENSE | 21 + labWeb/node_modules/is-glob/README.md | 206 + labWeb/node_modules/is-glob/index.js | 150 + labWeb/node_modules/is-glob/package.json | 81 + labWeb/node_modules/is-number/LICENSE | 21 + labWeb/node_modules/is-number/README.md | 187 + labWeb/node_modules/is-number/index.js | 18 + labWeb/node_modules/is-number/package.json | 82 + labWeb/node_modules/jiti/LICENSE | 21 + labWeb/node_modules/jiti/README.md | 164 + labWeb/node_modules/jiti/bin/jiti.js | 16 + labWeb/node_modules/jiti/dist/babel.d.ts | 2 + labWeb/node_modules/jiti/dist/babel.js | 227 + labWeb/node_modules/jiti/dist/jiti.d.ts | 20 + labWeb/node_modules/jiti/dist/jiti.js | 1 + .../babel-plugin-transform-import-meta.d.ts | 4 + .../jiti/dist/plugins/import-meta-env.d.ts | 5 + labWeb/node_modules/jiti/dist/types.d.ts | 35 + labWeb/node_modules/jiti/dist/utils.d.ts | 8 + labWeb/node_modules/jiti/lib/index.js | 15 + labWeb/node_modules/jiti/package.json | 81 + labWeb/node_modules/jiti/register.js | 3 + labWeb/node_modules/lilconfig/LICENSE | 21 + labWeb/node_modules/lilconfig/package.json | 42 + labWeb/node_modules/lilconfig/readme.md | 98 + labWeb/node_modules/lilconfig/src/index.d.ts | 54 + labWeb/node_modules/lilconfig/src/index.js | 460 + labWeb/node_modules/lines-and-columns/LICENSE | 21 + .../node_modules/lines-and-columns/README.md | 33 + .../lines-and-columns/build/index.d.ts | 13 + .../lines-and-columns/build/index.js | 62 + .../lines-and-columns/package.json | 49 + labWeb/node_modules/merge2/LICENSE | 21 + labWeb/node_modules/merge2/README.md | 144 + labWeb/node_modules/merge2/index.js | 144 + labWeb/node_modules/merge2/package.json | 43 + labWeb/node_modules/micromatch/LICENSE | 21 + labWeb/node_modules/micromatch/README.md | 1024 + labWeb/node_modules/micromatch/index.js | 474 + labWeb/node_modules/micromatch/package.json | 119 + labWeb/node_modules/mz/HISTORY.md | 66 + labWeb/node_modules/mz/LICENSE | 22 + labWeb/node_modules/mz/README.md | 106 + labWeb/node_modules/mz/child_process.js | 8 + labWeb/node_modules/mz/crypto.js | 9 + labWeb/node_modules/mz/dns.js | 16 + labWeb/node_modules/mz/fs.js | 62 + labWeb/node_modules/mz/index.js | 8 + labWeb/node_modules/mz/package.json | 44 + labWeb/node_modules/mz/readline.js | 64 + labWeb/node_modules/mz/zlib.js | 13 + labWeb/node_modules/nanoid/LICENSE | 20 + labWeb/node_modules/nanoid/README.md | 39 + .../nanoid/async/index.browser.cjs | 69 + .../nanoid/async/index.browser.js | 34 + labWeb/node_modules/nanoid/async/index.cjs | 71 + labWeb/node_modules/nanoid/async/index.d.ts | 56 + labWeb/node_modules/nanoid/async/index.js | 35 + .../node_modules/nanoid/async/index.native.js | 26 + labWeb/node_modules/nanoid/async/package.json | 12 + labWeb/node_modules/nanoid/bin/nanoid.cjs | 55 + labWeb/node_modules/nanoid/index.browser.cjs | 72 + labWeb/node_modules/nanoid/index.browser.js | 34 + labWeb/node_modules/nanoid/index.cjs | 85 + labWeb/node_modules/nanoid/index.d.cts | 91 + labWeb/node_modules/nanoid/index.d.ts | 91 + labWeb/node_modules/nanoid/index.js | 45 + labWeb/node_modules/nanoid/nanoid.js | 1 + .../node_modules/nanoid/non-secure/index.cjs | 34 + .../node_modules/nanoid/non-secure/index.d.ts | 33 + .../node_modules/nanoid/non-secure/index.js | 21 + .../nanoid/non-secure/package.json | 6 + labWeb/node_modules/nanoid/package.json | 89 + .../nanoid/url-alphabet/index.cjs | 7 + .../node_modules/nanoid/url-alphabet/index.js | 3 + .../nanoid/url-alphabet/package.json | 6 + labWeb/node_modules/node-releases/LICENSE | 21 + labWeb/node_modules/node-releases/README.md | 12 + .../node-releases/data/processed/envs.json | 1 + .../release-schedule/release-schedule.json | 1 + .../node_modules/node-releases/package.json | 22 + labWeb/node_modules/normalize-path/LICENSE | 21 + labWeb/node_modules/normalize-path/README.md | 127 + labWeb/node_modules/normalize-path/index.js | 35 + .../node_modules/normalize-path/package.json | 77 + labWeb/node_modules/object-assign/index.js | 90 + labWeb/node_modules/object-assign/license | 21 + .../node_modules/object-assign/package.json | 42 + labWeb/node_modules/object-assign/readme.md | 61 + labWeb/node_modules/object-hash/LICENSE | 22 + .../object-hash/dist/object_hash.js | 1 + labWeb/node_modules/object-hash/index.js | 453 + labWeb/node_modules/object-hash/package.json | 53 + .../node_modules/object-hash/readme.markdown | 198 + labWeb/node_modules/path-parse/LICENSE | 21 + labWeb/node_modules/path-parse/README.md | 42 + labWeb/node_modules/path-parse/index.js | 75 + labWeb/node_modules/path-parse/package.json | 33 + labWeb/node_modules/picocolors/LICENSE | 15 + labWeb/node_modules/picocolors/README.md | 21 + labWeb/node_modules/picocolors/package.json | 25 + .../picocolors/picocolors.browser.js | 4 + .../node_modules/picocolors/picocolors.d.ts | 5 + labWeb/node_modules/picocolors/picocolors.js | 75 + labWeb/node_modules/picocolors/types.d.ts | 51 + labWeb/node_modules/picomatch/LICENSE | 21 + labWeb/node_modules/picomatch/README.md | 716 + labWeb/node_modules/picomatch/index.js | 3 + .../node_modules/picomatch/lib/constants.js | 184 + labWeb/node_modules/picomatch/lib/parse.js | 1392 + .../node_modules/picomatch/lib/picomatch.js | 342 + labWeb/node_modules/picomatch/lib/scan.js | 391 + labWeb/node_modules/picomatch/lib/utils.js | 64 + labWeb/node_modules/picomatch/package.json | 81 + labWeb/node_modules/pify/index.js | 68 + labWeb/node_modules/pify/license | 21 + labWeb/node_modules/pify/package.json | 48 + labWeb/node_modules/pify/readme.md | 119 + labWeb/node_modules/pirates/LICENSE | 21 + labWeb/node_modules/pirates/README.md | 73 + labWeb/node_modules/pirates/index.d.ts | 82 + labWeb/node_modules/pirates/lib/index.js | 155 + labWeb/node_modules/pirates/package.json | 43 + labWeb/node_modules/postcss-import/LICENSE | 20 + labWeb/node_modules/postcss-import/README.md | 244 + labWeb/node_modules/postcss-import/index.js | 420 + .../postcss-import/lib/assign-layer-names.js | 17 + .../postcss-import/lib/data-url.js | 17 + .../postcss-import/lib/join-layer.js | 9 + .../postcss-import/lib/join-media.js | 28 + .../postcss-import/lib/load-content.js | 12 + .../postcss-import/lib/parse-statements.js | 172 + .../postcss-import/lib/process-content.js | 59 + .../postcss-import/lib/resolve-id.js | 42 + .../node_modules/postcss-import/package.json | 65 + labWeb/node_modules/postcss-js/LICENSE | 20 + labWeb/node_modules/postcss-js/README.md | 22 + labWeb/node_modules/postcss-js/async.js | 15 + labWeb/node_modules/postcss-js/index.js | 11 + labWeb/node_modules/postcss-js/index.mjs | 8 + labWeb/node_modules/postcss-js/objectifier.js | 93 + labWeb/node_modules/postcss-js/package.json | 48 + labWeb/node_modules/postcss-js/parser.js | 104 + .../node_modules/postcss-js/process-result.js | 11 + labWeb/node_modules/postcss-js/sync.js | 12 + .../node_modules/postcss-load-config/LICENSE | 20 + .../postcss-load-config/README.md | 474 + .../postcss-load-config/package.json | 61 + .../postcss-load-config/src/index.d.ts | 65 + .../postcss-load-config/src/index.js | 178 + .../postcss-load-config/src/options.js | 48 + .../postcss-load-config/src/plugins.js | 89 + .../postcss-load-config/src/req.js | 62 + labWeb/node_modules/postcss-nested/LICENSE | 20 + labWeb/node_modules/postcss-nested/README.md | 85 + labWeb/node_modules/postcss-nested/index.d.ts | 41 + labWeb/node_modules/postcss-nested/index.js | 361 + .../node_modules/postcss-nested/package.json | 34 + .../postcss-selector-parser/API.md | 872 + .../postcss-selector-parser/CHANGELOG.md | 549 + .../postcss-selector-parser/LICENSE-MIT | 22 + .../postcss-selector-parser/README.md | 49 + .../postcss-selector-parser/dist/index.js | 17 + .../postcss-selector-parser/dist/parser.js | 1015 + .../postcss-selector-parser/dist/processor.js | 170 + .../dist/selectors/attribute.js | 448 + .../dist/selectors/className.js | 50 + .../dist/selectors/combinator.js | 21 + .../dist/selectors/comment.js | 21 + .../dist/selectors/constructors.js | 65 + .../dist/selectors/container.js | 308 + .../dist/selectors/guards.js | 58 + .../dist/selectors/id.js | 25 + .../dist/selectors/index.js | 21 + .../dist/selectors/namespace.js | 80 + .../dist/selectors/nesting.js | 22 + .../dist/selectors/node.js | 192 + .../dist/selectors/pseudo.js | 26 + .../dist/selectors/root.js | 44 + .../dist/selectors/selector.js | 21 + .../dist/selectors/string.js | 21 + .../dist/selectors/tag.js | 21 + .../dist/selectors/types.js | 28 + .../dist/selectors/universal.js | 22 + .../dist/sortAscending.js | 11 + .../dist/tokenTypes.js | 70 + .../postcss-selector-parser/dist/tokenize.js | 239 + .../dist/util/ensureObject.js | 17 + .../dist/util/getProp.js | 18 + .../dist/util/index.js | 13 + .../dist/util/stripComments.js | 21 + .../dist/util/unesc.js | 76 + .../postcss-selector-parser/package.json | 80 + .../postcss-selector-parser.d.ts | 555 + .../node_modules/postcss-value-parser/LICENSE | 22 + .../postcss-value-parser/README.md | 263 + .../postcss-value-parser/lib/index.d.ts | 177 + .../postcss-value-parser/lib/index.js | 28 + .../postcss-value-parser/lib/parse.js | 321 + .../postcss-value-parser/lib/stringify.js | 48 + .../postcss-value-parser/lib/unit.js | 120 + .../postcss-value-parser/lib/walk.js | 22 + .../postcss-value-parser/package.json | 58 + labWeb/node_modules/postcss/LICENSE | 20 + labWeb/node_modules/postcss/README.md | 28 + labWeb/node_modules/postcss/lib/at-rule.d.ts | 139 + labWeb/node_modules/postcss/lib/at-rule.js | 25 + labWeb/node_modules/postcss/lib/comment.d.ts | 67 + labWeb/node_modules/postcss/lib/comment.js | 13 + .../node_modules/postcss/lib/container.d.ts | 478 + labWeb/node_modules/postcss/lib/container.js | 447 + .../postcss/lib/css-syntax-error.d.ts | 247 + .../postcss/lib/css-syntax-error.js | 133 + .../node_modules/postcss/lib/declaration.d.ts | 150 + .../node_modules/postcss/lib/declaration.js | 24 + labWeb/node_modules/postcss/lib/document.d.ts | 68 + labWeb/node_modules/postcss/lib/document.js | 33 + labWeb/node_modules/postcss/lib/fromJSON.d.ts | 9 + labWeb/node_modules/postcss/lib/fromJSON.js | 54 + labWeb/node_modules/postcss/lib/input.d.ts | 226 + labWeb/node_modules/postcss/lib/input.js | 273 + .../node_modules/postcss/lib/lazy-result.d.ts | 189 + .../node_modules/postcss/lib/lazy-result.js | 550 + labWeb/node_modules/postcss/lib/list.d.ts | 60 + labWeb/node_modules/postcss/lib/list.js | 58 + .../node_modules/postcss/lib/map-generator.js | 376 + .../postcss/lib/no-work-result.d.ts | 45 + .../postcss/lib/no-work-result.js | 137 + labWeb/node_modules/postcss/lib/node.d.ts | 555 + labWeb/node_modules/postcss/lib/node.js | 449 + labWeb/node_modules/postcss/lib/parse.d.ts | 9 + labWeb/node_modules/postcss/lib/parse.js | 42 + labWeb/node_modules/postcss/lib/parser.js | 611 + labWeb/node_modules/postcss/lib/postcss.d.mts | 66 + labWeb/node_modules/postcss/lib/postcss.d.ts | 456 + labWeb/node_modules/postcss/lib/postcss.js | 101 + labWeb/node_modules/postcss/lib/postcss.mjs | 30 + .../postcss/lib/previous-map.d.ts | 80 + .../node_modules/postcss/lib/previous-map.js | 145 + .../node_modules/postcss/lib/processor.d.ts | 114 + labWeb/node_modules/postcss/lib/processor.js | 67 + labWeb/node_modules/postcss/lib/result.d.ts | 204 + labWeb/node_modules/postcss/lib/result.js | 42 + labWeb/node_modules/postcss/lib/root.d.ts | 86 + labWeb/node_modules/postcss/lib/root.js | 61 + labWeb/node_modules/postcss/lib/rule.d.ts | 126 + labWeb/node_modules/postcss/lib/rule.js | 27 + .../node_modules/postcss/lib/stringifier.d.ts | 45 + .../node_modules/postcss/lib/stringifier.js | 370 + .../node_modules/postcss/lib/stringify.d.ts | 9 + labWeb/node_modules/postcss/lib/stringify.js | 11 + labWeb/node_modules/postcss/lib/symbols.js | 5 + .../postcss/lib/terminal-highlight.js | 70 + labWeb/node_modules/postcss/lib/tokenize.js | 266 + labWeb/node_modules/postcss/lib/warn-once.js | 13 + labWeb/node_modules/postcss/lib/warning.d.ts | 146 + labWeb/node_modules/postcss/lib/warning.js | 37 + labWeb/node_modules/postcss/package.json | 88 + labWeb/node_modules/queue-microtask/LICENSE | 20 + labWeb/node_modules/queue-microtask/README.md | 90 + .../node_modules/queue-microtask/index.d.ts | 2 + labWeb/node_modules/queue-microtask/index.js | 9 + .../node_modules/queue-microtask/package.json | 55 + labWeb/node_modules/read-cache/LICENSE | 20 + labWeb/node_modules/read-cache/README.md | 46 + labWeb/node_modules/read-cache/index.js | 78 + labWeb/node_modules/read-cache/package.json | 34 + labWeb/node_modules/readdirp/LICENSE | 21 + labWeb/node_modules/readdirp/README.md | 122 + labWeb/node_modules/readdirp/index.d.ts | 43 + labWeb/node_modules/readdirp/index.js | 287 + labWeb/node_modules/readdirp/package.json | 122 + labWeb/node_modules/resolve/.claude/notes.md | 26 + .../resolve/.claude/settings.local.json | 26 + labWeb/node_modules/resolve/.editorconfig | 38 + labWeb/node_modules/resolve/.eslintrc | 65 + .../node_modules/resolve/.github/FUNDING.yml | 12 + .../.github/INCIDENT_RESPONSE_PROCESS.md | 119 + .../resolve/.github/THREAT_MODEL.md | 74 + labWeb/node_modules/resolve/LICENSE | 21 + labWeb/node_modules/resolve/SECURITY.md | 13 + labWeb/node_modules/resolve/async.js | 3 + labWeb/node_modules/resolve/bin/resolve | 50 + labWeb/node_modules/resolve/eslint.config.mjs | 80 + labWeb/node_modules/resolve/example/async.js | 5 + labWeb/node_modules/resolve/example/sync.js | 3 + labWeb/node_modules/resolve/index.js | 6 + labWeb/node_modules/resolve/lib/async.js | 336 + labWeb/node_modules/resolve/lib/caller.js | 12 + labWeb/node_modules/resolve/lib/core.js | 12 + labWeb/node_modules/resolve/lib/core.json | 162 + labWeb/node_modules/resolve/lib/homedir.js | 31 + labWeb/node_modules/resolve/lib/is-core.js | 5 + .../resolve/lib/node-modules-paths.js | 45 + .../resolve/lib/normalize-options.js | 10 + labWeb/node_modules/resolve/lib/sync.js | 216 + labWeb/node_modules/resolve/package.json | 78 + labWeb/node_modules/resolve/readme.markdown | 300 + labWeb/node_modules/resolve/sync.js | 3 + labWeb/node_modules/resolve/test/core.js | 88 + .../resolve/test/default_paths.js | 49 + labWeb/node_modules/resolve/test/dotdot.js | 29 + .../resolve/test/dotdot/abc/index.js | 2 + .../node_modules/resolve/test/dotdot/index.js | 1 + .../resolve/test/faulty_basedir.js | 29 + labWeb/node_modules/resolve/test/filter.js | 34 + .../node_modules/resolve/test/filter_sync.js | 33 + .../node_modules/resolve/test/home_paths.js | 127 + .../resolve/test/home_paths_sync.js | 114 + labWeb/node_modules/resolve/test/homedir.js | 112 + labWeb/node_modules/resolve/test/mock.js | 353 + labWeb/node_modules/resolve/test/mock_sync.js | 234 + .../node_modules/resolve/test/module_dir.js | 56 + .../test/module_dir/xmodules/aaa/index.js | 1 + .../test/module_dir/ymodules/aaa/index.js | 1 + .../test/module_dir/zmodules/bbb/main.js | 1 + .../test/module_dir/zmodules/bbb/package.json | 3 + .../resolve/test/node-modules-paths.js | 143 + labWeb/node_modules/resolve/test/node_path.js | 70 + .../resolve/test/node_path/x/aaa/index.js | 1 + .../resolve/test/node_path/x/ccc/index.js | 1 + .../resolve/test/node_path/y/bbb/index.js | 1 + .../resolve/test/node_path/y/ccc/index.js | 1 + labWeb/node_modules/resolve/test/nonstring.js | 9 + .../node_modules/resolve/test/pathfilter.js | 75 + .../resolve/test/pathfilter/deep_ref/main.js | 0 .../resolve/test/pathfilter_sync.js | 24 + .../node_modules/resolve/test/precedence.js | 23 + .../resolve/test/precedence/aaa.js | 1 + .../resolve/test/precedence/aaa/index.js | 1 + .../resolve/test/precedence/aaa/main.js | 1 + .../resolve/test/precedence/bbb.js | 1 + .../resolve/test/precedence/bbb/main.js | 1 + labWeb/node_modules/resolve/test/resolver.js | 597 + .../resolve/test/resolver/baz/doom.js | 0 .../resolve/test/resolver/baz/package.json | 4 + .../resolve/test/resolver/baz/quux.js | 1 + .../resolve/test/resolver/browser_field/a.js | 0 .../resolve/test/resolver/browser_field/b.js | 0 .../test/resolver/browser_field/package.json | 5 + .../resolve/test/resolver/cup.coffee | 1 + .../resolve/test/resolver/dot_main/index.js | 1 + .../test/resolver/dot_main/package.json | 3 + .../test/resolver/dot_slash_main/index.js | 1 + .../test/resolver/dot_slash_main/package.json | 3 + .../resolve/test/resolver/false_main/index.js | 0 .../test/resolver/false_main/package.json | 4 + .../node_modules/resolve/test/resolver/foo.js | 1 + .../test/resolver/incorrect_main/index.js | 2 + .../test/resolver/incorrect_main/package.json | 3 + .../test/resolver/invalid_main/package.json | 7 + .../resolve/test/resolver/mug.coffee | 0 .../node_modules/resolve/test/resolver/mug.js | 0 .../test/resolver/multirepo/lerna.json | 6 + .../test/resolver/multirepo/package.json | 20 + .../multirepo/packages/package-a/index.js | 35 + .../multirepo/packages/package-a/package.json | 14 + .../multirepo/packages/package-b/index.js | 0 .../multirepo/packages/package-b/package.json | 14 + .../resolver/nested_symlinks/mylib/async.js | 26 + .../nested_symlinks/mylib/package.json | 15 + .../resolver/nested_symlinks/mylib/sync.js | 12 + .../test/resolver/other_path/lib/other-lib.js | 0 .../resolve/test/resolver/other_path/root.js | 0 .../resolve/test/resolver/quux/foo/index.js | 1 + .../resolve/test/resolver/same_names/foo.js | 1 + .../test/resolver/same_names/foo/index.js | 1 + .../resolver/symlinked/_/node_modules/foo.js | 0 .../symlinked/_/symlink_target/.gitkeep | 0 .../test/resolver/symlinked/package/bar.js | 1 + .../resolver/symlinked/package/package.json | 3 + .../test/resolver/without_basedir/main.js | 5 + .../resolve/test/resolver_sync.js | 730 + .../resolve/test/shadowed_core.js | 54 + .../shadowed_core/node_modules/util/index.js | 0 labWeb/node_modules/resolve/test/subdirs.js | 13 + labWeb/node_modules/resolve/test/symlinks.js | 176 + .../reusify/.github/dependabot.yml | 7 + .../reusify/.github/workflows/ci.yml | 96 + labWeb/node_modules/reusify/LICENSE | 22 + labWeb/node_modules/reusify/README.md | 139 + labWeb/node_modules/reusify/SECURITY.md | 15 + .../benchmarks/createNoCodeFunction.js | 30 + labWeb/node_modules/reusify/benchmarks/fib.js | 13 + .../reusify/benchmarks/reuseNoCodeFunction.js | 38 + labWeb/node_modules/reusify/eslint.config.js | 14 + labWeb/node_modules/reusify/package.json | 50 + labWeb/node_modules/reusify/reusify.d.ts | 14 + labWeb/node_modules/reusify/reusify.js | 33 + labWeb/node_modules/reusify/test.js | 66 + labWeb/node_modules/reusify/tsconfig.json | 11 + labWeb/node_modules/run-parallel/LICENSE | 20 + labWeb/node_modules/run-parallel/README.md | 85 + labWeb/node_modules/run-parallel/index.js | 51 + labWeb/node_modules/run-parallel/package.json | 58 + labWeb/node_modules/source-map-js/LICENSE | 28 + labWeb/node_modules/source-map-js/README.md | 765 + .../source-map-js/lib/array-set.js | 121 + .../source-map-js/lib/base64-vlq.js | 140 + .../node_modules/source-map-js/lib/base64.js | 67 + .../source-map-js/lib/binary-search.js | 111 + .../source-map-js/lib/mapping-list.js | 79 + .../source-map-js/lib/quick-sort.js | 132 + .../lib/source-map-consumer.d.ts | 1 + .../source-map-js/lib/source-map-consumer.js | 1188 + .../lib/source-map-generator.d.ts | 1 + .../source-map-js/lib/source-map-generator.js | 444 + .../source-map-js/lib/source-node.d.ts | 1 + .../source-map-js/lib/source-node.js | 413 + labWeb/node_modules/source-map-js/lib/util.js | 594 + .../node_modules/source-map-js/package.json | 71 + .../source-map-js/source-map.d.ts | 104 + .../node_modules/source-map-js/source-map.js | 8 + labWeb/node_modules/sucrase/LICENSE | 21 + labWeb/node_modules/sucrase/README.md | 295 + labWeb/node_modules/sucrase/bin/sucrase | 3 + labWeb/node_modules/sucrase/bin/sucrase-node | 18 + .../sucrase/dist/CJSImportProcessor.js | 456 + .../sucrase/dist/HelperManager.js | 176 + .../node_modules/sucrase/dist/NameManager.js | 27 + .../sucrase/dist/Options-gen-types.js | 42 + labWeb/node_modules/sucrase/dist/Options.js | 101 + .../sucrase/dist/TokenProcessor.js | 357 + labWeb/node_modules/sucrase/dist/cli.js | 317 + .../sucrase/dist/computeSourceMap.js | 89 + .../sucrase/dist/esm/CJSImportProcessor.js | 456 + .../sucrase/dist/esm/HelperManager.js | 176 + .../sucrase/dist/esm/NameManager.js | 27 + .../sucrase/dist/esm/Options-gen-types.js | 42 + .../node_modules/sucrase/dist/esm/Options.js | 101 + .../sucrase/dist/esm/TokenProcessor.js | 357 + labWeb/node_modules/sucrase/dist/esm/cli.js | 317 + .../sucrase/dist/esm/computeSourceMap.js | 89 + .../dist/esm/identifyShadowedGlobals.js | 98 + labWeb/node_modules/sucrase/dist/esm/index.js | 133 + .../sucrase/dist/esm/parser/index.js | 31 + .../sucrase/dist/esm/parser/plugins/flow.js | 1105 + .../dist/esm/parser/plugins/jsx/index.js | 367 + .../dist/esm/parser/plugins/jsx/xhtml.js | 256 + .../sucrase/dist/esm/parser/plugins/types.js | 37 + .../dist/esm/parser/plugins/typescript.js | 1632 + .../dist/esm/parser/tokenizer/index.js | 1004 + .../dist/esm/parser/tokenizer/keywords.js | 43 + .../dist/esm/parser/tokenizer/readWord.js | 64 + .../dist/esm/parser/tokenizer/readWordTree.js | 671 + .../dist/esm/parser/tokenizer/state.js | 106 + .../dist/esm/parser/tokenizer/types.js | 361 + .../sucrase/dist/esm/parser/traverser/base.js | 60 + .../dist/esm/parser/traverser/expression.js | 1022 + .../dist/esm/parser/traverser/index.js | 18 + .../sucrase/dist/esm/parser/traverser/lval.js | 159 + .../dist/esm/parser/traverser/statement.js | 1332 + .../sucrase/dist/esm/parser/traverser/util.js | 104 + .../sucrase/dist/esm/parser/util/charcodes.js | 115 + .../dist/esm/parser/util/identifier.js | 34 + .../dist/esm/parser/util/whitespace.js | 33 + .../node_modules/sucrase/dist/esm/register.js | 88 + .../esm/transformers/CJSImportTransformer.js | 916 + .../esm/transformers/ESMImportTransformer.js | 415 + .../dist/esm/transformers/FlowTransformer.js | 182 + .../dist/esm/transformers/JSXTransformer.js | 733 + .../esm/transformers/JestHoistTransformer.js | 111 + .../NumericSeparatorTransformer.js | 20 + .../OptionalCatchBindingTransformer.js | 19 + .../OptionalChainingNullishTransformer.js | 155 + .../ReactDisplayNameTransformer.js | 160 + .../transformers/ReactHotLoaderTransformer.js | 69 + .../dist/esm/transformers/RootTransformer.js | 462 + .../dist/esm/transformers/Transformer.js | 16 + .../esm/transformers/TypeScriptTransformer.js | 279 + .../dist/esm/util/elideImportEquals.js | 29 + .../sucrase/dist/esm/util/formatTokens.js | 74 + .../sucrase/dist/esm/util/getClassInfo.js | 352 + .../dist/esm/util/getDeclarationInfo.js | 40 + .../dist/esm/util/getIdentifierNames.js | 15 + .../esm/util/getImportExportSpecifierInfo.js | 92 + .../sucrase/dist/esm/util/getJSXPragmaInfo.js | 22 + .../dist/esm/util/getNonTypeIdentifiers.js | 43 + .../dist/esm/util/getTSImportedNames.js | 84 + .../sucrase/dist/esm/util/isAsyncOperation.js | 38 + .../sucrase/dist/esm/util/isExportFrom.js | 18 + .../sucrase/dist/esm/util/isIdentifier.js | 81 + .../esm/util/removeMaybeImportAttributes.js | 22 + .../dist/esm/util/shouldElideDefaultExport.js | 38 + .../sucrase/dist/identifyShadowedGlobals.js | 98 + labWeb/node_modules/sucrase/dist/index.js | 133 + .../node_modules/sucrase/dist/parser/index.js | 31 + .../sucrase/dist/parser/plugins/flow.js | 1105 + .../sucrase/dist/parser/plugins/jsx/index.js | 367 + .../sucrase/dist/parser/plugins/jsx/xhtml.js | 256 + .../sucrase/dist/parser/plugins/types.js | 37 + .../sucrase/dist/parser/plugins/typescript.js | 1632 + .../sucrase/dist/parser/tokenizer/index.js | 1004 + .../sucrase/dist/parser/tokenizer/keywords.js | 43 + .../sucrase/dist/parser/tokenizer/readWord.js | 64 + .../dist/parser/tokenizer/readWordTree.js | 671 + .../sucrase/dist/parser/tokenizer/state.js | 106 + .../sucrase/dist/parser/tokenizer/types.js | 361 + .../sucrase/dist/parser/traverser/base.js | 60 + .../dist/parser/traverser/expression.js | 1022 + .../sucrase/dist/parser/traverser/index.js | 18 + .../sucrase/dist/parser/traverser/lval.js | 159 + .../dist/parser/traverser/statement.js | 1332 + .../sucrase/dist/parser/traverser/util.js | 104 + .../sucrase/dist/parser/util/charcodes.js | 115 + .../sucrase/dist/parser/util/identifier.js | 34 + .../sucrase/dist/parser/util/whitespace.js | 33 + labWeb/node_modules/sucrase/dist/register.js | 88 + .../dist/transformers/CJSImportTransformer.js | 916 + .../dist/transformers/ESMImportTransformer.js | 415 + .../dist/transformers/FlowTransformer.js | 182 + .../dist/transformers/JSXTransformer.js | 733 + .../dist/transformers/JestHoistTransformer.js | 111 + .../NumericSeparatorTransformer.js | 20 + .../OptionalCatchBindingTransformer.js | 19 + .../OptionalChainingNullishTransformer.js | 155 + .../ReactDisplayNameTransformer.js | 160 + .../transformers/ReactHotLoaderTransformer.js | 69 + .../dist/transformers/RootTransformer.js | 462 + .../sucrase/dist/transformers/Transformer.js | 16 + .../transformers/TypeScriptTransformer.js | 279 + .../dist/types/CJSImportProcessor.d.ts | 67 + .../sucrase/dist/types/HelperManager.d.ts | 15 + .../sucrase/dist/types/NameManager.d.ts | 7 + .../sucrase/dist/types/Options-gen-types.d.ts | 9 + .../sucrase/dist/types/Options.d.ts | 90 + .../sucrase/dist/types/TokenProcessor.d.ts | 87 + .../node_modules/sucrase/dist/types/cli.d.ts | 1 + .../sucrase/dist/types/computeSourceMap.d.ts | 17 + .../dist/types/identifyShadowedGlobals.d.ts | 12 + .../sucrase/dist/types/index.d.ts | 26 + .../sucrase/dist/types/parser/index.d.ts | 8 + .../dist/types/parser/plugins/flow.d.ts | 27 + .../dist/types/parser/plugins/jsx/index.d.ts | 2 + .../dist/types/parser/plugins/jsx/xhtml.d.ts | 2 + .../dist/types/parser/plugins/types.d.ts | 5 + .../dist/types/parser/plugins/typescript.d.ts | 49 + .../dist/types/parser/tokenizer/index.d.ts | 93 + .../dist/types/parser/tokenizer/keywords.d.ts | 43 + .../dist/types/parser/tokenizer/readWord.d.ts | 7 + .../types/parser/tokenizer/readWordTree.d.ts | 1 + .../dist/types/parser/tokenizer/state.d.ts | 50 + .../dist/types/parser/tokenizer/types.d.ts | 126 + .../dist/types/parser/traverser/base.d.ts | 16 + .../types/parser/traverser/expression.d.ts | 34 + .../dist/types/parser/traverser/index.d.ts | 2 + .../dist/types/parser/traverser/lval.d.ts | 9 + .../types/parser/traverser/statement.d.ts | 20 + .../dist/types/parser/traverser/util.d.ts | 17 + .../dist/types/parser/util/charcodes.d.ts | 107 + .../dist/types/parser/util/identifier.d.ts | 2 + .../dist/types/parser/util/whitespace.d.ts | 3 + .../sucrase/dist/types/register.d.ts | 14 + .../transformers/CJSImportTransformer.d.ts | 149 + .../transformers/ESMImportTransformer.d.ts | 52 + .../types/transformers/FlowTransformer.d.ts | 79 + .../types/transformers/JSXTransformer.d.ts | 144 + .../transformers/JestHoistTransformer.d.ts | 32 + .../NumericSeparatorTransformer.d.ts | 7 + .../OptionalCatchBindingTransformer.d.ts | 9 + .../OptionalChainingNullishTransformer.d.ts | 36 + .../ReactDisplayNameTransformer.d.ts | 29 + .../ReactHotLoaderTransformer.d.ts | 12 + .../types/transformers/RootTransformer.d.ts | 52 + .../dist/types/transformers/Transformer.d.ts | 6 + .../transformers/TypeScriptTransformer.d.ts | 104 + .../dist/types/util/elideImportEquals.d.ts | 2 + .../sucrase/dist/types/util/formatTokens.d.ts | 2 + .../sucrase/dist/types/util/getClassInfo.d.ts | 34 + .../dist/types/util/getDeclarationInfo.d.ts | 18 + .../dist/types/util/getIdentifierNames.d.ts | 5 + .../util/getImportExportSpecifierInfo.d.ts | 36 + .../dist/types/util/getJSXPragmaInfo.d.ts | 8 + .../types/util/getNonTypeIdentifiers.d.ts | 3 + .../dist/types/util/getTSImportedNames.d.ts | 9 + .../dist/types/util/isAsyncOperation.d.ts | 11 + .../sucrase/dist/types/util/isExportFrom.d.ts | 6 + .../sucrase/dist/types/util/isIdentifier.d.ts | 8 + .../util/removeMaybeImportAttributes.d.ts | 6 + .../types/util/shouldElideDefaultExport.d.ts | 6 + .../sucrase/dist/util/elideImportEquals.js | 29 + .../sucrase/dist/util/formatTokens.js | 74 + .../sucrase/dist/util/getClassInfo.js | 352 + .../sucrase/dist/util/getDeclarationInfo.js | 40 + .../sucrase/dist/util/getIdentifierNames.js | 15 + .../dist/util/getImportExportSpecifierInfo.js | 92 + .../sucrase/dist/util/getJSXPragmaInfo.js | 22 + .../dist/util/getNonTypeIdentifiers.js | 43 + .../sucrase/dist/util/getTSImportedNames.js | 84 + .../sucrase/dist/util/isAsyncOperation.js | 38 + .../sucrase/dist/util/isExportFrom.js | 18 + .../sucrase/dist/util/isIdentifier.js | 81 + .../dist/util/removeMaybeImportAttributes.js | 22 + .../dist/util/shouldElideDefaultExport.js | 38 + labWeb/node_modules/sucrase/package.json | 88 + labWeb/node_modules/sucrase/register/index.js | 1 + labWeb/node_modules/sucrase/register/js.js | 1 + labWeb/node_modules/sucrase/register/jsx.js | 1 + .../register/ts-legacy-module-interop.js | 1 + labWeb/node_modules/sucrase/register/ts.js | 1 + .../register/tsx-legacy-module-interop.js | 1 + labWeb/node_modules/sucrase/register/tsx.js | 1 + .../sucrase/ts-node-plugin/index.js | 83 + .../supports-preserve-symlinks-flag/.eslintrc | 14 + .../.github/FUNDING.yml | 12 + .../supports-preserve-symlinks-flag/.nycrc | 9 + .../CHANGELOG.md | 22 + .../supports-preserve-symlinks-flag/LICENSE | 21 + .../supports-preserve-symlinks-flag/README.md | 42 + .../browser.js | 3 + .../supports-preserve-symlinks-flag/index.js | 9 + .../package.json | 70 + .../test/index.js | 29 + labWeb/node_modules/tailwindcss/LICENSE | 21 + labWeb/node_modules/tailwindcss/README.md | 40 + labWeb/node_modules/tailwindcss/base.css | 1 + labWeb/node_modules/tailwindcss/colors.d.ts | 3 + labWeb/node_modules/tailwindcss/colors.js | 2 + .../node_modules/tailwindcss/components.css | 1 + .../tailwindcss/defaultConfig.d.ts | 3 + .../node_modules/tailwindcss/defaultConfig.js | 2 + .../tailwindcss/defaultTheme.d.ts | 4 + .../node_modules/tailwindcss/defaultTheme.js | 2 + .../tailwindcss/lib/cli-peer-dependencies.js | 36 + labWeb/node_modules/tailwindcss/lib/cli.js | 3 + .../tailwindcss/lib/cli/build/deps.js | 62 + .../tailwindcss/lib/cli/build/index.js | 54 + .../tailwindcss/lib/cli/build/plugin.js | 376 + .../tailwindcss/lib/cli/build/utils.js | 88 + .../tailwindcss/lib/cli/build/watching.js | 182 + .../tailwindcss/lib/cli/help/index.js | 73 + .../node_modules/tailwindcss/lib/cli/index.js | 230 + .../tailwindcss/lib/cli/init/index.js | 63 + .../tailwindcss/lib/corePluginList.js | 191 + .../tailwindcss/lib/corePlugins.js | 4339 + .../node_modules/tailwindcss/lib/css/LICENSE | 25 + .../tailwindcss/lib/css/preflight.css | 386 + .../tailwindcss/lib/featureFlags.js | 79 + labWeb/node_modules/tailwindcss/lib/index.js | 2 + .../tailwindcss/lib/lib/cacheInvalidation.js | 92 + .../lib/lib/collapseAdjacentRules.js | 61 + .../lib/lib/collapseDuplicateDeclarations.js | 85 + .../tailwindcss/lib/lib/content.js | 247 + .../tailwindcss/lib/lib/defaultExtractor.js | 273 + .../lib/lib/evaluateTailwindFunctions.js | 238 + .../tailwindcss/lib/lib/expandApplyAtRules.js | 553 + .../lib/lib/expandTailwindAtRules.js | 279 + .../tailwindcss/lib/lib/findAtConfigPath.js | 46 + .../tailwindcss/lib/lib/generateRules.js | 912 + .../lib/lib/getModuleDependencies.js | 99 + .../tailwindcss/lib/lib/load-config.js | 58 + .../lib/lib/normalizeTailwindDirectives.js | 89 + .../tailwindcss/lib/lib/offsets.js | 355 + .../lib/lib/partitionApplyAtRules.js | 58 + .../node_modules/tailwindcss/lib/lib/regex.js | 74 + .../tailwindcss/lib/lib/remap-bitfield.js | 89 + .../lib/lib/resolveDefaultsAtRules.js | 165 + .../tailwindcss/lib/lib/setupContextUtils.js | 1298 + .../lib/lib/setupTrackingContext.js | 169 + .../tailwindcss/lib/lib/sharedState.js | 79 + .../lib/lib/substituteScreenAtRules.js | 31 + labWeb/node_modules/tailwindcss/lib/plugin.js | 48 + .../lib/postcss-plugins/nesting/README.md | 42 + .../lib/postcss-plugins/nesting/index.js | 21 + .../lib/postcss-plugins/nesting/plugin.js | 89 + .../lib/processTailwindFeatures.js | 62 + .../tailwindcss/lib/public/colors.js | 355 + .../tailwindcss/lib/public/create-plugin.js | 17 + .../tailwindcss/lib/public/default-config.js | 18 + .../tailwindcss/lib/public/default-theme.js | 18 + .../tailwindcss/lib/public/load-config.js | 12 + .../tailwindcss/lib/public/resolve-config.js | 24 + .../lib/util/applyImportantSelector.js | 38 + .../tailwindcss/lib/util/bigSign.js | 13 + .../tailwindcss/lib/util/buildMediaQuery.js | 27 + .../tailwindcss/lib/util/cloneDeep.js | 22 + .../tailwindcss/lib/util/cloneNodes.js | 54 + .../tailwindcss/lib/util/color.js | 116 + .../tailwindcss/lib/util/colorNames.js | 752 + .../tailwindcss/lib/util/configurePlugins.js | 23 + .../tailwindcss/lib/util/createPlugin.js | 32 + .../lib/util/createUtilityPlugin.js | 53 + .../tailwindcss/lib/util/dataTypes.js | 338 + .../tailwindcss/lib/util/defaults.js | 27 + .../tailwindcss/lib/util/escapeClassName.js | 24 + .../tailwindcss/lib/util/escapeCommas.js | 13 + .../lib/util/flattenColorPalette.js | 18 + .../lib/util/formatVariantSelector.js | 270 + .../tailwindcss/lib/util/getAllConfigs.js | 50 + .../tailwindcss/lib/util/hashConfig.js | 21 + .../tailwindcss/lib/util/isKeyframeRule.js | 13 + .../tailwindcss/lib/util/isPlainObject.js | 17 + .../util/isSyntacticallyValidPropertyValue.js | 74 + .../node_modules/tailwindcss/lib/util/log.js | 61 + .../tailwindcss/lib/util/math-operators.js | 152 + .../tailwindcss/lib/util/nameClass.js | 49 + .../tailwindcss/lib/util/negateValue.js | 36 + .../tailwindcss/lib/util/normalizeConfig.js | 281 + .../tailwindcss/lib/util/normalizeScreens.js | 178 + .../lib/util/parseAnimationValue.js | 93 + .../lib/util/parseBoxShadowValue.js | 88 + .../tailwindcss/lib/util/parseDependency.js | 47 + .../tailwindcss/lib/util/parseGlob.js | 35 + .../tailwindcss/lib/util/parseObjectStyles.js | 36 + .../tailwindcss/lib/util/pluginUtils.js | 289 + .../tailwindcss/lib/util/prefixSelector.js | 39 + .../tailwindcss/lib/util/pseudoElements.js | 212 + .../lib/util/removeAlphaVariables.js | 33 + .../tailwindcss/lib/util/resolveConfig.js | 256 + .../tailwindcss/lib/util/resolveConfigPath.js | 72 + .../tailwindcss/lib/util/responsive.js | 24 + .../lib/util/splitAtTopLevelOnly.js | 47 + .../node_modules/tailwindcss/lib/util/tap.js | 14 + .../tailwindcss/lib/util/toColorValue.js | 13 + .../tailwindcss/lib/util/toPath.js | 32 + .../lib/util/transformThemeValue.js | 73 + .../tailwindcss/lib/util/validateConfig.js | 37 + .../lib/util/validateFormalSyntax.js | 26 + .../tailwindcss/lib/util/withAlphaVariable.js | 79 + .../tailwindcss/lib/value-parser/LICENSE | 22 + .../tailwindcss/lib/value-parser/README.md | 3 + .../tailwindcss/lib/value-parser/index.d.js | 2 + .../tailwindcss/lib/value-parser/index.js | 22 + .../tailwindcss/lib/value-parser/parse.js | 259 + .../tailwindcss/lib/value-parser/stringify.js | 38 + .../tailwindcss/lib/value-parser/unit.js | 86 + .../tailwindcss/lib/value-parser/walk.js | 16 + .../node_modules/tailwindcss/loadConfig.d.ts | 4 + labWeb/node_modules/tailwindcss/loadConfig.js | 2 + .../tailwindcss/nesting/index.d.ts | 4 + .../node_modules/tailwindcss/nesting/index.js | 2 + labWeb/node_modules/tailwindcss/package.json | 124 + .../node_modules/tailwindcss/peers/index.js | 97871 ++++++++++++++++ labWeb/node_modules/tailwindcss/plugin.d.ts | 11 + labWeb/node_modules/tailwindcss/plugin.js | 2 + .../tailwindcss/prettier.config.js | 19 + .../tailwindcss/resolveConfig.d.ts | 31 + .../node_modules/tailwindcss/resolveConfig.js | 2 + labWeb/node_modules/tailwindcss/screens.css | 1 + .../tailwindcss/scripts/create-plugin-list.js | 10 + .../tailwindcss/scripts/generate-types.js | 104 + .../tailwindcss/scripts/release-channel.js | 18 + .../tailwindcss/scripts/release-notes.js | 21 + .../tailwindcss/scripts/type-utils.js | 27 + .../tailwindcss/src/cli-peer-dependencies.js | 15 + labWeb/node_modules/tailwindcss/src/cli.js | 3 + .../tailwindcss/src/cli/build/deps.js | 56 + .../tailwindcss/src/cli/build/index.js | 49 + .../tailwindcss/src/cli/build/plugin.js | 444 + .../tailwindcss/src/cli/build/utils.js | 76 + .../tailwindcss/src/cli/build/watching.js | 229 + .../tailwindcss/src/cli/help/index.js | 70 + .../node_modules/tailwindcss/src/cli/index.js | 216 + .../tailwindcss/src/cli/init/index.js | 79 + .../tailwindcss/src/corePluginList.js | 1 + .../tailwindcss/src/corePlugins.js | 3007 + .../node_modules/tailwindcss/src/css/LICENSE | 25 + .../tailwindcss/src/css/preflight.css | 386 + .../tailwindcss/src/featureFlags.js | 62 + labWeb/node_modules/tailwindcss/src/index.js | 1 + .../tailwindcss/src/lib/cacheInvalidation.js | 52 + .../src/lib/collapseAdjacentRules.js | 58 + .../src/lib/collapseDuplicateDeclarations.js | 93 + .../tailwindcss/src/lib/content.js | 295 + .../tailwindcss/src/lib/defaultExtractor.js | 255 + .../src/lib/evaluateTailwindFunctions.js | 272 + .../tailwindcss/src/lib/expandApplyAtRules.js | 637 + .../src/lib/expandTailwindAtRules.js | 282 + .../tailwindcss/src/lib/findAtConfigPath.js | 48 + .../tailwindcss/src/lib/generateRules.js | 958 + .../src/lib/getModuleDependencies.js | 79 + .../tailwindcss/src/lib/load-config.ts | 46 + .../src/lib/normalizeTailwindDirectives.js | 84 + .../tailwindcss/src/lib/offsets.js | 432 + .../src/lib/partitionApplyAtRules.js | 52 + .../node_modules/tailwindcss/src/lib/regex.js | 74 + .../tailwindcss/src/lib/remap-bitfield.js | 82 + .../src/lib/resolveDefaultsAtRules.js | 165 + .../tailwindcss/src/lib/setupContextUtils.js | 1371 + .../src/lib/setupTrackingContext.js | 172 + .../tailwindcss/src/lib/sharedState.js | 57 + .../src/lib/substituteScreenAtRules.js | 19 + labWeb/node_modules/tailwindcss/src/plugin.js | 47 + .../src/postcss-plugins/nesting/README.md | 42 + .../src/postcss-plugins/nesting/index.js | 13 + .../src/postcss-plugins/nesting/plugin.js | 80 + .../src/processTailwindFeatures.js | 56 + .../tailwindcss/src/public/colors.js | 322 + .../tailwindcss/src/public/create-plugin.js | 2 + .../tailwindcss/src/public/default-config.js | 4 + .../tailwindcss/src/public/default-theme.js | 4 + .../tailwindcss/src/public/load-config.js | 2 + .../tailwindcss/src/public/resolve-config.js | 7 + .../src/util/applyImportantSelector.js | 26 + .../tailwindcss/src/util/bigSign.js | 3 + .../tailwindcss/src/util/buildMediaQuery.js | 22 + .../tailwindcss/src/util/cloneDeep.js | 11 + .../tailwindcss/src/util/cloneNodes.js | 49 + .../tailwindcss/src/util/color.js | 88 + .../tailwindcss/src/util/colorNames.js | 150 + .../tailwindcss/src/util/configurePlugins.js | 23 + .../tailwindcss/src/util/createPlugin.js | 27 + .../src/util/createUtilityPlugin.js | 37 + .../tailwindcss/src/util/dataTypes.js | 327 + .../tailwindcss/src/util/defaults.js | 17 + .../tailwindcss/src/util/escapeClassName.js | 8 + .../tailwindcss/src/util/escapeCommas.js | 3 + .../src/util/flattenColorPalette.js | 13 + .../src/util/formatVariantSelector.js | 324 + .../tailwindcss/src/util/getAllConfigs.js | 38 + .../tailwindcss/src/util/hashConfig.js | 5 + .../tailwindcss/src/util/isKeyframeRule.js | 3 + .../tailwindcss/src/util/isPlainObject.js | 8 + .../util/isSyntacticallyValidPropertyValue.js | 61 + .../node_modules/tailwindcss/src/util/log.js | 29 + .../tailwindcss/src/util/math-operators.ts | 205 + .../tailwindcss/src/util/nameClass.js | 30 + .../tailwindcss/src/util/negateValue.js | 24 + .../tailwindcss/src/util/normalizeConfig.js | 299 + .../tailwindcss/src/util/normalizeScreens.js | 140 + .../src/util/parseAnimationValue.js | 68 + .../src/util/parseBoxShadowValue.js | 72 + .../tailwindcss/src/util/parseDependency.js | 44 + .../tailwindcss/src/util/parseGlob.js | 23 + .../tailwindcss/src/util/parseObjectStyles.js | 19 + .../tailwindcss/src/util/pluginUtils.js | 307 + .../tailwindcss/src/util/prefixSelector.js | 33 + .../tailwindcss/src/util/pseudoElements.js | 171 + .../src/util/removeAlphaVariables.js | 26 + .../tailwindcss/src/util/resolveConfig.js | 277 + .../tailwindcss/src/util/resolveConfigPath.js | 68 + .../tailwindcss/src/util/responsive.js | 10 + .../src/util/splitAtTopLevelOnly.js | 48 + .../node_modules/tailwindcss/src/util/tap.js | 4 + .../tailwindcss/src/util/toColorValue.js | 3 + .../tailwindcss/src/util/toPath.js | 26 + .../src/util/transformThemeValue.js | 62 + .../tailwindcss/src/util/validateConfig.js | 26 + .../src/util/validateFormalSyntax.js | 34 + .../tailwindcss/src/util/withAlphaVariable.js | 49 + .../tailwindcss/src/value-parser/LICENSE | 22 + .../tailwindcss/src/value-parser/README.md | 3 + .../tailwindcss/src/value-parser/index.d.ts | 177 + .../tailwindcss/src/value-parser/index.js | 28 + .../tailwindcss/src/value-parser/parse.js | 303 + .../tailwindcss/src/value-parser/stringify.js | 41 + .../tailwindcss/src/value-parser/unit.js | 118 + .../tailwindcss/src/value-parser/walk.js | 18 + .../node_modules/tailwindcss/stubs/.npmignore | 1 + .../tailwindcss/stubs/.prettierrc.json | 6 + .../tailwindcss/stubs/config.full.js | 1062 + .../tailwindcss/stubs/config.simple.js | 7 + .../tailwindcss/stubs/postcss.config.cjs | 6 + .../tailwindcss/stubs/postcss.config.js | 6 + .../tailwindcss/stubs/tailwind.config.cjs | 2 + .../tailwindcss/stubs/tailwind.config.js | 2 + .../tailwindcss/stubs/tailwind.config.ts | 3 + labWeb/node_modules/tailwindcss/tailwind.css | 5 + .../tailwindcss/types/config.d.ts | 379 + .../tailwindcss/types/generated/.gitkeep | 0 .../tailwindcss/types/generated/colors.d.ts | 298 + .../types/generated/corePluginList.d.ts | 1 + .../types/generated/default-theme.d.ts | 397 + .../node_modules/tailwindcss/types/index.d.ts | 11 + labWeb/node_modules/tailwindcss/utilities.css | 1 + labWeb/node_modules/tailwindcss/variants.css | 1 + labWeb/node_modules/thenify-all/History.md | 11 + labWeb/node_modules/thenify-all/LICENSE | 22 + labWeb/node_modules/thenify-all/README.md | 66 + labWeb/node_modules/thenify-all/index.js | 73 + labWeb/node_modules/thenify-all/package.json | 34 + labWeb/node_modules/thenify/History.md | 11 + labWeb/node_modules/thenify/LICENSE | 22 + labWeb/node_modules/thenify/README.md | 120 + labWeb/node_modules/thenify/index.js | 77 + labWeb/node_modules/thenify/package.json | 31 + labWeb/node_modules/tinyglobby/LICENSE | 21 + labWeb/node_modules/tinyglobby/README.md | 25 + labWeb/node_modules/tinyglobby/dist/index.cjs | 334 + .../node_modules/tinyglobby/dist/index.d.cts | 148 + .../node_modules/tinyglobby/dist/index.d.mts | 148 + labWeb/node_modules/tinyglobby/dist/index.mjs | 306 + .../tinyglobby/node_modules/fdir/LICENSE | 7 + .../tinyglobby/node_modules/fdir/README.md | 91 + .../node_modules/fdir/dist/index.cjs | 588 + .../node_modules/fdir/dist/index.d.cts | 155 + .../node_modules/fdir/dist/index.d.mts | 155 + .../node_modules/fdir/dist/index.mjs | 570 + .../tinyglobby/node_modules/fdir/package.json | 103 + .../tinyglobby/node_modules/picomatch/LICENSE | 21 + .../node_modules/picomatch/README.md | 749 + .../node_modules/picomatch/index.js | 17 + .../node_modules/picomatch/lib/constants.js | 184 + .../node_modules/picomatch/lib/parse.js | 1386 + .../node_modules/picomatch/lib/picomatch.js | 349 + .../node_modules/picomatch/lib/scan.js | 391 + .../node_modules/picomatch/lib/utils.js | 72 + .../node_modules/picomatch/package.json | 82 + .../node_modules/picomatch/posix.js | 3 + labWeb/node_modules/tinyglobby/package.json | 73 + labWeb/node_modules/to-regex-range/LICENSE | 21 + labWeb/node_modules/to-regex-range/README.md | 305 + labWeb/node_modules/to-regex-range/index.js | 288 + .../node_modules/to-regex-range/package.json | 88 + .../node_modules/ts-interface-checker/LICENSE | 201 + .../ts-interface-checker/README.md | 185 + .../ts-interface-checker/dist/index.d.ts | 124 + .../ts-interface-checker/dist/index.js | 224 + .../ts-interface-checker/dist/types.d.ts | 181 + .../ts-interface-checker/dist/types.js | 566 + .../ts-interface-checker/dist/util.d.ts | 55 + .../ts-interface-checker/dist/util.js | 130 + .../ts-interface-checker/package.json | 60 + .../update-browserslist-db/LICENSE | 20 + .../update-browserslist-db/README.md | 30 + .../check-npm-version.js | 17 + .../update-browserslist-db/cli.js | 42 + .../update-browserslist-db/index.d.ts | 6 + .../update-browserslist-db/index.js | 347 + .../update-browserslist-db/package.json | 40 + .../update-browserslist-db/utils.js | 25 + labWeb/node_modules/util-deprecate/History.md | 16 + labWeb/node_modules/util-deprecate/LICENSE | 24 + labWeb/node_modules/util-deprecate/README.md | 53 + labWeb/node_modules/util-deprecate/browser.js | 67 + labWeb/node_modules/util-deprecate/node.js | 6 + .../node_modules/util-deprecate/package.json | 27 + labWeb/package-lock.json | 1202 + labWeb/package.json | 12 + labWeb/postcss.config.js | 7 + labWeb/src/tailwind.css | 4 + labWeb/tailwind.config.js | 9 + labWeb/vendor/tailwind.css | 1 + 5781 files changed, 770492 insertions(+), 96 deletions(-) create mode 100644 labPython/lab21/task_1.py create mode 100644 labPython/lab21/task_2.py create mode 100644 labPython/lab21/task_3.py create mode 100644 labPython/lab21/task_4.py create mode 100644 labPython/lab21/task_5.py create mode 100644 labPython/lab22/FileName create mode 100644 labPython/lab22/FileName1 create mode 100644 labPython/lab22/FileName2 create mode 100644 labPython/lab22/task_1.py create mode 100644 labPython/lab22/task_2.py create mode 100644 labPython/lab22/task_3.py create mode 100644 labWeb/kt_3/booking.html create mode 100644 labWeb/kt_3/cards.html create mode 100644 labWeb/kt_3/contacts.html create mode 100644 labWeb/kt_3/figma-link.txt create mode 100644 labWeb/kt_3/images/photo1.jpg create mode 100644 labWeb/kt_3/images/photo10.webp create mode 100644 labWeb/kt_3/images/photo2.jpeg create mode 100644 labWeb/kt_3/images/photo3.jpeg create mode 100644 labWeb/kt_3/images/photo4.jpeg create mode 100644 labWeb/kt_3/images/photo5.jpeg create mode 100644 labWeb/kt_3/images/photo6.jpeg create mode 100644 labWeb/kt_3/images/photo7.webp create mode 100644 labWeb/kt_3/images/photo8.jpg create mode 100644 labWeb/kt_3/images/photo9.jpg create mode 100644 labWeb/kt_3/index.html create mode 100644 labWeb/kt_3/news.html create mode 100644 labWeb/kt_3/script.js create mode 100644 labWeb/kt_3/styles.css create mode 100644 labWeb/kt_3/tours.html create mode 100644 labWeb/lab3/index.html create mode 100644 labWeb/lab3/style.css create mode 100644 labWeb/lab4-6/contacts.html create mode 100644 labWeb/lab4-6/doctors.html create mode 100644 labWeb/lab4-6/index.html create mode 100644 labWeb/lab4-6/prices.html create mode 100644 labWeb/lab4-6/schedule.html create mode 100644 labWeb/lab4-6/style.css create mode 100644 labWeb/lab7/index.js create mode 120000 labWeb/lab7/node_modules/.bin/handlebars create mode 100644 labWeb/lab7/node_modules/.bin/handlebars.cmd create mode 100644 labWeb/lab7/node_modules/.bin/handlebars.ps1 create mode 100644 labWeb/lab7/node_modules/.bin/mime create mode 100644 labWeb/lab7/node_modules/.bin/mime.cmd create mode 100644 labWeb/lab7/node_modules/.bin/mime.ps1 create mode 120000 labWeb/lab7/node_modules/.bin/nodemon create mode 100644 labWeb/lab7/node_modules/.bin/nodemon.cmd create mode 100644 labWeb/lab7/node_modules/.bin/nodemon.ps1 create mode 100644 labWeb/lab7/node_modules/.bin/nodetouch create mode 100644 labWeb/lab7/node_modules/.bin/nodetouch.cmd create mode 100644 labWeb/lab7/node_modules/.bin/nodetouch.ps1 create mode 100644 labWeb/lab7/node_modules/.bin/nopt create mode 100644 labWeb/lab7/node_modules/.bin/nopt.cmd create mode 100644 labWeb/lab7/node_modules/.bin/nopt.ps1 create mode 120000 labWeb/lab7/node_modules/.bin/npm create mode 100644 labWeb/lab7/node_modules/.bin/npm.cmd create mode 100644 labWeb/lab7/node_modules/.bin/npm.ps1 create mode 120000 labWeb/lab7/node_modules/.bin/npx create mode 100644 labWeb/lab7/node_modules/.bin/npx.cmd create mode 100644 labWeb/lab7/node_modules/.bin/npx.ps1 create mode 100644 labWeb/lab7/node_modules/.bin/semver create mode 100644 labWeb/lab7/node_modules/.bin/semver.cmd create mode 100644 labWeb/lab7/node_modules/.bin/semver.ps1 create mode 120000 labWeb/lab7/node_modules/.bin/uglifyjs create mode 100644 labWeb/lab7/node_modules/.bin/uglifyjs.cmd create mode 100644 labWeb/lab7/node_modules/.bin/uglifyjs.ps1 create mode 100644 labWeb/lab7/node_modules/.package-lock.json create mode 100644 labWeb/lab7/node_modules/abbrev/LICENSE create mode 100644 labWeb/lab7/node_modules/abbrev/README.md create mode 100644 labWeb/lab7/node_modules/abbrev/abbrev.js create mode 100644 labWeb/lab7/node_modules/abbrev/package.json create mode 100644 labWeb/lab7/node_modules/accepts/HISTORY.md create mode 100644 labWeb/lab7/node_modules/accepts/LICENSE create mode 100644 labWeb/lab7/node_modules/accepts/README.md create mode 100644 labWeb/lab7/node_modules/accepts/index.js create mode 100644 labWeb/lab7/node_modules/accepts/package.json create mode 100644 labWeb/lab7/node_modules/anymatch/LICENSE create mode 100644 labWeb/lab7/node_modules/anymatch/README.md create mode 100644 labWeb/lab7/node_modules/anymatch/index.d.ts create mode 100644 labWeb/lab7/node_modules/anymatch/index.js create mode 100644 labWeb/lab7/node_modules/anymatch/package.json create mode 100644 labWeb/lab7/node_modules/array-flatten/LICENSE create mode 100644 labWeb/lab7/node_modules/array-flatten/README.md create mode 100644 labWeb/lab7/node_modules/array-flatten/array-flatten.js create mode 100644 labWeb/lab7/node_modules/array-flatten/package.json create mode 100644 labWeb/lab7/node_modules/balanced-match/LICENSE.md create mode 100644 labWeb/lab7/node_modules/balanced-match/README.md create mode 100644 labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.d.ts create mode 100644 labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.d.ts.map create mode 100644 labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.js.map create mode 100644 labWeb/lab7/node_modules/balanced-match/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/balanced-match/dist/esm/index.d.ts create mode 100644 labWeb/lab7/node_modules/balanced-match/dist/esm/index.d.ts.map create mode 100644 labWeb/lab7/node_modules/balanced-match/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/balanced-match/dist/esm/index.js.map create mode 100644 labWeb/lab7/node_modules/balanced-match/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/balanced-match/package.json create mode 100644 labWeb/lab7/node_modules/binary-extensions/binary-extensions.json create mode 100644 labWeb/lab7/node_modules/binary-extensions/binary-extensions.json.d.ts create mode 100644 labWeb/lab7/node_modules/binary-extensions/index.d.ts create mode 100644 labWeb/lab7/node_modules/binary-extensions/index.js create mode 100644 labWeb/lab7/node_modules/binary-extensions/license create mode 100644 labWeb/lab7/node_modules/binary-extensions/package.json create mode 100644 labWeb/lab7/node_modules/binary-extensions/readme.md create mode 100644 labWeb/lab7/node_modules/body-parser/HISTORY.md create mode 100644 labWeb/lab7/node_modules/body-parser/LICENSE create mode 100644 labWeb/lab7/node_modules/body-parser/README.md create mode 100644 labWeb/lab7/node_modules/body-parser/index.js create mode 100644 labWeb/lab7/node_modules/body-parser/lib/read.js create mode 100644 labWeb/lab7/node_modules/body-parser/lib/types/json.js create mode 100644 labWeb/lab7/node_modules/body-parser/lib/types/raw.js create mode 100644 labWeb/lab7/node_modules/body-parser/lib/types/text.js create mode 100644 labWeb/lab7/node_modules/body-parser/lib/types/urlencoded.js create mode 100644 labWeb/lab7/node_modules/body-parser/package.json create mode 100644 labWeb/lab7/node_modules/brace-expansion/LICENSE create mode 100644 labWeb/lab7/node_modules/brace-expansion/README.md create mode 100644 labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.d.ts create mode 100644 labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.d.ts.map create mode 100644 labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.js.map create mode 100644 labWeb/lab7/node_modules/brace-expansion/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/brace-expansion/dist/esm/index.d.ts create mode 100644 labWeb/lab7/node_modules/brace-expansion/dist/esm/index.d.ts.map create mode 100644 labWeb/lab7/node_modules/brace-expansion/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/brace-expansion/dist/esm/index.js.map create mode 100644 labWeb/lab7/node_modules/brace-expansion/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/brace-expansion/package.json create mode 100644 labWeb/lab7/node_modules/braces/LICENSE create mode 100644 labWeb/lab7/node_modules/braces/README.md create mode 100644 labWeb/lab7/node_modules/braces/index.js create mode 100644 labWeb/lab7/node_modules/braces/lib/compile.js create mode 100644 labWeb/lab7/node_modules/braces/lib/constants.js create mode 100644 labWeb/lab7/node_modules/braces/lib/expand.js create mode 100644 labWeb/lab7/node_modules/braces/lib/parse.js create mode 100644 labWeb/lab7/node_modules/braces/lib/stringify.js create mode 100644 labWeb/lab7/node_modules/braces/lib/utils.js create mode 100644 labWeb/lab7/node_modules/braces/package.json create mode 100644 labWeb/lab7/node_modules/bytes/History.md create mode 100644 labWeb/lab7/node_modules/bytes/LICENSE create mode 100644 labWeb/lab7/node_modules/bytes/Readme.md create mode 100644 labWeb/lab7/node_modules/bytes/index.js create mode 100644 labWeb/lab7/node_modules/bytes/package.json create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/.eslintrc create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/.nycrc create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/LICENSE create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/README.md create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/actualApply.d.ts create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/actualApply.js create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/applyBind.d.ts create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/applyBind.js create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/functionApply.d.ts create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/functionApply.js create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/functionCall.d.ts create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/functionCall.js create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/index.d.ts create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/index.js create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/package.json create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/reflectApply.d.ts create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/reflectApply.js create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/test/index.js create mode 100644 labWeb/lab7/node_modules/call-bind-apply-helpers/tsconfig.json create mode 100644 labWeb/lab7/node_modules/call-bound/.eslintrc create mode 100644 labWeb/lab7/node_modules/call-bound/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/call-bound/.nycrc create mode 100644 labWeb/lab7/node_modules/call-bound/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/call-bound/LICENSE create mode 100644 labWeb/lab7/node_modules/call-bound/README.md create mode 100644 labWeb/lab7/node_modules/call-bound/index.d.ts create mode 100644 labWeb/lab7/node_modules/call-bound/index.js create mode 100644 labWeb/lab7/node_modules/call-bound/package.json create mode 100644 labWeb/lab7/node_modules/call-bound/test/index.js create mode 100644 labWeb/lab7/node_modules/call-bound/tsconfig.json create mode 100644 labWeb/lab7/node_modules/chokidar/LICENSE create mode 100644 labWeb/lab7/node_modules/chokidar/README.md create mode 100644 labWeb/lab7/node_modules/chokidar/index.js create mode 100644 labWeb/lab7/node_modules/chokidar/lib/constants.js create mode 100644 labWeb/lab7/node_modules/chokidar/lib/fsevents-handler.js create mode 100644 labWeb/lab7/node_modules/chokidar/lib/nodefs-handler.js create mode 100644 labWeb/lab7/node_modules/chokidar/package.json create mode 100644 labWeb/lab7/node_modules/chokidar/types/index.d.ts create mode 100644 labWeb/lab7/node_modules/content-disposition/HISTORY.md create mode 100644 labWeb/lab7/node_modules/content-disposition/LICENSE create mode 100644 labWeb/lab7/node_modules/content-disposition/README.md create mode 100644 labWeb/lab7/node_modules/content-disposition/index.js create mode 100644 labWeb/lab7/node_modules/content-disposition/package.json create mode 100644 labWeb/lab7/node_modules/content-type/HISTORY.md create mode 100644 labWeb/lab7/node_modules/content-type/LICENSE create mode 100644 labWeb/lab7/node_modules/content-type/README.md create mode 100644 labWeb/lab7/node_modules/content-type/index.js create mode 100644 labWeb/lab7/node_modules/content-type/package.json create mode 100644 labWeb/lab7/node_modules/cookie-signature/.npmignore create mode 100644 labWeb/lab7/node_modules/cookie-signature/History.md create mode 100644 labWeb/lab7/node_modules/cookie-signature/Readme.md create mode 100644 labWeb/lab7/node_modules/cookie-signature/index.js create mode 100644 labWeb/lab7/node_modules/cookie-signature/package.json create mode 100644 labWeb/lab7/node_modules/cookie/LICENSE create mode 100644 labWeb/lab7/node_modules/cookie/README.md create mode 100644 labWeb/lab7/node_modules/cookie/SECURITY.md create mode 100644 labWeb/lab7/node_modules/cookie/index.js create mode 100644 labWeb/lab7/node_modules/cookie/package.json create mode 100644 labWeb/lab7/node_modules/debug/.coveralls.yml create mode 100644 labWeb/lab7/node_modules/debug/.eslintrc create mode 100644 labWeb/lab7/node_modules/debug/.npmignore create mode 100644 labWeb/lab7/node_modules/debug/.travis.yml create mode 100644 labWeb/lab7/node_modules/debug/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/debug/LICENSE create mode 100644 labWeb/lab7/node_modules/debug/Makefile create mode 100644 labWeb/lab7/node_modules/debug/README.md create mode 100644 labWeb/lab7/node_modules/debug/component.json create mode 100644 labWeb/lab7/node_modules/debug/karma.conf.js create mode 100644 labWeb/lab7/node_modules/debug/node.js create mode 100644 labWeb/lab7/node_modules/debug/package.json create mode 100644 labWeb/lab7/node_modules/debug/src/browser.js create mode 100644 labWeb/lab7/node_modules/debug/src/debug.js create mode 100644 labWeb/lab7/node_modules/debug/src/index.js create mode 100644 labWeb/lab7/node_modules/debug/src/inspector-log.js create mode 100644 labWeb/lab7/node_modules/debug/src/node.js create mode 100644 labWeb/lab7/node_modules/depd/History.md create mode 100644 labWeb/lab7/node_modules/depd/LICENSE create mode 100644 labWeb/lab7/node_modules/depd/Readme.md create mode 100644 labWeb/lab7/node_modules/depd/index.js create mode 100644 labWeb/lab7/node_modules/depd/lib/browser/index.js create mode 100644 labWeb/lab7/node_modules/depd/package.json create mode 100644 labWeb/lab7/node_modules/destroy/LICENSE create mode 100644 labWeb/lab7/node_modules/destroy/README.md create mode 100644 labWeb/lab7/node_modules/destroy/index.js create mode 100644 labWeb/lab7/node_modules/destroy/package.json create mode 100644 labWeb/lab7/node_modules/dunder-proto/.eslintrc create mode 100644 labWeb/lab7/node_modules/dunder-proto/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/dunder-proto/.nycrc create mode 100644 labWeb/lab7/node_modules/dunder-proto/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/dunder-proto/LICENSE create mode 100644 labWeb/lab7/node_modules/dunder-proto/README.md create mode 100644 labWeb/lab7/node_modules/dunder-proto/get.d.ts create mode 100644 labWeb/lab7/node_modules/dunder-proto/get.js create mode 100644 labWeb/lab7/node_modules/dunder-proto/package.json create mode 100644 labWeb/lab7/node_modules/dunder-proto/set.d.ts create mode 100644 labWeb/lab7/node_modules/dunder-proto/set.js create mode 100644 labWeb/lab7/node_modules/dunder-proto/test/get.js create mode 100644 labWeb/lab7/node_modules/dunder-proto/test/index.js create mode 100644 labWeb/lab7/node_modules/dunder-proto/test/set.js create mode 100644 labWeb/lab7/node_modules/dunder-proto/tsconfig.json create mode 100644 labWeb/lab7/node_modules/ee-first/LICENSE create mode 100644 labWeb/lab7/node_modules/ee-first/README.md create mode 100644 labWeb/lab7/node_modules/ee-first/index.js create mode 100644 labWeb/lab7/node_modules/ee-first/package.json create mode 100644 labWeb/lab7/node_modules/encodeurl/LICENSE create mode 100644 labWeb/lab7/node_modules/encodeurl/README.md create mode 100644 labWeb/lab7/node_modules/encodeurl/index.js create mode 100644 labWeb/lab7/node_modules/encodeurl/package.json create mode 100644 labWeb/lab7/node_modules/es-define-property/.eslintrc create mode 100644 labWeb/lab7/node_modules/es-define-property/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/es-define-property/.nycrc create mode 100644 labWeb/lab7/node_modules/es-define-property/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/es-define-property/LICENSE create mode 100644 labWeb/lab7/node_modules/es-define-property/README.md create mode 100644 labWeb/lab7/node_modules/es-define-property/index.d.ts create mode 100644 labWeb/lab7/node_modules/es-define-property/index.js create mode 100644 labWeb/lab7/node_modules/es-define-property/package.json create mode 100644 labWeb/lab7/node_modules/es-define-property/test/index.js create mode 100644 labWeb/lab7/node_modules/es-define-property/tsconfig.json create mode 100644 labWeb/lab7/node_modules/es-errors/.eslintrc create mode 100644 labWeb/lab7/node_modules/es-errors/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/es-errors/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/es-errors/LICENSE create mode 100644 labWeb/lab7/node_modules/es-errors/README.md create mode 100644 labWeb/lab7/node_modules/es-errors/eval.d.ts create mode 100644 labWeb/lab7/node_modules/es-errors/eval.js create mode 100644 labWeb/lab7/node_modules/es-errors/index.d.ts create mode 100644 labWeb/lab7/node_modules/es-errors/index.js create mode 100644 labWeb/lab7/node_modules/es-errors/package.json create mode 100644 labWeb/lab7/node_modules/es-errors/range.d.ts create mode 100644 labWeb/lab7/node_modules/es-errors/range.js create mode 100644 labWeb/lab7/node_modules/es-errors/ref.d.ts create mode 100644 labWeb/lab7/node_modules/es-errors/ref.js create mode 100644 labWeb/lab7/node_modules/es-errors/syntax.d.ts create mode 100644 labWeb/lab7/node_modules/es-errors/syntax.js create mode 100644 labWeb/lab7/node_modules/es-errors/test/index.js create mode 100644 labWeb/lab7/node_modules/es-errors/tsconfig.json create mode 100644 labWeb/lab7/node_modules/es-errors/type.d.ts create mode 100644 labWeb/lab7/node_modules/es-errors/type.js create mode 100644 labWeb/lab7/node_modules/es-errors/uri.d.ts create mode 100644 labWeb/lab7/node_modules/es-errors/uri.js create mode 100644 labWeb/lab7/node_modules/es-object-atoms/.eslintrc create mode 100644 labWeb/lab7/node_modules/es-object-atoms/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/es-object-atoms/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/es-object-atoms/LICENSE create mode 100644 labWeb/lab7/node_modules/es-object-atoms/README.md create mode 100644 labWeb/lab7/node_modules/es-object-atoms/RequireObjectCoercible.d.ts create mode 100644 labWeb/lab7/node_modules/es-object-atoms/RequireObjectCoercible.js create mode 100644 labWeb/lab7/node_modules/es-object-atoms/ToObject.d.ts create mode 100644 labWeb/lab7/node_modules/es-object-atoms/ToObject.js create mode 100644 labWeb/lab7/node_modules/es-object-atoms/index.d.ts create mode 100644 labWeb/lab7/node_modules/es-object-atoms/index.js create mode 100644 labWeb/lab7/node_modules/es-object-atoms/isObject.d.ts create mode 100644 labWeb/lab7/node_modules/es-object-atoms/isObject.js create mode 100644 labWeb/lab7/node_modules/es-object-atoms/package.json create mode 100644 labWeb/lab7/node_modules/es-object-atoms/test/index.js create mode 100644 labWeb/lab7/node_modules/es-object-atoms/tsconfig.json create mode 100644 labWeb/lab7/node_modules/escape-html/LICENSE create mode 100644 labWeb/lab7/node_modules/escape-html/Readme.md create mode 100644 labWeb/lab7/node_modules/escape-html/index.js create mode 100644 labWeb/lab7/node_modules/escape-html/package.json create mode 100644 labWeb/lab7/node_modules/etag/HISTORY.md create mode 100644 labWeb/lab7/node_modules/etag/LICENSE create mode 100644 labWeb/lab7/node_modules/etag/README.md create mode 100644 labWeb/lab7/node_modules/etag/index.js create mode 100644 labWeb/lab7/node_modules/etag/package.json create mode 100644 labWeb/lab7/node_modules/express/History.md create mode 100644 labWeb/lab7/node_modules/express/LICENSE create mode 100644 labWeb/lab7/node_modules/express/Readme.md create mode 100644 labWeb/lab7/node_modules/express/index.js create mode 100644 labWeb/lab7/node_modules/express/lib/application.js create mode 100644 labWeb/lab7/node_modules/express/lib/express.js create mode 100644 labWeb/lab7/node_modules/express/lib/middleware/init.js create mode 100644 labWeb/lab7/node_modules/express/lib/middleware/query.js create mode 100644 labWeb/lab7/node_modules/express/lib/request.js create mode 100644 labWeb/lab7/node_modules/express/lib/response.js create mode 100644 labWeb/lab7/node_modules/express/lib/router/index.js create mode 100644 labWeb/lab7/node_modules/express/lib/router/layer.js create mode 100644 labWeb/lab7/node_modules/express/lib/router/route.js create mode 100644 labWeb/lab7/node_modules/express/lib/utils.js create mode 100644 labWeb/lab7/node_modules/express/lib/view.js create mode 100644 labWeb/lab7/node_modules/express/package.json create mode 100644 labWeb/lab7/node_modules/fill-range/LICENSE create mode 100644 labWeb/lab7/node_modules/fill-range/README.md create mode 100644 labWeb/lab7/node_modules/fill-range/index.js create mode 100644 labWeb/lab7/node_modules/fill-range/package.json create mode 100644 labWeb/lab7/node_modules/finalhandler/HISTORY.md create mode 100644 labWeb/lab7/node_modules/finalhandler/LICENSE create mode 100644 labWeb/lab7/node_modules/finalhandler/README.md create mode 100644 labWeb/lab7/node_modules/finalhandler/SECURITY.md create mode 100644 labWeb/lab7/node_modules/finalhandler/index.js create mode 100644 labWeb/lab7/node_modules/finalhandler/package.json create mode 100644 labWeb/lab7/node_modules/foreachasync/.npmignore create mode 100644 labWeb/lab7/node_modules/foreachasync/LICENSE create mode 100644 labWeb/lab7/node_modules/foreachasync/README.md create mode 100644 labWeb/lab7/node_modules/foreachasync/bower.json create mode 100644 labWeb/lab7/node_modules/foreachasync/forEachAsync.js create mode 100644 labWeb/lab7/node_modules/foreachasync/package.json create mode 100644 labWeb/lab7/node_modules/foreachasync/test.js create mode 100644 labWeb/lab7/node_modules/forwarded/HISTORY.md create mode 100644 labWeb/lab7/node_modules/forwarded/LICENSE create mode 100644 labWeb/lab7/node_modules/forwarded/README.md create mode 100644 labWeb/lab7/node_modules/forwarded/index.js create mode 100644 labWeb/lab7/node_modules/forwarded/package.json create mode 100644 labWeb/lab7/node_modules/fresh/HISTORY.md create mode 100644 labWeb/lab7/node_modules/fresh/LICENSE create mode 100644 labWeb/lab7/node_modules/fresh/README.md create mode 100644 labWeb/lab7/node_modules/fresh/index.js create mode 100644 labWeb/lab7/node_modules/fresh/package.json create mode 100644 labWeb/lab7/node_modules/function-bind/.eslintrc create mode 100644 labWeb/lab7/node_modules/function-bind/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/function-bind/.github/SECURITY.md create mode 100644 labWeb/lab7/node_modules/function-bind/.nycrc create mode 100644 labWeb/lab7/node_modules/function-bind/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/function-bind/LICENSE create mode 100644 labWeb/lab7/node_modules/function-bind/README.md create mode 100644 labWeb/lab7/node_modules/function-bind/implementation.js create mode 100644 labWeb/lab7/node_modules/function-bind/index.js create mode 100644 labWeb/lab7/node_modules/function-bind/package.json create mode 100644 labWeb/lab7/node_modules/function-bind/test/.eslintrc create mode 100644 labWeb/lab7/node_modules/function-bind/test/index.js create mode 100644 labWeb/lab7/node_modules/get-intrinsic/.eslintrc create mode 100644 labWeb/lab7/node_modules/get-intrinsic/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/get-intrinsic/.nycrc create mode 100644 labWeb/lab7/node_modules/get-intrinsic/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/get-intrinsic/LICENSE create mode 100644 labWeb/lab7/node_modules/get-intrinsic/README.md create mode 100644 labWeb/lab7/node_modules/get-intrinsic/index.js create mode 100644 labWeb/lab7/node_modules/get-intrinsic/package.json create mode 100644 labWeb/lab7/node_modules/get-intrinsic/test/GetIntrinsic.js create mode 100644 labWeb/lab7/node_modules/get-proto/.eslintrc create mode 100644 labWeb/lab7/node_modules/get-proto/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/get-proto/.nycrc create mode 100644 labWeb/lab7/node_modules/get-proto/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/get-proto/LICENSE create mode 100644 labWeb/lab7/node_modules/get-proto/Object.getPrototypeOf.d.ts create mode 100644 labWeb/lab7/node_modules/get-proto/Object.getPrototypeOf.js create mode 100644 labWeb/lab7/node_modules/get-proto/README.md create mode 100644 labWeb/lab7/node_modules/get-proto/Reflect.getPrototypeOf.d.ts create mode 100644 labWeb/lab7/node_modules/get-proto/Reflect.getPrototypeOf.js create mode 100644 labWeb/lab7/node_modules/get-proto/index.d.ts create mode 100644 labWeb/lab7/node_modules/get-proto/index.js create mode 100644 labWeb/lab7/node_modules/get-proto/package.json create mode 100644 labWeb/lab7/node_modules/get-proto/test/index.js create mode 100644 labWeb/lab7/node_modules/get-proto/tsconfig.json create mode 100644 labWeb/lab7/node_modules/glob-parent/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/glob-parent/LICENSE create mode 100644 labWeb/lab7/node_modules/glob-parent/README.md create mode 100644 labWeb/lab7/node_modules/glob-parent/index.js create mode 100644 labWeb/lab7/node_modules/glob-parent/package.json create mode 100644 labWeb/lab7/node_modules/gopd/.eslintrc create mode 100644 labWeb/lab7/node_modules/gopd/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/gopd/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/gopd/LICENSE create mode 100644 labWeb/lab7/node_modules/gopd/README.md create mode 100644 labWeb/lab7/node_modules/gopd/gOPD.d.ts create mode 100644 labWeb/lab7/node_modules/gopd/gOPD.js create mode 100644 labWeb/lab7/node_modules/gopd/index.d.ts create mode 100644 labWeb/lab7/node_modules/gopd/index.js create mode 100644 labWeb/lab7/node_modules/gopd/package.json create mode 100644 labWeb/lab7/node_modules/gopd/test/index.js create mode 100644 labWeb/lab7/node_modules/gopd/tsconfig.json create mode 100644 labWeb/lab7/node_modules/handlebars/LICENSE create mode 100644 labWeb/lab7/node_modules/handlebars/README.markdown create mode 100644 labWeb/lab7/node_modules/handlebars/bin/.eslintrc.js create mode 100755 labWeb/lab7/node_modules/handlebars/bin/handlebars create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars.runtime.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/base.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/compiler/ast.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/compiler/base.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/compiler/code-gen.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/compiler/compiler.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/compiler/helpers.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/compiler/javascript-compiler.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/compiler/parser.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/compiler/printer.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/compiler/visitor.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/compiler/whitespace-control.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/decorators.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/decorators/inline.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/exception.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/helpers.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/helpers/block-helper-missing.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/helpers/each.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/helpers/helper-missing.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/helpers/if.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/helpers/log.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/helpers/lookup.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/helpers/with.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/internal/proto-access.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/internal/wrapHelper.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/logger.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/no-conflict.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/runtime.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/safe-string.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/handlebars/utils.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/amd/precompiler.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars.runtime.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/base.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/compiler/printer.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/decorators.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/exception.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/helpers.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/helpers/if.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/helpers/log.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/helpers/with.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/logger.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/no-conflict.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/runtime.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/safe-string.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/handlebars/utils.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/cjs/precompiler.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/handlebars.amd.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/handlebars.amd.min.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/handlebars.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/handlebars.min.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/handlebars.runtime.amd.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/handlebars.runtime.amd.min.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/handlebars.runtime.js create mode 100644 labWeb/lab7/node_modules/handlebars/dist/handlebars.runtime.min.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/.eslintrc.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars.runtime.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/base.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/compiler/ast.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/compiler/base.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/compiler/code-gen.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/compiler/compiler.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/compiler/helpers.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/compiler/javascript-compiler.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/compiler/parser.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/compiler/printer.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/compiler/visitor.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/compiler/whitespace-control.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/decorators.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/decorators/inline.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/exception.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/helpers.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/helpers/block-helper-missing.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/helpers/each.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/helpers/helper-missing.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/helpers/if.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/helpers/log.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/helpers/lookup.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/helpers/with.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/internal/proto-access.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/internal/wrapHelper.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/logger.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/no-conflict.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/runtime.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/safe-string.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/handlebars/utils.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/index.js create mode 100644 labWeb/lab7/node_modules/handlebars/lib/precompiler.js create mode 100644 labWeb/lab7/node_modules/handlebars/package.json create mode 100644 labWeb/lab7/node_modules/handlebars/release-notes.md create mode 100644 labWeb/lab7/node_modules/handlebars/runtime.d.ts create mode 100644 labWeb/lab7/node_modules/handlebars/runtime.js create mode 100644 labWeb/lab7/node_modules/handlebars/types/index.d.ts create mode 100644 labWeb/lab7/node_modules/has-flag/index.js create mode 100644 labWeb/lab7/node_modules/has-flag/license create mode 100644 labWeb/lab7/node_modules/has-flag/package.json create mode 100644 labWeb/lab7/node_modules/has-flag/readme.md create mode 100644 labWeb/lab7/node_modules/has-symbols/.eslintrc create mode 100644 labWeb/lab7/node_modules/has-symbols/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/has-symbols/.nycrc create mode 100644 labWeb/lab7/node_modules/has-symbols/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/has-symbols/LICENSE create mode 100644 labWeb/lab7/node_modules/has-symbols/README.md create mode 100644 labWeb/lab7/node_modules/has-symbols/index.d.ts create mode 100644 labWeb/lab7/node_modules/has-symbols/index.js create mode 100644 labWeb/lab7/node_modules/has-symbols/package.json create mode 100644 labWeb/lab7/node_modules/has-symbols/shams.d.ts create mode 100644 labWeb/lab7/node_modules/has-symbols/shams.js create mode 100644 labWeb/lab7/node_modules/has-symbols/test/index.js create mode 100644 labWeb/lab7/node_modules/has-symbols/test/shams/core-js.js create mode 100644 labWeb/lab7/node_modules/has-symbols/test/shams/get-own-property-symbols.js create mode 100644 labWeb/lab7/node_modules/has-symbols/test/tests.js create mode 100644 labWeb/lab7/node_modules/has-symbols/tsconfig.json create mode 100644 labWeb/lab7/node_modules/hasown/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/hasown/.nycrc create mode 100644 labWeb/lab7/node_modules/hasown/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/hasown/LICENSE create mode 100644 labWeb/lab7/node_modules/hasown/README.md create mode 100644 labWeb/lab7/node_modules/hasown/eslint.config.mjs create mode 100644 labWeb/lab7/node_modules/hasown/index.d.ts create mode 100644 labWeb/lab7/node_modules/hasown/index.js create mode 100644 labWeb/lab7/node_modules/hasown/package.json create mode 100644 labWeb/lab7/node_modules/hasown/tsconfig.json create mode 100644 labWeb/lab7/node_modules/hbs/HISTORY.md create mode 100644 labWeb/lab7/node_modules/hbs/LICENSE create mode 100644 labWeb/lab7/node_modules/hbs/README.md create mode 100644 labWeb/lab7/node_modules/hbs/lib/async.js create mode 100644 labWeb/lab7/node_modules/hbs/lib/hbs.js create mode 100644 labWeb/lab7/node_modules/hbs/package.json create mode 100644 labWeb/lab7/node_modules/http-errors/HISTORY.md create mode 100644 labWeb/lab7/node_modules/http-errors/LICENSE create mode 100644 labWeb/lab7/node_modules/http-errors/README.md create mode 100644 labWeb/lab7/node_modules/http-errors/index.js create mode 100644 labWeb/lab7/node_modules/http-errors/package.json create mode 100644 labWeb/lab7/node_modules/iconv-lite/Changelog.md create mode 100644 labWeb/lab7/node_modules/iconv-lite/LICENSE create mode 100644 labWeb/lab7/node_modules/iconv-lite/README.md create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/dbcs-codec.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/dbcs-data.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/index.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/internal.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/sbcs-codec.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/sbcs-data-generated.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/sbcs-data.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/tables/big5-added.json create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/tables/cp936.json create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/tables/cp949.json create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/tables/cp950.json create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/tables/eucjp.json create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/tables/gbk-added.json create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/tables/shiftjis.json create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/utf16.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/encodings/utf7.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/lib/bom-handling.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/lib/extend-node.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/lib/index.d.ts create mode 100644 labWeb/lab7/node_modules/iconv-lite/lib/index.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/lib/streams.js create mode 100644 labWeb/lab7/node_modules/iconv-lite/package.json create mode 100644 labWeb/lab7/node_modules/ignore-by-default/LICENSE create mode 100644 labWeb/lab7/node_modules/ignore-by-default/README.md create mode 100644 labWeb/lab7/node_modules/ignore-by-default/index.js create mode 100644 labWeb/lab7/node_modules/ignore-by-default/package.json create mode 100644 labWeb/lab7/node_modules/inherits/LICENSE create mode 100644 labWeb/lab7/node_modules/inherits/README.md create mode 100644 labWeb/lab7/node_modules/inherits/inherits.js create mode 100644 labWeb/lab7/node_modules/inherits/inherits_browser.js create mode 100644 labWeb/lab7/node_modules/inherits/package.json create mode 100644 labWeb/lab7/node_modules/ipaddr.js/LICENSE create mode 100644 labWeb/lab7/node_modules/ipaddr.js/README.md create mode 100644 labWeb/lab7/node_modules/ipaddr.js/ipaddr.min.js create mode 100644 labWeb/lab7/node_modules/ipaddr.js/lib/ipaddr.js create mode 100644 labWeb/lab7/node_modules/ipaddr.js/lib/ipaddr.js.d.ts create mode 100644 labWeb/lab7/node_modules/ipaddr.js/package.json create mode 100644 labWeb/lab7/node_modules/is-binary-path/index.d.ts create mode 100644 labWeb/lab7/node_modules/is-binary-path/index.js create mode 100644 labWeb/lab7/node_modules/is-binary-path/license create mode 100644 labWeb/lab7/node_modules/is-binary-path/package.json create mode 100644 labWeb/lab7/node_modules/is-binary-path/readme.md create mode 100644 labWeb/lab7/node_modules/is-extglob/LICENSE create mode 100644 labWeb/lab7/node_modules/is-extglob/README.md create mode 100644 labWeb/lab7/node_modules/is-extglob/index.js create mode 100644 labWeb/lab7/node_modules/is-extglob/package.json create mode 100644 labWeb/lab7/node_modules/is-glob/LICENSE create mode 100644 labWeb/lab7/node_modules/is-glob/README.md create mode 100644 labWeb/lab7/node_modules/is-glob/index.js create mode 100644 labWeb/lab7/node_modules/is-glob/package.json create mode 100644 labWeb/lab7/node_modules/is-number/LICENSE create mode 100644 labWeb/lab7/node_modules/is-number/README.md create mode 100644 labWeb/lab7/node_modules/is-number/index.js create mode 100644 labWeb/lab7/node_modules/is-number/package.json create mode 100644 labWeb/lab7/node_modules/lru-cache/LICENSE create mode 100644 labWeb/lab7/node_modules/lru-cache/README.md create mode 100644 labWeb/lab7/node_modules/lru-cache/index.js create mode 100644 labWeb/lab7/node_modules/lru-cache/package.json create mode 100644 labWeb/lab7/node_modules/math-intrinsics/.eslintrc create mode 100644 labWeb/lab7/node_modules/math-intrinsics/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/math-intrinsics/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/math-intrinsics/LICENSE create mode 100644 labWeb/lab7/node_modules/math-intrinsics/README.md create mode 100644 labWeb/lab7/node_modules/math-intrinsics/abs.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/abs.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/constants/maxArrayLength.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/constants/maxArrayLength.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/constants/maxSafeInteger.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/constants/maxValue.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/constants/maxValue.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/floor.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/floor.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/isFinite.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/isFinite.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/isInteger.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/isInteger.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/isNaN.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/isNaN.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/isNegativeZero.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/isNegativeZero.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/max.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/max.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/min.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/min.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/mod.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/mod.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/package.json create mode 100644 labWeb/lab7/node_modules/math-intrinsics/pow.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/pow.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/round.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/round.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/sign.d.ts create mode 100644 labWeb/lab7/node_modules/math-intrinsics/sign.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/test/index.js create mode 100644 labWeb/lab7/node_modules/math-intrinsics/tsconfig.json create mode 100644 labWeb/lab7/node_modules/media-typer/HISTORY.md create mode 100644 labWeb/lab7/node_modules/media-typer/LICENSE create mode 100644 labWeb/lab7/node_modules/media-typer/README.md create mode 100644 labWeb/lab7/node_modules/media-typer/index.js create mode 100644 labWeb/lab7/node_modules/media-typer/package.json create mode 100644 labWeb/lab7/node_modules/merge-descriptors/HISTORY.md create mode 100644 labWeb/lab7/node_modules/merge-descriptors/LICENSE create mode 100644 labWeb/lab7/node_modules/merge-descriptors/README.md create mode 100644 labWeb/lab7/node_modules/merge-descriptors/index.js create mode 100644 labWeb/lab7/node_modules/merge-descriptors/package.json create mode 100644 labWeb/lab7/node_modules/methods/HISTORY.md create mode 100644 labWeb/lab7/node_modules/methods/LICENSE create mode 100644 labWeb/lab7/node_modules/methods/README.md create mode 100644 labWeb/lab7/node_modules/methods/index.js create mode 100644 labWeb/lab7/node_modules/methods/package.json create mode 100644 labWeb/lab7/node_modules/mime-db/HISTORY.md create mode 100644 labWeb/lab7/node_modules/mime-db/LICENSE create mode 100644 labWeb/lab7/node_modules/mime-db/README.md create mode 100644 labWeb/lab7/node_modules/mime-db/db.json create mode 100644 labWeb/lab7/node_modules/mime-db/index.js create mode 100644 labWeb/lab7/node_modules/mime-db/package.json create mode 100644 labWeb/lab7/node_modules/mime-types/HISTORY.md create mode 100644 labWeb/lab7/node_modules/mime-types/LICENSE create mode 100644 labWeb/lab7/node_modules/mime-types/README.md create mode 100644 labWeb/lab7/node_modules/mime-types/index.js create mode 100644 labWeb/lab7/node_modules/mime-types/package.json create mode 100644 labWeb/lab7/node_modules/mime/.npmignore create mode 100644 labWeb/lab7/node_modules/mime/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/mime/LICENSE create mode 100644 labWeb/lab7/node_modules/mime/README.md create mode 100644 labWeb/lab7/node_modules/mime/cli.js create mode 100644 labWeb/lab7/node_modules/mime/mime.js create mode 100644 labWeb/lab7/node_modules/mime/package.json create mode 100644 labWeb/lab7/node_modules/mime/src/build.js create mode 100644 labWeb/lab7/node_modules/mime/src/test.js create mode 100644 labWeb/lab7/node_modules/mime/types.json create mode 100644 labWeb/lab7/node_modules/minimatch/LICENSE.md create mode 100644 labWeb/lab7/node_modules/minimatch/README.md create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/ast.d.ts create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/ast.d.ts.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/ast.js create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/ast.js.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/brace-expressions.js create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/brace-expressions.js.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/escape.d.ts create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/escape.d.ts.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/escape.js create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/escape.js.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/index.d.ts create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/index.d.ts.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/index.js.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/unescape.d.ts create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/unescape.d.ts.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/unescape.js create mode 100644 labWeb/lab7/node_modules/minimatch/dist/commonjs/unescape.js.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/assert-valid-pattern.js create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/ast.d.ts create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/ast.d.ts.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/ast.js create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/ast.js.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/brace-expressions.d.ts create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/brace-expressions.js create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/brace-expressions.js.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/escape.d.ts create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/escape.d.ts.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/escape.js create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/escape.js.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/index.d.ts create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/index.d.ts.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/index.js.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/unescape.d.ts create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/unescape.d.ts.map create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/unescape.js create mode 100644 labWeb/lab7/node_modules/minimatch/dist/esm/unescape.js.map create mode 100644 labWeb/lab7/node_modules/minimatch/package.json create mode 100644 labWeb/lab7/node_modules/minimist/.eslintrc create mode 100644 labWeb/lab7/node_modules/minimist/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/minimist/.nycrc create mode 100644 labWeb/lab7/node_modules/minimist/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/minimist/LICENSE create mode 100644 labWeb/lab7/node_modules/minimist/README.md create mode 100644 labWeb/lab7/node_modules/minimist/example/parse.js create mode 100644 labWeb/lab7/node_modules/minimist/index.js create mode 100644 labWeb/lab7/node_modules/minimist/package.json create mode 100644 labWeb/lab7/node_modules/minimist/test/all_bool.js create mode 100644 labWeb/lab7/node_modules/minimist/test/bool.js create mode 100644 labWeb/lab7/node_modules/minimist/test/dash.js create mode 100644 labWeb/lab7/node_modules/minimist/test/default_bool.js create mode 100644 labWeb/lab7/node_modules/minimist/test/dotted.js create mode 100644 labWeb/lab7/node_modules/minimist/test/kv_short.js create mode 100644 labWeb/lab7/node_modules/minimist/test/long.js create mode 100644 labWeb/lab7/node_modules/minimist/test/num.js create mode 100644 labWeb/lab7/node_modules/minimist/test/parse.js create mode 100644 labWeb/lab7/node_modules/minimist/test/parse_modified.js create mode 100644 labWeb/lab7/node_modules/minimist/test/proto.js create mode 100644 labWeb/lab7/node_modules/minimist/test/short.js create mode 100644 labWeb/lab7/node_modules/minimist/test/stop_early.js create mode 100644 labWeb/lab7/node_modules/minimist/test/unknown.js create mode 100644 labWeb/lab7/node_modules/minimist/test/whitespace.js create mode 100644 labWeb/lab7/node_modules/ms/index.js create mode 100644 labWeb/lab7/node_modules/ms/license.md create mode 100644 labWeb/lab7/node_modules/ms/package.json create mode 100644 labWeb/lab7/node_modules/ms/readme.md create mode 100644 labWeb/lab7/node_modules/negotiator/HISTORY.md create mode 100644 labWeb/lab7/node_modules/negotiator/LICENSE create mode 100644 labWeb/lab7/node_modules/negotiator/README.md create mode 100644 labWeb/lab7/node_modules/negotiator/index.js create mode 100644 labWeb/lab7/node_modules/negotiator/lib/charset.js create mode 100644 labWeb/lab7/node_modules/negotiator/lib/encoding.js create mode 100644 labWeb/lab7/node_modules/negotiator/lib/language.js create mode 100644 labWeb/lab7/node_modules/negotiator/lib/mediaType.js create mode 100644 labWeb/lab7/node_modules/negotiator/package.json create mode 100644 labWeb/lab7/node_modules/neo-async/LICENSE create mode 100644 labWeb/lab7/node_modules/neo-async/README.md create mode 100644 labWeb/lab7/node_modules/neo-async/all.js create mode 100644 labWeb/lab7/node_modules/neo-async/allLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/allSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/angelFall.js create mode 100644 labWeb/lab7/node_modules/neo-async/any.js create mode 100644 labWeb/lab7/node_modules/neo-async/anyLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/anySeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/apply.js create mode 100644 labWeb/lab7/node_modules/neo-async/applyEach.js create mode 100644 labWeb/lab7/node_modules/neo-async/applyEachSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/async.js create mode 100644 labWeb/lab7/node_modules/neo-async/async.min.js create mode 100644 labWeb/lab7/node_modules/neo-async/asyncify.js create mode 100644 labWeb/lab7/node_modules/neo-async/auto.js create mode 100644 labWeb/lab7/node_modules/neo-async/autoInject.js create mode 100644 labWeb/lab7/node_modules/neo-async/cargo.js create mode 100644 labWeb/lab7/node_modules/neo-async/compose.js create mode 100644 labWeb/lab7/node_modules/neo-async/concat.js create mode 100644 labWeb/lab7/node_modules/neo-async/concatLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/concatSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/constant.js create mode 100644 labWeb/lab7/node_modules/neo-async/createLogger.js create mode 100644 labWeb/lab7/node_modules/neo-async/detect.js create mode 100644 labWeb/lab7/node_modules/neo-async/detectLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/detectSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/dir.js create mode 100644 labWeb/lab7/node_modules/neo-async/doDuring.js create mode 100644 labWeb/lab7/node_modules/neo-async/doUntil.js create mode 100644 labWeb/lab7/node_modules/neo-async/doWhilst.js create mode 100644 labWeb/lab7/node_modules/neo-async/during.js create mode 100644 labWeb/lab7/node_modules/neo-async/each.js create mode 100644 labWeb/lab7/node_modules/neo-async/eachLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/eachOf.js create mode 100644 labWeb/lab7/node_modules/neo-async/eachOfLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/eachOfSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/eachSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/ensureAsync.js create mode 100644 labWeb/lab7/node_modules/neo-async/every.js create mode 100644 labWeb/lab7/node_modules/neo-async/everyLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/everySeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/fast.js create mode 100644 labWeb/lab7/node_modules/neo-async/filter.js create mode 100644 labWeb/lab7/node_modules/neo-async/filterLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/filterSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/find.js create mode 100644 labWeb/lab7/node_modules/neo-async/findLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/findSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/foldl.js create mode 100644 labWeb/lab7/node_modules/neo-async/foldr.js create mode 100644 labWeb/lab7/node_modules/neo-async/forEach.js create mode 100644 labWeb/lab7/node_modules/neo-async/forEachLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/forEachOf.js create mode 100644 labWeb/lab7/node_modules/neo-async/forEachOfLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/forEachOfSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/forEachSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/forever.js create mode 100644 labWeb/lab7/node_modules/neo-async/groupBy.js create mode 100644 labWeb/lab7/node_modules/neo-async/groupByLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/groupBySeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/inject.js create mode 100644 labWeb/lab7/node_modules/neo-async/iterator.js create mode 100644 labWeb/lab7/node_modules/neo-async/log.js create mode 100644 labWeb/lab7/node_modules/neo-async/map.js create mode 100644 labWeb/lab7/node_modules/neo-async/mapLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/mapSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/mapValues.js create mode 100644 labWeb/lab7/node_modules/neo-async/mapValuesLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/mapValuesSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/memoize.js create mode 100644 labWeb/lab7/node_modules/neo-async/nextTick.js create mode 100644 labWeb/lab7/node_modules/neo-async/omit.js create mode 100644 labWeb/lab7/node_modules/neo-async/omitLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/omitSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/package.json create mode 100644 labWeb/lab7/node_modules/neo-async/parallel.js create mode 100644 labWeb/lab7/node_modules/neo-async/parallelLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/pick.js create mode 100644 labWeb/lab7/node_modules/neo-async/pickLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/pickSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/priorityQueue.js create mode 100644 labWeb/lab7/node_modules/neo-async/queue.js create mode 100644 labWeb/lab7/node_modules/neo-async/race.js create mode 100644 labWeb/lab7/node_modules/neo-async/reduce.js create mode 100644 labWeb/lab7/node_modules/neo-async/reduceRight.js create mode 100644 labWeb/lab7/node_modules/neo-async/reflect.js create mode 100644 labWeb/lab7/node_modules/neo-async/reflectAll.js create mode 100644 labWeb/lab7/node_modules/neo-async/reject.js create mode 100644 labWeb/lab7/node_modules/neo-async/rejectLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/rejectSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/retry.js create mode 100644 labWeb/lab7/node_modules/neo-async/retryable.js create mode 100644 labWeb/lab7/node_modules/neo-async/safe.js create mode 100644 labWeb/lab7/node_modules/neo-async/select.js create mode 100644 labWeb/lab7/node_modules/neo-async/selectLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/selectSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/seq.js create mode 100644 labWeb/lab7/node_modules/neo-async/series.js create mode 100644 labWeb/lab7/node_modules/neo-async/setImmediate.js create mode 100644 labWeb/lab7/node_modules/neo-async/some.js create mode 100644 labWeb/lab7/node_modules/neo-async/someLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/someSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/sortBy.js create mode 100644 labWeb/lab7/node_modules/neo-async/sortByLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/sortBySeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/timeout.js create mode 100644 labWeb/lab7/node_modules/neo-async/times.js create mode 100644 labWeb/lab7/node_modules/neo-async/timesLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/timesSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/transform.js create mode 100644 labWeb/lab7/node_modules/neo-async/transformLimit.js create mode 100644 labWeb/lab7/node_modules/neo-async/transformSeries.js create mode 100644 labWeb/lab7/node_modules/neo-async/tryEach.js create mode 100644 labWeb/lab7/node_modules/neo-async/unmemoize.js create mode 100644 labWeb/lab7/node_modules/neo-async/until.js create mode 100644 labWeb/lab7/node_modules/neo-async/waterfall.js create mode 100644 labWeb/lab7/node_modules/neo-async/whilst.js create mode 100644 labWeb/lab7/node_modules/neo-async/wrapSync.js create mode 100644 labWeb/lab7/node_modules/nodemon/.prettierrc.json create mode 100644 labWeb/lab7/node_modules/nodemon/LICENSE create mode 100644 labWeb/lab7/node_modules/nodemon/README.md create mode 100755 labWeb/lab7/node_modules/nodemon/bin/nodemon.js create mode 100644 labWeb/lab7/node_modules/nodemon/bin/windows-kill.exe create mode 100644 labWeb/lab7/node_modules/nodemon/doc/cli/authors.txt create mode 100644 labWeb/lab7/node_modules/nodemon/doc/cli/config.txt create mode 100644 labWeb/lab7/node_modules/nodemon/doc/cli/help.txt create mode 100644 labWeb/lab7/node_modules/nodemon/doc/cli/logo.txt create mode 100644 labWeb/lab7/node_modules/nodemon/doc/cli/options.txt create mode 100644 labWeb/lab7/node_modules/nodemon/doc/cli/topics.txt create mode 100644 labWeb/lab7/node_modules/nodemon/doc/cli/usage.txt create mode 100644 labWeb/lab7/node_modules/nodemon/doc/cli/whoami.txt create mode 100644 labWeb/lab7/node_modules/nodemon/index.d.ts create mode 100644 labWeb/lab7/node_modules/nodemon/jsconfig.json create mode 100644 labWeb/lab7/node_modules/nodemon/lib/cli/index.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/cli/parse.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/config/command.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/config/defaults.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/config/exec.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/config/index.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/config/load.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/help/index.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/index.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/monitor/index.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/monitor/match.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/monitor/run.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/monitor/signals.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/monitor/watch.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/nodemon.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/rules/add.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/rules/index.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/rules/parse.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/spawn.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/utils/bus.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/utils/clone.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/utils/colour.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/utils/index.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/utils/log.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/utils/merge.js create mode 100644 labWeb/lab7/node_modules/nodemon/lib/version.js create mode 100644 labWeb/lab7/node_modules/nodemon/node_modules/debug/LICENSE create mode 100644 labWeb/lab7/node_modules/nodemon/node_modules/debug/README.md create mode 100644 labWeb/lab7/node_modules/nodemon/node_modules/debug/package.json create mode 100644 labWeb/lab7/node_modules/nodemon/node_modules/debug/src/browser.js create mode 100644 labWeb/lab7/node_modules/nodemon/node_modules/debug/src/common.js create mode 100644 labWeb/lab7/node_modules/nodemon/node_modules/debug/src/index.js create mode 100644 labWeb/lab7/node_modules/nodemon/node_modules/debug/src/node.js create mode 100644 labWeb/lab7/node_modules/nodemon/node_modules/ms/index.js create mode 100644 labWeb/lab7/node_modules/nodemon/node_modules/ms/license.md create mode 100644 labWeb/lab7/node_modules/nodemon/node_modules/ms/package.json create mode 100644 labWeb/lab7/node_modules/nodemon/node_modules/ms/readme.md create mode 100644 labWeb/lab7/node_modules/nodemon/package.json create mode 100644 labWeb/lab7/node_modules/nopt/.npmignore create mode 100644 labWeb/lab7/node_modules/nopt/LICENSE create mode 100644 labWeb/lab7/node_modules/nopt/README.md create mode 100644 labWeb/lab7/node_modules/nopt/bin/nopt.js create mode 100644 labWeb/lab7/node_modules/nopt/examples/my-program.js create mode 100644 labWeb/lab7/node_modules/nopt/lib/nopt.js create mode 100644 labWeb/lab7/node_modules/nopt/package.json create mode 100644 labWeb/lab7/node_modules/normalize-path/LICENSE create mode 100644 labWeb/lab7/node_modules/normalize-path/README.md create mode 100644 labWeb/lab7/node_modules/normalize-path/index.js create mode 100644 labWeb/lab7/node_modules/normalize-path/package.json create mode 100644 labWeb/lab7/node_modules/npm/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/README.md create mode 100755 labWeb/lab7/node_modules/npm/bin/node-gyp-bin/node-gyp create mode 100755 labWeb/lab7/node_modules/npm/bin/node-gyp-bin/node-gyp.cmd create mode 100755 labWeb/lab7/node_modules/npm/bin/npm create mode 100755 labWeb/lab7/node_modules/npm/bin/npm-cli.js create mode 100755 labWeb/lab7/node_modules/npm/bin/npm-prefix.js create mode 100755 labWeb/lab7/node_modules/npm/bin/npm.cmd create mode 100644 labWeb/lab7/node_modules/npm/bin/npm.ps1 create mode 100755 labWeb/lab7/node_modules/npm/bin/npx create mode 100755 labWeb/lab7/node_modules/npm/bin/npx-cli.js create mode 100755 labWeb/lab7/node_modules/npm/bin/npx.cmd create mode 100644 labWeb/lab7/node_modules/npm/bin/npx.ps1 create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-access.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-adduser.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-audit.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-bugs.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-cache.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-ci.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-completion.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-config.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-dedupe.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-deprecate.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-diff.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-dist-tag.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-docs.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-doctor.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-edit.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-exec.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-explain.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-explore.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-find-dupes.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-fund.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-help-search.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-help.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-hook.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-init.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-install-ci-test.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-install-test.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-install.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-link.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-login.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-logout.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-ls.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-org.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-outdated.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-owner.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-pack.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-ping.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-pkg.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-prefix.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-profile.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-prune.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-publish.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-query.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-rebuild.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-repo.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-restart.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-root.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-run-script.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-sbom.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-search.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-shrinkwrap.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-star.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-stars.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-start.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-stop.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-team.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-test.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-token.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-uninstall.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-unpublish.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-unstar.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-update.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-version.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-view.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm-whoami.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npm.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/commands/npx.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/configuring-npm/folders.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/configuring-npm/install.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/configuring-npm/npm-shrinkwrap-json.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/configuring-npm/npmrc.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/configuring-npm/package-json.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/configuring-npm/package-lock-json.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/using-npm/config.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/using-npm/dependency-selectors.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/using-npm/developers.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/using-npm/logging.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/using-npm/orgs.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/using-npm/package-spec.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/using-npm/registry.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/using-npm/removal.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/using-npm/scope.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/using-npm/scripts.md create mode 100644 labWeb/lab7/node_modules/npm/docs/content/using-npm/workspaces.md create mode 100644 labWeb/lab7/node_modules/npm/docs/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-access.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-adduser.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-audit.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-bugs.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-cache.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-ci.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-completion.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-config.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-dedupe.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-deprecate.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-diff.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-dist-tag.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-docs.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-doctor.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-edit.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-exec.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-explain.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-explore.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-find-dupes.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-fund.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-help-search.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-help.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-hook.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-init.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-install-ci-test.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-install-test.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-install.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-link.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-login.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-logout.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-ls.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-org.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-outdated.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-owner.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-pack.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-ping.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-pkg.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-prefix.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-profile.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-prune.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-publish.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-query.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-rebuild.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-repo.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-restart.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-root.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-run-script.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-sbom.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-search.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-shrinkwrap.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-star.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-stars.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-start.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-stop.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-team.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-test.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-token.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-uninstall.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-unpublish.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-unstar.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-update.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-version.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-view.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm-whoami.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npm.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/commands/npx.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/configuring-npm/folders.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/configuring-npm/install.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/configuring-npm/npm-global.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/configuring-npm/npm-json.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/configuring-npm/npm-shrinkwrap-json.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/configuring-npm/npmrc.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/configuring-npm/package-json.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/configuring-npm/package-lock-json.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/using-npm/config.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/using-npm/dependency-selectors.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/using-npm/developers.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/using-npm/logging.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/using-npm/orgs.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/using-npm/package-spec.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/using-npm/registry.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/using-npm/removal.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/using-npm/scope.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/using-npm/scripts.html create mode 100644 labWeb/lab7/node_modules/npm/docs/output/using-npm/workspaces.html create mode 100644 labWeb/lab7/node_modules/npm/index.js create mode 100644 labWeb/lab7/node_modules/npm/lib/arborist-cmd.js create mode 100644 labWeb/lab7/node_modules/npm/lib/base-cmd.js create mode 100644 labWeb/lab7/node_modules/npm/lib/cli.js create mode 100644 labWeb/lab7/node_modules/npm/lib/cli/entry.js create mode 100644 labWeb/lab7/node_modules/npm/lib/cli/exit-handler.js create mode 100644 labWeb/lab7/node_modules/npm/lib/cli/update-notifier.js create mode 100644 labWeb/lab7/node_modules/npm/lib/cli/validate-engines.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/access.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/adduser.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/audit.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/bugs.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/cache.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/ci.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/completion.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/config.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/dedupe.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/deprecate.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/diff.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/dist-tag.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/docs.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/doctor.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/edit.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/exec.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/explain.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/explore.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/find-dupes.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/fund.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/get.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/help-search.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/help.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/hook.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/init.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/install-ci-test.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/install-test.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/install.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/link.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/ll.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/login.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/logout.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/ls.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/org.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/outdated.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/owner.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/pack.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/ping.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/pkg.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/prefix.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/profile.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/prune.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/publish.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/query.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/rebuild.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/repo.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/restart.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/root.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/run-script.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/sbom.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/search.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/set.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/shrinkwrap.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/star.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/stars.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/start.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/stop.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/team.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/test.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/token.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/uninstall.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/unpublish.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/unstar.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/update.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/version.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/view.js create mode 100644 labWeb/lab7/node_modules/npm/lib/commands/whoami.js create mode 100644 labWeb/lab7/node_modules/npm/lib/lifecycle-cmd.js create mode 100644 labWeb/lab7/node_modules/npm/lib/npm.js create mode 100644 labWeb/lab7/node_modules/npm/lib/package-url-cmd.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/audit-error.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/auth.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/cmd-list.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/completion.fish create mode 100755 labWeb/lab7/node_modules/npm/lib/utils/completion.sh create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/did-you-mean.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/display.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/error-message.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/explain-dep.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/explain-eresolve.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/format-bytes.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/format-search-stream.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/format.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/get-identity.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/get-workspaces.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/installed-deep.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/installed-shallow.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/is-windows.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/log-file.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/npm-usage.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/open-url.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/output-error.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/ping.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/queryable.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/read-user-info.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/reify-finish.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/reify-output.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/sbom-cyclonedx.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/sbom-spdx.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/tar.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/timers.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/update-workspaces.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/validate-lockfile.js create mode 100644 labWeb/lab7/node_modules/npm/lib/utils/verify-signatures.js create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-access.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-adduser.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-audit.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-bugs.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-cache.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-ci.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-completion.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-config.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-dedupe.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-deprecate.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-diff.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-dist-tag.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-docs.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-doctor.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-edit.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-exec.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-explain.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-explore.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-find-dupes.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-fund.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-help-search.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-help.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-hook.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-init.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-install-ci-test.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-install-test.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-install.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-link.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-login.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-logout.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-ls.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-org.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-outdated.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-owner.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-pack.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-ping.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-pkg.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-prefix.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-profile.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-prune.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-publish.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-query.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-rebuild.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-repo.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-restart.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-root.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-run-script.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-sbom.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-search.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-shrinkwrap.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-star.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-stars.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-start.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-stop.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-team.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-test.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-token.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-uninstall.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-unpublish.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-unstar.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-update.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-version.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-view.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm-whoami.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npm.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man1/npx.1 create mode 100644 labWeb/lab7/node_modules/npm/man/man5/folders.5 create mode 100644 labWeb/lab7/node_modules/npm/man/man5/install.5 create mode 100644 labWeb/lab7/node_modules/npm/man/man5/npm-global.5 create mode 100644 labWeb/lab7/node_modules/npm/man/man5/npm-json.5 create mode 100644 labWeb/lab7/node_modules/npm/man/man5/npm-shrinkwrap-json.5 create mode 100644 labWeb/lab7/node_modules/npm/man/man5/npmrc.5 create mode 100644 labWeb/lab7/node_modules/npm/man/man5/package-json.5 create mode 100644 labWeb/lab7/node_modules/npm/man/man5/package-lock-json.5 create mode 100644 labWeb/lab7/node_modules/npm/man/man7/config.7 create mode 100644 labWeb/lab7/node_modules/npm/man/man7/dependency-selectors.7 create mode 100644 labWeb/lab7/node_modules/npm/man/man7/developers.7 create mode 100644 labWeb/lab7/node_modules/npm/man/man7/logging.7 create mode 100644 labWeb/lab7/node_modules/npm/man/man7/orgs.7 create mode 100644 labWeb/lab7/node_modules/npm/man/man7/package-spec.7 create mode 100644 labWeb/lab7/node_modules/npm/man/man7/registry.7 create mode 100644 labWeb/lab7/node_modules/npm/man/man7/removal.7 create mode 100644 labWeb/lab7/node_modules/npm/man/man7/scope.7 create mode 100644 labWeb/lab7/node_modules/npm/man/man7/scripts.7 create mode 100644 labWeb/lab7/node_modules/npm/man/man7/workspaces.7 create mode 120000 labWeb/lab7/node_modules/npm/node_modules/.bin/arborist create mode 120000 labWeb/lab7/node_modules/npm/node_modules/.bin/cssesc create mode 120000 labWeb/lab7/node_modules/npm/node_modules/.bin/glob create mode 120000 labWeb/lab7/node_modules/npm/node_modules/.bin/installed-package-contents create mode 120000 labWeb/lab7/node_modules/npm/node_modules/.bin/node-gyp create mode 120000 labWeb/lab7/node_modules/npm/node_modules/.bin/node-which create mode 120000 labWeb/lab7/node_modules/npm/node_modules/.bin/nopt create mode 120000 labWeb/lab7/node_modules/npm/node_modules/.bin/pacote create mode 120000 labWeb/lab7/node_modules/npm/node_modules/.bin/qrcode-terminal create mode 120000 labWeb/lab7/node_modules/npm/node_modules/.bin/semver create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/LICENSE.txt create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/build/index.cjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/build/index.d.cts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/build/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/index.mjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/RGI_Emoji.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/RGI_Emoji.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/text.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/text.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/cliui/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/fs-minipass/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/fs-minipass/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/fs-minipass/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/fs-minipass/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/string-locale-compare/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/string-locale-compare/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@isaacs/string-locale-compare/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/agent/lib/agents.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/agent/lib/dns.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/agent/lib/errors.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/agent/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/agent/lib/options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/agent/lib/proxy.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/agent/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/actual.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/audit.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/funding.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/ideal.js create mode 100755 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/lib/logging.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/lib/options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/lib/print-tree.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/lib/timers.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/license.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/prune.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/reify.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/shrinkwrap.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/bin/virtual.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/add-rm-pkg-deps.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/isolated-reifier.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/rebuild.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/audit-report.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/calc-dep-flags.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/can-place-dep.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/case-insensitive-map.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/consistent-resolve.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/debug.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/deepest-nesting-target.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/dep-valid.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/diff.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/edge.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/from-path.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/gather-dep-set.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/inventory.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/isolated-classes.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/link.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/node.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/optional-set.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/override-resolves.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/override-set.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/packument-cache.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/peer-entry-sets.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/place-dep.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/printable.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/query-selector-all.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/realpath.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/relpath.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/reset-dep-flags.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/retire-path.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/shrinkwrap.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/signal-handling.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/signals.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/spec-from-lock.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/tracker.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/tree-check.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/version-from-tgz.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/vuln.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/lib/yarn-lock.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/arborist/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/lib/definitions/definition.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/lib/definitions/definitions.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/lib/definitions/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/lib/env-replace.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/lib/errors.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/lib/nerf-dart.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/lib/parse-field.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/lib/set-envs.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/lib/type-defs.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/lib/type-description.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/lib/umask.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/config/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/fs/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/fs/lib/common/get-options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/fs/lib/common/node.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/fs/lib/cp/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/fs/lib/cp/errors.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/fs/lib/cp/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/fs/lib/cp/polyfill.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/fs/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/fs/lib/move-file.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/fs/lib/readdir-scoped.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/fs/lib/with-temp-dir.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/fs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/clone.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/errors.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/find.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/is-clean.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/is.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/lines-to-revs.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/make-error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/opts.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/revs.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/spawn.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/utils.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/lib/which.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/git/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/installed-package-contents/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/installed-package-contents/README.md create mode 100755 labWeb/lab7/node_modules/npm/node_modules/@npmcli/installed-package-contents/bin/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/installed-package-contents/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/installed-package-contents/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/map-workspaces/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/map-workspaces/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/map-workspaces/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/lib/advisory.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/lib/get-dep-spec.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/lib/hash.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/lib/index.js create mode 120000 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/.bin/pacote create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/README.md create mode 100755 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/bin/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/dir.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/fetcher.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/file.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/git.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/registry.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/remote.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/add-git-sha.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/cache-dir.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/is-package-bin.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/npm.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/protected.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/tar-create-options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/trailing-slashes.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/metavuln-calculator/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/name-from-folder/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/name-from-folder/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/name-from-folder/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/node-gyp/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/node-gyp/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/node-gyp/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/package-json/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/package-json/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/package-json/lib/normalize-data.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/package-json/lib/normalize.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/package-json/lib/read-package.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/package-json/lib/sort.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/package-json/lib/update-dependencies.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/package-json/lib/update-scripts.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/package-json/lib/update-workspaces.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/package-json/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/promise-spawn/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/promise-spawn/lib/escape.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/promise-spawn/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/promise-spawn/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/query/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/query/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/query/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/redact/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/redact/lib/deep-map.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/redact/lib/error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/redact/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/redact/lib/matchers.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/redact/lib/server.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/redact/lib/utils.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/redact/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/run-script/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/run-script/lib/is-server-package.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/run-script/lib/make-spawn-args.js create mode 100755 labWeb/lab7/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/node-gyp create mode 100755 labWeb/lab7/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/node-gyp.cmd create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/run-script/lib/package-envs.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/run-script/lib/run-script-pkg.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/run-script/lib/run-script.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/run-script/lib/set-path.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/run-script/lib/signal-manager.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/run-script/lib/validate-options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@npmcli/run-script/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/examples/is-default-value.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/examples/negate.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/internal/errors.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/internal/primordials.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/internal/util.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/internal/validators.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@pkgjs/parseargs/utils.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/bundle/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/bundle/dist/build.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/bundle/dist/bundle.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/bundle/dist/error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/bundle/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/bundle/dist/serialized.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/bundle/dist/utility.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/bundle/dist/validate.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/bundle/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/asn1/error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/asn1/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/asn1/length.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/asn1/obj.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/asn1/parse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/asn1/tag.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/crypto.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/dsse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/encoding.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/json.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/oid.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/pem.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/rfc3161/error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/rfc3161/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/rfc3161/timestamp.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/rfc3161/tstinfo.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/stream.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/x509/cert.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/x509/ext.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/x509/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/dist/x509/sct.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/core/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/envelope.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/events.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/api/field_behavior.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/protobuf/any.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/protobuf/descriptor.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/protobuf/timestamp.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/dsse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/entry.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/hashedrekord.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/verifier.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_bundle.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_common.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_rekor.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_trustroot.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_verification.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/protobuf-specs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/bundler/base.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/bundler/bundle.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/bundler/dsse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/bundler/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/bundler/message.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/external/error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/external/fetch.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/external/fulcio.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/external/rekor.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/external/tsa.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/identity/ci.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/identity/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/identity/provider.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/signer/fulcio/ca.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/signer/fulcio/ephemeral.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/signer/fulcio/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/signer/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/signer/signer.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/types/fetch.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/util/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/util/oidc.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/util/ua.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/witness/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/witness/tlog/client.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/witness/tlog/entry.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/witness/tlog/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/witness/tsa/client.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/witness/tsa/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/dist/witness/witness.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/sign/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/tuf/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/tuf/dist/appdata.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/tuf/dist/client.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/tuf/dist/error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/tuf/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/tuf/dist/target.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/tuf/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/tuf/seeds.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/bundle/dsse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/bundle/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/bundle/message.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/key/certificate.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/key/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/key/sct.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/policy.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/shared.types.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/timestamp/checkpoint.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/timestamp/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/timestamp/merkle.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/timestamp/set.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/timestamp/tsa.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/tlog/dsse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/tlog/hashedrekord.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/tlog/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/tlog/intoto.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/trust/filter.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/trust/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/trust/trust.types.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/dist/verifier.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@sigstore/verify/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@tufjs/canonical-json/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@tufjs/canonical-json/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/@tufjs/canonical-json/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/abbrev/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/abbrev/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/abbrev/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/agent-base/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/agent-base/dist/helpers.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/agent-base/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/agent-base/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ansi-regex/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ansi-regex/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ansi-regex/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ansi-styles/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ansi-styles/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ansi-styles/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/aproba/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/aproba/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/aproba/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/archy/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/archy/examples/beep.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/archy/examples/multi_line.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/archy/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/archy/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/archy/test/beep.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/archy/test/multi_line.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/archy/test/non_unicode.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/balanced-match/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/balanced-match/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/balanced-match/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/bin-target.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/check-bin.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/check-bins.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/fix-bin.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/get-node-modules.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/get-paths.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/get-prefix.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/is-windows.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/link-bin.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/link-bins.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/link-gently.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/link-mans.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/man-target.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/lib/shim-bin.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/bin-links/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/binary-extensions/binary-extensions.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/binary-extensions/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/binary-extensions/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/binary-extensions/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/brace-expansion/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/brace-expansion/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/brace-expansion/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/content/path.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/content/read.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/content/rm.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/content/write.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/entry-index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/get.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/memoization.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/put.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/rm.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/util/glob.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/util/hash-to-segments.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/util/tmp.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/lib/verify.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cacache/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chalk/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chalk/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chalk/source/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chalk/source/utilities.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chalk/source/vendor/ansi-styles/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chalk/source/vendor/supports-color/browser.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chalk/source/vendor/supports-color/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chownr/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chownr/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chownr/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chownr/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chownr/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/chownr/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ci-info/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ci-info/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ci-info/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ci-info/vendors.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cidr-regex/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cidr-regex/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cidr-regex/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cli-columns/color.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cli-columns/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cli-columns/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cli-columns/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cli-columns/test.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cmd-shim/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cmd-shim/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cmd-shim/lib/to-batch-syntax.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cmd-shim/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/color-convert/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/color-convert/conversions.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/color-convert/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/color-convert/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/color-convert/route.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/color-name/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/color-name/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/color-name/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/common-ancestor-path/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/common-ancestor-path/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/common-ancestor-path/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/lib/enoent.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/lib/parse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/lib/util/escape.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/lib/util/readShebang.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/lib/util/resolveCommand.js create mode 120000 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/node_modules/.bin/node-which create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/node_modules/which/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/node_modules/which/README.md create mode 100755 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/node_modules/which/bin/node-which create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/node_modules/which/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/node_modules/which/which.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cross-spawn/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cssesc/LICENSE-MIT.txt create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cssesc/README.md create mode 100755 labWeb/lab7/node_modules/npm/node_modules/cssesc/bin/cssesc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cssesc/cssesc.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cssesc/man/cssesc.1 create mode 100644 labWeb/lab7/node_modules/npm/node_modules/cssesc/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/debug/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/debug/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/debug/src/browser.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/debug/src/common.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/debug/src/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/debug/src/node.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/CONTRIBUTING.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/dist/diff.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/dist/diff.min.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/convert/dmp.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/convert/xml.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/diff/array.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/diff/base.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/diff/character.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/diff/css.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/diff/json.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/diff/line.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/diff/sentence.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/diff/word.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/index.es6.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/index.mjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/patch/apply.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/patch/create.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/patch/merge.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/patch/parse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/patch/reverse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/util/array.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/util/distance-iterator.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/lib/util/params.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/release-notes.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/diff/runtime.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/eastasianwidth/eastasianwidth.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/eastasianwidth/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 labWeb/lab7/node_modules/npm/node_modules/emoji-regex/es2015/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/emoji-regex/es2015/text.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/emoji-regex/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/emoji-regex/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/emoji-regex/text.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/encoding/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/encoding/lib/encoding.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/encoding/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/encoding/test/test.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/env-paths/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/env-paths/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/env-paths/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/err-code/bower.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/err-code/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/err-code/index.umd.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/err-code/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/err-code/test/test.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/exponential-backoff/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/exponential-backoff/dist/backoff.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/exponential-backoff/dist/delay/always/always.delay.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/exponential-backoff/dist/delay/delay.base.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/exponential-backoff/dist/delay/delay.factory.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/exponential-backoff/dist/delay/delay.interface.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/exponential-backoff/dist/jitter/full/full.jitter.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/exponential-backoff/dist/jitter/jitter.factory.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/exponential-backoff/dist/jitter/no/no.jitter.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/exponential-backoff/dist/options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/exponential-backoff/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fastest-levenshtein/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fastest-levenshtein/bench.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fastest-levenshtein/esm/mod.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fastest-levenshtein/mod.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fastest-levenshtein/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fastest-levenshtein/test.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fdir/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fdir/dist/index.cjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fdir/dist/index.d.cts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fdir/dist/index.d.mts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fdir/dist/index.mjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fdir/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/foreground-child/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/foreground-child/dist/commonjs/all-signals.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/foreground-child/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/foreground-child/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/foreground-child/dist/commonjs/proxy-signals.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/foreground-child/dist/commonjs/watchdog.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/foreground-child/dist/esm/all-signals.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/foreground-child/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/foreground-child/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/foreground-child/dist/esm/proxy-signals.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/foreground-child/dist/esm/watchdog.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/foreground-child/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fs-minipass/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fs-minipass/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/fs-minipass/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/glob.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/glob.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/glob.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/glob.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/has-magic.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/has-magic.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/has-magic.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/has-magic.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/ignore.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/ignore.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/ignore.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/ignore.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/index.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/index.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/index.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/pattern.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/pattern.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/pattern.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/pattern.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/processor.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/processor.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/processor.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/processor.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/walker.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/walker.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/walker.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/commonjs/walker.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/bin.d.mts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/bin.d.mts.map create mode 100755 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/bin.mjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/bin.mjs.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/glob.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/glob.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/glob.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/glob.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/has-magic.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/has-magic.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/has-magic.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/has-magic.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/ignore.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/ignore.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/ignore.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/ignore.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/index.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/index.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/index.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/pattern.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/pattern.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/pattern.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/pattern.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/processor.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/processor.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/processor.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/processor.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/walker.d.ts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/walker.d.ts.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/walker.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/dist/esm/walker.js.map create mode 100644 labWeb/lab7/node_modules/npm/node_modules/glob/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/graceful-fs/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/graceful-fs/clone.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/graceful-fs/graceful-fs.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/graceful-fs/legacy-streams.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/graceful-fs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/graceful-fs/polyfills.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/hosted-git-info/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/hosted-git-info/lib/from-url.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/hosted-git-info/lib/hosts.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/hosted-git-info/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/hosted-git-info/lib/parse-url.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/hosted-git-info/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/http-cache-semantics/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/http-cache-semantics/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/http-cache-semantics/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/http-proxy-agent/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/http-proxy-agent/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/http-proxy-agent/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/https-proxy-agent/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/https-proxy-agent/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/https-proxy-agent/dist/parse-proxy-response.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/https-proxy-agent/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/dbcs-codec.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/dbcs-data.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/internal.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/sbcs-codec.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/sbcs-data-generated.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/sbcs-data.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/tables/big5-added.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/tables/cp936.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/tables/cp949.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/tables/cp950.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/tables/eucjp.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/tables/gbk-added.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/tables/shiftjis.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/utf16.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/utf32.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/encodings/utf7.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/lib/bom-handling.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/lib/streams.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/iconv-lite/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ignore-walk/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ignore-walk/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ignore-walk/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/imurmurhash/imurmurhash.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/imurmurhash/imurmurhash.min.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/imurmurhash/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ini/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ini/lib/ini.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ini/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/init-package-json/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/init-package-json/lib/default-input.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/init-package-json/lib/init-package-json.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/init-package-json/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-address/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-address/dist/address-error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-address/dist/common.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-address/dist/ip-address.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-address/dist/ipv4.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-address/dist/ipv6.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-address/dist/v4/constants.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-address/dist/v6/constants.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-address/dist/v6/helpers.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-address/dist/v6/regular-expressions.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-address/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-regex/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-regex/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ip-regex/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/is-cidr/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/is-cidr/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/is-cidr/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/is-fullwidth-code-point/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/is-fullwidth-code-point/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/is-fullwidth-code-point/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/isexe/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/isexe/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/isexe/mode.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/isexe/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/isexe/test/basic.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/isexe/windows.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jackspeak/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jackspeak/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jackspeak/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jackspeak/dist/commonjs/parse-args.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jackspeak/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jackspeak/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jackspeak/dist/esm/parse-args.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jackspeak/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/json-parse-even-better-errors/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/json-parse-even-better-errors/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/json-parse-even-better-errors/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/json-stringify-nice/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/json-stringify-nice/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/json-stringify-nice/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/bench.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/examples/twitterfeed.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/jsonparse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/samplejson/basic.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/samplejson/basic2.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/test/big-token.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/test/boundary.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/test/offset.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/test/primitives.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/test/surrogate.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/test/unvalid.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/jsonparse/test/utf8.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/just-diff-apply/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/just-diff-apply/index.cjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/just-diff-apply/index.mjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/just-diff-apply/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/just-diff-apply/rollup.config.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/just-diff/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/just-diff/index.cjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/just-diff/index.mjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/just-diff/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/just-diff/rollup.config.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmaccess/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmaccess/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmaccess/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmaccess/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmdiff/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmdiff/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmdiff/lib/format-diff.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmdiff/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmdiff/lib/should-print-patch.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmdiff/lib/tarball.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmdiff/lib/untar.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmdiff/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmexec/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmexec/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmexec/lib/file-exists.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmexec/lib/get-bin-from-manifest.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmexec/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmexec/lib/is-windows.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmexec/lib/no-tty.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmexec/lib/run-script.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmexec/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmfund/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmfund/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmfund/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmfund/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmhook/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmhook/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmhook/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmhook/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmorg/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmorg/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmorg/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmorg/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmpack/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmpack/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmpack/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmpack/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmpublish/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmpublish/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmpublish/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmpublish/lib/provenance.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmpublish/lib/publish.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmpublish/lib/unpublish.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmpublish/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmsearch/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmsearch/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmsearch/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmsearch/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmteam/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmteam/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmteam/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmteam/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmversion/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmversion/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmversion/lib/commit.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmversion/lib/enforce-clean.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmversion/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmversion/lib/read-json.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmversion/lib/retrieve-tag.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmversion/lib/tag.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmversion/lib/version.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmversion/lib/write-json.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/libnpmversion/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/lru-cache/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/lru-cache/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/lru-cache/dist/commonjs/index.min.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/lru-cache/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/lru-cache/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/lru-cache/dist/esm/index.min.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/lru-cache/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/lru-cache/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/make-fetch-happen/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/make-fetch-happen/lib/cache/entry.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/make-fetch-happen/lib/cache/errors.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/make-fetch-happen/lib/cache/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/make-fetch-happen/lib/cache/key.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/make-fetch-happen/lib/cache/policy.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/make-fetch-happen/lib/fetch.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/make-fetch-happen/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/make-fetch-happen/lib/options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/make-fetch-happen/lib/pipeline.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/make-fetch-happen/lib/remote.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/make-fetch-happen/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/commonjs/ast.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/commonjs/brace-expressions.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/commonjs/escape.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/commonjs/unescape.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/esm/assert-valid-pattern.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/esm/ast.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/esm/brace-expressions.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/esm/escape.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/dist/esm/unescape.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minimatch/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-collect/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-collect/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-collect/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-fetch/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-fetch/lib/abort-error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-fetch/lib/blob.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-fetch/lib/body.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-fetch/lib/fetch-error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-fetch/lib/headers.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-fetch/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-fetch/lib/request.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-fetch/lib/response.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-fetch/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-flush/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-flush/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-flush/node_modules/minipass/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-flush/node_modules/minipass/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-flush/node_modules/minipass/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-flush/node_modules/yallist/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-flush/node_modules/yallist/iterator.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-flush/node_modules/yallist/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-flush/node_modules/yallist/yallist.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-flush/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-pipeline/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-pipeline/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist/iterator.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist/yallist.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-pipeline/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-sized/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-sized/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-sized/node_modules/minipass/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-sized/node_modules/minipass/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-sized/node_modules/minipass/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-sized/node_modules/yallist/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-sized/node_modules/yallist/iterator.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-sized/node_modules/yallist/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-sized/node_modules/yallist/yallist.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-sized/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass-sized/test/basic.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minipass/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minizlib/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minizlib/dist/commonjs/constants.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minizlib/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minizlib/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minizlib/dist/esm/constants.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minizlib/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minizlib/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/minizlib/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ms/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ms/license.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ms/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/mute-stream/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/mute-stream/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/mute-stream/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/negotiator/HISTORY.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/negotiator/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/negotiator/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/negotiator/lib/charset.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/negotiator/lib/encoding.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/negotiator/lib/language.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/negotiator/lib/mediaType.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/negotiator/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/.release-please-manifest.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/CODE_OF_CONDUCT.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/CONTRIBUTING.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/SECURITY.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/addon.gypi create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/eslint.config.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/.release-please-manifest.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/data/ninja/build.ninja create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/docs/GypVsCMake.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/docs/Hacking.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/docs/InputFormatReference.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/docs/LanguageSpecification.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/docs/README.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/docs/Testing.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/docs/UserDocumentation.md create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/gyp create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/gyp.bat create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__pycache__/MSVSUtil.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__pycache__/MSVSVersion.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__pycache__/__init__.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__pycache__/common.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__pycache__/input.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__pycache__/msvs_emulation.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__pycache__/ninja_syntax.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__pycache__/simple_copy.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__pycache__/xcode_emulation.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__pycache__/xcode_ninja.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__pycache__/xcodeproj_file.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/__pycache__/__init__.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/__pycache__/make.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/__pycache__/ninja.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/__pycache__/xcode.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.APACHE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.BSD create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/__init__.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/__pycache__/__init__.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/__pycache__/_structures.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/__pycache__/version.cpython-313.pyc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_elffile.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_manylinux.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_musllinux.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_parser.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_structures.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_tokenizer.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/markers.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/metadata.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/py.typed create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/requirements.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/specifiers.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/tags.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/utils.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/version.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/pyproject.toml create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/release-please-config.json create mode 100755 labWeb/lab7/node_modules/npm/node_modules/node-gyp/gyp/test_gyp.py create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/Find-VisualStudio.cs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/build.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/clean.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/configure.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/create-config-gypi.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/download.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/find-node-directory.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/find-python.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/find-visualstudio.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/install.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/list.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/log.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/node-gyp.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/process-release.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/rebuild.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/remove.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/lib/util.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/macOS_Catalina_acid_test.sh create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/release-please-config.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/node-gyp/src/win_delay_load_hook.cc create mode 100644 labWeb/lab7/node_modules/npm/node_modules/nopt/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/nopt/README.md create mode 100755 labWeb/lab7/node_modules/npm/node_modules/nopt/bin/nopt.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/nopt/lib/debug.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/nopt/lib/nopt-lib.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/nopt/lib/nopt.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/nopt/lib/type-defs.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/nopt/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/normalize-package-data/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/normalize-package-data/lib/extract_description.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/normalize-package-data/lib/fixer.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/normalize-package-data/lib/make_warning.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/normalize-package-data/lib/normalize.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/normalize-package-data/lib/safe_format.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/normalize-package-data/lib/typos.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/normalize-package-data/lib/warning_messages.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/normalize-package-data/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-audit-report/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-audit-report/lib/colors.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-audit-report/lib/exit-code.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-audit-report/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-audit-report/lib/reporters/detail.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-audit-report/lib/reporters/install.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-audit-report/lib/reporters/json.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-audit-report/lib/reporters/quiet.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-audit-report/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-bundled/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-bundled/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-bundled/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-install-checks/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-install-checks/lib/current-env.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-install-checks/lib/dev-engines.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-install-checks/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-install-checks/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-normalize-package-bin/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-normalize-package-bin/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-normalize-package-bin/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-package-arg/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-package-arg/lib/npa.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-package-arg/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-packlist/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-packlist/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-packlist/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-pick-manifest/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-pick-manifest/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-pick-manifest/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-profile/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-profile/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-profile/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-registry-fetch/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-registry-fetch/lib/auth.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-registry-fetch/lib/check-response.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-registry-fetch/lib/default-opts.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-registry-fetch/lib/errors.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-registry-fetch/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-registry-fetch/lib/json-stream.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-registry-fetch/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-user-validate/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-user-validate/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/npm-user-validate/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/p-map/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/p-map/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/p-map/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/package-json-from-dist/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/package-json-from-dist/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/package-json-from-dist/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/package-json-from-dist/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/package-json-from-dist/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/package-json-from-dist/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/README.md create mode 100755 labWeb/lab7/node_modules/npm/node_modules/pacote/bin/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/dir.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/fetcher.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/file.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/git.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/registry.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/remote.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/util/add-git-sha.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/util/cache-dir.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/util/is-package-bin.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/util/npm.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/util/protected.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/util/tar-create-options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/lib/util/trailing-slashes.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/pacote/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/parse-conflict-json/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/parse-conflict-json/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/parse-conflict-json/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/path-key/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/path-key/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/path-key/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/path-scurry/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/path-scurry/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/path-scurry/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/path-scurry/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/path-scurry/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/path-scurry/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/picomatch/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/picomatch/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/picomatch/lib/constants.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/picomatch/lib/parse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/picomatch/lib/picomatch.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/picomatch/lib/scan.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/picomatch/lib/utils.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/picomatch/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/picomatch/posix.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/API.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/LICENSE-MIT create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/parser.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/processor.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/attribute.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/className.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/combinator.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/comment.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/constructors.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/container.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/guards.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/id.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/namespace.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/nesting.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/node.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/pseudo.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/root.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/selector.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/string.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/tag.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/types.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/universal.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/sortAscending.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/tokenTypes.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/tokenize.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/util/ensureObject.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/util/getProp.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/util/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/util/stripComments.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/dist/util/unesc.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/postcss-selector-parser/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/proc-log/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/proc-log/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/proc-log/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/proggy/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/proggy/lib/client.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/proggy/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/proggy/lib/tracker.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/proggy/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-all-reject-late/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-all-reject-late/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-all-reject-late/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-all-reject-late/test/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-call-limit/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-call-limit/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-call-limit/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-call-limit/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-call-limit/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-call-limit/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-retry/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-retry/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-retry/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promise-retry/test/test.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promzard/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promzard/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/promzard/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/.travis.yml create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/README.md create mode 100755 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/bin/qrcode-terminal.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/example/basic.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/example/basic.png create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/example/callback.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/example/small-qrcode.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/lib/main.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/test/main.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QR8bitByte.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRBitBuffer.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRMaskPattern.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRMath.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRMode.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRPolynomial.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRRSBlock.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRUtil.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/read-cmd-shim/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/read-cmd-shim/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/read-cmd-shim/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/read-package-json-fast/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/read-package-json-fast/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/read-package-json-fast/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/read/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/read/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/read/dist/commonjs/read.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/read/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/read/dist/esm/read.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/read/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/License create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/Makefile create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/equation.gif create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/example/dns.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/example/stop.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/lib/retry.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/lib/retry_operation.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/test/common.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/test/integration/test-forever.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/test/integration/test-retry-operation.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/test/integration/test-retry-wrap.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/retry/test/integration/test-timeouts.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/safer-buffer/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/safer-buffer/Porting-Buffer.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/safer-buffer/dangerous.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/safer-buffer/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/safer-buffer/safer.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/safer-buffer/tests.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/README.md create mode 100755 labWeb/lab7/node_modules/npm/node_modules/semver/bin/semver.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/classes/comparator.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/classes/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/classes/range.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/classes/semver.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/clean.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/cmp.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/coerce.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/compare-build.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/compare-loose.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/compare.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/diff.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/eq.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/gt.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/gte.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/inc.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/lt.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/lte.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/major.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/minor.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/neq.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/parse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/patch.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/prerelease.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/rcompare.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/rsort.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/satisfies.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/sort.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/functions/valid.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/internal/constants.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/internal/debug.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/internal/identifiers.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/internal/lrucache.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/internal/parse-options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/internal/re.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/preload.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/range.bnf create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/ranges/gtr.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/ranges/intersects.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/ranges/ltr.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/ranges/max-satisfying.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/ranges/min-satisfying.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/ranges/min-version.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/ranges/outside.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/ranges/simplify.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/ranges/subset.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/ranges/to-comparators.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/semver/ranges/valid.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/shebang-command/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/shebang-command/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/shebang-command/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/shebang-regex/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/shebang-regex/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/shebang-regex/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/signal-exit/LICENSE.txt create mode 100644 labWeb/lab7/node_modules/npm/node_modules/signal-exit/dist/cjs/browser.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/signal-exit/dist/cjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/signal-exit/dist/cjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/signal-exit/dist/cjs/signals.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/signal-exit/dist/mjs/browser.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/signal-exit/dist/mjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/signal-exit/dist/mjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/signal-exit/dist/mjs/signals.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/signal-exit/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/sigstore/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/sigstore/dist/config.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/sigstore/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/sigstore/dist/sigstore.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/sigstore/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/smart-buffer/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/smart-buffer/build/smartbuffer.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/smart-buffer/build/utils.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/smart-buffer/docs/ROADMAP.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/smart-buffer/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks-proxy-agent/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks-proxy-agent/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks-proxy-agent/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/build/client/socksclient.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/build/common/constants.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/build/common/helpers.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/build/common/receivebuffer.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/build/common/util.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/build/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/docs/examples/index.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/docs/examples/javascript/associateExample.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/docs/examples/javascript/bindExample.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/docs/examples/javascript/connectExample.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/docs/examples/typescript/associateExample.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/docs/examples/typescript/bindExample.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/docs/examples/typescript/connectExample.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/docs/index.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/docs/migratingFromV1.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/socks/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-correct/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-correct/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/AUTHORS create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/parse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/scan.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-correct/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-exceptions/deprecated.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-exceptions/index.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-exceptions/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-expression-parse/AUTHORS create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-expression-parse/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-expression-parse/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-expression-parse/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-expression-parse/parse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-expression-parse/scan.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-license-ids/deprecated.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-license-ids/index.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/spdx-license-ids/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ssri/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ssri/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/ssri/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/string-width-cjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/string-width-cjs/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/string-width-cjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/string-width/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/string-width/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/string-width/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/strip-ansi-cjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/strip-ansi-cjs/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/strip-ansi-cjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/strip-ansi/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/strip-ansi/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/strip-ansi/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/supports-color/browser.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/supports-color/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/supports-color/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/supports-color/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/create.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/cwd-error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/extract.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/get-write-flag.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/header.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/index.min.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/large-numbers.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/list.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/make-command.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/mkdir.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/mode-fix.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/normalize-unicode.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/normalize-windows-path.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/pack.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/parse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/path-reservations.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/pax.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/process-umask.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/read-entry.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/replace.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/strip-absolute-path.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/strip-trailing-slashes.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/symlink-error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/types.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/unpack.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/update.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/warn-method.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/winchars.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/commonjs/write-entry.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/create.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/cwd-error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/extract.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/get-write-flag.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/header.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/index.min.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/large-numbers.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/list.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/make-command.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/mkdir.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/mode-fix.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/normalize-unicode.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/normalize-windows-path.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/pack.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/parse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/path-reservations.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/pax.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/process-umask.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/read-entry.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/replace.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/strip-absolute-path.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/strip-trailing-slashes.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/symlink-error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/types.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/unpack.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/update.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/warn-method.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/winchars.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/dist/esm/write-entry.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tar/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/example/align.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/example/center.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/example/dotalign.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/example/doubledot.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/example/table.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/test/align.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/test/ansi-colors.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/test/center.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/test/dotalign.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/test/doubledot.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/text-table/test/table.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tiny-relative-date/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tiny-relative-date/lib/factory.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tiny-relative-date/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tiny-relative-date/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tiny-relative-date/src/factory.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tiny-relative-date/src/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tiny-relative-date/translations/da.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tiny-relative-date/translations/de.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tiny-relative-date/translations/en-short.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tiny-relative-date/translations/en.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tiny-relative-date/translations/es.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tinyglobby/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tinyglobby/dist/index.cjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tinyglobby/dist/index.d.cts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tinyglobby/dist/index.d.mts create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tinyglobby/dist/index.mjs create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tinyglobby/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/treeverse/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/treeverse/lib/breadth.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/treeverse/lib/depth-descent.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/treeverse/lib/depth.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/treeverse/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/treeverse/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/dist/config.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/dist/error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/dist/fetcher.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/dist/store.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/dist/updater.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/dist/utils/tmpfile.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/dist/utils/url.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/base.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/delegations.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/error.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/file.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/key.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/metadata.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/role.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/root.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/signature.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/snapshot.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/targets.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/timestamp.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/guard.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/key.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/oid.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/types.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/verify.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/tuf-js/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/unique-filename/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/unique-filename/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/unique-filename/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/unique-slug/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/unique-slug/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/unique-slug/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/util-deprecate/History.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/util-deprecate/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/util-deprecate/browser.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/util-deprecate/node.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/util-deprecate/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/validate-npm-package-license/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/validate-npm-package-license/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/AUTHORS create mode 100644 labWeb/lab7/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/parse.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/scan.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/validate-npm-package-license/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/validate-npm-package-name/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/validate-npm-package-name/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/validate-npm-package-name/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/walk-up-path/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/walk-up-path/dist/cjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/walk-up-path/dist/cjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/walk-up-path/dist/mjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/walk-up-path/dist/mjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/walk-up-path/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/LICENSE create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/README.md create mode 100755 labWeb/lab7/node_modules/npm/node_modules/which/bin/which.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/dist/commonjs/index.min.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/dist/commonjs/options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/dist/commonjs/posix.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/dist/commonjs/win32.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/dist/esm/index.min.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/dist/esm/options.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/dist/esm/posix.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/dist/esm/win32.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/node_modules/isexe/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/which/package.json create mode 100755 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi-cjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi-cjs/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi-cjs/package.json create mode 100755 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/RGI_Emoji.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/RGI_Emoji.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/text.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/text.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/wrap-ansi/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/write-file-atomic/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/write-file-atomic/lib/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/write-file-atomic/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/yallist/LICENSE.md create mode 100644 labWeb/lab7/node_modules/npm/node_modules/yallist/dist/commonjs/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/yallist/dist/commonjs/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/yallist/dist/esm/index.js create mode 100644 labWeb/lab7/node_modules/npm/node_modules/yallist/dist/esm/package.json create mode 100644 labWeb/lab7/node_modules/npm/node_modules/yallist/package.json create mode 100644 labWeb/lab7/node_modules/npm/package.json create mode 100644 labWeb/lab7/node_modules/object-inspect/.eslintrc create mode 100644 labWeb/lab7/node_modules/object-inspect/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/object-inspect/.nycrc create mode 100644 labWeb/lab7/node_modules/object-inspect/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/object-inspect/LICENSE create mode 100644 labWeb/lab7/node_modules/object-inspect/example/all.js create mode 100644 labWeb/lab7/node_modules/object-inspect/example/circular.js create mode 100644 labWeb/lab7/node_modules/object-inspect/example/fn.js create mode 100644 labWeb/lab7/node_modules/object-inspect/example/inspect.js create mode 100644 labWeb/lab7/node_modules/object-inspect/index.js create mode 100644 labWeb/lab7/node_modules/object-inspect/package-support.json create mode 100644 labWeb/lab7/node_modules/object-inspect/package.json create mode 100644 labWeb/lab7/node_modules/object-inspect/readme.markdown create mode 100644 labWeb/lab7/node_modules/object-inspect/test-core-js.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/bigint.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/browser/dom.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/circular.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/deep.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/element.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/err.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/fakes.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/fn.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/global.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/has.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/holes.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/indent-option.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/inspect.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/lowbyte.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/number.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/quoteStyle.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/toStringTag.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/undef.js create mode 100644 labWeb/lab7/node_modules/object-inspect/test/values.js create mode 100644 labWeb/lab7/node_modules/object-inspect/util.inspect.js create mode 100644 labWeb/lab7/node_modules/on-finished/HISTORY.md create mode 100644 labWeb/lab7/node_modules/on-finished/LICENSE create mode 100644 labWeb/lab7/node_modules/on-finished/README.md create mode 100644 labWeb/lab7/node_modules/on-finished/index.js create mode 100644 labWeb/lab7/node_modules/on-finished/package.json create mode 100644 labWeb/lab7/node_modules/parseurl/HISTORY.md create mode 100644 labWeb/lab7/node_modules/parseurl/LICENSE create mode 100644 labWeb/lab7/node_modules/parseurl/README.md create mode 100644 labWeb/lab7/node_modules/parseurl/index.js create mode 100644 labWeb/lab7/node_modules/parseurl/package.json create mode 100644 labWeb/lab7/node_modules/path-to-regexp/LICENSE create mode 100644 labWeb/lab7/node_modules/path-to-regexp/Readme.md create mode 100644 labWeb/lab7/node_modules/path-to-regexp/index.js create mode 100644 labWeb/lab7/node_modules/path-to-regexp/package.json create mode 100644 labWeb/lab7/node_modules/picomatch/LICENSE create mode 100644 labWeb/lab7/node_modules/picomatch/README.md create mode 100644 labWeb/lab7/node_modules/picomatch/index.js create mode 100644 labWeb/lab7/node_modules/picomatch/lib/constants.js create mode 100644 labWeb/lab7/node_modules/picomatch/lib/parse.js create mode 100644 labWeb/lab7/node_modules/picomatch/lib/picomatch.js create mode 100644 labWeb/lab7/node_modules/picomatch/lib/scan.js create mode 100644 labWeb/lab7/node_modules/picomatch/lib/utils.js create mode 100644 labWeb/lab7/node_modules/picomatch/package.json create mode 100644 labWeb/lab7/node_modules/proxy-addr/HISTORY.md create mode 100644 labWeb/lab7/node_modules/proxy-addr/LICENSE create mode 100644 labWeb/lab7/node_modules/proxy-addr/README.md create mode 100644 labWeb/lab7/node_modules/proxy-addr/index.js create mode 100644 labWeb/lab7/node_modules/proxy-addr/package.json create mode 100644 labWeb/lab7/node_modules/pstree.remy/.travis.yml create mode 100644 labWeb/lab7/node_modules/pstree.remy/LICENSE create mode 100644 labWeb/lab7/node_modules/pstree.remy/README.md create mode 100644 labWeb/lab7/node_modules/pstree.remy/lib/index.js create mode 100644 labWeb/lab7/node_modules/pstree.remy/lib/tree.js create mode 100644 labWeb/lab7/node_modules/pstree.remy/lib/utils.js create mode 100644 labWeb/lab7/node_modules/pstree.remy/package.json create mode 100644 labWeb/lab7/node_modules/pstree.remy/tests/fixtures/index.js create mode 100644 labWeb/lab7/node_modules/pstree.remy/tests/fixtures/out1 create mode 100644 labWeb/lab7/node_modules/pstree.remy/tests/fixtures/out2 create mode 100644 labWeb/lab7/node_modules/pstree.remy/tests/index.test.js create mode 100644 labWeb/lab7/node_modules/qs/.editorconfig create mode 100644 labWeb/lab7/node_modules/qs/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/qs/.github/SECURITY.md create mode 100644 labWeb/lab7/node_modules/qs/.github/THREAT_MODEL.md create mode 100644 labWeb/lab7/node_modules/qs/.nycrc create mode 100644 labWeb/lab7/node_modules/qs/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/qs/LICENSE.md create mode 100644 labWeb/lab7/node_modules/qs/README.md create mode 100644 labWeb/lab7/node_modules/qs/dist/qs.js create mode 100644 labWeb/lab7/node_modules/qs/eslint.config.mjs create mode 100644 labWeb/lab7/node_modules/qs/lib/formats.js create mode 100644 labWeb/lab7/node_modules/qs/lib/index.js create mode 100644 labWeb/lab7/node_modules/qs/lib/parse.js create mode 100644 labWeb/lab7/node_modules/qs/lib/stringify.js create mode 100644 labWeb/lab7/node_modules/qs/lib/utils.js create mode 100644 labWeb/lab7/node_modules/qs/package.json create mode 100644 labWeb/lab7/node_modules/qs/test/empty-keys-cases.js create mode 100644 labWeb/lab7/node_modules/qs/test/parse.js create mode 100644 labWeb/lab7/node_modules/qs/test/stringify.js create mode 100644 labWeb/lab7/node_modules/qs/test/utils.js create mode 100644 labWeb/lab7/node_modules/range-parser/HISTORY.md create mode 100644 labWeb/lab7/node_modules/range-parser/LICENSE create mode 100644 labWeb/lab7/node_modules/range-parser/README.md create mode 100644 labWeb/lab7/node_modules/range-parser/index.js create mode 100644 labWeb/lab7/node_modules/range-parser/package.json create mode 100644 labWeb/lab7/node_modules/raw-body/LICENSE create mode 100644 labWeb/lab7/node_modules/raw-body/README.md create mode 100644 labWeb/lab7/node_modules/raw-body/index.d.ts create mode 100644 labWeb/lab7/node_modules/raw-body/index.js create mode 100644 labWeb/lab7/node_modules/raw-body/package.json create mode 100644 labWeb/lab7/node_modules/readdirp/LICENSE create mode 100644 labWeb/lab7/node_modules/readdirp/README.md create mode 100644 labWeb/lab7/node_modules/readdirp/index.d.ts create mode 100644 labWeb/lab7/node_modules/readdirp/index.js create mode 100644 labWeb/lab7/node_modules/readdirp/package.json create mode 100644 labWeb/lab7/node_modules/safe-buffer/LICENSE create mode 100644 labWeb/lab7/node_modules/safe-buffer/README.md create mode 100644 labWeb/lab7/node_modules/safe-buffer/index.d.ts create mode 100644 labWeb/lab7/node_modules/safe-buffer/index.js create mode 100644 labWeb/lab7/node_modules/safe-buffer/package.json create mode 100644 labWeb/lab7/node_modules/safer-buffer/LICENSE create mode 100644 labWeb/lab7/node_modules/safer-buffer/Porting-Buffer.md create mode 100644 labWeb/lab7/node_modules/safer-buffer/Readme.md create mode 100644 labWeb/lab7/node_modules/safer-buffer/dangerous.js create mode 100644 labWeb/lab7/node_modules/safer-buffer/package.json create mode 100644 labWeb/lab7/node_modules/safer-buffer/safer.js create mode 100644 labWeb/lab7/node_modules/safer-buffer/tests.js create mode 100644 labWeb/lab7/node_modules/semver/LICENSE create mode 100644 labWeb/lab7/node_modules/semver/README.md create mode 100644 labWeb/lab7/node_modules/semver/bin/semver.js create mode 100644 labWeb/lab7/node_modules/semver/classes/comparator.js create mode 100644 labWeb/lab7/node_modules/semver/classes/index.js create mode 100644 labWeb/lab7/node_modules/semver/classes/range.js create mode 100644 labWeb/lab7/node_modules/semver/classes/semver.js create mode 100644 labWeb/lab7/node_modules/semver/functions/clean.js create mode 100644 labWeb/lab7/node_modules/semver/functions/cmp.js create mode 100644 labWeb/lab7/node_modules/semver/functions/coerce.js create mode 100644 labWeb/lab7/node_modules/semver/functions/compare-build.js create mode 100644 labWeb/lab7/node_modules/semver/functions/compare-loose.js create mode 100644 labWeb/lab7/node_modules/semver/functions/compare.js create mode 100644 labWeb/lab7/node_modules/semver/functions/diff.js create mode 100644 labWeb/lab7/node_modules/semver/functions/eq.js create mode 100644 labWeb/lab7/node_modules/semver/functions/gt.js create mode 100644 labWeb/lab7/node_modules/semver/functions/gte.js create mode 100644 labWeb/lab7/node_modules/semver/functions/inc.js create mode 100644 labWeb/lab7/node_modules/semver/functions/lt.js create mode 100644 labWeb/lab7/node_modules/semver/functions/lte.js create mode 100644 labWeb/lab7/node_modules/semver/functions/major.js create mode 100644 labWeb/lab7/node_modules/semver/functions/minor.js create mode 100644 labWeb/lab7/node_modules/semver/functions/neq.js create mode 100644 labWeb/lab7/node_modules/semver/functions/parse.js create mode 100644 labWeb/lab7/node_modules/semver/functions/patch.js create mode 100644 labWeb/lab7/node_modules/semver/functions/prerelease.js create mode 100644 labWeb/lab7/node_modules/semver/functions/rcompare.js create mode 100644 labWeb/lab7/node_modules/semver/functions/rsort.js create mode 100644 labWeb/lab7/node_modules/semver/functions/satisfies.js create mode 100644 labWeb/lab7/node_modules/semver/functions/sort.js create mode 100644 labWeb/lab7/node_modules/semver/functions/valid.js create mode 100644 labWeb/lab7/node_modules/semver/index.js create mode 100644 labWeb/lab7/node_modules/semver/internal/constants.js create mode 100644 labWeb/lab7/node_modules/semver/internal/debug.js create mode 100644 labWeb/lab7/node_modules/semver/internal/identifiers.js create mode 100644 labWeb/lab7/node_modules/semver/internal/parse-options.js create mode 100644 labWeb/lab7/node_modules/semver/internal/re.js create mode 100644 labWeb/lab7/node_modules/semver/package.json create mode 100644 labWeb/lab7/node_modules/semver/preload.js create mode 100644 labWeb/lab7/node_modules/semver/range.bnf create mode 100644 labWeb/lab7/node_modules/semver/ranges/gtr.js create mode 100644 labWeb/lab7/node_modules/semver/ranges/intersects.js create mode 100644 labWeb/lab7/node_modules/semver/ranges/ltr.js create mode 100644 labWeb/lab7/node_modules/semver/ranges/max-satisfying.js create mode 100644 labWeb/lab7/node_modules/semver/ranges/min-satisfying.js create mode 100644 labWeb/lab7/node_modules/semver/ranges/min-version.js create mode 100644 labWeb/lab7/node_modules/semver/ranges/outside.js create mode 100644 labWeb/lab7/node_modules/semver/ranges/simplify.js create mode 100644 labWeb/lab7/node_modules/semver/ranges/subset.js create mode 100644 labWeb/lab7/node_modules/semver/ranges/to-comparators.js create mode 100644 labWeb/lab7/node_modules/semver/ranges/valid.js create mode 100644 labWeb/lab7/node_modules/send/HISTORY.md create mode 100644 labWeb/lab7/node_modules/send/LICENSE create mode 100644 labWeb/lab7/node_modules/send/README.md create mode 100644 labWeb/lab7/node_modules/send/SECURITY.md create mode 100644 labWeb/lab7/node_modules/send/index.js create mode 100644 labWeb/lab7/node_modules/send/node_modules/ms/index.js create mode 100644 labWeb/lab7/node_modules/send/node_modules/ms/license.md create mode 100644 labWeb/lab7/node_modules/send/node_modules/ms/package.json create mode 100644 labWeb/lab7/node_modules/send/node_modules/ms/readme.md create mode 100644 labWeb/lab7/node_modules/send/package.json create mode 100644 labWeb/lab7/node_modules/serve-static/HISTORY.md create mode 100644 labWeb/lab7/node_modules/serve-static/LICENSE create mode 100644 labWeb/lab7/node_modules/serve-static/README.md create mode 100644 labWeb/lab7/node_modules/serve-static/index.js create mode 100644 labWeb/lab7/node_modules/serve-static/package.json create mode 100644 labWeb/lab7/node_modules/setprototypeof/LICENSE create mode 100644 labWeb/lab7/node_modules/setprototypeof/README.md create mode 100644 labWeb/lab7/node_modules/setprototypeof/index.d.ts create mode 100644 labWeb/lab7/node_modules/setprototypeof/index.js create mode 100644 labWeb/lab7/node_modules/setprototypeof/package.json create mode 100644 labWeb/lab7/node_modules/setprototypeof/test/index.js create mode 100644 labWeb/lab7/node_modules/side-channel-list/.editorconfig create mode 100644 labWeb/lab7/node_modules/side-channel-list/.eslintrc create mode 100644 labWeb/lab7/node_modules/side-channel-list/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/side-channel-list/.nycrc create mode 100644 labWeb/lab7/node_modules/side-channel-list/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/side-channel-list/LICENSE create mode 100644 labWeb/lab7/node_modules/side-channel-list/README.md create mode 100644 labWeb/lab7/node_modules/side-channel-list/index.d.ts create mode 100644 labWeb/lab7/node_modules/side-channel-list/index.js create mode 100644 labWeb/lab7/node_modules/side-channel-list/list.d.ts create mode 100644 labWeb/lab7/node_modules/side-channel-list/package.json create mode 100644 labWeb/lab7/node_modules/side-channel-list/test/index.js create mode 100644 labWeb/lab7/node_modules/side-channel-list/tsconfig.json create mode 100644 labWeb/lab7/node_modules/side-channel-map/.editorconfig create mode 100644 labWeb/lab7/node_modules/side-channel-map/.eslintrc create mode 100644 labWeb/lab7/node_modules/side-channel-map/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/side-channel-map/.nycrc create mode 100644 labWeb/lab7/node_modules/side-channel-map/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/side-channel-map/LICENSE create mode 100644 labWeb/lab7/node_modules/side-channel-map/README.md create mode 100644 labWeb/lab7/node_modules/side-channel-map/index.d.ts create mode 100644 labWeb/lab7/node_modules/side-channel-map/index.js create mode 100644 labWeb/lab7/node_modules/side-channel-map/package.json create mode 100644 labWeb/lab7/node_modules/side-channel-map/test/index.js create mode 100644 labWeb/lab7/node_modules/side-channel-map/tsconfig.json create mode 100644 labWeb/lab7/node_modules/side-channel-weakmap/.editorconfig create mode 100644 labWeb/lab7/node_modules/side-channel-weakmap/.eslintrc create mode 100644 labWeb/lab7/node_modules/side-channel-weakmap/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/side-channel-weakmap/.nycrc create mode 100644 labWeb/lab7/node_modules/side-channel-weakmap/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/side-channel-weakmap/LICENSE create mode 100644 labWeb/lab7/node_modules/side-channel-weakmap/README.md create mode 100644 labWeb/lab7/node_modules/side-channel-weakmap/index.d.ts create mode 100644 labWeb/lab7/node_modules/side-channel-weakmap/index.js create mode 100644 labWeb/lab7/node_modules/side-channel-weakmap/package.json create mode 100644 labWeb/lab7/node_modules/side-channel-weakmap/test/index.js create mode 100644 labWeb/lab7/node_modules/side-channel-weakmap/tsconfig.json create mode 100644 labWeb/lab7/node_modules/side-channel/.editorconfig create mode 100644 labWeb/lab7/node_modules/side-channel/.eslintrc create mode 100644 labWeb/lab7/node_modules/side-channel/.github/FUNDING.yml create mode 100644 labWeb/lab7/node_modules/side-channel/.nycrc create mode 100644 labWeb/lab7/node_modules/side-channel/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/side-channel/LICENSE create mode 100644 labWeb/lab7/node_modules/side-channel/README.md create mode 100644 labWeb/lab7/node_modules/side-channel/index.d.ts create mode 100644 labWeb/lab7/node_modules/side-channel/index.js create mode 100644 labWeb/lab7/node_modules/side-channel/package.json create mode 100644 labWeb/lab7/node_modules/side-channel/test/index.js create mode 100644 labWeb/lab7/node_modules/side-channel/tsconfig.json create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/LICENSE create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/README.md create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/build/index.d.ts create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/build/index.js create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/package.json create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/src/borderedText.ts create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/src/cache.spec.ts create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/src/cache.ts create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/src/getDistVersion.spec.ts create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/src/getDistVersion.ts create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/src/hasNewVersion.spec.ts create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/src/hasNewVersion.ts create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/src/index.spec.ts create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/src/index.ts create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/src/isNpmOrYarn.ts create mode 100644 labWeb/lab7/node_modules/simple-update-notifier/src/types.ts create mode 100644 labWeb/lab7/node_modules/source-map/CHANGELOG.md create mode 100644 labWeb/lab7/node_modules/source-map/LICENSE create mode 100644 labWeb/lab7/node_modules/source-map/README.md create mode 100644 labWeb/lab7/node_modules/source-map/dist/source-map.debug.js create mode 100644 labWeb/lab7/node_modules/source-map/dist/source-map.js create mode 100644 labWeb/lab7/node_modules/source-map/dist/source-map.min.js create mode 100644 labWeb/lab7/node_modules/source-map/dist/source-map.min.js.map create mode 100644 labWeb/lab7/node_modules/source-map/lib/array-set.js create mode 100644 labWeb/lab7/node_modules/source-map/lib/base64-vlq.js create mode 100644 labWeb/lab7/node_modules/source-map/lib/base64.js create mode 100644 labWeb/lab7/node_modules/source-map/lib/binary-search.js create mode 100644 labWeb/lab7/node_modules/source-map/lib/mapping-list.js create mode 100644 labWeb/lab7/node_modules/source-map/lib/quick-sort.js create mode 100644 labWeb/lab7/node_modules/source-map/lib/source-map-consumer.js create mode 100644 labWeb/lab7/node_modules/source-map/lib/source-map-generator.js create mode 100644 labWeb/lab7/node_modules/source-map/lib/source-node.js create mode 100644 labWeb/lab7/node_modules/source-map/lib/util.js create mode 100644 labWeb/lab7/node_modules/source-map/package.json create mode 100644 labWeb/lab7/node_modules/source-map/source-map.d.ts create mode 100644 labWeb/lab7/node_modules/source-map/source-map.js create mode 100644 labWeb/lab7/node_modules/statuses/HISTORY.md create mode 100644 labWeb/lab7/node_modules/statuses/LICENSE create mode 100644 labWeb/lab7/node_modules/statuses/README.md create mode 100644 labWeb/lab7/node_modules/statuses/codes.json create mode 100644 labWeb/lab7/node_modules/statuses/index.js create mode 100644 labWeb/lab7/node_modules/statuses/package.json create mode 100644 labWeb/lab7/node_modules/supports-color/browser.js create mode 100644 labWeb/lab7/node_modules/supports-color/index.js create mode 100644 labWeb/lab7/node_modules/supports-color/license create mode 100644 labWeb/lab7/node_modules/supports-color/package.json create mode 100644 labWeb/lab7/node_modules/supports-color/readme.md create mode 100644 labWeb/lab7/node_modules/to-regex-range/LICENSE create mode 100644 labWeb/lab7/node_modules/to-regex-range/README.md create mode 100644 labWeb/lab7/node_modules/to-regex-range/index.js create mode 100644 labWeb/lab7/node_modules/to-regex-range/package.json create mode 100644 labWeb/lab7/node_modules/toidentifier/HISTORY.md create mode 100644 labWeb/lab7/node_modules/toidentifier/LICENSE create mode 100644 labWeb/lab7/node_modules/toidentifier/README.md create mode 100644 labWeb/lab7/node_modules/toidentifier/index.js create mode 100644 labWeb/lab7/node_modules/toidentifier/package.json create mode 100644 labWeb/lab7/node_modules/touch/LICENSE create mode 100644 labWeb/lab7/node_modules/touch/README.md create mode 100644 labWeb/lab7/node_modules/touch/bin/nodetouch.js create mode 100644 labWeb/lab7/node_modules/touch/index.js create mode 100644 labWeb/lab7/node_modules/touch/package.json create mode 100644 labWeb/lab7/node_modules/type-is/HISTORY.md create mode 100644 labWeb/lab7/node_modules/type-is/LICENSE create mode 100644 labWeb/lab7/node_modules/type-is/README.md create mode 100644 labWeb/lab7/node_modules/type-is/index.js create mode 100644 labWeb/lab7/node_modules/type-is/package.json create mode 100644 labWeb/lab7/node_modules/uglify-js/LICENSE create mode 100644 labWeb/lab7/node_modules/uglify-js/README.md create mode 100755 labWeb/lab7/node_modules/uglify-js/bin/uglifyjs create mode 100644 labWeb/lab7/node_modules/uglify-js/lib/ast.js create mode 100644 labWeb/lab7/node_modules/uglify-js/lib/compress.js create mode 100644 labWeb/lab7/node_modules/uglify-js/lib/minify.js create mode 100644 labWeb/lab7/node_modules/uglify-js/lib/mozilla-ast.js create mode 100644 labWeb/lab7/node_modules/uglify-js/lib/output.js create mode 100644 labWeb/lab7/node_modules/uglify-js/lib/parse.js create mode 100644 labWeb/lab7/node_modules/uglify-js/lib/propmangle.js create mode 100644 labWeb/lab7/node_modules/uglify-js/lib/scope.js create mode 100644 labWeb/lab7/node_modules/uglify-js/lib/sourcemap.js create mode 100644 labWeb/lab7/node_modules/uglify-js/lib/transform.js create mode 100644 labWeb/lab7/node_modules/uglify-js/lib/utils.js create mode 100644 labWeb/lab7/node_modules/uglify-js/package.json create mode 100644 labWeb/lab7/node_modules/uglify-js/tools/domprops.html create mode 100644 labWeb/lab7/node_modules/uglify-js/tools/domprops.json create mode 100644 labWeb/lab7/node_modules/uglify-js/tools/exports.js create mode 100644 labWeb/lab7/node_modules/uglify-js/tools/node.js create mode 100644 labWeb/lab7/node_modules/uglify-js/tools/tty.js create mode 100644 labWeb/lab7/node_modules/undefsafe/.github/workflows/release.yml create mode 100644 labWeb/lab7/node_modules/undefsafe/.jscsrc create mode 100644 labWeb/lab7/node_modules/undefsafe/.jshintrc create mode 100644 labWeb/lab7/node_modules/undefsafe/.travis.yml create mode 100644 labWeb/lab7/node_modules/undefsafe/LICENSE create mode 100644 labWeb/lab7/node_modules/undefsafe/README.md create mode 100644 labWeb/lab7/node_modules/undefsafe/example.js create mode 100644 labWeb/lab7/node_modules/undefsafe/lib/undefsafe.js create mode 100644 labWeb/lab7/node_modules/undefsafe/package.json create mode 100644 labWeb/lab7/node_modules/unpipe/HISTORY.md create mode 100644 labWeb/lab7/node_modules/unpipe/LICENSE create mode 100644 labWeb/lab7/node_modules/unpipe/README.md create mode 100644 labWeb/lab7/node_modules/unpipe/index.js create mode 100644 labWeb/lab7/node_modules/unpipe/package.json create mode 100644 labWeb/lab7/node_modules/utils-merge/.npmignore create mode 100644 labWeb/lab7/node_modules/utils-merge/LICENSE create mode 100644 labWeb/lab7/node_modules/utils-merge/README.md create mode 100644 labWeb/lab7/node_modules/utils-merge/index.js create mode 100644 labWeb/lab7/node_modules/utils-merge/package.json create mode 100644 labWeb/lab7/node_modules/vary/HISTORY.md create mode 100644 labWeb/lab7/node_modules/vary/LICENSE create mode 100644 labWeb/lab7/node_modules/vary/README.md create mode 100644 labWeb/lab7/node_modules/vary/index.js create mode 100644 labWeb/lab7/node_modules/vary/package.json create mode 100644 labWeb/lab7/node_modules/walk/LICENSE create mode 100644 labWeb/lab7/node_modules/walk/README.md create mode 100644 labWeb/lab7/node_modules/walk/lib/node-type-emitter.js create mode 100644 labWeb/lab7/node_modules/walk/lib/walk-async-only.js create mode 100644 labWeb/lab7/node_modules/walk/lib/walk.js create mode 100644 labWeb/lab7/node_modules/walk/package.json create mode 100644 labWeb/lab7/node_modules/wordwrap/LICENSE create mode 100644 labWeb/lab7/node_modules/wordwrap/README.markdown create mode 100644 labWeb/lab7/node_modules/wordwrap/example/center.js create mode 100644 labWeb/lab7/node_modules/wordwrap/example/meat.js create mode 100644 labWeb/lab7/node_modules/wordwrap/index.js create mode 100644 labWeb/lab7/node_modules/wordwrap/package.json create mode 100644 labWeb/lab7/node_modules/wordwrap/test/break.js create mode 100644 labWeb/lab7/node_modules/wordwrap/test/idleness.txt create mode 100644 labWeb/lab7/node_modules/wordwrap/test/wrap.js create mode 100644 labWeb/lab7/node_modules/yallist/LICENSE create mode 100644 labWeb/lab7/node_modules/yallist/README.md create mode 100644 labWeb/lab7/node_modules/yallist/iterator.js create mode 100644 labWeb/lab7/node_modules/yallist/package.json create mode 100644 labWeb/lab7/node_modules/yallist/yallist.js create mode 100644 labWeb/lab7/package-lock.json create mode 100644 labWeb/lab7/package.json create mode 100644 labWeb/lab7/prepros.config create mode 100644 labWeb/lab7/public/assets/Imglogo.svg create mode 100644 labWeb/lab7/public/assets/Vector.svg create mode 100644 labWeb/lab7/public/assets/buttons/arrow-left.svg create mode 100644 labWeb/lab7/public/assets/buttons/arrow-right.svg create mode 100644 labWeb/lab7/public/assets/chart.png create mode 100644 labWeb/lab7/public/assets/company/logo-1.png create mode 100644 labWeb/lab7/public/assets/company/logo-10.png create mode 100644 labWeb/lab7/public/assets/company/logo-11.png create mode 100644 labWeb/lab7/public/assets/company/logo-12.png create mode 100644 labWeb/lab7/public/assets/company/logo-13.png create mode 100644 labWeb/lab7/public/assets/company/logo-14.png create mode 100644 labWeb/lab7/public/assets/company/logo-2.png create mode 100644 labWeb/lab7/public/assets/company/logo-3.png create mode 100644 labWeb/lab7/public/assets/company/logo-4.png create mode 100644 labWeb/lab7/public/assets/company/logo-5.png create mode 100644 labWeb/lab7/public/assets/company/logo-6.png create mode 100644 labWeb/lab7/public/assets/company/logo-7.png create mode 100644 labWeb/lab7/public/assets/company/logo-8.png create mode 100644 labWeb/lab7/public/assets/company/logo-9.png create mode 100644 labWeb/lab7/public/assets/form__items/imgs.png create mode 100644 labWeb/lab7/public/assets/form__items/mail.svg create mode 100644 labWeb/lab7/public/assets/form__items/map.svg create mode 100644 labWeb/lab7/public/assets/form__items/phone.svg create mode 100644 labWeb/lab7/public/assets/instagram.svg create mode 100644 labWeb/lab7/public/assets/rect.png create mode 100644 labWeb/lab7/public/assets/tiktok.svg create mode 100644 labWeb/lab7/public/css/head_and_footer.css create mode 100644 labWeb/lab7/public/css/main.css create mode 100644 labWeb/lab7/public/js/burger_menu.js create mode 100644 labWeb/lab7/public/js/courses.js create mode 100644 labWeb/lab7/public/js/main.js create mode 100644 labWeb/lab7/scss/head_and_footer.scss create mode 100644 labWeb/lab7/scss/main.scss create mode 100644 labWeb/lab7/views/head_and_footer.hbs create mode 100644 labWeb/lab7/views/main.hbs create mode 100644 labWeb/lab8/contacts.html create mode 100644 labWeb/lab8/css/style.css create mode 100644 labWeb/lab8/index.html create mode 100644 labWeb/lab8/news.html create mode 100644 labWeb/lab8/order.html create mode 100644 labWeb/lab8/products.html create mode 100644 labWeb/lab8/script.js create mode 100644 labWeb/lab8/style.css create mode 100644 labWeb/lab9/index.html create mode 100644 labWeb/lab9/script.js create mode 100644 labWeb/lab9/style.css create mode 120000 labWeb/node_modules/.bin/autoprefixer create mode 120000 labWeb/node_modules/.bin/baseline-browser-mapping create mode 120000 labWeb/node_modules/.bin/browserslist create mode 120000 labWeb/node_modules/.bin/cssesc create mode 120000 labWeb/node_modules/.bin/jiti create mode 120000 labWeb/node_modules/.bin/nanoid create mode 120000 labWeb/node_modules/.bin/resolve create mode 120000 labWeb/node_modules/.bin/sucrase create mode 120000 labWeb/node_modules/.bin/sucrase-node create mode 120000 labWeb/node_modules/.bin/tailwind create mode 120000 labWeb/node_modules/.bin/tailwindcss create mode 120000 labWeb/node_modules/.bin/update-browserslist-db create mode 100644 labWeb/node_modules/.package-lock.json create mode 100644 labWeb/node_modules/@alloc/quick-lru/index.d.ts create mode 100644 labWeb/node_modules/@alloc/quick-lru/index.js create mode 100644 labWeb/node_modules/@alloc/quick-lru/license create mode 100644 labWeb/node_modules/@alloc/quick-lru/package.json create mode 100644 labWeb/node_modules/@alloc/quick-lru/readme.md create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/LICENSE create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/README.md create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs.map create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js.map create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/dist/types/gen-mapping.d.ts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/dist/types/set-array.d.ts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/dist/types/sourcemap-segment.d.ts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/dist/types/types.d.ts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/package.json create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/src/gen-mapping.ts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/src/set-array.ts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/src/sourcemap-segment.ts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/src/types.ts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.cts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.mts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/set-array.d.cts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/set-array.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/set-array.d.mts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/set-array.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.cts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.mts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/types.d.cts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/types.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/types.d.mts create mode 100644 labWeb/node_modules/@jridgewell/gen-mapping/types/types.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/resolve-uri/LICENSE create mode 100644 labWeb/node_modules/@jridgewell/resolve-uri/README.md create mode 100644 labWeb/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs create mode 100644 labWeb/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs.map create mode 100644 labWeb/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js create mode 100644 labWeb/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js.map create mode 100644 labWeb/node_modules/@jridgewell/resolve-uri/dist/types/resolve-uri.d.ts create mode 100644 labWeb/node_modules/@jridgewell/resolve-uri/package.json create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/LICENSE create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/README.md create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs.map create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js.map create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/package.json create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/src/scopes.ts create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/src/sourcemap-codec.ts create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/src/strings.ts create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/src/vlq.ts create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.cts create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.mts create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.cts create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.mts create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/strings.d.cts create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/strings.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/strings.d.mts create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/strings.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.cts create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.mts create mode 100644 labWeb/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/LICENSE create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/README.md create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/package.json create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/src/binary-search.ts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/src/by-source.ts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/src/flatten-map.ts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/src/resolve.ts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/src/sort.ts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/src/sourcemap-segment.ts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/src/strip-filename.ts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/src/trace-mapping.ts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/src/types.ts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/binary-search.d.cts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/binary-search.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/binary-search.d.mts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/binary-search.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/by-source.d.cts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/by-source.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/by-source.d.mts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/by-source.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.cts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.mts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/resolve.d.cts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/resolve.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/resolve.d.mts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/resolve.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/sort.d.cts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/sort.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/sort.d.mts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/sort.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.cts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.mts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.cts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.mts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.cts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.mts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.mts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/types.d.cts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/types.d.cts.map create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/types.d.mts create mode 100644 labWeb/node_modules/@jridgewell/trace-mapping/types/types.d.mts.map create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/LICENSE create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/README.md create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/adapters/fs.js create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/constants.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/constants.js create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/index.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/index.js create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/providers/async.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/providers/async.js create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/providers/common.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/providers/common.js create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/providers/sync.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/providers/sync.js create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/settings.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/settings.js create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/types/index.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/types/index.js create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/utils/fs.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/utils/fs.js create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/utils/index.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/out/utils/index.js create mode 100644 labWeb/node_modules/@nodelib/fs.scandir/package.json create mode 100644 labWeb/node_modules/@nodelib/fs.stat/LICENSE create mode 100644 labWeb/node_modules/@nodelib/fs.stat/README.md create mode 100644 labWeb/node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.stat/out/adapters/fs.js create mode 100644 labWeb/node_modules/@nodelib/fs.stat/out/index.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.stat/out/index.js create mode 100644 labWeb/node_modules/@nodelib/fs.stat/out/providers/async.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.stat/out/providers/async.js create mode 100644 labWeb/node_modules/@nodelib/fs.stat/out/providers/sync.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.stat/out/providers/sync.js create mode 100644 labWeb/node_modules/@nodelib/fs.stat/out/settings.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.stat/out/settings.js create mode 100644 labWeb/node_modules/@nodelib/fs.stat/out/types/index.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.stat/out/types/index.js create mode 100644 labWeb/node_modules/@nodelib/fs.stat/package.json create mode 100644 labWeb/node_modules/@nodelib/fs.walk/LICENSE create mode 100644 labWeb/node_modules/@nodelib/fs.walk/README.md create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/index.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/index.js create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/providers/async.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/providers/async.js create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/providers/index.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/providers/index.js create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/providers/stream.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/providers/stream.js create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/providers/sync.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/providers/sync.js create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/readers/async.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/readers/async.js create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/readers/common.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/readers/common.js create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/readers/reader.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/readers/reader.js create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/readers/sync.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/readers/sync.js create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/settings.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/settings.js create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/types/index.d.ts create mode 100644 labWeb/node_modules/@nodelib/fs.walk/out/types/index.js create mode 100644 labWeb/node_modules/@nodelib/fs.walk/package.json create mode 100644 labWeb/node_modules/any-promise/.jshintrc create mode 100644 labWeb/node_modules/any-promise/.npmignore create mode 100644 labWeb/node_modules/any-promise/LICENSE create mode 100644 labWeb/node_modules/any-promise/README.md create mode 100644 labWeb/node_modules/any-promise/implementation.d.ts create mode 100644 labWeb/node_modules/any-promise/implementation.js create mode 100644 labWeb/node_modules/any-promise/index.d.ts create mode 100644 labWeb/node_modules/any-promise/index.js create mode 100644 labWeb/node_modules/any-promise/loader.js create mode 100644 labWeb/node_modules/any-promise/optional.js create mode 100644 labWeb/node_modules/any-promise/package.json create mode 100644 labWeb/node_modules/any-promise/register-shim.js create mode 100644 labWeb/node_modules/any-promise/register.d.ts create mode 100644 labWeb/node_modules/any-promise/register.js create mode 100644 labWeb/node_modules/any-promise/register/bluebird.d.ts create mode 100644 labWeb/node_modules/any-promise/register/bluebird.js create mode 100644 labWeb/node_modules/any-promise/register/es6-promise.d.ts create mode 100644 labWeb/node_modules/any-promise/register/es6-promise.js create mode 100644 labWeb/node_modules/any-promise/register/lie.d.ts create mode 100644 labWeb/node_modules/any-promise/register/lie.js create mode 100644 labWeb/node_modules/any-promise/register/native-promise-only.d.ts create mode 100644 labWeb/node_modules/any-promise/register/native-promise-only.js create mode 100644 labWeb/node_modules/any-promise/register/pinkie.d.ts create mode 100644 labWeb/node_modules/any-promise/register/pinkie.js create mode 100644 labWeb/node_modules/any-promise/register/promise.d.ts create mode 100644 labWeb/node_modules/any-promise/register/promise.js create mode 100644 labWeb/node_modules/any-promise/register/q.d.ts create mode 100644 labWeb/node_modules/any-promise/register/q.js create mode 100644 labWeb/node_modules/any-promise/register/rsvp.d.ts create mode 100644 labWeb/node_modules/any-promise/register/rsvp.js create mode 100644 labWeb/node_modules/any-promise/register/vow.d.ts create mode 100644 labWeb/node_modules/any-promise/register/vow.js create mode 100644 labWeb/node_modules/any-promise/register/when.d.ts create mode 100644 labWeb/node_modules/any-promise/register/when.js create mode 100644 labWeb/node_modules/anymatch/LICENSE create mode 100644 labWeb/node_modules/anymatch/README.md create mode 100644 labWeb/node_modules/anymatch/index.d.ts create mode 100644 labWeb/node_modules/anymatch/index.js create mode 100644 labWeb/node_modules/anymatch/package.json create mode 100644 labWeb/node_modules/arg/LICENSE.md create mode 100644 labWeb/node_modules/arg/README.md create mode 100644 labWeb/node_modules/arg/index.d.ts create mode 100644 labWeb/node_modules/arg/index.js create mode 100644 labWeb/node_modules/arg/package.json create mode 100644 labWeb/node_modules/autoprefixer/LICENSE create mode 100644 labWeb/node_modules/autoprefixer/README.md create mode 100755 labWeb/node_modules/autoprefixer/bin/autoprefixer create mode 100644 labWeb/node_modules/autoprefixer/data/prefixes.js create mode 100644 labWeb/node_modules/autoprefixer/lib/at-rule.js create mode 100644 labWeb/node_modules/autoprefixer/lib/autoprefixer.d.ts create mode 100644 labWeb/node_modules/autoprefixer/lib/autoprefixer.js create mode 100644 labWeb/node_modules/autoprefixer/lib/brackets.js create mode 100644 labWeb/node_modules/autoprefixer/lib/browsers.js create mode 100644 labWeb/node_modules/autoprefixer/lib/declaration.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/align-content.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/align-items.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/align-self.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/animation.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/appearance.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/autofill.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/backdrop-filter.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/background-clip.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/background-size.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/block-logical.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/border-image.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/border-radius.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/break-props.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/cross-fade.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/display-flex.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/display-grid.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/file-selector-button.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/filter-value.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/filter.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/flex-basis.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/flex-direction.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/flex-flow.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/flex-grow.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/flex-shrink.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/flex-spec.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/flex-wrap.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/flex.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/fullscreen.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/gradient.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/grid-area.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/grid-column-align.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/grid-end.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/grid-row-align.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/grid-row-column.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/grid-rows-columns.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/grid-start.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/grid-template-areas.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/grid-template.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/grid-utils.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/image-rendering.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/image-set.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/inline-logical.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/intrinsic.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/justify-content.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/mask-border.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/mask-composite.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/order.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/overscroll-behavior.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/pixelated.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/place-self.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/placeholder-shown.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/placeholder.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/print-color-adjust.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/text-decoration-skip-ink.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/text-decoration.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/text-emphasis-position.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/transform-decl.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/user-select.js create mode 100644 labWeb/node_modules/autoprefixer/lib/hacks/writing-mode.js create mode 100644 labWeb/node_modules/autoprefixer/lib/info.js create mode 100644 labWeb/node_modules/autoprefixer/lib/old-selector.js create mode 100644 labWeb/node_modules/autoprefixer/lib/old-value.js create mode 100644 labWeb/node_modules/autoprefixer/lib/prefixer.js create mode 100644 labWeb/node_modules/autoprefixer/lib/prefixes.js create mode 100644 labWeb/node_modules/autoprefixer/lib/processor.js create mode 100644 labWeb/node_modules/autoprefixer/lib/resolution.js create mode 100644 labWeb/node_modules/autoprefixer/lib/selector.js create mode 100644 labWeb/node_modules/autoprefixer/lib/supports.js create mode 100644 labWeb/node_modules/autoprefixer/lib/transition.js create mode 100644 labWeb/node_modules/autoprefixer/lib/utils.js create mode 100644 labWeb/node_modules/autoprefixer/lib/value.js create mode 100644 labWeb/node_modules/autoprefixer/lib/vendor.js create mode 100644 labWeb/node_modules/autoprefixer/package.json create mode 100644 labWeb/node_modules/baseline-browser-mapping/LICENSE.txt create mode 100644 labWeb/node_modules/baseline-browser-mapping/README.md create mode 100755 labWeb/node_modules/baseline-browser-mapping/dist/cli.cjs create mode 100644 labWeb/node_modules/baseline-browser-mapping/dist/index.cjs create mode 100644 labWeb/node_modules/baseline-browser-mapping/dist/index.d.ts create mode 100644 labWeb/node_modules/baseline-browser-mapping/dist/index.js create mode 100644 labWeb/node_modules/baseline-browser-mapping/package.json create mode 100644 labWeb/node_modules/binary-extensions/binary-extensions.json create mode 100644 labWeb/node_modules/binary-extensions/binary-extensions.json.d.ts create mode 100644 labWeb/node_modules/binary-extensions/index.d.ts create mode 100644 labWeb/node_modules/binary-extensions/index.js create mode 100644 labWeb/node_modules/binary-extensions/license create mode 100644 labWeb/node_modules/binary-extensions/package.json create mode 100644 labWeb/node_modules/binary-extensions/readme.md create mode 100644 labWeb/node_modules/braces/LICENSE create mode 100644 labWeb/node_modules/braces/README.md create mode 100644 labWeb/node_modules/braces/index.js create mode 100644 labWeb/node_modules/braces/lib/compile.js create mode 100644 labWeb/node_modules/braces/lib/constants.js create mode 100644 labWeb/node_modules/braces/lib/expand.js create mode 100644 labWeb/node_modules/braces/lib/parse.js create mode 100644 labWeb/node_modules/braces/lib/stringify.js create mode 100644 labWeb/node_modules/braces/lib/utils.js create mode 100644 labWeb/node_modules/braces/package.json create mode 100644 labWeb/node_modules/browserslist/LICENSE create mode 100644 labWeb/node_modules/browserslist/README.md create mode 100644 labWeb/node_modules/browserslist/browser.js create mode 100755 labWeb/node_modules/browserslist/cli.js create mode 100644 labWeb/node_modules/browserslist/error.d.ts create mode 100644 labWeb/node_modules/browserslist/error.js create mode 100644 labWeb/node_modules/browserslist/index.d.ts create mode 100644 labWeb/node_modules/browserslist/index.js create mode 100644 labWeb/node_modules/browserslist/node.js create mode 100644 labWeb/node_modules/browserslist/package.json create mode 100644 labWeb/node_modules/browserslist/parse.js create mode 100644 labWeb/node_modules/camelcase-css/README.md create mode 100644 labWeb/node_modules/camelcase-css/index-es5.js create mode 100644 labWeb/node_modules/camelcase-css/index.js create mode 100644 labWeb/node_modules/camelcase-css/license create mode 100644 labWeb/node_modules/camelcase-css/package.json create mode 100644 labWeb/node_modules/caniuse-lite/LICENSE create mode 100644 labWeb/node_modules/caniuse-lite/README.md create mode 100644 labWeb/node_modules/caniuse-lite/data/agents.js create mode 100644 labWeb/node_modules/caniuse-lite/data/browserVersions.js create mode 100644 labWeb/node_modules/caniuse-lite/data/browsers.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/aac.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/abortcontroller.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/ac3-ec3.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/accelerometer.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/addeventlistener.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/alternate-stylesheet.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/ambient-light.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/apng.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/array-find-index.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/array-find.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/array-flat.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/array-includes.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/arrow-functions.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/asmjs.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/async-clipboard.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/async-functions.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/atob-btoa.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/audio-api.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/audio.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/audiotracks.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/autofocus.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/auxclick.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/av1.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/avif.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/background-attachment.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/background-clip-text.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/background-img-opts.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/background-position-x-y.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/background-repeat-round-space.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/background-sync.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/battery-status.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/beacon.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/beforeafterprint.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/bigint.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/blobbuilder.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/bloburls.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/border-image.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/border-radius.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/broadcastchannel.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/brotli.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/calc.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/canvas-blending.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/canvas-text.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/canvas.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/ch-unit.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/chacha20-poly1305.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/channel-messaging.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/childnode-remove.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/classlist.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/client-hints-dpr-width-viewport.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/clipboard.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/colr-v1.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/colr.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/comparedocumentposition.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/console-basic.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/console-time.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/const.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/constraint-validation.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/contenteditable.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/contentsecuritypolicy.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/contentsecuritypolicy2.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/cookie-store-api.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/cors.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/createimagebitmap.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/credential-management.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/cross-document-view-transitions.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/cryptography.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-all.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-anchor-positioning.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-animation.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-any-link.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-appearance.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-at-counter-style.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-autofill.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-backdrop-filter.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-background-offsets.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-backgroundblendmode.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-boxdecorationbreak.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-boxshadow.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-canvas.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-caret-color.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-cascade-layers.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-cascade-scope.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-case-insensitive.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-clip-path.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-color-adjust.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-color-function.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-conic-gradients.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-container-queries-style.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-container-queries.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-container-query-units.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-containment.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-content-visibility.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-counters.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-crisp-edges.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-cross-fade.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-default-pseudo.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-descendant-gtgt.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-deviceadaptation.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-dir-pseudo.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-display-contents.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-element-function.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-env-function.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-exclusions.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-featurequeries.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-file-selector-button.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-filter-function.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-filters.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-first-letter.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-first-line.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-fixed.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-focus-visible.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-focus-within.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-font-palette.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-font-rendering-controls.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-font-stretch.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-gencontent.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-gradients.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-grid-animation.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-grid-lanes.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-grid.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-hanging-punctuation.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-has.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-hyphens.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-if.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-image-orientation.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-image-set.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-in-out-of-range.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-indeterminate-pseudo.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-initial-letter.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-initial-value.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-lch-lab.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-letter-spacing.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-line-clamp.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-logical-props.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-marker-pseudo.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-masks.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-matches-pseudo.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-math-functions.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-media-interaction.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-media-range-syntax.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-media-resolution.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-media-scripting.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-mediaqueries.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-mixblendmode.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-module-scripts.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-motion-paths.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-namespaces.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-nesting.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-not-sel-list.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-nth-child-of.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-opacity.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-optional-pseudo.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-overflow-anchor.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-overflow-overlay.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-overflow.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-overscroll-behavior.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-page-break.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-paged-media.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-paint-api.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-placeholder-shown.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-placeholder.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-print-color-adjust.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-read-only-write.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-rebeccapurple.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-reflections.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-regions.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-relative-colors.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-repeating-gradients.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-resize.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-revert-value.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-rrggbbaa.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-scroll-behavior.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-scrollbar.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-sel2.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-sel3.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-selection.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-shapes.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-snappoints.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-sticky.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-subgrid.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-supports-api.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-table.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-text-align-last.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-text-box-trim.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-text-indent.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-text-justify.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-text-orientation.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-text-spacing.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-text-wrap-balance.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-textshadow.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-touch-action.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-transitions.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-unicode-bidi.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-unset-value.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-variables.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-when-else.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-widows-orphans.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-width-stretch.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-writing-mode.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css-zoom.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css3-attr.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css3-boxsizing.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css3-colors.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css3-cursors-grab.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css3-cursors-newer.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css3-cursors.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/css3-tabsize.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/currentcolor.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/custom-elements.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/custom-elementsv1.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/customevent.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/customizable-select.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/datalist.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/dataset.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/datauri.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/date-tolocaledatestring.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/declarative-shadow-dom.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/decorators.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/details.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/deviceorientation.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/devicepixelratio.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/dialog.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/dispatchevent.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/dnssec.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/do-not-track.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/document-currentscript.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/document-evaluate-xpath.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/document-execcommand.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/document-policy.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/document-scrollingelement.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/documenthead.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/dom-manip-convenience.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/dom-range.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/domcontentloaded.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/dommatrix.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/download.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/dragndrop.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/element-closest.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/element-from-point.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/element-scroll-methods.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/eme.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/eot.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/es5.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/es6-class.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/es6-generators.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/es6-module-dynamic-import.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/es6-module.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/es6-number.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/es6-string-includes.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/es6.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/eventsource.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/extended-system-fonts.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/feature-policy.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/fetch.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/fieldset-disabled.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/fileapi.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/filereader.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/filereadersync.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/filesystem.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/flac.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/flexbox-gap.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/flexbox.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/flow-root.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/focusin-focusout-events.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/font-family-system-ui.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/font-feature.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/font-kerning.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/font-loading.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/font-size-adjust.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/font-smooth.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/font-unicode-range.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/font-variant-alternates.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/font-variant-numeric.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/fontface.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/form-attribute.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/form-submit-attributes.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/form-validation.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/forms.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/fullscreen.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/gamepad.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/geolocation.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/getboundingclientrect.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/getcomputedstyle.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/getelementsbyclassname.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/getrandomvalues.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/gyroscope.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/hardwareconcurrency.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/hashchange.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/heif.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/hevc.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/hidden.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/high-resolution-time.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/history.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/html-media-capture.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/html5semantic.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/http-live-streaming.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/http2.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/http3.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/iframe-sandbox.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/iframe-seamless.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/iframe-srcdoc.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/imagecapture.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/ime.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/img-naturalwidth-naturalheight.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/import-maps.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/imports.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/indeterminate-checkbox.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/indexeddb.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/indexeddb2.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/inline-block.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/innertext.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-autocomplete-onoff.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-color.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-datetime.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-email-tel-url.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-event.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-file-accept.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-file-directory.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-file-multiple.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-inputmode.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-minlength.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-number.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-pattern.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-placeholder.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-range.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-search.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/input-selection.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/insert-adjacent.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/insertadjacenthtml.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/internationalization.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/intersectionobserver-v2.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/intersectionobserver.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/intl-pluralrules.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/intrinsic-width.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/jpeg2000.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/jpegxl.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/jpegxr.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/js-regexp-lookbehind.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/json.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/justify-content-space-evenly.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/kerning-pairs-ligatures.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/keyboardevent-charcode.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/keyboardevent-code.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/keyboardevent-getmodifierstate.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/keyboardevent-key.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/keyboardevent-location.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/keyboardevent-which.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/lazyload.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/let.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/link-icon-png.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/link-icon-svg.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/link-rel-dns-prefetch.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/link-rel-modulepreload.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/link-rel-preconnect.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/link-rel-prefetch.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/link-rel-preload.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/link-rel-prerender.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/loading-lazy-attr.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/loading-lazy-media.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/localecompare.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/magnetometer.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/matchesselector.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/matchmedia.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mathml.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/maxlength.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mdn-css-backdrop-pseudo-element.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate-override.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-plaintext.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mdn-text-decoration-color.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mdn-text-decoration-line.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mdn-text-decoration-shorthand.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mdn-text-decoration-style.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/media-fragments.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mediacapture-fromelement.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mediarecorder.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mediasource.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/menu.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/meta-theme-color.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/meter.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/midi.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/minmaxwh.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mp3.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mpeg-dash.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mpeg4.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/multibackgrounds.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/multicolumn.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mutation-events.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/mutationobserver.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/namevalue-storage.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/native-filesystem-api.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/nav-timing.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/netinfo.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/notifications.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/object-entries.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/object-fit.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/object-observe.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/object-values.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/objectrtc.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/offline-apps.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/offscreencanvas.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/ogg-vorbis.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/ogv.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/ol-reversed.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/once-event-listener.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/online-status.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/opus.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/orientation-sensor.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/outline.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/pad-start-end.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/page-transition-events.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/pagevisibility.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/passive-event-listener.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/passkeys.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/passwordrules.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/path2d.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/payment-request.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/pdf-viewer.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/permissions-api.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/permissions-policy.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/picture-in-picture.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/picture.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/ping.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/png-alpha.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/pointer-events.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/pointer.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/pointerlock.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/portals.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/prefers-color-scheme.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/prefers-reduced-motion.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/progress.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/promise-finally.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/promises.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/proximity.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/proxy.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/publickeypinning.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/push-api.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/queryselector.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/readonly-attr.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/referrer-policy.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/registerprotocolhandler.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/rel-noopener.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/rel-noreferrer.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/rellist.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/rem.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/requestanimationframe.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/requestidlecallback.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/resizeobserver.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/resource-timing.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/rest-parameters.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/rtcpeerconnection.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/ruby.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/run-in.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/same-site-cookie-attribute.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/screen-orientation.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/script-async.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/script-defer.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/scrollintoview.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/scrollintoviewifneeded.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/sdch.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/selection-api.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/server-timing.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/serviceworkers.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/setimmediate.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/shadowdom.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/shadowdomv1.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/sharedarraybuffer.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/sharedworkers.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/sni.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/spdy.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/speech-recognition.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/speech-synthesis.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/spellcheck-attribute.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/sql-storage.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/srcset.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/stream.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/streams.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/stricttransportsecurity.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/style-scoped.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/subresource-bundling.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/subresource-integrity.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/svg-css.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/svg-filters.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/svg-fonts.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/svg-fragment.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/svg-html.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/svg-html5.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/svg-img.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/svg-smil.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/svg.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/sxg.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/tabindex-attr.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/template-literals.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/template.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/temporal.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/testfeat.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/text-decoration.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/text-emphasis.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/text-overflow.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/text-size-adjust.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/text-stroke.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/textcontent.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/textencoder.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/tls1-1.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/tls1-2.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/tls1-3.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/touch.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/transforms2d.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/transforms3d.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/trusted-types.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/ttf.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/typedarrays.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/u2f.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/unhandledrejection.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/upgradeinsecurerequests.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/url-scroll-to-text-fragment.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/url.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/urlsearchparams.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/use-strict.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/user-select-none.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/user-timing.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/variable-fonts.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/vector-effect.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/vibration.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/video.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/videotracks.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/view-transitions.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/viewport-unit-variants.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/viewport-units.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wai-aria.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wake-lock.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-bigint.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-bulk-memory.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-extended-const.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-gc.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-multi-memory.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-multi-value.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-mutable-globals.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-nontrapping-fptoint.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-reference-types.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-relaxed-simd.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-signext.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-simd.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-tail-calls.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm-threads.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wasm.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wav.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wbr-element.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/web-animation.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/web-app-manifest.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/web-bluetooth.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/web-serial.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/web-share.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webauthn.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webcodecs.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webgl.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webgl2.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webgpu.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webhid.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webkit-user-drag.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webm.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webnfc.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webp.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/websockets.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webtransport.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webusb.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webvr.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webvtt.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webworkers.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/webxr.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/will-change.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/woff.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/woff2.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/word-break.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/wordwrap.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/x-doc-messaging.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/x-frame-options.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/xhr2.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/xhtml.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/xhtmlsmil.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/xml-serializer.js create mode 100644 labWeb/node_modules/caniuse-lite/data/features/zstd.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AD.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AF.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AI.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AL.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AO.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AS.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AT.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AU.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AW.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AX.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/AZ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BA.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BB.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BD.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BF.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BH.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BI.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BJ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BN.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BO.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BS.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BT.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BW.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BY.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/BZ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CA.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CD.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CF.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CH.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CI.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CK.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CL.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CN.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CO.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CU.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CV.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CX.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CY.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/CZ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/DE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/DJ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/DK.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/DM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/DO.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/DZ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/EC.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/EE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/EG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/ER.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/ES.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/ET.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/FI.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/FJ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/FK.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/FM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/FO.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/FR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GA.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GB.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GD.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GF.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GH.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GI.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GL.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GN.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GP.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GQ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GT.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GU.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GW.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/GY.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/HK.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/HN.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/HR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/HT.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/HU.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/ID.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/IE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/IL.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/IM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/IN.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/IQ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/IR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/IS.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/IT.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/JE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/JM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/JO.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/JP.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/KE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/KG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/KH.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/KI.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/KM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/KN.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/KP.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/KR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/KW.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/KY.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/KZ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/LA.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/LB.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/LC.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/LI.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/LK.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/LR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/LS.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/LT.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/LU.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/LV.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/LY.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MA.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MC.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MD.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/ME.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MH.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MK.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/ML.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MN.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MO.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MP.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MQ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MS.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MT.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MU.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MV.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MW.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MX.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MY.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/MZ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/NA.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/NC.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/NE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/NF.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/NG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/NI.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/NL.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/NO.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/NP.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/NR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/NU.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/NZ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/OM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PA.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PF.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PH.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PK.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PL.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PN.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PS.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PT.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PW.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/PY.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/QA.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/RE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/RO.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/RS.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/RU.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/RW.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SA.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SB.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SC.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SD.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SH.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SI.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SK.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SL.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SN.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SO.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/ST.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SV.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SY.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/SZ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TC.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TD.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TH.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TJ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TL.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TN.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TO.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TR.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TT.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TV.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TW.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/TZ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/UA.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/UG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/US.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/UY.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/UZ.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/VA.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/VC.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/VE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/VG.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/VI.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/VN.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/VU.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/WF.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/WS.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/YE.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/YT.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/ZA.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/ZM.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/ZW.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/alt-af.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/alt-an.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/alt-as.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/alt-eu.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/alt-na.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/alt-oc.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/alt-sa.js create mode 100644 labWeb/node_modules/caniuse-lite/data/regions/alt-ww.js create mode 100644 labWeb/node_modules/caniuse-lite/dist/lib/statuses.js create mode 100644 labWeb/node_modules/caniuse-lite/dist/lib/supported.js create mode 100644 labWeb/node_modules/caniuse-lite/dist/unpacker/agents.js create mode 100644 labWeb/node_modules/caniuse-lite/dist/unpacker/browserVersions.js create mode 100644 labWeb/node_modules/caniuse-lite/dist/unpacker/browsers.js create mode 100644 labWeb/node_modules/caniuse-lite/dist/unpacker/feature.js create mode 100644 labWeb/node_modules/caniuse-lite/dist/unpacker/features.js create mode 100644 labWeb/node_modules/caniuse-lite/dist/unpacker/index.js create mode 100644 labWeb/node_modules/caniuse-lite/dist/unpacker/region.js create mode 100644 labWeb/node_modules/caniuse-lite/package.json create mode 100644 labWeb/node_modules/chokidar/LICENSE create mode 100644 labWeb/node_modules/chokidar/README.md create mode 100644 labWeb/node_modules/chokidar/index.js create mode 100644 labWeb/node_modules/chokidar/lib/constants.js create mode 100644 labWeb/node_modules/chokidar/lib/fsevents-handler.js create mode 100644 labWeb/node_modules/chokidar/lib/nodefs-handler.js create mode 100644 labWeb/node_modules/chokidar/node_modules/glob-parent/CHANGELOG.md create mode 100644 labWeb/node_modules/chokidar/node_modules/glob-parent/LICENSE create mode 100644 labWeb/node_modules/chokidar/node_modules/glob-parent/README.md create mode 100644 labWeb/node_modules/chokidar/node_modules/glob-parent/index.js create mode 100644 labWeb/node_modules/chokidar/node_modules/glob-parent/package.json create mode 100644 labWeb/node_modules/chokidar/package.json create mode 100644 labWeb/node_modules/chokidar/types/index.d.ts create mode 100644 labWeb/node_modules/commander/CHANGELOG.md create mode 100644 labWeb/node_modules/commander/LICENSE create mode 100644 labWeb/node_modules/commander/Readme.md create mode 100644 labWeb/node_modules/commander/index.js create mode 100644 labWeb/node_modules/commander/package.json create mode 100644 labWeb/node_modules/commander/typings/index.d.ts create mode 100644 labWeb/node_modules/cssesc/LICENSE-MIT.txt create mode 100644 labWeb/node_modules/cssesc/README.md create mode 100755 labWeb/node_modules/cssesc/bin/cssesc create mode 100644 labWeb/node_modules/cssesc/cssesc.js create mode 100644 labWeb/node_modules/cssesc/man/cssesc.1 create mode 100644 labWeb/node_modules/cssesc/package.json create mode 100644 labWeb/node_modules/didyoumean/LICENSE create mode 100644 labWeb/node_modules/didyoumean/README.md create mode 100644 labWeb/node_modules/didyoumean/didYouMean-1.2.1.js create mode 100644 labWeb/node_modules/didyoumean/didYouMean-1.2.1.min.js create mode 100755 labWeb/node_modules/didyoumean/package.json create mode 100644 labWeb/node_modules/dlv/README.md create mode 100644 labWeb/node_modules/dlv/dist/dlv.es.js create mode 100644 labWeb/node_modules/dlv/dist/dlv.es.js.map create mode 100644 labWeb/node_modules/dlv/dist/dlv.js create mode 100644 labWeb/node_modules/dlv/dist/dlv.js.map create mode 100644 labWeb/node_modules/dlv/dist/dlv.umd.js create mode 100644 labWeb/node_modules/dlv/dist/dlv.umd.js.map create mode 100644 labWeb/node_modules/dlv/index.js create mode 100644 labWeb/node_modules/dlv/package.json create mode 100644 labWeb/node_modules/electron-to-chromium/LICENSE create mode 100644 labWeb/node_modules/electron-to-chromium/README.md create mode 100644 labWeb/node_modules/electron-to-chromium/chromium-versions.js create mode 100644 labWeb/node_modules/electron-to-chromium/chromium-versions.json create mode 100644 labWeb/node_modules/electron-to-chromium/full-chromium-versions.js create mode 100644 labWeb/node_modules/electron-to-chromium/full-chromium-versions.json create mode 100644 labWeb/node_modules/electron-to-chromium/full-versions.js create mode 100644 labWeb/node_modules/electron-to-chromium/full-versions.json create mode 100644 labWeb/node_modules/electron-to-chromium/index.js create mode 100644 labWeb/node_modules/electron-to-chromium/package.json create mode 100644 labWeb/node_modules/electron-to-chromium/versions.js create mode 100644 labWeb/node_modules/electron-to-chromium/versions.json create mode 100644 labWeb/node_modules/es-errors/.eslintrc create mode 100644 labWeb/node_modules/es-errors/.github/FUNDING.yml create mode 100644 labWeb/node_modules/es-errors/CHANGELOG.md create mode 100644 labWeb/node_modules/es-errors/LICENSE create mode 100644 labWeb/node_modules/es-errors/README.md create mode 100644 labWeb/node_modules/es-errors/eval.d.ts create mode 100644 labWeb/node_modules/es-errors/eval.js create mode 100644 labWeb/node_modules/es-errors/index.d.ts create mode 100644 labWeb/node_modules/es-errors/index.js create mode 100644 labWeb/node_modules/es-errors/package.json create mode 100644 labWeb/node_modules/es-errors/range.d.ts create mode 100644 labWeb/node_modules/es-errors/range.js create mode 100644 labWeb/node_modules/es-errors/ref.d.ts create mode 100644 labWeb/node_modules/es-errors/ref.js create mode 100644 labWeb/node_modules/es-errors/syntax.d.ts create mode 100644 labWeb/node_modules/es-errors/syntax.js create mode 100644 labWeb/node_modules/es-errors/test/index.js create mode 100644 labWeb/node_modules/es-errors/tsconfig.json create mode 100644 labWeb/node_modules/es-errors/type.d.ts create mode 100644 labWeb/node_modules/es-errors/type.js create mode 100644 labWeb/node_modules/es-errors/uri.d.ts create mode 100644 labWeb/node_modules/es-errors/uri.js create mode 100644 labWeb/node_modules/escalade/dist/index.js create mode 100644 labWeb/node_modules/escalade/dist/index.mjs create mode 100644 labWeb/node_modules/escalade/index.d.mts create mode 100644 labWeb/node_modules/escalade/index.d.ts create mode 100644 labWeb/node_modules/escalade/license create mode 100644 labWeb/node_modules/escalade/package.json create mode 100644 labWeb/node_modules/escalade/readme.md create mode 100644 labWeb/node_modules/escalade/sync/index.d.mts create mode 100644 labWeb/node_modules/escalade/sync/index.d.ts create mode 100644 labWeb/node_modules/escalade/sync/index.js create mode 100644 labWeb/node_modules/escalade/sync/index.mjs create mode 100644 labWeb/node_modules/fast-glob/LICENSE create mode 100644 labWeb/node_modules/fast-glob/README.md create mode 100644 labWeb/node_modules/fast-glob/node_modules/glob-parent/CHANGELOG.md create mode 100644 labWeb/node_modules/fast-glob/node_modules/glob-parent/LICENSE create mode 100644 labWeb/node_modules/fast-glob/node_modules/glob-parent/README.md create mode 100644 labWeb/node_modules/fast-glob/node_modules/glob-parent/index.js create mode 100644 labWeb/node_modules/fast-glob/node_modules/glob-parent/package.json create mode 100644 labWeb/node_modules/fast-glob/out/index.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/index.js create mode 100644 labWeb/node_modules/fast-glob/out/managers/tasks.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/managers/tasks.js create mode 100644 labWeb/node_modules/fast-glob/out/providers/async.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/providers/async.js create mode 100644 labWeb/node_modules/fast-glob/out/providers/filters/deep.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/providers/filters/deep.js create mode 100644 labWeb/node_modules/fast-glob/out/providers/filters/entry.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/providers/filters/entry.js create mode 100644 labWeb/node_modules/fast-glob/out/providers/filters/error.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/providers/filters/error.js create mode 100644 labWeb/node_modules/fast-glob/out/providers/matchers/matcher.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/providers/matchers/matcher.js create mode 100644 labWeb/node_modules/fast-glob/out/providers/matchers/partial.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/providers/matchers/partial.js create mode 100644 labWeb/node_modules/fast-glob/out/providers/provider.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/providers/provider.js create mode 100644 labWeb/node_modules/fast-glob/out/providers/stream.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/providers/stream.js create mode 100644 labWeb/node_modules/fast-glob/out/providers/sync.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/providers/sync.js create mode 100644 labWeb/node_modules/fast-glob/out/providers/transformers/entry.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/providers/transformers/entry.js create mode 100644 labWeb/node_modules/fast-glob/out/readers/async.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/readers/async.js create mode 100644 labWeb/node_modules/fast-glob/out/readers/reader.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/readers/reader.js create mode 100644 labWeb/node_modules/fast-glob/out/readers/stream.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/readers/stream.js create mode 100644 labWeb/node_modules/fast-glob/out/readers/sync.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/readers/sync.js create mode 100644 labWeb/node_modules/fast-glob/out/settings.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/settings.js create mode 100644 labWeb/node_modules/fast-glob/out/types/index.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/types/index.js create mode 100644 labWeb/node_modules/fast-glob/out/utils/array.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/utils/array.js create mode 100644 labWeb/node_modules/fast-glob/out/utils/errno.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/utils/errno.js create mode 100644 labWeb/node_modules/fast-glob/out/utils/fs.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/utils/fs.js create mode 100644 labWeb/node_modules/fast-glob/out/utils/index.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/utils/index.js create mode 100644 labWeb/node_modules/fast-glob/out/utils/path.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/utils/path.js create mode 100644 labWeb/node_modules/fast-glob/out/utils/pattern.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/utils/pattern.js create mode 100644 labWeb/node_modules/fast-glob/out/utils/stream.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/utils/stream.js create mode 100644 labWeb/node_modules/fast-glob/out/utils/string.d.ts create mode 100644 labWeb/node_modules/fast-glob/out/utils/string.js create mode 100644 labWeb/node_modules/fast-glob/package.json create mode 100644 labWeb/node_modules/fastq/LICENSE create mode 100644 labWeb/node_modules/fastq/README.md create mode 100644 labWeb/node_modules/fastq/SECURITY.md create mode 100644 labWeb/node_modules/fastq/bench.js create mode 100644 labWeb/node_modules/fastq/eslint.config.js create mode 100644 labWeb/node_modules/fastq/example.js create mode 100644 labWeb/node_modules/fastq/example.mjs create mode 100644 labWeb/node_modules/fastq/index.d.ts create mode 100644 labWeb/node_modules/fastq/package.json create mode 100644 labWeb/node_modules/fastq/queue.js create mode 100644 labWeb/node_modules/fastq/test/example.ts create mode 100644 labWeb/node_modules/fastq/test/promise.js create mode 100644 labWeb/node_modules/fastq/test/test.js create mode 100644 labWeb/node_modules/fastq/test/tsconfig.json create mode 100644 labWeb/node_modules/fill-range/LICENSE create mode 100644 labWeb/node_modules/fill-range/README.md create mode 100644 labWeb/node_modules/fill-range/index.js create mode 100644 labWeb/node_modules/fill-range/package.json create mode 100644 labWeb/node_modules/fraction.js/CHANGELOG.md create mode 100644 labWeb/node_modules/fraction.js/LICENSE create mode 100644 labWeb/node_modules/fraction.js/README.md create mode 100644 labWeb/node_modules/fraction.js/dist/fraction.js create mode 100644 labWeb/node_modules/fraction.js/dist/fraction.min.js create mode 100644 labWeb/node_modules/fraction.js/dist/fraction.mjs create mode 100644 labWeb/node_modules/fraction.js/examples/angles.js create mode 100644 labWeb/node_modules/fraction.js/examples/approx.js create mode 100644 labWeb/node_modules/fraction.js/examples/egyptian.js create mode 100644 labWeb/node_modules/fraction.js/examples/hesse-convergence.js create mode 100644 labWeb/node_modules/fraction.js/examples/integrate.js create mode 100644 labWeb/node_modules/fraction.js/examples/ratio-chain.js create mode 100644 labWeb/node_modules/fraction.js/examples/rational-pow.js create mode 100644 labWeb/node_modules/fraction.js/examples/tape-measure.js create mode 100644 labWeb/node_modules/fraction.js/examples/toFraction.js create mode 100644 labWeb/node_modules/fraction.js/examples/valueOfPi.js create mode 100644 labWeb/node_modules/fraction.js/fraction.d.mts create mode 100644 labWeb/node_modules/fraction.js/fraction.d.ts create mode 100644 labWeb/node_modules/fraction.js/package.json create mode 100644 labWeb/node_modules/fraction.js/src/fraction.js create mode 100644 labWeb/node_modules/fraction.js/tests/fraction.test.js create mode 100644 labWeb/node_modules/function-bind/.eslintrc create mode 100644 labWeb/node_modules/function-bind/.github/FUNDING.yml create mode 100644 labWeb/node_modules/function-bind/.github/SECURITY.md create mode 100644 labWeb/node_modules/function-bind/.nycrc create mode 100644 labWeb/node_modules/function-bind/CHANGELOG.md create mode 100644 labWeb/node_modules/function-bind/LICENSE create mode 100644 labWeb/node_modules/function-bind/README.md create mode 100644 labWeb/node_modules/function-bind/implementation.js create mode 100644 labWeb/node_modules/function-bind/index.js create mode 100644 labWeb/node_modules/function-bind/package.json create mode 100644 labWeb/node_modules/function-bind/test/.eslintrc create mode 100644 labWeb/node_modules/function-bind/test/index.js create mode 100644 labWeb/node_modules/glob-parent/LICENSE create mode 100644 labWeb/node_modules/glob-parent/README.md create mode 100644 labWeb/node_modules/glob-parent/index.js create mode 100644 labWeb/node_modules/glob-parent/package.json create mode 100644 labWeb/node_modules/hasown/.github/FUNDING.yml create mode 100644 labWeb/node_modules/hasown/.nycrc create mode 100644 labWeb/node_modules/hasown/CHANGELOG.md create mode 100644 labWeb/node_modules/hasown/LICENSE create mode 100644 labWeb/node_modules/hasown/README.md create mode 100644 labWeb/node_modules/hasown/eslint.config.mjs create mode 100644 labWeb/node_modules/hasown/index.d.ts create mode 100644 labWeb/node_modules/hasown/index.js create mode 100644 labWeb/node_modules/hasown/package.json create mode 100644 labWeb/node_modules/hasown/tsconfig.json create mode 100644 labWeb/node_modules/is-binary-path/index.d.ts create mode 100644 labWeb/node_modules/is-binary-path/index.js create mode 100644 labWeb/node_modules/is-binary-path/license create mode 100644 labWeb/node_modules/is-binary-path/package.json create mode 100644 labWeb/node_modules/is-binary-path/readme.md create mode 100644 labWeb/node_modules/is-core-module/.eslintrc create mode 100644 labWeb/node_modules/is-core-module/.nycrc create mode 100644 labWeb/node_modules/is-core-module/CHANGELOG.md create mode 100644 labWeb/node_modules/is-core-module/LICENSE create mode 100644 labWeb/node_modules/is-core-module/README.md create mode 100644 labWeb/node_modules/is-core-module/core.json create mode 100644 labWeb/node_modules/is-core-module/index.js create mode 100644 labWeb/node_modules/is-core-module/package.json create mode 100644 labWeb/node_modules/is-core-module/test/index.js create mode 100644 labWeb/node_modules/is-extglob/LICENSE create mode 100644 labWeb/node_modules/is-extglob/README.md create mode 100644 labWeb/node_modules/is-extglob/index.js create mode 100644 labWeb/node_modules/is-extglob/package.json create mode 100644 labWeb/node_modules/is-glob/LICENSE create mode 100644 labWeb/node_modules/is-glob/README.md create mode 100644 labWeb/node_modules/is-glob/index.js create mode 100644 labWeb/node_modules/is-glob/package.json create mode 100644 labWeb/node_modules/is-number/LICENSE create mode 100644 labWeb/node_modules/is-number/README.md create mode 100644 labWeb/node_modules/is-number/index.js create mode 100644 labWeb/node_modules/is-number/package.json create mode 100644 labWeb/node_modules/jiti/LICENSE create mode 100644 labWeb/node_modules/jiti/README.md create mode 100755 labWeb/node_modules/jiti/bin/jiti.js create mode 100644 labWeb/node_modules/jiti/dist/babel.d.ts create mode 100644 labWeb/node_modules/jiti/dist/babel.js create mode 100644 labWeb/node_modules/jiti/dist/jiti.d.ts create mode 100644 labWeb/node_modules/jiti/dist/jiti.js create mode 100644 labWeb/node_modules/jiti/dist/plugins/babel-plugin-transform-import-meta.d.ts create mode 100644 labWeb/node_modules/jiti/dist/plugins/import-meta-env.d.ts create mode 100644 labWeb/node_modules/jiti/dist/types.d.ts create mode 100644 labWeb/node_modules/jiti/dist/utils.d.ts create mode 100644 labWeb/node_modules/jiti/lib/index.js create mode 100644 labWeb/node_modules/jiti/package.json create mode 100644 labWeb/node_modules/jiti/register.js create mode 100644 labWeb/node_modules/lilconfig/LICENSE create mode 100644 labWeb/node_modules/lilconfig/package.json create mode 100644 labWeb/node_modules/lilconfig/readme.md create mode 100644 labWeb/node_modules/lilconfig/src/index.d.ts create mode 100644 labWeb/node_modules/lilconfig/src/index.js create mode 100644 labWeb/node_modules/lines-and-columns/LICENSE create mode 100644 labWeb/node_modules/lines-and-columns/README.md create mode 100644 labWeb/node_modules/lines-and-columns/build/index.d.ts create mode 100644 labWeb/node_modules/lines-and-columns/build/index.js create mode 100644 labWeb/node_modules/lines-and-columns/package.json create mode 100644 labWeb/node_modules/merge2/LICENSE create mode 100644 labWeb/node_modules/merge2/README.md create mode 100644 labWeb/node_modules/merge2/index.js create mode 100644 labWeb/node_modules/merge2/package.json create mode 100755 labWeb/node_modules/micromatch/LICENSE create mode 100644 labWeb/node_modules/micromatch/README.md create mode 100644 labWeb/node_modules/micromatch/index.js create mode 100644 labWeb/node_modules/micromatch/package.json create mode 100644 labWeb/node_modules/mz/HISTORY.md create mode 100644 labWeb/node_modules/mz/LICENSE create mode 100644 labWeb/node_modules/mz/README.md create mode 100644 labWeb/node_modules/mz/child_process.js create mode 100644 labWeb/node_modules/mz/crypto.js create mode 100644 labWeb/node_modules/mz/dns.js create mode 100644 labWeb/node_modules/mz/fs.js create mode 100644 labWeb/node_modules/mz/index.js create mode 100644 labWeb/node_modules/mz/package.json create mode 100644 labWeb/node_modules/mz/readline.js create mode 100644 labWeb/node_modules/mz/zlib.js create mode 100644 labWeb/node_modules/nanoid/LICENSE create mode 100644 labWeb/node_modules/nanoid/README.md create mode 100644 labWeb/node_modules/nanoid/async/index.browser.cjs create mode 100644 labWeb/node_modules/nanoid/async/index.browser.js create mode 100644 labWeb/node_modules/nanoid/async/index.cjs create mode 100644 labWeb/node_modules/nanoid/async/index.d.ts create mode 100644 labWeb/node_modules/nanoid/async/index.js create mode 100644 labWeb/node_modules/nanoid/async/index.native.js create mode 100644 labWeb/node_modules/nanoid/async/package.json create mode 100755 labWeb/node_modules/nanoid/bin/nanoid.cjs create mode 100644 labWeb/node_modules/nanoid/index.browser.cjs create mode 100644 labWeb/node_modules/nanoid/index.browser.js create mode 100644 labWeb/node_modules/nanoid/index.cjs create mode 100644 labWeb/node_modules/nanoid/index.d.cts create mode 100644 labWeb/node_modules/nanoid/index.d.ts create mode 100644 labWeb/node_modules/nanoid/index.js create mode 100644 labWeb/node_modules/nanoid/nanoid.js create mode 100644 labWeb/node_modules/nanoid/non-secure/index.cjs create mode 100644 labWeb/node_modules/nanoid/non-secure/index.d.ts create mode 100644 labWeb/node_modules/nanoid/non-secure/index.js create mode 100644 labWeb/node_modules/nanoid/non-secure/package.json create mode 100644 labWeb/node_modules/nanoid/package.json create mode 100644 labWeb/node_modules/nanoid/url-alphabet/index.cjs create mode 100644 labWeb/node_modules/nanoid/url-alphabet/index.js create mode 100644 labWeb/node_modules/nanoid/url-alphabet/package.json create mode 100644 labWeb/node_modules/node-releases/LICENSE create mode 100644 labWeb/node_modules/node-releases/README.md create mode 100644 labWeb/node_modules/node-releases/data/processed/envs.json create mode 100644 labWeb/node_modules/node-releases/data/release-schedule/release-schedule.json create mode 100644 labWeb/node_modules/node-releases/package.json create mode 100644 labWeb/node_modules/normalize-path/LICENSE create mode 100644 labWeb/node_modules/normalize-path/README.md create mode 100644 labWeb/node_modules/normalize-path/index.js create mode 100644 labWeb/node_modules/normalize-path/package.json create mode 100644 labWeb/node_modules/object-assign/index.js create mode 100644 labWeb/node_modules/object-assign/license create mode 100644 labWeb/node_modules/object-assign/package.json create mode 100644 labWeb/node_modules/object-assign/readme.md create mode 100644 labWeb/node_modules/object-hash/LICENSE create mode 100644 labWeb/node_modules/object-hash/dist/object_hash.js create mode 100644 labWeb/node_modules/object-hash/index.js create mode 100644 labWeb/node_modules/object-hash/package.json create mode 100644 labWeb/node_modules/object-hash/readme.markdown create mode 100644 labWeb/node_modules/path-parse/LICENSE create mode 100644 labWeb/node_modules/path-parse/README.md create mode 100644 labWeb/node_modules/path-parse/index.js create mode 100644 labWeb/node_modules/path-parse/package.json create mode 100644 labWeb/node_modules/picocolors/LICENSE create mode 100644 labWeb/node_modules/picocolors/README.md create mode 100644 labWeb/node_modules/picocolors/package.json create mode 100644 labWeb/node_modules/picocolors/picocolors.browser.js create mode 100644 labWeb/node_modules/picocolors/picocolors.d.ts create mode 100644 labWeb/node_modules/picocolors/picocolors.js create mode 100644 labWeb/node_modules/picocolors/types.d.ts create mode 100644 labWeb/node_modules/picomatch/LICENSE create mode 100644 labWeb/node_modules/picomatch/README.md create mode 100644 labWeb/node_modules/picomatch/index.js create mode 100644 labWeb/node_modules/picomatch/lib/constants.js create mode 100644 labWeb/node_modules/picomatch/lib/parse.js create mode 100644 labWeb/node_modules/picomatch/lib/picomatch.js create mode 100644 labWeb/node_modules/picomatch/lib/scan.js create mode 100644 labWeb/node_modules/picomatch/lib/utils.js create mode 100644 labWeb/node_modules/picomatch/package.json create mode 100644 labWeb/node_modules/pify/index.js create mode 100644 labWeb/node_modules/pify/license create mode 100644 labWeb/node_modules/pify/package.json create mode 100644 labWeb/node_modules/pify/readme.md create mode 100644 labWeb/node_modules/pirates/LICENSE create mode 100644 labWeb/node_modules/pirates/README.md create mode 100644 labWeb/node_modules/pirates/index.d.ts create mode 100644 labWeb/node_modules/pirates/lib/index.js create mode 100644 labWeb/node_modules/pirates/package.json create mode 100755 labWeb/node_modules/postcss-import/LICENSE create mode 100644 labWeb/node_modules/postcss-import/README.md create mode 100755 labWeb/node_modules/postcss-import/index.js create mode 100644 labWeb/node_modules/postcss-import/lib/assign-layer-names.js create mode 100644 labWeb/node_modules/postcss-import/lib/data-url.js create mode 100644 labWeb/node_modules/postcss-import/lib/join-layer.js create mode 100644 labWeb/node_modules/postcss-import/lib/join-media.js create mode 100644 labWeb/node_modules/postcss-import/lib/load-content.js create mode 100644 labWeb/node_modules/postcss-import/lib/parse-statements.js create mode 100644 labWeb/node_modules/postcss-import/lib/process-content.js create mode 100644 labWeb/node_modules/postcss-import/lib/resolve-id.js create mode 100644 labWeb/node_modules/postcss-import/package.json create mode 100644 labWeb/node_modules/postcss-js/LICENSE create mode 100644 labWeb/node_modules/postcss-js/README.md create mode 100644 labWeb/node_modules/postcss-js/async.js create mode 100644 labWeb/node_modules/postcss-js/index.js create mode 100644 labWeb/node_modules/postcss-js/index.mjs create mode 100644 labWeb/node_modules/postcss-js/objectifier.js create mode 100644 labWeb/node_modules/postcss-js/package.json create mode 100644 labWeb/node_modules/postcss-js/parser.js create mode 100644 labWeb/node_modules/postcss-js/process-result.js create mode 100644 labWeb/node_modules/postcss-js/sync.js create mode 100644 labWeb/node_modules/postcss-load-config/LICENSE create mode 100644 labWeb/node_modules/postcss-load-config/README.md create mode 100644 labWeb/node_modules/postcss-load-config/package.json create mode 100644 labWeb/node_modules/postcss-load-config/src/index.d.ts create mode 100644 labWeb/node_modules/postcss-load-config/src/index.js create mode 100644 labWeb/node_modules/postcss-load-config/src/options.js create mode 100644 labWeb/node_modules/postcss-load-config/src/plugins.js create mode 100644 labWeb/node_modules/postcss-load-config/src/req.js create mode 100644 labWeb/node_modules/postcss-nested/LICENSE create mode 100644 labWeb/node_modules/postcss-nested/README.md create mode 100644 labWeb/node_modules/postcss-nested/index.d.ts create mode 100644 labWeb/node_modules/postcss-nested/index.js create mode 100644 labWeb/node_modules/postcss-nested/package.json create mode 100644 labWeb/node_modules/postcss-selector-parser/API.md create mode 100644 labWeb/node_modules/postcss-selector-parser/CHANGELOG.md create mode 100644 labWeb/node_modules/postcss-selector-parser/LICENSE-MIT create mode 100644 labWeb/node_modules/postcss-selector-parser/README.md create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/index.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/parser.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/processor.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/attribute.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/className.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/combinator.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/comment.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/constructors.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/container.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/guards.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/id.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/index.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/namespace.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/nesting.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/node.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/pseudo.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/root.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/selector.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/string.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/tag.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/types.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/selectors/universal.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/sortAscending.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/tokenTypes.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/tokenize.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/util/ensureObject.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/util/getProp.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/util/index.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/util/stripComments.js create mode 100644 labWeb/node_modules/postcss-selector-parser/dist/util/unesc.js create mode 100644 labWeb/node_modules/postcss-selector-parser/package.json create mode 100644 labWeb/node_modules/postcss-selector-parser/postcss-selector-parser.d.ts create mode 100644 labWeb/node_modules/postcss-value-parser/LICENSE create mode 100644 labWeb/node_modules/postcss-value-parser/README.md create mode 100644 labWeb/node_modules/postcss-value-parser/lib/index.d.ts create mode 100644 labWeb/node_modules/postcss-value-parser/lib/index.js create mode 100644 labWeb/node_modules/postcss-value-parser/lib/parse.js create mode 100644 labWeb/node_modules/postcss-value-parser/lib/stringify.js create mode 100644 labWeb/node_modules/postcss-value-parser/lib/unit.js create mode 100644 labWeb/node_modules/postcss-value-parser/lib/walk.js create mode 100644 labWeb/node_modules/postcss-value-parser/package.json create mode 100644 labWeb/node_modules/postcss/LICENSE create mode 100644 labWeb/node_modules/postcss/README.md create mode 100644 labWeb/node_modules/postcss/lib/at-rule.d.ts create mode 100644 labWeb/node_modules/postcss/lib/at-rule.js create mode 100644 labWeb/node_modules/postcss/lib/comment.d.ts create mode 100644 labWeb/node_modules/postcss/lib/comment.js create mode 100644 labWeb/node_modules/postcss/lib/container.d.ts create mode 100644 labWeb/node_modules/postcss/lib/container.js create mode 100644 labWeb/node_modules/postcss/lib/css-syntax-error.d.ts create mode 100644 labWeb/node_modules/postcss/lib/css-syntax-error.js create mode 100644 labWeb/node_modules/postcss/lib/declaration.d.ts create mode 100644 labWeb/node_modules/postcss/lib/declaration.js create mode 100644 labWeb/node_modules/postcss/lib/document.d.ts create mode 100644 labWeb/node_modules/postcss/lib/document.js create mode 100644 labWeb/node_modules/postcss/lib/fromJSON.d.ts create mode 100644 labWeb/node_modules/postcss/lib/fromJSON.js create mode 100644 labWeb/node_modules/postcss/lib/input.d.ts create mode 100644 labWeb/node_modules/postcss/lib/input.js create mode 100644 labWeb/node_modules/postcss/lib/lazy-result.d.ts create mode 100644 labWeb/node_modules/postcss/lib/lazy-result.js create mode 100644 labWeb/node_modules/postcss/lib/list.d.ts create mode 100644 labWeb/node_modules/postcss/lib/list.js create mode 100644 labWeb/node_modules/postcss/lib/map-generator.js create mode 100644 labWeb/node_modules/postcss/lib/no-work-result.d.ts create mode 100644 labWeb/node_modules/postcss/lib/no-work-result.js create mode 100644 labWeb/node_modules/postcss/lib/node.d.ts create mode 100644 labWeb/node_modules/postcss/lib/node.js create mode 100644 labWeb/node_modules/postcss/lib/parse.d.ts create mode 100644 labWeb/node_modules/postcss/lib/parse.js create mode 100644 labWeb/node_modules/postcss/lib/parser.js create mode 100644 labWeb/node_modules/postcss/lib/postcss.d.mts create mode 100644 labWeb/node_modules/postcss/lib/postcss.d.ts create mode 100644 labWeb/node_modules/postcss/lib/postcss.js create mode 100644 labWeb/node_modules/postcss/lib/postcss.mjs create mode 100644 labWeb/node_modules/postcss/lib/previous-map.d.ts create mode 100644 labWeb/node_modules/postcss/lib/previous-map.js create mode 100644 labWeb/node_modules/postcss/lib/processor.d.ts create mode 100644 labWeb/node_modules/postcss/lib/processor.js create mode 100644 labWeb/node_modules/postcss/lib/result.d.ts create mode 100644 labWeb/node_modules/postcss/lib/result.js create mode 100644 labWeb/node_modules/postcss/lib/root.d.ts create mode 100644 labWeb/node_modules/postcss/lib/root.js create mode 100644 labWeb/node_modules/postcss/lib/rule.d.ts create mode 100644 labWeb/node_modules/postcss/lib/rule.js create mode 100644 labWeb/node_modules/postcss/lib/stringifier.d.ts create mode 100644 labWeb/node_modules/postcss/lib/stringifier.js create mode 100644 labWeb/node_modules/postcss/lib/stringify.d.ts create mode 100644 labWeb/node_modules/postcss/lib/stringify.js create mode 100644 labWeb/node_modules/postcss/lib/symbols.js create mode 100644 labWeb/node_modules/postcss/lib/terminal-highlight.js create mode 100644 labWeb/node_modules/postcss/lib/tokenize.js create mode 100644 labWeb/node_modules/postcss/lib/warn-once.js create mode 100644 labWeb/node_modules/postcss/lib/warning.d.ts create mode 100644 labWeb/node_modules/postcss/lib/warning.js create mode 100644 labWeb/node_modules/postcss/package.json create mode 100755 labWeb/node_modules/queue-microtask/LICENSE create mode 100644 labWeb/node_modules/queue-microtask/README.md create mode 100644 labWeb/node_modules/queue-microtask/index.d.ts create mode 100644 labWeb/node_modules/queue-microtask/index.js create mode 100644 labWeb/node_modules/queue-microtask/package.json create mode 100644 labWeb/node_modules/read-cache/LICENSE create mode 100644 labWeb/node_modules/read-cache/README.md create mode 100644 labWeb/node_modules/read-cache/index.js create mode 100644 labWeb/node_modules/read-cache/package.json create mode 100644 labWeb/node_modules/readdirp/LICENSE create mode 100644 labWeb/node_modules/readdirp/README.md create mode 100644 labWeb/node_modules/readdirp/index.d.ts create mode 100644 labWeb/node_modules/readdirp/index.js create mode 100644 labWeb/node_modules/readdirp/package.json create mode 100644 labWeb/node_modules/resolve/.claude/notes.md create mode 100644 labWeb/node_modules/resolve/.claude/settings.local.json create mode 100644 labWeb/node_modules/resolve/.editorconfig create mode 100644 labWeb/node_modules/resolve/.eslintrc create mode 100644 labWeb/node_modules/resolve/.github/FUNDING.yml create mode 100644 labWeb/node_modules/resolve/.github/INCIDENT_RESPONSE_PROCESS.md create mode 100644 labWeb/node_modules/resolve/.github/THREAT_MODEL.md create mode 100644 labWeb/node_modules/resolve/LICENSE create mode 100644 labWeb/node_modules/resolve/SECURITY.md create mode 100644 labWeb/node_modules/resolve/async.js create mode 100755 labWeb/node_modules/resolve/bin/resolve create mode 100644 labWeb/node_modules/resolve/eslint.config.mjs create mode 100644 labWeb/node_modules/resolve/example/async.js create mode 100644 labWeb/node_modules/resolve/example/sync.js create mode 100644 labWeb/node_modules/resolve/index.js create mode 100644 labWeb/node_modules/resolve/lib/async.js create mode 100644 labWeb/node_modules/resolve/lib/caller.js create mode 100644 labWeb/node_modules/resolve/lib/core.js create mode 100644 labWeb/node_modules/resolve/lib/core.json create mode 100644 labWeb/node_modules/resolve/lib/homedir.js create mode 100644 labWeb/node_modules/resolve/lib/is-core.js create mode 100644 labWeb/node_modules/resolve/lib/node-modules-paths.js create mode 100644 labWeb/node_modules/resolve/lib/normalize-options.js create mode 100644 labWeb/node_modules/resolve/lib/sync.js create mode 100644 labWeb/node_modules/resolve/package.json create mode 100644 labWeb/node_modules/resolve/readme.markdown create mode 100644 labWeb/node_modules/resolve/sync.js create mode 100644 labWeb/node_modules/resolve/test/core.js create mode 100644 labWeb/node_modules/resolve/test/default_paths.js create mode 100644 labWeb/node_modules/resolve/test/dotdot.js create mode 100644 labWeb/node_modules/resolve/test/dotdot/abc/index.js create mode 100644 labWeb/node_modules/resolve/test/dotdot/index.js create mode 100644 labWeb/node_modules/resolve/test/faulty_basedir.js create mode 100644 labWeb/node_modules/resolve/test/filter.js create mode 100644 labWeb/node_modules/resolve/test/filter_sync.js create mode 100644 labWeb/node_modules/resolve/test/home_paths.js create mode 100644 labWeb/node_modules/resolve/test/home_paths_sync.js create mode 100644 labWeb/node_modules/resolve/test/homedir.js create mode 100644 labWeb/node_modules/resolve/test/mock.js create mode 100644 labWeb/node_modules/resolve/test/mock_sync.js create mode 100644 labWeb/node_modules/resolve/test/module_dir.js create mode 100644 labWeb/node_modules/resolve/test/module_dir/xmodules/aaa/index.js create mode 100644 labWeb/node_modules/resolve/test/module_dir/ymodules/aaa/index.js create mode 100644 labWeb/node_modules/resolve/test/module_dir/zmodules/bbb/main.js create mode 100644 labWeb/node_modules/resolve/test/module_dir/zmodules/bbb/package.json create mode 100644 labWeb/node_modules/resolve/test/node-modules-paths.js create mode 100644 labWeb/node_modules/resolve/test/node_path.js create mode 100644 labWeb/node_modules/resolve/test/node_path/x/aaa/index.js create mode 100644 labWeb/node_modules/resolve/test/node_path/x/ccc/index.js create mode 100644 labWeb/node_modules/resolve/test/node_path/y/bbb/index.js create mode 100644 labWeb/node_modules/resolve/test/node_path/y/ccc/index.js create mode 100644 labWeb/node_modules/resolve/test/nonstring.js create mode 100644 labWeb/node_modules/resolve/test/pathfilter.js create mode 100644 labWeb/node_modules/resolve/test/pathfilter/deep_ref/main.js create mode 100644 labWeb/node_modules/resolve/test/pathfilter_sync.js create mode 100644 labWeb/node_modules/resolve/test/precedence.js create mode 100644 labWeb/node_modules/resolve/test/precedence/aaa.js create mode 100644 labWeb/node_modules/resolve/test/precedence/aaa/index.js create mode 100644 labWeb/node_modules/resolve/test/precedence/aaa/main.js create mode 100644 labWeb/node_modules/resolve/test/precedence/bbb.js create mode 100644 labWeb/node_modules/resolve/test/precedence/bbb/main.js create mode 100644 labWeb/node_modules/resolve/test/resolver.js create mode 100644 labWeb/node_modules/resolve/test/resolver/baz/doom.js create mode 100644 labWeb/node_modules/resolve/test/resolver/baz/package.json create mode 100644 labWeb/node_modules/resolve/test/resolver/baz/quux.js create mode 100644 labWeb/node_modules/resolve/test/resolver/browser_field/a.js create mode 100644 labWeb/node_modules/resolve/test/resolver/browser_field/b.js create mode 100644 labWeb/node_modules/resolve/test/resolver/browser_field/package.json create mode 100644 labWeb/node_modules/resolve/test/resolver/cup.coffee create mode 100644 labWeb/node_modules/resolve/test/resolver/dot_main/index.js create mode 100644 labWeb/node_modules/resolve/test/resolver/dot_main/package.json create mode 100644 labWeb/node_modules/resolve/test/resolver/dot_slash_main/index.js create mode 100644 labWeb/node_modules/resolve/test/resolver/dot_slash_main/package.json create mode 100644 labWeb/node_modules/resolve/test/resolver/false_main/index.js create mode 100644 labWeb/node_modules/resolve/test/resolver/false_main/package.json create mode 100644 labWeb/node_modules/resolve/test/resolver/foo.js create mode 100644 labWeb/node_modules/resolve/test/resolver/incorrect_main/index.js create mode 100644 labWeb/node_modules/resolve/test/resolver/incorrect_main/package.json create mode 100644 labWeb/node_modules/resolve/test/resolver/invalid_main/package.json create mode 100644 labWeb/node_modules/resolve/test/resolver/mug.coffee create mode 100644 labWeb/node_modules/resolve/test/resolver/mug.js create mode 100644 labWeb/node_modules/resolve/test/resolver/multirepo/lerna.json create mode 100644 labWeb/node_modules/resolve/test/resolver/multirepo/package.json create mode 100644 labWeb/node_modules/resolve/test/resolver/multirepo/packages/package-a/index.js create mode 100644 labWeb/node_modules/resolve/test/resolver/multirepo/packages/package-a/package.json create mode 100644 labWeb/node_modules/resolve/test/resolver/multirepo/packages/package-b/index.js create mode 100644 labWeb/node_modules/resolve/test/resolver/multirepo/packages/package-b/package.json create mode 100644 labWeb/node_modules/resolve/test/resolver/nested_symlinks/mylib/async.js create mode 100644 labWeb/node_modules/resolve/test/resolver/nested_symlinks/mylib/package.json create mode 100644 labWeb/node_modules/resolve/test/resolver/nested_symlinks/mylib/sync.js create mode 100644 labWeb/node_modules/resolve/test/resolver/other_path/lib/other-lib.js create mode 100644 labWeb/node_modules/resolve/test/resolver/other_path/root.js create mode 100644 labWeb/node_modules/resolve/test/resolver/quux/foo/index.js create mode 100644 labWeb/node_modules/resolve/test/resolver/same_names/foo.js create mode 100644 labWeb/node_modules/resolve/test/resolver/same_names/foo/index.js create mode 100644 labWeb/node_modules/resolve/test/resolver/symlinked/_/node_modules/foo.js create mode 100644 labWeb/node_modules/resolve/test/resolver/symlinked/_/symlink_target/.gitkeep create mode 100644 labWeb/node_modules/resolve/test/resolver/symlinked/package/bar.js create mode 100644 labWeb/node_modules/resolve/test/resolver/symlinked/package/package.json create mode 100644 labWeb/node_modules/resolve/test/resolver/without_basedir/main.js create mode 100644 labWeb/node_modules/resolve/test/resolver_sync.js create mode 100644 labWeb/node_modules/resolve/test/shadowed_core.js create mode 100644 labWeb/node_modules/resolve/test/shadowed_core/node_modules/util/index.js create mode 100644 labWeb/node_modules/resolve/test/subdirs.js create mode 100644 labWeb/node_modules/resolve/test/symlinks.js create mode 100644 labWeb/node_modules/reusify/.github/dependabot.yml create mode 100644 labWeb/node_modules/reusify/.github/workflows/ci.yml create mode 100644 labWeb/node_modules/reusify/LICENSE create mode 100644 labWeb/node_modules/reusify/README.md create mode 100644 labWeb/node_modules/reusify/SECURITY.md create mode 100644 labWeb/node_modules/reusify/benchmarks/createNoCodeFunction.js create mode 100644 labWeb/node_modules/reusify/benchmarks/fib.js create mode 100644 labWeb/node_modules/reusify/benchmarks/reuseNoCodeFunction.js create mode 100644 labWeb/node_modules/reusify/eslint.config.js create mode 100644 labWeb/node_modules/reusify/package.json create mode 100644 labWeb/node_modules/reusify/reusify.d.ts create mode 100644 labWeb/node_modules/reusify/reusify.js create mode 100644 labWeb/node_modules/reusify/test.js create mode 100644 labWeb/node_modules/reusify/tsconfig.json create mode 100644 labWeb/node_modules/run-parallel/LICENSE create mode 100644 labWeb/node_modules/run-parallel/README.md create mode 100644 labWeb/node_modules/run-parallel/index.js create mode 100644 labWeb/node_modules/run-parallel/package.json create mode 100644 labWeb/node_modules/source-map-js/LICENSE create mode 100644 labWeb/node_modules/source-map-js/README.md create mode 100644 labWeb/node_modules/source-map-js/lib/array-set.js create mode 100644 labWeb/node_modules/source-map-js/lib/base64-vlq.js create mode 100644 labWeb/node_modules/source-map-js/lib/base64.js create mode 100644 labWeb/node_modules/source-map-js/lib/binary-search.js create mode 100644 labWeb/node_modules/source-map-js/lib/mapping-list.js create mode 100644 labWeb/node_modules/source-map-js/lib/quick-sort.js create mode 100644 labWeb/node_modules/source-map-js/lib/source-map-consumer.d.ts create mode 100644 labWeb/node_modules/source-map-js/lib/source-map-consumer.js create mode 100644 labWeb/node_modules/source-map-js/lib/source-map-generator.d.ts create mode 100644 labWeb/node_modules/source-map-js/lib/source-map-generator.js create mode 100644 labWeb/node_modules/source-map-js/lib/source-node.d.ts create mode 100644 labWeb/node_modules/source-map-js/lib/source-node.js create mode 100644 labWeb/node_modules/source-map-js/lib/util.js create mode 100644 labWeb/node_modules/source-map-js/package.json create mode 100644 labWeb/node_modules/source-map-js/source-map.d.ts create mode 100644 labWeb/node_modules/source-map-js/source-map.js create mode 100644 labWeb/node_modules/sucrase/LICENSE create mode 100644 labWeb/node_modules/sucrase/README.md create mode 100755 labWeb/node_modules/sucrase/bin/sucrase create mode 100755 labWeb/node_modules/sucrase/bin/sucrase-node create mode 100644 labWeb/node_modules/sucrase/dist/CJSImportProcessor.js create mode 100644 labWeb/node_modules/sucrase/dist/HelperManager.js create mode 100644 labWeb/node_modules/sucrase/dist/NameManager.js create mode 100644 labWeb/node_modules/sucrase/dist/Options-gen-types.js create mode 100644 labWeb/node_modules/sucrase/dist/Options.js create mode 100644 labWeb/node_modules/sucrase/dist/TokenProcessor.js create mode 100644 labWeb/node_modules/sucrase/dist/cli.js create mode 100644 labWeb/node_modules/sucrase/dist/computeSourceMap.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/CJSImportProcessor.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/HelperManager.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/NameManager.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/Options-gen-types.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/Options.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/TokenProcessor.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/cli.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/computeSourceMap.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/identifyShadowedGlobals.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/index.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/index.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/plugins/flow.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/plugins/jsx/index.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/plugins/jsx/xhtml.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/plugins/types.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/plugins/typescript.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/tokenizer/index.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/tokenizer/keywords.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/tokenizer/readWord.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/tokenizer/readWordTree.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/tokenizer/state.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/tokenizer/types.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/traverser/base.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/traverser/expression.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/traverser/index.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/traverser/lval.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/traverser/statement.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/traverser/util.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/util/charcodes.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/util/identifier.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/parser/util/whitespace.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/register.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/CJSImportTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/ESMImportTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/FlowTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/JSXTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/JestHoistTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/NumericSeparatorTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/OptionalCatchBindingTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/OptionalChainingNullishTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/ReactDisplayNameTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/ReactHotLoaderTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/RootTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/Transformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/transformers/TypeScriptTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/elideImportEquals.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/formatTokens.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/getClassInfo.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/getDeclarationInfo.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/getIdentifierNames.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/getImportExportSpecifierInfo.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/getJSXPragmaInfo.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/getNonTypeIdentifiers.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/getTSImportedNames.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/isAsyncOperation.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/isExportFrom.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/isIdentifier.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/removeMaybeImportAttributes.js create mode 100644 labWeb/node_modules/sucrase/dist/esm/util/shouldElideDefaultExport.js create mode 100644 labWeb/node_modules/sucrase/dist/identifyShadowedGlobals.js create mode 100644 labWeb/node_modules/sucrase/dist/index.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/index.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/plugins/flow.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/plugins/jsx/index.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/plugins/jsx/xhtml.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/plugins/types.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/plugins/typescript.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/tokenizer/index.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/tokenizer/keywords.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/tokenizer/readWord.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/tokenizer/readWordTree.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/tokenizer/state.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/tokenizer/types.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/traverser/base.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/traverser/expression.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/traverser/index.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/traverser/lval.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/traverser/statement.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/traverser/util.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/util/charcodes.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/util/identifier.js create mode 100644 labWeb/node_modules/sucrase/dist/parser/util/whitespace.js create mode 100644 labWeb/node_modules/sucrase/dist/register.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/CJSImportTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/ESMImportTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/FlowTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/JSXTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/JestHoistTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/NumericSeparatorTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/OptionalCatchBindingTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/OptionalChainingNullishTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/ReactDisplayNameTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/ReactHotLoaderTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/RootTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/Transformer.js create mode 100644 labWeb/node_modules/sucrase/dist/transformers/TypeScriptTransformer.js create mode 100644 labWeb/node_modules/sucrase/dist/types/CJSImportProcessor.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/HelperManager.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/NameManager.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/Options-gen-types.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/Options.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/TokenProcessor.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/cli.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/computeSourceMap.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/identifyShadowedGlobals.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/index.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/index.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/plugins/flow.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/plugins/jsx/index.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/plugins/jsx/xhtml.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/plugins/types.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/plugins/typescript.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/tokenizer/index.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/tokenizer/keywords.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/tokenizer/readWord.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/tokenizer/readWordTree.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/tokenizer/state.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/tokenizer/types.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/traverser/base.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/traverser/expression.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/traverser/index.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/traverser/lval.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/traverser/statement.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/traverser/util.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/util/charcodes.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/util/identifier.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/parser/util/whitespace.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/register.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/CJSImportTransformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/ESMImportTransformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/FlowTransformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/JSXTransformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/JestHoistTransformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/NumericSeparatorTransformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/OptionalCatchBindingTransformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/OptionalChainingNullishTransformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/ReactDisplayNameTransformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/ReactHotLoaderTransformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/RootTransformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/Transformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/transformers/TypeScriptTransformer.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/elideImportEquals.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/formatTokens.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/getClassInfo.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/getDeclarationInfo.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/getIdentifierNames.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/getImportExportSpecifierInfo.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/getJSXPragmaInfo.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/getNonTypeIdentifiers.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/getTSImportedNames.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/isAsyncOperation.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/isExportFrom.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/isIdentifier.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/removeMaybeImportAttributes.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/types/util/shouldElideDefaultExport.d.ts create mode 100644 labWeb/node_modules/sucrase/dist/util/elideImportEquals.js create mode 100644 labWeb/node_modules/sucrase/dist/util/formatTokens.js create mode 100644 labWeb/node_modules/sucrase/dist/util/getClassInfo.js create mode 100644 labWeb/node_modules/sucrase/dist/util/getDeclarationInfo.js create mode 100644 labWeb/node_modules/sucrase/dist/util/getIdentifierNames.js create mode 100644 labWeb/node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js create mode 100644 labWeb/node_modules/sucrase/dist/util/getJSXPragmaInfo.js create mode 100644 labWeb/node_modules/sucrase/dist/util/getNonTypeIdentifiers.js create mode 100644 labWeb/node_modules/sucrase/dist/util/getTSImportedNames.js create mode 100644 labWeb/node_modules/sucrase/dist/util/isAsyncOperation.js create mode 100644 labWeb/node_modules/sucrase/dist/util/isExportFrom.js create mode 100644 labWeb/node_modules/sucrase/dist/util/isIdentifier.js create mode 100644 labWeb/node_modules/sucrase/dist/util/removeMaybeImportAttributes.js create mode 100644 labWeb/node_modules/sucrase/dist/util/shouldElideDefaultExport.js create mode 100644 labWeb/node_modules/sucrase/package.json create mode 100644 labWeb/node_modules/sucrase/register/index.js create mode 100644 labWeb/node_modules/sucrase/register/js.js create mode 100644 labWeb/node_modules/sucrase/register/jsx.js create mode 100644 labWeb/node_modules/sucrase/register/ts-legacy-module-interop.js create mode 100644 labWeb/node_modules/sucrase/register/ts.js create mode 100644 labWeb/node_modules/sucrase/register/tsx-legacy-module-interop.js create mode 100644 labWeb/node_modules/sucrase/register/tsx.js create mode 100644 labWeb/node_modules/sucrase/ts-node-plugin/index.js create mode 100644 labWeb/node_modules/supports-preserve-symlinks-flag/.eslintrc create mode 100644 labWeb/node_modules/supports-preserve-symlinks-flag/.github/FUNDING.yml create mode 100644 labWeb/node_modules/supports-preserve-symlinks-flag/.nycrc create mode 100644 labWeb/node_modules/supports-preserve-symlinks-flag/CHANGELOG.md create mode 100644 labWeb/node_modules/supports-preserve-symlinks-flag/LICENSE create mode 100644 labWeb/node_modules/supports-preserve-symlinks-flag/README.md create mode 100644 labWeb/node_modules/supports-preserve-symlinks-flag/browser.js create mode 100644 labWeb/node_modules/supports-preserve-symlinks-flag/index.js create mode 100644 labWeb/node_modules/supports-preserve-symlinks-flag/package.json create mode 100644 labWeb/node_modules/supports-preserve-symlinks-flag/test/index.js create mode 100644 labWeb/node_modules/tailwindcss/LICENSE create mode 100644 labWeb/node_modules/tailwindcss/README.md create mode 100644 labWeb/node_modules/tailwindcss/base.css create mode 100644 labWeb/node_modules/tailwindcss/colors.d.ts create mode 100644 labWeb/node_modules/tailwindcss/colors.js create mode 100644 labWeb/node_modules/tailwindcss/components.css create mode 100644 labWeb/node_modules/tailwindcss/defaultConfig.d.ts create mode 100644 labWeb/node_modules/tailwindcss/defaultConfig.js create mode 100644 labWeb/node_modules/tailwindcss/defaultTheme.d.ts create mode 100644 labWeb/node_modules/tailwindcss/defaultTheme.js create mode 100644 labWeb/node_modules/tailwindcss/lib/cli-peer-dependencies.js create mode 100755 labWeb/node_modules/tailwindcss/lib/cli.js create mode 100644 labWeb/node_modules/tailwindcss/lib/cli/build/deps.js create mode 100644 labWeb/node_modules/tailwindcss/lib/cli/build/index.js create mode 100644 labWeb/node_modules/tailwindcss/lib/cli/build/plugin.js create mode 100644 labWeb/node_modules/tailwindcss/lib/cli/build/utils.js create mode 100644 labWeb/node_modules/tailwindcss/lib/cli/build/watching.js create mode 100644 labWeb/node_modules/tailwindcss/lib/cli/help/index.js create mode 100644 labWeb/node_modules/tailwindcss/lib/cli/index.js create mode 100644 labWeb/node_modules/tailwindcss/lib/cli/init/index.js create mode 100644 labWeb/node_modules/tailwindcss/lib/corePluginList.js create mode 100644 labWeb/node_modules/tailwindcss/lib/corePlugins.js create mode 100644 labWeb/node_modules/tailwindcss/lib/css/LICENSE create mode 100644 labWeb/node_modules/tailwindcss/lib/css/preflight.css create mode 100644 labWeb/node_modules/tailwindcss/lib/featureFlags.js create mode 100644 labWeb/node_modules/tailwindcss/lib/index.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/cacheInvalidation.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/collapseAdjacentRules.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/collapseDuplicateDeclarations.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/content.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/defaultExtractor.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/evaluateTailwindFunctions.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/expandApplyAtRules.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/expandTailwindAtRules.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/findAtConfigPath.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/generateRules.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/getModuleDependencies.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/load-config.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/normalizeTailwindDirectives.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/offsets.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/partitionApplyAtRules.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/regex.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/remap-bitfield.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/resolveDefaultsAtRules.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/setupContextUtils.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/setupTrackingContext.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/sharedState.js create mode 100644 labWeb/node_modules/tailwindcss/lib/lib/substituteScreenAtRules.js create mode 100644 labWeb/node_modules/tailwindcss/lib/plugin.js create mode 100644 labWeb/node_modules/tailwindcss/lib/postcss-plugins/nesting/README.md create mode 100644 labWeb/node_modules/tailwindcss/lib/postcss-plugins/nesting/index.js create mode 100644 labWeb/node_modules/tailwindcss/lib/postcss-plugins/nesting/plugin.js create mode 100644 labWeb/node_modules/tailwindcss/lib/processTailwindFeatures.js create mode 100644 labWeb/node_modules/tailwindcss/lib/public/colors.js create mode 100644 labWeb/node_modules/tailwindcss/lib/public/create-plugin.js create mode 100644 labWeb/node_modules/tailwindcss/lib/public/default-config.js create mode 100644 labWeb/node_modules/tailwindcss/lib/public/default-theme.js create mode 100644 labWeb/node_modules/tailwindcss/lib/public/load-config.js create mode 100644 labWeb/node_modules/tailwindcss/lib/public/resolve-config.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/applyImportantSelector.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/bigSign.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/buildMediaQuery.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/cloneDeep.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/cloneNodes.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/color.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/colorNames.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/configurePlugins.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/createPlugin.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/createUtilityPlugin.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/dataTypes.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/defaults.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/escapeClassName.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/escapeCommas.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/flattenColorPalette.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/formatVariantSelector.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/getAllConfigs.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/hashConfig.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/isKeyframeRule.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/isPlainObject.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/isSyntacticallyValidPropertyValue.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/log.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/math-operators.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/nameClass.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/negateValue.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/normalizeConfig.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/normalizeScreens.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/parseAnimationValue.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/parseBoxShadowValue.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/parseDependency.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/parseGlob.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/parseObjectStyles.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/pluginUtils.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/prefixSelector.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/pseudoElements.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/removeAlphaVariables.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/resolveConfig.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/resolveConfigPath.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/responsive.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/splitAtTopLevelOnly.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/tap.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/toColorValue.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/toPath.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/transformThemeValue.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/validateConfig.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/validateFormalSyntax.js create mode 100644 labWeb/node_modules/tailwindcss/lib/util/withAlphaVariable.js create mode 100644 labWeb/node_modules/tailwindcss/lib/value-parser/LICENSE create mode 100644 labWeb/node_modules/tailwindcss/lib/value-parser/README.md create mode 100644 labWeb/node_modules/tailwindcss/lib/value-parser/index.d.js create mode 100644 labWeb/node_modules/tailwindcss/lib/value-parser/index.js create mode 100644 labWeb/node_modules/tailwindcss/lib/value-parser/parse.js create mode 100644 labWeb/node_modules/tailwindcss/lib/value-parser/stringify.js create mode 100644 labWeb/node_modules/tailwindcss/lib/value-parser/unit.js create mode 100644 labWeb/node_modules/tailwindcss/lib/value-parser/walk.js create mode 100644 labWeb/node_modules/tailwindcss/loadConfig.d.ts create mode 100644 labWeb/node_modules/tailwindcss/loadConfig.js create mode 100644 labWeb/node_modules/tailwindcss/nesting/index.d.ts create mode 100644 labWeb/node_modules/tailwindcss/nesting/index.js create mode 100644 labWeb/node_modules/tailwindcss/package.json create mode 100644 labWeb/node_modules/tailwindcss/peers/index.js create mode 100644 labWeb/node_modules/tailwindcss/plugin.d.ts create mode 100644 labWeb/node_modules/tailwindcss/plugin.js create mode 100644 labWeb/node_modules/tailwindcss/prettier.config.js create mode 100644 labWeb/node_modules/tailwindcss/resolveConfig.d.ts create mode 100644 labWeb/node_modules/tailwindcss/resolveConfig.js create mode 100644 labWeb/node_modules/tailwindcss/screens.css create mode 100644 labWeb/node_modules/tailwindcss/scripts/create-plugin-list.js create mode 100644 labWeb/node_modules/tailwindcss/scripts/generate-types.js create mode 100644 labWeb/node_modules/tailwindcss/scripts/release-channel.js create mode 100644 labWeb/node_modules/tailwindcss/scripts/release-notes.js create mode 100644 labWeb/node_modules/tailwindcss/scripts/type-utils.js create mode 100644 labWeb/node_modules/tailwindcss/src/cli-peer-dependencies.js create mode 100644 labWeb/node_modules/tailwindcss/src/cli.js create mode 100644 labWeb/node_modules/tailwindcss/src/cli/build/deps.js create mode 100644 labWeb/node_modules/tailwindcss/src/cli/build/index.js create mode 100644 labWeb/node_modules/tailwindcss/src/cli/build/plugin.js create mode 100644 labWeb/node_modules/tailwindcss/src/cli/build/utils.js create mode 100644 labWeb/node_modules/tailwindcss/src/cli/build/watching.js create mode 100644 labWeb/node_modules/tailwindcss/src/cli/help/index.js create mode 100644 labWeb/node_modules/tailwindcss/src/cli/index.js create mode 100644 labWeb/node_modules/tailwindcss/src/cli/init/index.js create mode 100644 labWeb/node_modules/tailwindcss/src/corePluginList.js create mode 100644 labWeb/node_modules/tailwindcss/src/corePlugins.js create mode 100644 labWeb/node_modules/tailwindcss/src/css/LICENSE create mode 100644 labWeb/node_modules/tailwindcss/src/css/preflight.css create mode 100644 labWeb/node_modules/tailwindcss/src/featureFlags.js create mode 100644 labWeb/node_modules/tailwindcss/src/index.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/cacheInvalidation.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/collapseAdjacentRules.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/collapseDuplicateDeclarations.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/content.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/defaultExtractor.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/evaluateTailwindFunctions.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/expandApplyAtRules.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/expandTailwindAtRules.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/findAtConfigPath.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/generateRules.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/getModuleDependencies.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/load-config.ts create mode 100644 labWeb/node_modules/tailwindcss/src/lib/normalizeTailwindDirectives.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/offsets.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/partitionApplyAtRules.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/regex.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/remap-bitfield.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/resolveDefaultsAtRules.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/setupContextUtils.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/setupTrackingContext.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/sharedState.js create mode 100644 labWeb/node_modules/tailwindcss/src/lib/substituteScreenAtRules.js create mode 100644 labWeb/node_modules/tailwindcss/src/plugin.js create mode 100644 labWeb/node_modules/tailwindcss/src/postcss-plugins/nesting/README.md create mode 100644 labWeb/node_modules/tailwindcss/src/postcss-plugins/nesting/index.js create mode 100644 labWeb/node_modules/tailwindcss/src/postcss-plugins/nesting/plugin.js create mode 100644 labWeb/node_modules/tailwindcss/src/processTailwindFeatures.js create mode 100644 labWeb/node_modules/tailwindcss/src/public/colors.js create mode 100644 labWeb/node_modules/tailwindcss/src/public/create-plugin.js create mode 100644 labWeb/node_modules/tailwindcss/src/public/default-config.js create mode 100644 labWeb/node_modules/tailwindcss/src/public/default-theme.js create mode 100644 labWeb/node_modules/tailwindcss/src/public/load-config.js create mode 100644 labWeb/node_modules/tailwindcss/src/public/resolve-config.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/applyImportantSelector.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/bigSign.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/buildMediaQuery.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/cloneDeep.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/cloneNodes.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/color.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/colorNames.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/configurePlugins.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/createPlugin.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/createUtilityPlugin.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/dataTypes.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/defaults.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/escapeClassName.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/escapeCommas.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/flattenColorPalette.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/formatVariantSelector.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/getAllConfigs.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/hashConfig.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/isKeyframeRule.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/isPlainObject.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/isSyntacticallyValidPropertyValue.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/log.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/math-operators.ts create mode 100644 labWeb/node_modules/tailwindcss/src/util/nameClass.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/negateValue.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/normalizeConfig.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/normalizeScreens.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/parseAnimationValue.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/parseBoxShadowValue.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/parseDependency.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/parseGlob.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/parseObjectStyles.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/pluginUtils.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/prefixSelector.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/pseudoElements.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/removeAlphaVariables.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/resolveConfig.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/resolveConfigPath.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/responsive.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/splitAtTopLevelOnly.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/tap.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/toColorValue.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/toPath.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/transformThemeValue.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/validateConfig.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/validateFormalSyntax.js create mode 100644 labWeb/node_modules/tailwindcss/src/util/withAlphaVariable.js create mode 100644 labWeb/node_modules/tailwindcss/src/value-parser/LICENSE create mode 100644 labWeb/node_modules/tailwindcss/src/value-parser/README.md create mode 100644 labWeb/node_modules/tailwindcss/src/value-parser/index.d.ts create mode 100644 labWeb/node_modules/tailwindcss/src/value-parser/index.js create mode 100644 labWeb/node_modules/tailwindcss/src/value-parser/parse.js create mode 100644 labWeb/node_modules/tailwindcss/src/value-parser/stringify.js create mode 100644 labWeb/node_modules/tailwindcss/src/value-parser/unit.js create mode 100644 labWeb/node_modules/tailwindcss/src/value-parser/walk.js create mode 100644 labWeb/node_modules/tailwindcss/stubs/.npmignore create mode 100644 labWeb/node_modules/tailwindcss/stubs/.prettierrc.json create mode 100644 labWeb/node_modules/tailwindcss/stubs/config.full.js create mode 100644 labWeb/node_modules/tailwindcss/stubs/config.simple.js create mode 100644 labWeb/node_modules/tailwindcss/stubs/postcss.config.cjs create mode 100644 labWeb/node_modules/tailwindcss/stubs/postcss.config.js create mode 100644 labWeb/node_modules/tailwindcss/stubs/tailwind.config.cjs create mode 100644 labWeb/node_modules/tailwindcss/stubs/tailwind.config.js create mode 100644 labWeb/node_modules/tailwindcss/stubs/tailwind.config.ts create mode 100644 labWeb/node_modules/tailwindcss/tailwind.css create mode 100644 labWeb/node_modules/tailwindcss/types/config.d.ts create mode 100644 labWeb/node_modules/tailwindcss/types/generated/.gitkeep create mode 100644 labWeb/node_modules/tailwindcss/types/generated/colors.d.ts create mode 100644 labWeb/node_modules/tailwindcss/types/generated/corePluginList.d.ts create mode 100644 labWeb/node_modules/tailwindcss/types/generated/default-theme.d.ts create mode 100644 labWeb/node_modules/tailwindcss/types/index.d.ts create mode 100644 labWeb/node_modules/tailwindcss/utilities.css create mode 100644 labWeb/node_modules/tailwindcss/variants.css create mode 100644 labWeb/node_modules/thenify-all/History.md create mode 100644 labWeb/node_modules/thenify-all/LICENSE create mode 100644 labWeb/node_modules/thenify-all/README.md create mode 100644 labWeb/node_modules/thenify-all/index.js create mode 100644 labWeb/node_modules/thenify-all/package.json create mode 100644 labWeb/node_modules/thenify/History.md create mode 100644 labWeb/node_modules/thenify/LICENSE create mode 100644 labWeb/node_modules/thenify/README.md create mode 100644 labWeb/node_modules/thenify/index.js create mode 100644 labWeb/node_modules/thenify/package.json create mode 100644 labWeb/node_modules/tinyglobby/LICENSE create mode 100644 labWeb/node_modules/tinyglobby/README.md create mode 100644 labWeb/node_modules/tinyglobby/dist/index.cjs create mode 100644 labWeb/node_modules/tinyglobby/dist/index.d.cts create mode 100644 labWeb/node_modules/tinyglobby/dist/index.d.mts create mode 100644 labWeb/node_modules/tinyglobby/dist/index.mjs create mode 100644 labWeb/node_modules/tinyglobby/node_modules/fdir/LICENSE create mode 100644 labWeb/node_modules/tinyglobby/node_modules/fdir/README.md create mode 100644 labWeb/node_modules/tinyglobby/node_modules/fdir/dist/index.cjs create mode 100644 labWeb/node_modules/tinyglobby/node_modules/fdir/dist/index.d.cts create mode 100644 labWeb/node_modules/tinyglobby/node_modules/fdir/dist/index.d.mts create mode 100644 labWeb/node_modules/tinyglobby/node_modules/fdir/dist/index.mjs create mode 100644 labWeb/node_modules/tinyglobby/node_modules/fdir/package.json create mode 100644 labWeb/node_modules/tinyglobby/node_modules/picomatch/LICENSE create mode 100644 labWeb/node_modules/tinyglobby/node_modules/picomatch/README.md create mode 100644 labWeb/node_modules/tinyglobby/node_modules/picomatch/index.js create mode 100644 labWeb/node_modules/tinyglobby/node_modules/picomatch/lib/constants.js create mode 100644 labWeb/node_modules/tinyglobby/node_modules/picomatch/lib/parse.js create mode 100644 labWeb/node_modules/tinyglobby/node_modules/picomatch/lib/picomatch.js create mode 100644 labWeb/node_modules/tinyglobby/node_modules/picomatch/lib/scan.js create mode 100644 labWeb/node_modules/tinyglobby/node_modules/picomatch/lib/utils.js create mode 100644 labWeb/node_modules/tinyglobby/node_modules/picomatch/package.json create mode 100644 labWeb/node_modules/tinyglobby/node_modules/picomatch/posix.js create mode 100644 labWeb/node_modules/tinyglobby/package.json create mode 100644 labWeb/node_modules/to-regex-range/LICENSE create mode 100644 labWeb/node_modules/to-regex-range/README.md create mode 100644 labWeb/node_modules/to-regex-range/index.js create mode 100644 labWeb/node_modules/to-regex-range/package.json create mode 100644 labWeb/node_modules/ts-interface-checker/LICENSE create mode 100644 labWeb/node_modules/ts-interface-checker/README.md create mode 100644 labWeb/node_modules/ts-interface-checker/dist/index.d.ts create mode 100644 labWeb/node_modules/ts-interface-checker/dist/index.js create mode 100644 labWeb/node_modules/ts-interface-checker/dist/types.d.ts create mode 100644 labWeb/node_modules/ts-interface-checker/dist/types.js create mode 100644 labWeb/node_modules/ts-interface-checker/dist/util.d.ts create mode 100644 labWeb/node_modules/ts-interface-checker/dist/util.js create mode 100644 labWeb/node_modules/ts-interface-checker/package.json create mode 100644 labWeb/node_modules/update-browserslist-db/LICENSE create mode 100644 labWeb/node_modules/update-browserslist-db/README.md create mode 100644 labWeb/node_modules/update-browserslist-db/check-npm-version.js create mode 100755 labWeb/node_modules/update-browserslist-db/cli.js create mode 100644 labWeb/node_modules/update-browserslist-db/index.d.ts create mode 100644 labWeb/node_modules/update-browserslist-db/index.js create mode 100644 labWeb/node_modules/update-browserslist-db/package.json create mode 100644 labWeb/node_modules/update-browserslist-db/utils.js create mode 100644 labWeb/node_modules/util-deprecate/History.md create mode 100644 labWeb/node_modules/util-deprecate/LICENSE create mode 100644 labWeb/node_modules/util-deprecate/README.md create mode 100644 labWeb/node_modules/util-deprecate/browser.js create mode 100644 labWeb/node_modules/util-deprecate/node.js create mode 100644 labWeb/node_modules/util-deprecate/package.json create mode 100644 labWeb/package-lock.json create mode 100644 labWeb/package.json create mode 100644 labWeb/postcss.config.js create mode 100644 labWeb/src/tailwind.css create mode 100644 labWeb/tailwind.config.js create mode 100644 labWeb/vendor/tailwind.css diff --git a/labPython/lab20/maze.txt b/labPython/lab20/maze.txt index 4468280..1a1bb20 100644 --- a/labPython/lab20/maze.txt +++ b/labPython/lab20/maze.txt @@ -1,8 +1,10 @@ - M - -M M M - M M M -M M M - MM -MMM MMMM - +M M M +M M MMM + MMMM +MMM M M M + M M +MM M MM +MM MMMMM +M M MMM + M M +M M MMM diff --git a/labPython/lab20/task_1.py b/labPython/lab20/task_1.py index f52094e..b3c3554 100644 --- a/labPython/lab20/task_1.py +++ b/labPython/lab20/task_1.py @@ -1,65 +1,239 @@ +from __future__ import annotations + +import heapq +import os import random - -def create_file(): - n = random.randint(5, 10) - maze = [] - for _ in range(n): - row = "".join(["M" if random.random() < 0.3 else " " for _ in range(n)]) - maze.append(row) - with open("maze.txt", "w") as f: - for row in maze: - f.write(row + "\n") - return n +WALL = "M" -def read_maze(): - with open("maze.txt") as f: - maze = [list(line.rstrip("\n")) for line in f] - return maze +def _maze_path() -> str: + return os.path.join(os.path.dirname(__file__), "maze.txt") -def solve(maze, x, y, xc, yc, visited, length, best): - n = len(maze) - if x < 0 or y < 0 or x >= n or y >= n: - return - if maze[x][y] == "M" or visited[x][y]: - return - if length >= best[0]: - return - if x == xc and y == yc: - best[0] = min(best[0], length) - return - visited[x][y] = True - solve(maze, x + 1, y, xc, yc, visited, length + 1, best) - solve(maze, x - 1, y, xc, yc, visited, length + 1, best) - solve(maze, x, y + 1, xc, yc, visited, length + 1, best) - solve(maze, x, y - 1, xc, yc, visited, length + 1, best) - visited[x][y] = False +def _read_int( + prompt: str, *, min_value: int | None = None, max_value: int | None = None +) -> int: + while True: + try: + s = input(prompt).strip() + except EOFError: + raise + try: + v = int(s) + except ValueError: + print("Ошибка: нужно целое число.") + continue + if min_value is not None and v < min_value: + print(f"Ошибка: число должно быть не меньше {min_value}.") + continue + if max_value is not None and v > max_value: + print(f"Ошибка: число должно быть не больше {max_value}.") + continue + return v -while True: - print("\n1 - создать лабиринт\n2 - решить\n0 - выход") - try: - c = input("Выбор: ") - if c == "1": - n = create_file() - print("Файл создан. Размер:", n) - elif c == "2": - maze = read_maze() - n = len(maze) - x = int(input("Старт X: ")) - y = int(input("Старт Y: ")) - xc = int(input("Сыр X: ")) - yc = int(input("Сыр Y: ")) - visited = [[False] * n for _ in range(n)] - best = [10**9] - solve(maze, x, y, xc, yc, visited, 0, best) - if best[0] == 10**9: - print("Путь не найден") +def _normalize_grid(rows: list[str], n: int) -> list[str]: + if len(rows) != n: + raise ValueError(f"Ожидалось {n} строк, получено {len(rows)}.") + grid = [(r[:n] + (" " * max(0, n - len(r)))) for r in rows] + return grid + + +def read_maze_from_file(n: int) -> list[str]: + path = _maze_path() + if not os.path.exists(path): + raise FileNotFoundError("Файл maze.txt не найден.") + with open(path, "r", encoding="utf-8") as f: + rows = [ln.rstrip("\n") for ln in f.readlines()] + rows = rows[:n] + return _normalize_grid(rows, n) + + +def write_maze_to_file(grid: list[str]) -> None: + path = _maze_path() + with open(path, "w", encoding="utf-8") as f: + for r in grid: + f.write(r + "\n") + + +def print_maze_with_coords(grid: list[str]) -> None: + n = len(grid) + + # Заголовок столбцов + print(" ", end="") + for j in range(n): + print(f"{j + 1:2}", end=" ") + print() + + # Лабиринт с номерами строк + for i, row in enumerate(grid): + print(f"{i + 1:2} ", end="") + for cell in row: + print(f" {cell if cell != ' ' else '.'}", end=" ") + print() + + +def _is_exit(grid: list[str], i: int, j: int) -> bool: + n = len(grid) + return (i == 0 or j == 0 or i == n - 1 or j == n - 1) and grid[i][j] != WALL + + +def a_star_shortest_path(grid: list[str], start: tuple[int, int]) -> str: + n = len(grid) + sx, sy = start + if not (0 <= sx < n and 0 <= sy < n): + raise ValueError("Стартовые координаты вне лабиринта.") + if grid[sx][sy] == WALL: + raise ValueError("Стартовая клетка является стеной.") + + exits = [(i, j) for i in range(n) for j in range(n) if _is_exit(grid, i, j)] + if not exits: + raise ValueError("В лабиринте нет выходов.") + if _is_exit(grid, sx, sy): + return "" + + def h(i: int, j: int) -> int: + return min(abs(i - ei) + abs(j - ej) for ei, ej in exits) + + inf = 10**9 + gscore = [[inf] * n for _ in range(n)] + gscore[sx][sy] = 0 + + prev: list[list[tuple[int, int] | None]] = [[None] * n for _ in range(n)] + prev_move: list[list[str | None]] = [[None] * n for _ in range(n)] + + heap: list[tuple[int, int, int, int]] = [(h(sx, sy), 0, sx, sy)] + closed = [[False] * n for _ in range(n)] + dirs = ((0, -1, "L"), (0, 1, "R"), (-1, 0, "U"), (1, 0, "D")) + + while heap: + _, g, i, j = heapq.heappop(heap) + if closed[i][j]: + continue + closed[i][j] = True + + if _is_exit(grid, i, j): + path: list[str] = [] + ci, cj = i, j + while (ci, cj) != (sx, sy): + mv = prev_move[ci][cj] + p = prev[ci][cj] + if mv is None or p is None: + raise RuntimeError("Ошибка восстановления пути.") + path.append(mv) + ci, cj = p + path.reverse() + return "".join(path) + + for di, dj, mv in dirs: + ni, nj = i + di, j + dj + if not (0 <= ni < n and 0 <= nj < n): + continue + if grid[ni][nj] == WALL: + continue + ng = g + 1 + if ng < gscore[ni][nj]: + gscore[ni][nj] = ng + prev[ni][nj] = (i, j) + prev_move[ni][nj] = mv + heapq.heappush(heap, (ng + h(ni, nj), ng, ni, nj)) + + raise ValueError("Пути к выходу нет.") + + +def _random_grid(n: int, wall_percent: int) -> list[str]: + p = wall_percent / 100.0 + rows: list[str] = [] + for i in range(n): + row_chars: list[str] = [] + for j in range(n): + if random.random() < p: + row_chars.append(WALL) else: - print("Кратчайший путь:", best[0]) - elif c == "0": - break - except: - print("Ошибка ввода") + row_chars.append(" ") + rows.append("".join(row_chars)) + return rows + + +def _random_passage_cell(grid: list[str]) -> tuple[int, int]: + n = len(grid) + cells = [(i, j) for i in range(n) for j in range(n) if grid[i][j] != WALL] + if not cells: + raise ValueError("В лабиринте нет проходов.") + return random.choice(cells) + + +def generate_maze_file_interactive() -> None: + n = _read_int("Введите N (1..15): ", min_value=1, max_value=15) + wall_percent = _read_int( + "Введите процент стен M (0..90): ", min_value=0, max_value=90 + ) + tries = 0 + while True: + tries += 1 + grid = _random_grid(n, wall_percent) + for j in range(n): + if random.random() < 0.25: + grid[0] = grid[0][:j] + " " + grid[0][j + 1 :] + start = _random_passage_cell(grid) + try: + _ = a_star_shortest_path(grid, start) + write_maze_to_file(grid) + print( + f"Файл maze.txt создан. N={n}. Старт: X={start[0] + 1} Y={start[1] + 1}." + ) + print_maze_with_coords(grid) + return + except Exception: + if tries >= 500: + raise ValueError("Не удалось сгенерировать лабиринт.") + + +def print_maze_file_interactive() -> None: + n = _read_int("Введите N (1..15): ", min_value=1, max_value=15) + grid = read_maze_from_file(n) + print("maze.txt:") + print_maze_with_coords(grid) + + +def solve_from_file_interactive() -> None: + n = _read_int("Введите N (1..15): ", min_value=1, max_value=15) + grid = read_maze_from_file(n) + print_maze_with_coords(grid) + x = _read_int("Введите строку (1..N): ", min_value=1, max_value=n) + y = _read_int("Введите колонку (1..N): ", min_value=1, max_value=n) + start = (x - 1, y - 1) + path = a_star_shortest_path(grid, start) + print("Путь:", path) + + +def main() -> None: + while True: + print() + print("Меню:") + print("1) Создать лабиринт") + print("2) Показать лабиринт") + print("3) Найти путь") + print("0) Выход") + try: + choice = input("Выберите пункт: ").strip() + except EOFError: + return + try: + if choice == "0": + return + if choice == "1": + generate_maze_file_interactive() + elif choice == "2": + print_maze_file_interactive() + elif choice == "3": + solve_from_file_interactive() + else: + print("Неизвестный пункт меню.") + except Exception as e: + print(f"Ошибка: {e}") + + +if __name__ == "__main__": + main() diff --git a/labPython/lab20/task_2.py b/labPython/lab20/task_2.py index 01cd6ec..81a4644 100644 --- a/labPython/lab20/task_2.py +++ b/labPython/lab20/task_2.py @@ -1,37 +1,75 @@ -print("task: 6r\nВставка + и - между цифрами для получения числа N") +# task: Счастливый билет +# Дано шестизначное число и число N. Между цифрами можно вставлять +, -, ничего. +# Нужно вывести все выражения, равные N, либо сообщение об отсутствии решений. + +import itertools -def generate(s, pos, expr, target, results): - if pos == len(s): - try: - if eval(expr) == target: - results.append(expr + "=" + str(target)) - except: - pass - return - generate(s, pos + 1, expr + "+" + s[pos], target, results) - generate(s, pos + 1, expr + "-" + s[pos], target, results) - generate(s, pos + 1, expr + s[pos], target, results) +def generate_expressions(digits): + ops = ["+", "-", ""] + for comb in itertools.product(ops, repeat=5): + expr = digits[0] + for i in range(5): + expr += comb[i] + digits[i + 1] + yield expr + + +def safe_eval(expr): + try: + return eval(expr) + except: + return None + + +def solve(ticket, target): + results = [] + digits = list(ticket) + for expr in generate_expressions(digits): + val = safe_eval(expr) + if val == target: + results.append(f"{expr}={target}") + return results + + +def is_valid_ticket(ticket): + return ticket.isdigit() and len(ticket) == 6 and int(ticket) > 0 + + +def is_valid_target(target): + return target.isdigit() and 0 < int(target) < 10**9 while True: - print("\n1 - решить\n0 - выход") - try: - c = input("Выбор: ") - if c == "1": - s, target = input("Введите число и N: ").split() - target = int(target) - results = [] - generate(s, 1, s[0], target, results) - with open("result.txt", "w") as f: - if results: - for r in results: - print(r) - f.write(r + "\n") - else: - print("Решение не существует") - f.write("Решение не существует") - elif c == "0": - break - except: - print("Ошибка ввода") + print("\nВыберите действие:") + print("1 - Ввести данные") + print("2 - Выход") + + choice = input("Ваш выбор: ").strip() + + if choice == "2": + print("Выход из программы.") + break + elif choice == "1": + ticket = input("Введите шестизначный номер билета: ").strip() + target = input("Введите число N (0 < N < 1e9): ").strip() + + if not is_valid_ticket(ticket): + print("Ошибка: билет должен быть шестизначным натуральным числом.") + continue + + if not is_valid_target(target): + print("Ошибка: N должно быть натуральным числом (0 < N < 1e9).") + continue + + target = int(target) + solutions = solve(ticket, target) + + if solutions: + print("\nНайденные решения:") + for s in solutions: + print(s) + else: + print("Решение не существует.") + + else: + print("Некорректный выбор. Попробуйте снова.") diff --git a/labPython/lab21/task_1.py b/labPython/lab21/task_1.py new file mode 100644 index 0000000..5ebb673 --- /dev/null +++ b/labPython/lab21/task_1.py @@ -0,0 +1,29 @@ +import math + + +def simple_gen5(lst): + for x in lst: + if x >= 0: + yield math.sqrt(x) + else: + yield None + + +while True: + print("генерация квадратных корней") + print("1 - Ввести список") + print("0 - Выход") + choice = input("Выбор: ") + + if choice == "0": + break + + if choice == "1": + try: + data = list(map(int, input("Введите числа через пробел: ").split())) + gen = simple_gen5(data) + print("Результат:") + for val in gen: + print(val) + except: + print("Ошибка ввода") diff --git a/labPython/lab21/task_2.py b/labPython/lab21/task_2.py new file mode 100644 index 0000000..761de99 --- /dev/null +++ b/labPython/lab21/task_2.py @@ -0,0 +1,25 @@ +def filter_gen5(s): + vowels = "aeiouAEIOU" + for ch in s: + if ch in vowels: + yield ch + + +while True: + print("фильтрация гласных") + print("1 - Ввести строку") + print("0 - Выход") + choice = input("Выбор: ") + + if choice == "0": + break + + if choice == "1": + try: + s = input("Введите строку: ") + gen = filter_gen5(s) + print("Результат:") + for ch in gen: + print(ch) + except: + print("Ошибка") diff --git a/labPython/lab21/task_3.py b/labPython/lab21/task_3.py new file mode 100644 index 0000000..f3e99f6 --- /dev/null +++ b/labPython/lab21/task_3.py @@ -0,0 +1,26 @@ +def calc_gen4(a, r): + current = a + while True: + yield current + current *= r + + +while True: + print("геометрическая прогрессия") + print("1 - Запустить") + print("0 - Выход") + choice = input("Выбор: ") + + if choice == "0": + break + + if choice == "1": + try: + a = float(input("Первый член: ")) + r = float(input("Знаменатель: ")) + n = int(input("Сколько элементов вывести: ")) + gen = calc_gen4(a, r) + for _ in range(n): + print(next(gen)) + except: + print("Ошибка ввода") diff --git a/labPython/lab21/task_4.py b/labPython/lab21/task_4.py new file mode 100644 index 0000000..b03fc88 --- /dev/null +++ b/labPython/lab21/task_4.py @@ -0,0 +1,36 @@ +class SimpleIter4: + def __init__(self, data): + self.data = data + self.result = [] + evens = [data[i] for i in range(0, len(data), 2)][::-1] + odds = [data[i] for i in range(1, len(data), 2)] + self.result = evens + odds + self.index = 0 + + def __iter__(self): + return self + + def __next__(self): + if self.index >= len(self.result): + raise StopIteration + val = self.result[self.index] + self.index += 1 + return val + + +while True: + print("1 - Ввести список") + print("0 - Выход") + choice = input("Выбор: ") + + if choice == "0": + break + + if choice == "1": + try: + data = input("Введите элементы через пробел: ").split() + it = SimpleIter4(data) + for x in it: + print(x) + except: + print("Ошибка") diff --git a/labPython/lab21/task_5.py b/labPython/lab21/task_5.py new file mode 100644 index 0000000..4118935 --- /dev/null +++ b/labPython/lab21/task_5.py @@ -0,0 +1,64 @@ +class Node: + def __init__(self, value): + self.value = value + self.next = None + self.prev = None + + +class DoublyCircularList: + def __init__(self): + self.head = None + + def append(self, value): + new_node = Node(value) + if not self.head: + self.head = new_node + new_node.next = new_node + new_node.prev = new_node + else: + tail = self.head.prev + tail.next = new_node + new_node.prev = tail + new_node.next = self.head + self.head.prev = new_node + + def __iter__(self): + return ReverseIterator(self.head) + + +class ReverseIterator: + def __init__(self, head): + self.current = head.prev if head else None + + def __iter__(self): + return self + + def __next__(self): + if not self.current: + raise StopIteration + val = self.current.value + self.current = self.current.prev + return val + + +while True: + print("1 - Создать список и начать итерацию") + print("0 - Выход") + choice = input("Выбор: ") + + if choice == "0": + break + + if choice == "1": + try: + data = input("Введите элементы через пробел: ").split() + lst = DoublyCircularList() + for x in data: + lst.append(x) + + it = iter(lst) + n = int(input("Сколько элементов вывести: ")) + for _ in range(n): + print(next(it)) + except: + print("Ошибка") diff --git a/labPython/lab22/FileName b/labPython/lab22/FileName new file mode 100644 index 0000000..65eb079 --- /dev/null +++ b/labPython/lab22/FileName @@ -0,0 +1,6 @@ +5 +1 1 0 1 1 +0 0 0 0 0 +0 1 1 1 0 +0 0 0 1 0 +0 0 1 1 1 diff --git a/labPython/lab22/FileName1 b/labPython/lab22/FileName1 new file mode 100644 index 0000000..3eace17 --- /dev/null +++ b/labPython/lab22/FileName1 @@ -0,0 +1,5 @@ +4 +1 0 1 1 +1 0 0 1 +1 1 0 1 +1 1 0 0 diff --git a/labPython/lab22/FileName2 b/labPython/lab22/FileName2 new file mode 100644 index 0000000..4f9ca00 --- /dev/null +++ b/labPython/lab22/FileName2 @@ -0,0 +1,4 @@ +3 +1 4 +1 3 4 +1 3 2 4 diff --git a/labPython/lab22/task_1.py b/labPython/lab22/task_1.py new file mode 100644 index 0000000..c62c849 --- /dev/null +++ b/labPython/lab22/task_1.py @@ -0,0 +1,70 @@ +print( + "task: Graf2\nПостроение матрицы инцидентности неориентированного графа по матрице смежности" +) + +import random + + +def create_file(): + n = random.randint(3, 6) + with open("FileName1", "w") as f: + f.write(str(n) + "\n") + for i in range(n): + row = [] + for j in range(n): + if i == j: + row.append("0") + else: + row.append(str(random.randint(0, 1))) + f.write(" ".join(row) + "\n") + + +def read_graph(): + try: + with open("FileName1") as f: + n = int(f.readline()) + a = [list(map(int, f.readline().split())) for _ in range(n)] + return n, a + except: + return None, None + + +def build_incidence(n, a): + edges = [] + for i in range(n): + for j in range(i, n): + if a[i][j] != 0: + edges.append((i, j)) + m = len(edges) + b = [[0] * m for _ in range(n)] + for idx, (i, j) in enumerate(edges): + b[i][idx] = 1 + b[j][idx] = 1 + return m, b + + +def write_result(n, m, b): + with open("FileName2", "w") as f: + f.write(f"{n} {m}\n") + for row in b: + f.write(" ".join(map(str, row)) + "\n") + + +while True: + print("\n1 - создать файл FileName1") + print("2 - выполнить задачу (результат в FileName2)") + print("0 - выход") + c = input(">> ") + if c == "1": + create_file() + print("FileName1 создан") + elif c == "2": + n, a = read_graph() + if n is None: + print("ошибка чтения FileName1") + continue + m, b = build_incidence(n, a) + write_result(n, m, b) + print("результат записан в FileName2") + elif c == "0": + break diff --git a/labPython/lab22/task_2.py b/labPython/lab22/task_2.py new file mode 100644 index 0000000..9a9091e --- /dev/null +++ b/labPython/lab22/task_2.py @@ -0,0 +1,66 @@ +import random +from collections import deque + + +def create_file(): + n = random.randint(4, 7) + with open("FileName", "w") as f: + f.write(str(n) + "\n") + for i in range(n): + row = [str(random.randint(0, 1)) for _ in range(n)] + f.write(" ".join(row) + "\n") + + +def read_graph(): + try: + with open("FileName") as f: + n = int(f.readline()) + m = [list(map(int, f.readline().split())) for _ in range(n)] + return n, m + except: + return None, None + + +def bfs(n, m, start, L): + dist = [-1] * n + q = deque([start]) + dist[start] = 0 + while q: + v = q.popleft() + for u in range(n): + if m[v][u] == 1 and dist[u] == -1: + dist[u] = dist[v] + 1 + if dist[u] <= L: + q.append(u) + return {i for i in range(n) if dist[i] != -1 and dist[i] <= L} + + +while True: + print("\n1 - создать файл") + print("2 - выполнить задачу") + print("0 - выход") + c = input(">> ") + if c == "1": + create_file() + print("FileName создан") + elif c == "2": + n, m = read_graph() + if n is None: + print("ошибка чтения FileName") + continue + try: + k1 = int(input("K1: ")) - 1 + k2 = int(input("K2: ")) - 1 + L = int(input("L: ")) + except: + print("ошибка ввода") + continue + s1 = bfs(n, m, k1, L) + s2 = bfs(n, m, k2, L) + res = sorted([x + 1 for x in s1 & s2]) + if res: + print("результат:", *res) + else: + print(-1) + elif c == "0": + break diff --git a/labPython/lab22/task_3.py b/labPython/lab22/task_3.py new file mode 100644 index 0000000..d067a4b --- /dev/null +++ b/labPython/lab22/task_3.py @@ -0,0 +1,80 @@ +print( + "task: Graf10\nПоиск всех маршрутов между городами с сортировкой по длине и лексикографически" +) + +import random + + +def create_file(): + n = random.randint(4, 6) + with open("FileName1", "w") as f: + f.write(str(n) + "\n") + for i in range(n): + row = [str(random.randint(0, 1)) for _ in range(n)] + f.write(" ".join(row) + "\n") + + +def read_graph(): + try: + with open("FileName1") as f: + n = int(f.readline()) + m = [list(map(int, f.readline().split())) for _ in range(n)] + return n, m + except: + return None, None + + +def dfs(m, v, target, visited, path, all_paths): + if v == target: + all_paths.append(path[:]) + return + for u in range(len(m)): + if m[v][u] == 1 and u not in visited: + visited.add(u) + path.append(u) + dfs(m, u, target, visited, path, all_paths) + path.pop() + visited.remove(u) + + +def solve(n, m, k1, k2): + paths = [] + dfs(m, k1, k2, {k1}, [k1], paths) + paths.sort(key=lambda x: (len(x), x)) + return paths + + +def write(paths): + with open("FileName2", "w") as f: + if not paths: + f.write("-1\n") + else: + f.write(str(len(paths)) + "\n") + for p in paths: + f.write(" ".join(str(x + 1) for x in p) + "\n") + + +while True: + print("\n1 - создать файл FileName1") + print("2 - выполнить задачу (результат в FileName2)") + print("0 - выход") + c = input(">> ") + if c == "1": + create_file() + print("FileName1 создан") + elif c == "2": + n, m = read_graph() + if n is None: + print("ошибка чтения FileName1") + continue + try: + k1 = int(input("K1: ")) - 1 + k2 = int(input("K2: ")) - 1 + except: + print("ошибка ввода") + continue + paths = solve(n, m, k1, k2) + write(paths) + print("результат записан в FileName2") + elif c == "0": + break diff --git a/labWeb/kt_3/booking.html b/labWeb/kt_3/booking.html new file mode 100644 index 0000000..6aeebad --- /dev/null +++ b/labWeb/kt_3/booking.html @@ -0,0 +1,94 @@ + + + + + + Вокруг Света | Заявка + + + + + +
+

Форма заявки на тур

+

Заполните заявку, и менеджер свяжется с вами для уточнения деталей и подбора оптимального варианта поездки.

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
После отправки вы увидите краткую сводку по вашей заявке.
+
+
+ + + + + diff --git a/labWeb/kt_3/cards.html b/labWeb/kt_3/cards.html new file mode 100644 index 0000000..bbab1cf --- /dev/null +++ b/labWeb/kt_3/cards.html @@ -0,0 +1,49 @@ + + + + + + Вокруг Света | Направления + + + + + +
+

Популярные направления

+

Подборка направлений для спокойного отдыха, активных поездок и насыщенных экскурсионных программ.

+
+

Турция

Комфортные отели у моря, тёплый климат и удобный формат отдыха для всей семьи.

+

Грузия

Горные маршруты, уютные старые кварталы и национальная кухня с местным колоритом.

+

Япония

Технологичные мегаполисы, древние храмы и сезон цветения сакуры в лучших локациях.

+

Италия

Классические экскурсии, гастрономические маршруты и прогулки по историческим центрам.

+

Исландия

Ледники, вулканические пейзажи и насыщенная программа для любителей природы.

+

Франция

Париж, Прованс и Лазурный берег с насыщенными экскурсиями и свободным временем.

+

Испания

Пляжный сезон почти круглый год, яркие фестивали и интересные городские маршруты.

+

Норвегия

Фьорды, северная природа и круизы с остановками в самых красивых портах.

+

Марокко

Старинные медины, рынки ремесленников и поездки по пустынным ландшафтам.

+

Португалия

Атлантическое побережье, винные регионы и уютные города с богатой историей.

+
+
+ + + + + diff --git a/labWeb/kt_3/contacts.html b/labWeb/kt_3/contacts.html new file mode 100644 index 0000000..8c85ccb --- /dev/null +++ b/labWeb/kt_3/contacts.html @@ -0,0 +1,44 @@ + + + + + + Вокруг Света | Контакты + + + + + +
+

Контакты

+
+

Наш офис

+

Мы работаем ежедневно и помогаем подобрать туры для отпуска, командировок и семейных поездок.

+

Адрес: Москва, ул. Примерная, 10

+

Телефон: +7 (900) 123-45-67

+

Email: info@tour-example.ru

+

+
+
+ + + + + diff --git a/labWeb/kt_3/figma-link.txt b/labWeb/kt_3/figma-link.txt new file mode 100644 index 0000000..7e23726 --- /dev/null +++ b/labWeb/kt_3/figma-link.txt @@ -0,0 +1,7 @@ +Макет главной страницы в Figma: +https://www.figma.com/file/example123/Vokrug-Sveta-Main-Page + +Описание макета: +- Первый экран с заголовком, текущей датой и кнопкой перехода к заявке +- Блок с ключевыми преимуществами агентства +- Секция со слайдером туристических направлений diff --git a/labWeb/kt_3/images/photo1.jpg b/labWeb/kt_3/images/photo1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f39ad9bbb3d51e6f8058a3e02b146a8c7b4661b5 GIT binary patch literal 176406 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�l`H`UfHJrGpTI)<{vFm?w3 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 z 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 G(*FU0Ee2x% literal 0 HcmV?d00001 diff --git a/labWeb/kt_3/images/photo3.jpeg b/labWeb/kt_3/images/photo3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b49d0513a8bc58e8c6d88af7e757a45aeed9e721 GIT binary patch literal 10281 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 YM1h5!Hn literal 0 HcmV?d00001 diff --git a/labWeb/kt_3/images/photo4.jpeg b/labWeb/kt_3/images/photo4.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..483f7f8740124e18f763c99ed2c7e2f0a824b2a9 GIT binary patch literal 10831 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 MlHrIh|6$>O0BwKjd;kCd literal 0 HcmV?d00001 diff --git a/labWeb/kt_3/images/photo6.jpeg b/labWeb/kt_3/images/photo6.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c2c3c5ff8f40961e3aaf254700881340712cb1f3 GIT binary patch literal 9938 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 JQXx-^{|}lgZjt~1 literal 0 HcmV?d00001 diff --git a/labWeb/kt_3/images/photo7.webp b/labWeb/kt_3/images/photo7.webp new file mode 100644 index 0000000000000000000000000000000000000000..3f39e6c11c526d125f72ed6561d8aeb14c905019 GIT binary patch literal 78208 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 literal 0 HcmV?d00001 diff --git a/labWeb/kt_3/images/photo8.jpg b/labWeb/kt_3/images/photo8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2508cead81d2009feaa54a02cbf50a509cb061eb GIT binary patch literal 115885 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 KQZ0r3H}ijr`YIv- literal 0 HcmV?d00001 diff --git a/labWeb/kt_3/images/photo9.jpg b/labWeb/kt_3/images/photo9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..072dd614982d76ee9264e53b66593558de45bb79 GIT binary patch literal 78665 zcmb4pWmFW-8}8DrbT>0CnTPNfkLkPtzTmJsyv z|8UQ_U+>J9IcH{`dFPy&dFOrJ=ikb|EdV)K6Ql{i!U6!W9xLGA8bBR@kBf(ohl`Jo zhfhF&Pe@EoOiV;XO#S33DLEZAJv|*YEiEGpHya}p7c(s_yAV4U4==v}KLeYvm@uCh zHy=OW|3I(^2ndJ?iK&Q*srVRa8TtOd%fCJV1tAs~TL%Y=0)S0{g+qb$ZwSB)0AOR| z{LkF~TX6Ak@UgH70ECadYUBWHENnb%TwFYCJRDqXEIcf199#+j9wmo3l`1}`p(C|K zKpX*=T22W~lTrWdw^Lf6q*Gx08J#*IoZGmx`4NKw3-E~l|11D_!~o#pJ$6Yx8iI|5 z3&6$2f3yLB^JoGVHU$R`rMT)N^eHaYBX~|pQ~#{mH)^gkqetX_s{qo+k=PVC6oBV| zikn`sDW|+8J*=EVl7E0LcJZF;Ufzf(@#U&LVlGBRY`9a)&b_KWW34zY%r!LEz`SuS zo)EYmlrTH>4}jw(ka1VEeEK_Qjl-v_g7VeNWKcP#2Ax7FI-R$=@%9J2qBupV62{{U-*A7y^jeHBTR?@=|}y7`L64T)y2F`6_(d!WmhB;(icI~#l1)_r>` z<3xJyTGPX0D(7vQ>ucBCJ-SRY|Q~KjFkoe_(~wM|XUvjA!NBd&4_cU3Qb1p1lbE zW|=b&LL?1Nt;Q)pz0;hYfYbOe=jMm}=jiX!h|5oUb$XW7mI=Nv&76P^Ap#tSCw%j$ z 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

KJ{V>HYVNkz1&R#{a z+}m}xW7^ia#N|xZPk1i%Pd83o#W|^cikVI}+mLUn)FQvWkVD=`H7Hf012bxPY zC0ujTQ?pCd1tH|KTnm3a{qbGYs6`uh!FbGSmX4X4C{ZdEm7hVi$+n~We{6EXJD;J^ zCri|>R#%F+Q#q$sh6`w@iMA@rO`HzklVkJ;6ph90dMEo7s#7eKq#W9Mxm~uY1*8L0<>T@mA#o=dk4t==RLv;dY$Ap@>at3iB-E(weOkyX zWBN_^7P#O1u}7L@)27h-ETpEWqk35)Dx>qDmKoT!o03qQ055AEY<;kmPSDBPrYVb| zQ8i;$%_7posL_O07e&=~xV`RscDESMwiL3LzD|GO?+fO&a##3}RS0LxX42Z7nrUOT z$c&x5s>^QYw`_62H1{2|lwHU1EkPxq%jlLGlQP7jO)7yHyD?T~)8!yoY(4$4+aC@N z7vjHL7^Z&=wbZo>9W1i+86}Jotm;S`HS9gF+xb?N;ALt#5GL9y|SxZKYnW^lP<2Mt*WUJJaW{}8udzm1d`|k zI{Jb|zrHC6Can>iWfqjazzG#WqWE`?N2IF^g4Vi?B%61*Bnx)ugM$2C76kVAk*9&_ z>hk!WlQHPbrXcjykxR6j`R)ed*E=77Oe`F#nA(arxavO^7BT=h6&Z6Fg;&GU$g0mX87z!^rIz4r zdx75Px!%%_Rh;^A!>_ovA@KfLCR*tiifu@-OOpbL<>rIJm9>88}OGdGqqJzn)S2USRA6 zO$9WCejZ08=ykG`VQUpSc07Z&;Np9K1<_R|mz{I{m)w}rR#0h)DGgL$`DRn{^XqGS z_P-eD!&Y+BPMLS2pv$2N0G_5OnwS@bUr-E5K32CMO|d^0L*dnhn$?Q7F210gXl7Pt z9j-5X5zU4M+e~YwikJPKQ=ZKt$s7cBXTsWZaeJ;M-wt=e{i&ab%k2xF+j8RTye`Gr_K2xOZyrq@|sl@XE{GLla=2XY0u z-<&;dR8HKTmyEu;o{8;HU6q#Bdy+-?A5TnjN)B8dF_MV|MA>~NVm=I)DG?;-!PsJ|w7)p`sMRS6dlawvL!RhpoTY244=Ey8_jBR9Y#k7FX0| zT^6?cT;H+oG05Q3;I-ItwbYP#;EYUS8Q27p+Iotmh5qVt?n~ z6|qo71oFsTC5XlW^52~}NyRLnrgM)S)>9hxr_k-wIv#L>{{Z_}Zrg9}eR12Mp4&O~ zUTGB{49yIFB(IP}&t*XxDjScPLfY1`7ubvJaZXc0%L*(u6E#g;WHG=&S(v-Awusc7 ztab-}cEL{xwj)_-B7BMC_*$A;dg&=>)k`}__Gvj&VQZa*_}>Ba=s8W(FmnnRYr?e~ z$lyBD$nqCx*b%rKADKzN1mjbEh^N>qo7 zb!>`eSW-zNi6cEV3w6*Q>^UR@x7XXY4=$Sr3g{N1dF0FnsdS)CB%lR#k;nvh0PlUQ zaM4L1Hteg^v~te%b2C&(pZLtAjqSCRTHtrzZ{HM1ors}|qN;q%8fu9rXiCN+xe31d ztT)&nt-kn1@XJP%h}*%n`JG-x7GGB~ts}3Q<&3aP195)#=Kk2!zNg3}>A1vfnbh%7 zgO$6QSfnB@yuC(dzV_pLasBbOu2>VSA=YgjNXTT06eX3=>wT}i!w>L~0pE^rv90KA zxH7Ba0&4Q{(nC-o2wqr#0RbZ91IKV~cg1*lCmgI2WVPK|^03DL00gQWud9pfNap(y z{{Rj%&5MOYkB<0i@B7}REtT6)iCd->P23IkB!TARe_ToW6ieUcD9mf;ikd-|(ELRM zm33O-b!}g$7Tj2GhTCa+8ZR%`-|As=NuM)m(y6GSAw*)E&0%0}LEA|n-0^?54S9)t zP`|`Rk~-O{DXVGIE}RJ__-mJ`d+B>9++TgKr+gyD3*G(5lPRUlr}#>0NT8;s0L-l| z?Au)&f>`iwSAs`uGs>Y8Y2RabGDfd~Y92E5)Xv0Hi8=*SZ2-3R+T`BHer<~*S z8;MeCn9W5rt5mHZh~1qC(QP~np1}P*@Yxs8#M#W%loLT1PlguLtP>@T_SAk`*ls&u zsH@y-#?VP6rILl1Q$;6HLbAL%!TUFs`+9ozm*hT0)iKNYP$ab_qG`{@`<$L ziFpHfgDYPVWpy-CJVA8nSx1|s*Vy;m8*jEYq!i;p)0@+kfMiwG*``?YJcTEunW-vc zVW_mpv1?zx$NaD~=H`@;bs)6l;QgY<1e69l*Z6jhqNI{uSz%Jmx!l}ej28=bDxG4> zE>Be~aiS$e4^0|1gA%Sy`>Ep#B%Ww^wy|Yi|L@JW{Rc=!q>|lmyf7-~@sHdfs^7(23F03IiznNO)PL<_H*X@R_z+McR zO-)To)fLmMRIx^h6U!3>vC>Y*wf4F8!AT$|DR2jp=bzN6=aQQ?mU>Dj=*t9BhDW%% z*~s3&cHp0EENV{B(oQRD0|=DtV-&sgf3o?2)SKBwKYm z@4brpVQ0E6SYfrNK-rBQZ5~sW)94jdCPJanHFX7z$s=V3{2TG#uu|N^NhZkhstKXX zswb(LVTx%QNuX}m0C_Z@qi>IbZl)gWUGtUi6NyMeaX z7Ta;{xq6RpIT|oq^TQVSL&K9F4${XIvOQgVZJ5+hYgkgnL}Ni9=#ZN}`*J-9=cy%* z3#moQ-?}YyJ_ewAYDgxjsD_$4UWC-LN+pn<;^140Z~gI2&uwx=EZ+<&r|_>TYFVPo zbBgLko--RPwv<@&W91|F#COh`E~?auE@k*N;>s5jWx35ZaZZoa=n`X>R+0-TdyAW% z7!CNxJ919h(+O$t@I&D&s=pzYrlU2co|c{nP5vnvS|&!~-h?+JZL!htxK{Z80AzkO zsk)Cp=(x>EM=o0~V;xk>@a9I0!um=c0Aj+{++1_P$3*1+027iCP3MBKl-FjnRVbG% zb*!c81$dO$vG?GEx%D0JicU@1;H;q-B~rBi05YlKT*0eznds|jSK%sEWuiJ+3do=- zyLUq5`9{~`#Ba&3E#4144&Q~2-}@I_{{TOUe(<#%f6-SgsamBZC`6uA0d%MZkfAph zznG7xCmpbZjA`_F^O}_0mT%u>d&IHS<$s3tb#;|9n#tRzcpOTgq>43*4fwbO-<~l! zN$k7w9uSYrX>pKjgEkS0UZ3v#;Hev)ry9=1DRQeH1JZg`FGYTh5ElPZ#V!$gk>onY#DuDrT7lytQ!kp)p`rD)3TPa1~mZ+q?O>xWokJjRFGLJ4C<1e1XrO5XR#;)F6nRZn zV-qQQbu9N{)+hW*Y*zjKaI$IO(2H!^nT=A%BpGmzs2fAX0+&`Dwz084?S`bg6Lr&} zmxt<^(g8*}u=l20)NZ7O4DfON&9W@XuRHOcz>Vm47D zoA{`$4p}U9PSI4#81$ps>^8VOh2Goq_s4FV-NDZ#T$HS$SSYhYQ%`qSMJ;B~0|MZC zmACgJ7fS6CmD2PJimFpvRXtIeDWzr%(dp7oO28!U()>kyZqVhSjqG zHWu{tJ+Fe^)oj&mBwBMicxm#M%5qev%PS>7>hk%zsyWcxp;`87S>`VvH4-Tv%S) zTweCIyJB3u#iNf8-}Vlrj7?27N5n}jB~&6QBf9w-;^ZFt3-N}RG$c5(tC;0q8~A@MMRERvX2W>Xqh5Ugn(+`FuRD>a6~ zQGM7X3HBlx{EH_%9rb9}=#`(N&70 zTbT5zWC7WND!_pnaBhIScdaA0HjwusQ<-Fvj$stuuw*-HCdgCifk+9xMu3<4s3bruF@M<@b6kjR0 zwT7#$t>JZBVfQ+t*@1zhH2>iAoK`Z99&lQuptXFM#u^dM^)r zTwnKvN(Nml(xl|zW$ z-cmim-_s1^xK$?}1Phl(4PwPgvNar$6-kr=u@TBOwgj76;>28B95uVD7L{H5^A*(O zCW4->Mv%`Fv33z5bEkWfw-y?R7VmAbJ*jY2O4_s86mdZ$WCGC_8dgFXbsKC4VeNhP zx2_rrkh+b?wfKIuC(K}^q>e^Pf_1XEV!VzQf!q^pX-gRbjc{LL%VUN~W0_WHr2v#+ zYmwjU^tL&7+O>k}HHK2WYvJm->T>8(H=inL^;J*R^CAKY#z7ntu^@4^#qmhVP3;5l zCneA9d&Ko{!9!T{wJK>%LAFa<`|-!NDyk~q1d?)ekxa_vlQf=u&T8z|bY~_RGU?Ug zr-N+(qik40&vN{tl1f^-O85}4k!vYz$9t~mMU9VP zh1+hClZ{&fi#}RtWuN+W6jk65M3n?ajkWH?T|uzij5O6QMT$;b38{QTn9=6*R?kID zy>cRMl~TIK0P-cRrq{ok{{X7^Sj!$Fl8wI$ptw)Wc#DANpGp{*Q-!$~IioRLVfO1k*r zB`2K~I%SwU05pw>H|@Uv09+!9XnSekruc?}Iw~n9$s~+LJ1adGl%W=}X!qM-E;#hX zwB+uYDJ52l{RK5OTbgrs-+vOV=OB_a~N-C0K&aNVyEs4MyAZwfF7F zIJ>@%WRrHqUMY%J%4IaNQo~ZDolB&wj(0Z}HoqkLjk(06npiES)TQDPcwOoyj#rFF zE#c7u$r1dsu`gq=)%%fa4soK@S_GD9`~LvI!% z0|hr(2G!O}JA4*#kkYA{mDWz1$r^=J3@>Y5-~)dx@4vP-Y*oOE#}##68CMb#0Nic2HsJeW ztH_h{J(5??G|x*spf0^)JtbMlz0+#~3X|#B-vRlBJkkoU%wT1WCP{h}@&g@5!-l!B z8eMr}1&KfFgEYbYAY$IV5pL%j4vA0*Z{V>0e!Bv_2B;4buQ>f9;^a6p`{f-dm1A z`W#zQN~}`hg@#Z3ZRkdJM3FU?;%Sebe_0(*3^ALS)jFl_~+hX~QatRB} zS_q>Gj0UcuJAh638=KzS0oY-ciGqBM<)wwHXJTpDnI+NWGBM&XPtEUZ0qcdHa5Q|; zxXd#8y!x(ez|1LQMGAnMEt1+&+p*^7gZ92BwWz-`mvV~e+ro_m$wLJxvQp6`viZpb zhSa+4$vUnFBXN!Q16J|t``M2bQO{RdRVAf;7U}^dfK%8FCvNv6(+s|pjNV%hTDHrh z2}?%`Qp0HFsYkF!Q|BcP;CZy_2G_!FPFdi}Ei7~GihM|Ds%YA@EA@u)vk*km_p;w* zuHy3+vN=6xMpiI^PE6vVpwU!L#<4*>6FOo`m7Z5-uMz+Fu~Jn z?s}F=sicCE8mXkFP2_}W@&UcV?S1WUPhGIj85gah?8<{M&ZLB8h=v-!&v>aLz)lEE5jit&i!GDsw503RR%#2brT4bAKZ2(iIfm*T0U%O$5W$1})Lrgi+-LZRH9 zt$W+-MjoxC6xP`mKxC`0qo}A1YSa};=OW5U*o7l=ZASgDX)X!wZ4&2sv~tev4A96T zJWO}jdlPS=uo%(8G_%OEYS)@trp%*~o>Z;TfuVBBv;26}+n}Zx49wXzH4-rzNYWD+5T^WM$kTYwRy`?g+$Sr5U*N%g#!A zYD<;x`YsusY2nx_rHo6PL>9mxiY5vzw(Kr(IcjZm%EL{{Hjxfz;utddt6G8LH1Slk zJhBTYQgF|4c|)i8%BFqiTa`S9$M6S zH5D{fzYkeY29Z+-mL|D6l*WE#+rIk(2sm$++)})vYf_taY5U}@_$$M+Oo7`i$?Mk~j5|hatHEJ$vH55;w*&C-Ds4U}cTOF8#a7M>)dyH+@fVk~f@86f1 zb&DyY%kruIFiSkbAo8-E3~#o;Y&kx-=iMnw45Exuwp6I{6wN9ssj3!Ko=+qTRDsMY zpxKqT@|*h`;ht5qCr+cmbnwnaMd3W4$4XvTYjx_RH+c{F4{Sv%!A?9(ZBdw>jBK&> zSh9ellYC_ina>t7ok)#bAOhBKf6o(7p~?@AJT*gKH9XQKI>}8N7}j*xx6S3=+>YS= zv3O0a8r=Et6YT7ATlFRWC#~qpC0N8E4*7qMmJMDQocF4mx{Jr{?e+o3x zRkb{|D=u9sB#6orvEttNoYiFy7t;}E{v3`uGZ-XE)W}{_B3+D{f%1ds zK>%N1LBL5kU}q+$lE2|^3g`5zm*rGn(`s@=c6n-nv#K|kt1qqXW)~Z7Er}?~J{Q49 zC`mc5sCAfR8JCBlow6LR7%AFvKk<#OYzPY8V0Pqfelb|dB~cPfbGeu5Q519$8R^y< z$3zSPxkuXjgV>AxuqAT)2^xy^EVKkk5RybeF&fb&eEgD$J^aC*wBLORg4mFlP#+TFKnuKlgX8S6>aa4caOcJu9kQp_Tvow`xZ z1cf3(bd(#1LM`(t)o)#nI-%mqIi|L{U@oJe<(ah>4(9ehLx0jgoK>vZIKGXl>mi>k zlthIp59GztU^R| z$^Kw|8tTpQ)Ug?Q)Ss6;HHxZROA)BB9klkjI6Ul&ki)lcF2T*7&t zx;lY9JWx4B1bMCIQ>x)DIfx@b_UkuHO0(GJp1PijN~Mwz&#gyHj@KZQ*lsWP`r)axiQzVH6l$_KSsI~BGcw5J0=5SJ zpzdyW+Q-($@D9UTT~srrF=-w&v5rG$3U0P0``C+pF+aHJqJFhZbD)!_BrqzhkG7y# zk>$OvO}}DrX?55wu6hils+F@EuCqlNL={4$wz`NgHqcj5HPjGZeMWE?~&bN}!W#Eyz3AH}kmv04x_8KvKzL60#12QLJ*X z*BfcNHr525=MbyQEU|z($C{3q4RK2|0@g$-9m%&g++O6KMX<`G@GfGqbNud&=ckp~ z)}2wbJhQkBAsdsv_6Fp7-xt9+-SAfPiqlh5mr_y1P_V^hP+rJmy^F9MH+x`a$5BcS z*u>8iFw7gLq3++7HXCkidk;)g6_QCk*dxkm5*(VFqab*j%};IG-M95O00X`Re2`}C zw#RgHH8Gv@N~2b-5d=g8qA3X$4Sx2$?Y8F$&jG=do(83cbi5M@l*ox?QVF)g{-=Y! zAGKmtrfK48sItna=Z0Cjhf6vZ3(3BXBKP9w3ZIzjH^BET%hsYbo8gT@3%k?ky0<$H zKWqA6PF0Hp7VM&I)=41BV}g#7oigbYM)7JTHzW{t9CyCw6Rpq0$4-}p2=WP{{=EWF zLp*e~5^DyaSynKj^B2Z{{ZAM zB^yZ;Z6?}6-2EY~po1+(oJW`vvN0y%Z>XDI{f)l1!zkU~M&DUofYYN&^DSe%)BrlA z6l3!he^DcwY5?!Jw|pO7#9mzo($dprRB^*pkWA?&noysU(ndaQBv|SMbMM8lB${o8 z4K+kHlBCqL(o%Iuw@8KuP+{x7_v3E=09-VD*f_!!MU%Sa<(ipIRL&A5lEAMPcPDYd zJAW8wEZ|ih*vQ4b3}T8p>a|$x$uLa^U<$6S#eq9>g>SxwQN~BH!0SyUl@zq!66(fQ zg??jeb8b%9mH8A)%wJ5c@eeE0(ZbCdTA|m>0Nev}e@@t=@+Q8*pAkP^9Kty!Sz(4q z-GFjNmp~7D4msQny>KGE26*g2Sy2RZ(ZHr^M^mWDYcX&Ql-TS5w&T|o&m@vUTCC1m zDykTzG4(2rtz;0&MVoSX`F1|%8rqdHwr-1PvQyQ~nO40;Muv^t%PGJ9A!0Tr;PdT< z+qF{Qn|qtSNbBYlRE+r~a!4gtcA8u3vfkxyZ6JD$@Ry5Yq?@2v+BvEi*5=ZzbA@uf zA2TA?rj^@~E=?iJ*g}H1~Q|1|lXEJN2kf6HBV5dkxNk6LA78k~a#_zDsq>_(A zQ&T-V7*SwaeS?i6%i7xu;*Aqr2s6sG5&UH;&cX>VEOEuGN#?LCu+wYX?}@o>sdQQ~ zyMyGUc*8r2UlG={)DueJs+SYOm$HGu+;PS@b&_*`=!qo$Ye%eH&r@9NRiM)eJs zP)DXng;foLFtzSWSoh$4ao4E_H1m(K$EP^Ks#f2qW=};>GRWcnua?%yBO*&%45zBF zTJ99Fy~*2REpkBZjTp;qFiEY~Pt)!{kIzVgpFpJpL~;NIpK*Q^ZDV75V$S*_8oZIw z)}QNDv^5ukV30~p^oRVlQp@NITv&HrF+Dum?0Kq5^+j{WnLSo{p5^rvl@#+qPpu6k z$IB;3>U~$*`fPVQn|kAyRv-2$^XPQxOa8YGJ%0Rt!@myF#g>(xl3ID9(lrUuV@SC- z3I~?g=X39ls#Q$q+}pHSa`lfVL03j4tDa3FXF5n$3t&aPg|E%9suyXQ%BhiNUM-F+ z(v2q!jZ=7?+Ak_^waxv=2iF^7kA!P-TafxJ&WetSk_M6GVQo@w%t<6}Kjp22`BHBt z`H@QiHQBg1Oc*v@IQgB2RnPeiuqywB4oxFmDGaq2IH zZxq8zn2+kIGZd*U6wubd;o~&*01YLD^amC?cOuQ|F*NIu-dbf^uf%x|hH4N+Uhi2t z05ZrwJ)+-a1uh61k6aZv@gqGcKN7)v@b-TmXVWbOO*G86>D0%du)iR1M`P*V3n*35 zl(@3J_`Gu}G|TF8YRXD!F3Mq*3F~ctDI5?rU)uvta$FAd;U$sRf;>v~^n#vv97>lO z+*m!W$G8Mv538iUq)Se1cv!>46j`-INiIP=akv(eDO3{Q`x&+$d`dG>#ENaaqHhg8 zVsglvHKvl9apfy3DR#Fk+IAQ01~i;s(rBqHG1PO5+g0z0xQ}I5@i)W&0M&9fsHKb= zh~y70g&L$w5O?Qm-u&9*z8gwaEw6!P!)ue4RMem7^(`!G8^YdcWF<=PW#6^!dyiXV zv9!}{gjG636-!l7;%uUpk&>=Qkkm%u2(XD*65(xa$_+!2zW9@uiC4agMJWMivLl>3f@Y^u=)2NM$jmZzQ#boKr_mCsMBBM!uoF#}@+k_rgVO zvD@816nW!+Q7s@96!i?Wvq2JWuBO_emUQUPfbO6pR} z!vZz{4Oi`RzBG8qXU+n1Y3rRJa-R`JJ6M>MlDDza%Wb#4i1o&bjnf32t8x@(Oe2n! zDPVetFjUbRv?$OrNYw#W_tU7T+S^|CBiD}B#L~;Mjo@3ItJBr3LdO{Rl`8Hc1hN5g z7>*6V`(d={;91>RK2J5}jzA1i6|vH9sg=Dy;n?BiBujQ#BUMmEB$7$5fJe&0=f8ia zIOdYt=^YSug+3yvr+Gn`JhBMNA~3d-wXbdL2qym4!|BDOB-&*gIvr|q^%F@fLQseZ z^GMt754FJKzADlLTN=^DK}+F^wVoN?IoJtiWCgVVN;2(xY{S%d=V{LE4F`5t1a%eE zvxrwqN}gs7Z6~p~{{WrwSK?GGT7;8hGnTb3RZW)l<8`G)X{8sk*jvqh{m;1=3b_Tm z`kLjE(!OG(Q#{d?Fol!K9g7c?`vBV;?nkY#9k=9a+KXAsrK*u$DkYLOK;bMD!gm8} z>_HYH+w<*&Q%PlqYv~fvWt3S)X->73GRsvlECMf+SEm=SAZ`9w4o+$98)}R37CM6Q z(y^$KsgQY58%Yge$^QTd=WI!3;I9iJ9}#6R)nzgnY9~_Lj*z|7bFm`b&!!zqH9}Qn z8jr*DSzQiaG=ZulkaW@HYw5knBIj;@a6PbYco|B4O>rDS0Jg5qB?rCQWjkSmK&38exrMB>xFir(i;ujfjl`wOHn;-N@l7ns+Qf8TnexH=1d2}`T0YD#7dBnx8*B*Q{qSP%3|6ZvfE>(b6+tUniCtnKC|v;q4#5r0yL;OQsu?wYNMA>q z=9!!l(^b%jC7~W*JnbVgf=!0UX8t{}Aop8nGD8USSBhvKPX=vS@%j#pXMN&ALi@W&Z%wAdpBA#Wg`xCr}IJ zI}u@PaoYZ~rFdl^*kHl&&g79BNJ@^HW0_JUJ~if{sZX$m$D;^&0qe-d}UKdOBq(OBXfDQK@ z@Fg9p;uQQ&G6m1FY}6zF08YJNjc*KdvY^$#P}aY<-wz#FrFD^Bn{KZK9*@JmHO?wt z9OWd-DP6~2C=QOQT!X3DkVy0cao-EMNnD@gQxLTUpEg`FPYJ(<-66Db`sHK_ zPW+eMo9T?465v^HZ!XJi4qjo>(Zd7E#Ga}VrXj}N$vB*+e1@bp^?gxx%gtbhx zv&#`<(@-56`!F}!-qyiUQdVoHKpF0Hq|;J~5;^624NL&G+y2;XEj4Y6sW(TeyhlNo z)Kk+*G-}dFsG-e?Cj;fTmL1i>WrVPcTxRNb7=z~}5zc=T;*T&^qOUC#B}y)dHwtvH zBoa5|4lmCg@zDgF8f4s@WoYD5#=|$DrlF}2y$w1+6p_fp(*Z8B7!!85+fOzlYy`Z1 zA3>kd;$DCHbcB@C$dbm)kr}UXZJ3MfJ8$;=@zqBqk5XTWnPsRFJjD!ZZ=`^Jz41ER zgi`M;UnKyNW)B<*ByZHzWYXnTw!OFS&i1(E1GozF}MVc^d4y!VIfpz`;Fg;AMXwF|t(5$YC zqDPUXZAIi!bG5)AcDJXt_$~NTMoYxg22&CxOm!`J>E>x;(H`-k7aDf+FLTdfjaKj; zIRb~n6qNAKnM+q)CWlZ=aiXr1YmlTHfIE+_Hu*Uu3QjGG^PIX#a~X{(){uO**t+xO z^&9r?aag=tCe~>McwRA6O*IP0^2w!VO-FSg?Qc$OP6Y8x(ao+FMe3t1!j%U4NgLem2IAfDvCXi&Dh8>oowD*{m71Mc5J)=xmdER3Zhdgd zD#5!HYey?m#RP;0cyu8}W6t24eeLOj^2JV-mJF()A)qArTU(7Sea5bTpS~j`+btO+ zh55t{BQ(fWm{~#t&wKC9y)f`~fn={GQe{c*(z8nH#0S&lTN{$Tzi;OhrO1}n1`tox zSXo!5!%s#QZDXN(F<=JAR{L+hB~J1-D<1sCHFEqsnTx^y0C5rqU<(m@AC%a0id))b zlbS}^6;n1_O%(3$6v8>>WdRS%a;D>Z*o)t9vA{|4XGyj1lJ`Shmu3{PQ`5x)$rCL> zMFE6ueVXK0wXM$hgNuu{Q8d*JQYM9@S7cY!uSg>0k1TfQVa@QrVgBSTM-i!7xg(M} zR0#qy+=IuL+QS7(yeL+$EQW9Us)(wUlt9W+btTAPP0hai;g^Qu2ja-DHA)PkdYt1r zJy~8ghB$)cWd4XnEwM}5x)UY8)iFQ z6r1VPFJr~_!IgbT5l`u6^i>*_Wr@nHgUTD`vD}07J6qcLYE282#*$S0CYPm+4`}s=@f%)TPu}LT9}wB z%yfMt`A`6s0Pi4u@7};-m7Iv5kj-P1MI4tTbk;@WU2Fx}&&)~n^%xeejFY6uT13{e z7tqgOgpcCietx)W=oi?0y($VSsGzCn%C-+P0KrAPyI+pLVo$}EI$LnLH=?bi%`)>f z3#_n}A#N_dq!M}i;8g`Xv@FdlAf$>aip7pu^qZ*i+k2DF+kW@9D-`h*(Pf$vrSGg-1i)uFa{{T!iQ?p&IzW)FgSNs_*NY5+uODsl8o`RM}I%6@0 zwYk)8FuFIJ^B-NTS4gy1d8_6cV-A2TDBi?#Z~5OH38r(^U;;`;o}?@_l0Zn<2zFQgRQfEm&_cOySEy;Cg)X5$ z14!5sIpB8n#oMK1Qry}D$#VI!sN{OdlBMb;dZ$EdgQ(bQ2Y=JYYYtBMO*qnN@;;=u zJ<(X;dz3>Mu9amZz|og3?X*CxhM;?KVf4dG3k2hqn3l69no8YtGCeIcFVkrDCD!-S zqWf=fcjF46?KD38H1bKC<#c)V98yO(aFH}jvPb~d29j-k$oJy{aZ*h%!cGtOA@D4; zULMNYh8L)gIzZ1=S2B=|CZVb{xZMWc=M&LY4X=bgu4QYN?SHc0G?DyDerw2+9dRq0 z9R|c((%1T%3|cD$o41Yt=xOTeDcWb8(cWv)G%MCejfo4WY(oQki}xOwOMDMe_wURe zj+#lJlA5NvIYgzJ7Z3$1M|~^W<8p7mrVdiDI#Ek8AI@wia+&mgq5i zF=g6J;29PaVXe;>#1@xjeqtoel6fgaa7?kwak={M{9rC#vwG%OudHF;P0A0rH7j*WUYY<{RSsmzf=}$S#gLX(>J) zMt_QH04@}p@3B0N_U8*G)3g|*)iOkeIVO^-AyM%IOj0I+<~BZWfA_$;!MVv6V?R?k zo{FlLZ-G@=5>+=c6|ukX*z?Xba)T;gV8xQRO+0W34w7F;AObJ4oBsf|Guz7oZm9$u zx~gN<&}Mka7mcnypmsjnj3(rV+Ss8al+RGFTX&m?R5eq(0cMULPRdvHc1@Kc-&rJ(9- zl1W7|D|A9G0$a_t*5qy2;S}o}jkfc_UzaS2DkPlr=8UgNWQd*YE^X*e#A51g;FF21 z;cA4Q2PRckGDcfX*8XGf!2bIjZZN^m0hKV-PgP4%bO?aA%r$Sp1L=i}O3+$vnj)`g zGe}JDu0uRD5J;H2Z4Giq3|2Z}_m0|N+>NCIn}8CjWc+;T^Ky-o1(#~p*w zk|eWL7Nr8EfuJKaZcE`HcJjI2d%G)0!l6uF#|G|FR3bk;c*z#G_$a0jL~ zXxuUDi3;?hk~AuHB9^%XpO{|${{XfTP}w2QDpEZv&XP*Ierhl}KT)tYAlP&1jTP8i z=&5GRW1Ya#&PJ392)^Bgum1oy#Vl3&6RS^7&{ESx=2;m9M7Fy!-{c3=NVn7+C$B;3 zyC%+(JkG8`P4MC=;$W(yr(kY8-uBy9(*-JvOgp?uq4q=Ji0HDqQB#;ROB`z)sSJ9Q z04=0nac@(Jy+_3ju{_wqrX3_fLRn%bQ&|Q1+Wn3)cbOTg#6oNH2;+2GREw(iZlJc} z#`_;j4e+sz@-(Gf8db>CAXtiq1#PI2=Og9^l@`HDfZhlo*Ix5dvm_G5Ev5h)JY)Pj z_rE+|_TvKSSZduAFA!%^)Xg;2P<&KVHMKlJRWy@iLT*X}d!BFU#teKY&2B9I9FB&g zFGr@Rj;aaSXPZmuB2#e8Qrm5{yZ7AVE-(jumPliTDayvcL*vat8<8`kV|QvdbIhP@0oZ zOzdM--69%AxhGdAi(wQUTOWGi70lB!sLUr?WRl48qZpmR1OQIg+Wc%zD4>vzZKf^A zs_N=%vq&og)6-B|DI<8$l%JAGxbm{tkO3Qx2*l$nZK3A{6qj#5(Egt=Vake7(;HspyNeKReekf7cKnJ?EmUsoY8zEl-wwse zvk`mq-`sug#xEM-9PasKuv665RB5Mqq-G&lD*3K<-)~P`9yHS{CoXz9c!vbR)uA<=L0*? zP(5J)vPUDa1)PloYjStn?T()&aiz)*rJ9myB#Kr7D!4Q%$oDKY1E`?h#=u{;+h96l zM%GbX@dZU?6e|>!a8Z(~l))4@)*8WBvh%+p!+!R}rsd~FVHo*en;vEC)ifYQAf7dl z$W(-VC4tlcu-sgOdtYORNi}5KY0$D}tBXH>i>pJIMH2LAk~J4_O^9M|sBUgM91N-3 zV`F6{_Zxp%hDvyvs&sV&R3$FPz>8@Ea%>Onhr(7S*6~Bkn=^5j#?-WuQ^O2}dJ`s= z(r#^Q><#w6(+RaP+i8k(xvJ8>T8cQ;;nX))0nc(Qc4i0M9l66(Tp(fc!RWIZnzl8N zOHS@xqLE~K8{f>^i-WMR#z|HIEIMKIm8{QPik6ZFQ6m-?RqWv3()Z(Vez-Qf15I#O z{9jis9$#BhV1!6w)gXzB87@YWor73|zV`ZJGn0%TnSD5^&3PI8KJi$SF^aCHwysDa zq)41-F4D}v5IseKxjnc%j0Yt=BW>H4_d1KhuMft>Q6MDic;s$R)N{?Odtp+iwAX8J zAm-_7 z=8B~ySwlusOj6i_qR) z3`){iR0d}_$mvHt)uin#8Re`F@)wBoPLmsic9sqr-owDY41b#SZ*wa(T*^PFWL z3qW#s4#;y|J}jO-t8`pl)Qy9XHw61{wglmNe`7{fHGP(R!d6!%DKwgMt$_m40tqYq zw;1M27IbpxQ+L&$`Q44+>|HnwfV%U$fBr~oWC%rsgM5b$QcEc5&?5_w%b?}ZN0HnuuZ&%rBt5@ zEKbS`6$-;(o7`WGzrVH>teHF$!#S(VnPabbYAJ}csD$g@!sEYw`yOz$Pl1+I5=|;* z6sBgCl6cd18@8ou6mO{B_{nX4hPzqhPgyJik}ro011V5hN|rjf{`NNPFN!O?i0Xne z*~JlcGKM1T3xWwG{{X22YzZyFPO>-7WvHvm=BlNUJ?9*2H~=S>_PzfANe7><5=|zNqni!NW`eK?Yh{*X3S)cB96jxO zSYP?~z><8#(RrpRsez)bs)$7?r&Y8}!ogSkH|zob05gY+#z7^V59(=NNYmj+S&C?R zMbDSmcl5va!YAf6VOJtasw7xkT_SyA2wpogDYy7R`u*_y;8lSpX0HrFCDYdcgERh) zEIDHJubN9(9)B5tiLJ0d-HxSEN~KhgQ^Y5a*A4AVkAQP$ySQw$fSJ4l6#x&zBSUJ zxpv1i5GuyY8^{VZh+)RqR>Kuo7uD0jJv~vVRt~Z@mEOZ(NhfkQ`#5ov66DM!D%GXR?o89Ftqd1NfT5Sk`{E2NRfu>SwOY- z-0j95Jh}sT$W}ucT3(@qghd@dG zN6_B*H_4Gy$YahbD{5(}V~xz!aord5LdK*m*@)W8wzlMN>xe?v=3i55Ux9C_DP0V; zriEGdl^}##RUJkM*RcUFeOgC6<6jl%2C20DeW8^$Vrl72)zE2;<3Oom%)pyzBHnHG zw*Bz(Nr?v2z=y@Tbu!S>PfbL$%^h4S(GqpZsnl4n(`z?w*TP{n_Z?+R?9H-#l*3z4 z&{np(iA6PrQ9k=Xnhf1vzlXA->@f4Fpi%CNiP6*mJVH%OaUT@_j0od5# zt-K&4lefW1hawQvGG>#CT_6T+Ad;k9?snT@e&pdJ1i59Us^8Lq{3BQJnU9EJp&{X( zRE^ps0km|-$~fohFf{XNd52X~P5FOi{{X|3usroqLqbJQQCLWp3mTr}lezES*rn|t z{8?v4p=w%M8AJ%H3IG_PH$ARTH}^Q_l9ZlH!Nw`jsn<28ZjBTYNld>Z64xV~Q8+b` zDt&NJF9K7Ao@#Yn0yc%5IAShtQ-QfVpL|)UzDcdif-JtG9L7gV31FUM6P;dak{OrVRpX*}_;7dQU^EN2+E$&{p%2g|9Rk2#RjRL34wqo~q{4Am1k+*l3;w&wT7 zjxAOOmRGOsL>?=o%S{oUudO}eb%=EW83Es>7>$V0a0fl`nyDn)_t@Gkw@cq&$*+Jj zoWC=n{-X^rT9JBrUE=_%gR<&f?Y-~sgQX>_9qX}m6VsN*(C$9HJe4!dqFQ%A2vN3> z-z~cze|zD@?*?kGI8>%WAr>tdy1v_nvAw-7g1tcf0jnt@Py3>=)Ba+#gsIf=6Jjhm zAn|@J=x`~gXervK_zdBWnueyPXiy4frZG+nT$g6BCAd2q9@jryBUi}Ld{C~eQdCl{ zI_2U;KqF|h23Aik$x?LrdyaUvG?k}$L5pdu(>afYJSXB6@uY8*BK8u(cTWt2@rt-y;;nFz5~we9F^ZV2uMC93wl z#Wd2AaT55CE0UKujzmM&R8p41eI&!hIBgZ5G z-$-RP+z$NM;+k>ci#c=T3f8Ld)XwTm%km;Eix79)_r)8j;F4DtWh=v(ogGXy5Y*F0 zS6dUyM+MNzvH3NYC)ZDVat*N@PL#RH(9_dx$BaM4{{XOx9Gl{*s9>W>R7oh0R>0q; z8q9mx08T9Sz>0F7O9d`Vn9^s^Ntr}xsgN{?Rf7N&4Vd>gC+&grRFk7UJ+w2;^KXMm zP-^KT6>{saKo1+<-MHl8677%ZfD)CeGKlM9+9_lX=W*p5f(5y?&(ip5KM;^t7C?a~ zk*eARk;1d;OO+s40&m5?j1>9Q znAg#(vk_N46-&~e%Vkh(Z=tXB;PHR9H7P4KxRTS9MyQCTomnLjNTXx8xBmcN=Y@Gl zZW{p1l~xLshBFL^y28Rdj8Do4J0AZ4VU1o!Pc+Hs&0O>n)5fMbCycx?vsp6FG&<&lhDhWtOmUV0t)(xy z_uOMk3=zsH*^`#fa-$#ti@L}_u=zFs4?)`-i6Pc><@gVvse(lmQNtvmB4k!#V*rqD zeZjcr(;24iiyTnPD$2xJbYY?}RLVTs4Zr~0e>T8!$&`G^>E*7Ss^pnSo}2(yHNN-U z@7wpmds4?{rr68l5I~YaE6KN=N}b!d+Y7ecGbf7!F+)mb8l~a1nq{gkSXhB zbfh|68Q#Fi#=~pcz!T~*M5&XzK)HogU4Mo%Ep*8g@p)sBx6m(Uu{&Pczu>~oHQ7iz zbkV$YaKjZgwK9sjf0CjdeBR2$apt$a_|nQ^#}vyBS5F)iDj~8ULFY1R1KXYl9ro^U zkH~neSv6BHQ&&-DlW+o!zK7c1{oo+78hvbJSrOMudE+B#0UllU*m3>%!4(ly<#iL> z($violXA|%fgtQaJODpV*veELwj!#Id6J5XM3%aundIvh7U_Verp&kJS8fQuY#tq; zRi>Y`YU`TNX2UY6hAya01SlOj68Es$*R}R1VlRG186_m>R@$pEDrkR+hy|&s2!B zTwg&TX}$RVf71=h6YOWfs_|6j6%smzNeO}%PLfCE1n+J6-M79GEHUQpOYQgb9m(-< zy&Sn$MsUvX)y(h2ZRS-~+QR+C{Y~$L+S8}NQ%zrC*;7=-OHU2@Vf3)v z_x0xt{Dnn!Rd%6Xl|wwMUlm4)Bn6#BfRN2=Uw+4ee&NO7WhLVEK{Iu-%DRB4k=4#T zrDQ&2p$2mu zER|xBB~=ottFuF3Zb=Po$T#-47*_4mDHP(jeat6@sj|r`Yb7ls)iM%w=}UzJZ~(V` zy?rl+j8t0|T8>K{7S&2~mnsXg>`S3o^%8cq_an9%-IG;A{I;G*{vK*OQqlk!$MYlZi>Hsb!Ule8g;(!PipKyQ$%Xt71KQ#I|{|pEJoEc6gB{Y{BM`QuIiUmA@`9 zLvlvI-(WAW-yJQkNhIHeek?LYr=y!KB3_nXtb&M&iN5v-0lnDszt8_s4J@tJO&3-?(hiK(G8j;qXx8v6q zPSGZ_L^1}NuU26)#{+=y#ANBan|ZHqlz%<%gVs#H{Ya;&rJ6t_rKsu3p;}h*=wq-$ zzM%ITTe-%x@X@KIY5V?(<(7(yWv3N!ER_X|DI}=>0Mn?Cm>$=^(+Zlsrg4*7sFTEW z%~#=?+UgjU>r|w$!Wf9;XpQ{gY)Na8&g2fm64gz8A9A`)T~Ce&Sq^hra)cR-X$;L8 zlTNl!x`oIeP4MnFmLiu+gL;|2t5MYSgNY$Uon+EiVs~G1N2j(o(?(t^ObsJisuq_s ztdgFtc??acp&?sfEIW%G_TvMLAo;Sz;VOUWxj#wRG{#a%7bM*5PQ!9J!cQz{y0#Oa z$nsav%S^ykMi^UFj*((d&F*n1ip1i^~jwL>I)JXwP1cf|o zez>x#Chpm6XQ<5K5H&l)AV$zYA~Hu7J-u+ajzjfeq}7(F&5@;V`f}_@)#dTY zQyk}^QqGqKK*!9Wc4cp_#~yy3uEvs9zmw9`&{~PPI%|)y*Ss^E!ImU4Bx^N1H5xT? z>e7wR17X2zcF9HI9(r$$CQ@+i%|ZR@2~WY3GnSsAAQwHjp0S zl!JTk{Nk`|l##R*Ng~Is$cb(bn#vEYtVq5 zt_=AY&lohw!$Oc0mfGw)f-T&CVTJ5H8&$m0R|AWmo+`ZMUOd-kf0Ct9hUDJ(mLpPq z7K?ID3;cx{Zg(bQK}|>m%hrCpO@BEzxI6HB?dgi7uE@&OuTd64vR2pBPgzl=V0l!l zEwARVK9{+`gJm^RSYL7c@Vz5cGRnGU*a5w{^~SnH>fHrP`E$o2 zqJ#;hfZF7Du)?ky3+MwjC;FT8S<_r=sn82t9mf9F7%<}?pExAS0}^_gRunf>8-aUp zPWUneNdm<^L)k{PxE|LV;AJ7O*gY`_)+o-N$^VBRujvx3_{T1X9B=n%P3(6^Sr{JOnA90e=5V{Sn2{&*UZx}fRGo3bj*&Y5MIDbb~w9HNLK7j4C@?|Y4h+W|&ZVQx1> zMvfTbt;}SdqpN8aN|=O%Muz6sTM!!loBH8m>DNJ(wQrIP+6SzllCFyJ)kUQFuAxY} zwZQ}Q?oU3044%+Zm6~QgCxK|CSbrnnh zBPo+fZ8!ZIJ@)6<7j%`PS#E^BIG_}e($iAUtzLCh>S+j2`K@b!2pethwier~DHN9G zyn@!C!8;V;2Mg(-tFU3mtC1x6p=EYjbEIU7rD5M(DD@L$s%Mk9)QKO}}rZ8q(lgzF4C@rJwq=tt61PTPnv5I|d@w2Ip?~ zCinLG<3ihZ8B&Vd(B~%0scGwI*gwTs841zlvi9G$;@D|CG);1a^|{?dS*=lk{!GP5 zSL|2y53d&EZ)^n`!0p~h+{IGeYMQ25WC4f-_Zx7-wkWA^Pb^EEX4KgY4J|~^G}A$< zIi!eOHm&tEWZ2r^4OZU69MhW9R`PV|>AgnR2Gkkt4Ru6|4J3l4MyVq)v-HicxB!4h zU^WD{40SIHkV{R)Tj82yMxJcCYS=02BCDm5;So;631s=zS$Fw%_uk%^+Hb>akm@fM z**szU`~omHY6?_Tv`9BE zPUM26jf(JYH~w(cnx-nXlvn&em1YkVR54S{NlwoCo>dZ0XzUSPh_=`Apx6Q4_=bcW zW3}V={C(iQtkZ3*zi%G$*dLDTKk529XnqQ@(rL9yQOs@!>FhlEUv*={++oyTzgm!uI!B zHl4l-Mk;Y>f9PbBL6=h1)x$M38C_8lI)YUa>H#}k5KWE!3BgqrZ-H&e(&S6wYTUvU zpC_n}It73|O3sp_!kV7iZVsX@?PIm92Lk3=dzHoFi%y%|vt_E0A(|-?u`d(_brQRk z>KWxn~RnoB{x%TA`JH^ zYAOjQs9LJ02Iyf`B&jDz2j~=9!|RP1I;F^5Q+L8Gz8sC=$)K#vVHEXZC0?5_F211K zj80N=bb|<}t9=y@6Xyz^E{ZthXrrs4m0CtWmKiq#-HpJoy~Y|h7qx|@CAoRfx=9}~ zo?%Z)(KFMu#uj1$nXE|D$OK%Et|*g9leKEevMQ)zq>`|TrmB`L52@}zQ@zg|bIt98 zSOaw`z6E)rH8+Z(s-#^s`V5eeS3_Ja(D%65U+;-UH$S)PS-AYKy?z4k8VPD6dTMI8 zVMKx6NLh%I#YkpAK6?wDAn$7*Tn~tNXg>}CU+P+tz6`nnL0l&I87~ayNRC+KzMU)0#l`vb^v7DB zE2eO`Wy`d6I(DV--a$N}gEVp(6h^lwUc*TKE`81xR^CktO3F-GrAlj#qNKDT%>6|c zDY>{O&MHG8SeV7nE#gFfVasL1jlk87DG*H=fTAjg@%s~UajriXCdt#Av zO{>qCwyZ2pp&@mdQ}ciz2V3)Qe*XA$Efe)4Wr@Os3Ejw?^BjH4^CS}Hhd za}SHBCOR5~6-EUli-xw|i*jxCI1x%XG~1S0wO(H%R5DW3qzzcjBY_wQ$gDehl6d#Q zRIqEm6AAwSrn9=rS=NSVCW1pLWMiPKZ>HDS_6Lh^>xs^LM}khD*cU1A_H9j<)3#@p z%xYquMT7$*Fv=DO)MzafX%<7bcnH0x23Abz27)4YkSJw)=MaU`4j9 z(n&fe%B5;*HZ27cc^_7*+SeA_*YATE*9LC+ z7-Wk700?Si(puKClG;hy_Wm!8H_#xvH=Ul6l1j>CDOF4rLmkU%BG*2)@9Tta@#ZpJ z`3b27WoBuaGRXlFMJ%-NC9LjB5~B7D8te$~?O}<(3M!hEy?@YGg==HYD`b>ZPS8pT z=uHr1Uf(tB7VJfcy}`k@)r#Y_(+`s=ik7~$l+N=y^xLT6dZmE_el2U@?(mDZ#h!wE zHByukR#4PS8s-JoLX6kCmA{pHE%j}LZ*b{2<@P$N(==oTQby%<*bnl?jso&8hDZ`w znnnjok_<-HAaV7>yQ~PR$(E&QYa2r7c_QkTE(x-m1@`2g{NXFiYvGxys9ED#U2N=E zQtQ8z{{UfraM6um4pyx6b4I`k41-Pdy0yw*gKK|$2NPK}O-#zns}W^V4vjjCZ^$<1 zYy_7fx51pLX{rNNDR0gKNjK8l3yb|RrE3O_H)U(bQpZU;$QEv^*}90f17bCP+a3Kq zaN2Ja39HFamQk1mf;oIWdjoCFt~lcq=7joe(nQNEYI6I{Ox3h?J!+R4L&+K| zTzPvDU^{Pwds|XNt;#Mfb3@G5s#K_su17&CNWoG_@6xyo29v)V9@aZ?hosdLPd8Y= zUQtn3olwrOQp3;)0f71bTPQ$wzbxDOU_2z)S1m{1{*}DeQ%B-Vs*a9#Xw80xC;JUyJ-`pq34W`?$P zp6fJD?Al@=4Mi499a1q0pjeO;5so>@EcfsAJqSU(aJ}>CLtnzolQ7E#T$R)_!nG~{ zyqTj^m5qIaUx7ys>_JE<_|%HPch-va`CmGPU^f z{I@sl^u|(a>KQ`w6HKx7X3+_Ap$t^^SyCt@^P6mhvip5;w_Xvpq=z%-8D@V$QI3; zww^_~+SWE4Uj=9G7mM;Ke~MYX9C=NCOHOslP?OLLWw8X4Zq0r`_4mg=#A-)lf;xU5 zPD)$Y$MD`Im1=8g>L&Oase{6LZTVJ>Mw>Ux0T#IDo_4{};k5ZBsMVzUNVKL~9VK|E zuW4hFXpJP1uInUayriCQxd89QyJ7aG+x!8!)h@Cbo62hxP{$iKT@n!nlWl3o%ty>E z!RLBwquw>P@yT%)5Rj(9-5OITX#laY(VYC zHpk{=DER?FmpuX;!Njte15~JSrLL=MU(l!?qkWF}DoUB0TWE$k+IgBcRAA2;QLjlR z$5#9gOW~x1i|jpbl~B;a#y*cg`QwMp5#Mbl;@|pzY)&imDJPrrILC=RN1D=1nS3D3 z_cJ5Noj?;&y}JUowfzmdW0zl6P*is4X-01R{{RnuWb`?d(Pzk+d6t=2{%l9cio_jY z5z24r{jfAGU~h;?rrWlThS^;vX_CvB!z5uYlJws9V&i@9ZLfb({krbx;7zN(P{s*O zGJHKuj^Pc$hY7D!Z0!Q)2 z4d4$fbw@alsS-Sq>tiCdw17RW{dR|yaefFq zpRXyhHa7MbSyUS>sgvcz?=5D@9m34K3OR>bht#6?IaI0DnC$SrsNTS`Mw*GI3bd}L7UT>hj@d#E!}tA zfOPM3#qEJqGs?6*%;lt-mZ55$`erj6j3m-tF}|VN<9^+-Cma-ur-KwUHPkdwMxhJI zC`(`e03mHxYkdIy@Xkr{Dot=5L*Z(Pb7~CEv64vQM~Z08&bZlF8xL#oh-%6$;J%*a z8uhZ%M43EMQ$v?jMI11oM2eZ0PLDz?cEqZ0EGusYYGTPHmhNfNTmJxuNxt6SOc?yd zz#iAh3>BGO6mAA++DQ4PZ9sOv0|#v7(XK1AO&MNcRZCYTO$|jwDJB^Tok~dF$5*Bf z*)EN_JXka4@zYB0Llh3~ELl*lt8MGY7b4c>MP)WJ)Nhm*9Z)eP z<)BE%BvWi}+;MI2n^pJuj-`%;ej}u&tf85@uumyIRfanf;9GXNxBFq>+I2#-o@}AR zNj6O#L|KDrK<@T0sFgf1J+`^FIwJ98=Db+v0xF88YKnG`M^u|Lxi)0D7W($a-JAz! zh1t<^8fbb&)+w4r+T`gxZ(;ZEgw&HZoKQl~9Mk+VMv|tMca7f0;?^Iz8(}Jyjdy`w zd687k(VBN5;|}m7vRPD%5TTaGefi&?Q-GbI)_nxt7iw&;G^wI$s(2Np>IZ29TTs+g zC;>nkTXSv=y)byfH92^nzP}Rf)oJ2Z%jS+$XA!iGcN#f1KW&NQe{3fYA?Jh4kw`;N z1T_++hgA_=i`etqf8QJIAGwOM73Bdy7u+4JK-~NCH#lgD`2&?>Sd{!bD*?L~4SlxQ zkFFac;8f}=^NJ*vSsPGlcLR~FZZFD(@*d~;z;uGGuYY08v=lO;x`L$%P)pxkzx4yR z$`7Ujl##Zs1~jhoLSl*IX^?>J7!DMXa=Uil{{XBj^J6a~5p|MRvn9i*cDn#=VPVHV z^7zC6Gv6@j$hAvWRd6h24!T5!~Xbtn^As zSZ^X91?Iv}#eCjMxnmH*v#fE%0wWMY?S2N=-yHf)w*B^Xd_qx-Qul(%pXLjkW)<(1 zjS?hFJ1Yz82uL>HxB&Cp-+C!w)8LNO+O^H1T!%E0mX>2qkc!CX2*nhYE*S1c*0^JH zZcg~797#*VCjS5tFOTGnGu)U_^(rbQsGYD%pH{Z4;J6e%Rbj#^e)030! z2W3;HQCa;mk~w7vf=te+NOU4xl7#ZkO95^L#vamimJp6Dt{UmqgUE zbZEo$?3`ZwU%B93_;nQCNp5L0hS@D#NeazXsiZDY$m7Zg_WuAgjU?U?qSE97r#qrg z5L8phC6Q$ESi|K~S8$fxgKw?Q1XHRST&W_lB8B*hS|*x0pvR`O0br+qTe$xK({OM1 z!)JtQSGn=;@*v9ua#hDAY>v>PgChm`dm97m#js;bAeHc1X{$Ul(NHOr0de`a)v@n^ zQhkEru|*;;i_6*?YBWk=Zm5JtC2?!nEC!YDy4>8I@R?XC;gYxgd;CLk{JwEl9%Y-% z?OjnWm|%7#PeaS$~7G&0fG<`QM#RK}FB2@0gaNlxG%6YIvpiYIcrU zr0NN@mu4M~qAp0it;NRJc*XWBk{ftxwd>)ARi`sR8KREIK~N8!_BugdUUwr3+G^7o zCY>}?JX9JOWT$?Mr7P>FsYGRxDM!lVzcvJS2fgqloa1uC=x9`A(s=LeTB+${@lIV0 zD^x~vOtPUI&dA+1xU`n_xGX)5u&t!jmqCr~aebhPvby?elO0Vm)KUc&o-$ZI{l{V~ z57&HBGg9Z0a)XBlKk+_snNh3d`D?RC@zk0kU(e(RX4_%`B~Q2);}e^dQ%jbMX{gDj z__g_*^T1gxc5hKV4sDZ`rKyRej;3XJ0ocat~s={r93oSQ&mGLo!`Nd z(B-*gSxBY{K#TCp)HeiP=H%_J_rAbywmP1gN|#3}le-#b^py()Egah7r9q}*z>5bK zC%yER+k2HBxDk^~E-9)jwQZ)lb%r_FCOYK-2nyG+RzCcXQF~&sYlI`dSZx|p=2Pgb zg)D?1)=vlxm>b+*-+i!-*i)<^>YT=-D`tY0n98QX!L_aWN&AjPjtwbtWs9M0T}4cZ z0Cq`H=IWSS4N5QC+$pyA=eWV6TBaA5*CJ8ol$7wEf`KE$GcgH!@KkZ`J#E_yN&W#% z-`u5CW)zusR;nQ+lyHK&BT&z!kDZW<8#VVo+So@W1lundJxM68ebHvfr-Gv-i{M<% zQZF{PHxmx)Vfuj6^|3f;@w)9YQ(h+)siKwRZw=E&S}ThUbj$G*#a)(dW%Zl$ZXDd|w4UHhTqi1J$e{ z)=G)#l(bQ%u$N)mW4~>^Ho$cmTN*EP8d(GJE^kTFuC7bX9FFa(Cnfg3mc&^0C)??b zx}#%84|Owd!>q=OKd3S-EXhj(By-$cx|O=O*HStY>0@qiAvZhP4M->?q*?OXd76p( z(lA)qqZAi5xgY`GYi;$%LbR#!bGmYEa1%*TLN8SegK#W7vVd>C)>FY7dtg5^FCcFZ zL7PQQp9$)EuRUI<0R@JTx7|hT2s?{xZ|#W3a$YYo^Kor$@+=D&{-*T{6ul~iWtrB> zBYO?6@7VjCJ9yejbGXetZ7L*i)O6$`(cL4{upcl3vF5}3VU%A$+`9;(pp#tAup=WW z>1yKRae*nXFvd2@_lf9gXld!ICd*66(jW^S;IV7zx9_<7;QYw-kgYb;yc<=o^^+AX zH5O+Ofa|oB?3Q&mNX`EMNN#uH+nfb0*+ywY!p1p#`Rb5sshNVk)GamidVopw-uQix zeUfvM;SOqZU+LLQvPYHX5;AI&r)!37&$;K*68U!dMHZ$qn2*DLE0(@4todyfGcXJm zB{v&x4e?p%ZCsr3_=|iBt2{?ro5*8P3^AmD`6KfYs@5kKhKym6XRO_#Db`77{{S*a zb~3Oaoru(Jf8z}ol5(5mOPAD72aM^JiyC&0T|jIG>u>CEWUVu9;J(vT#wRRAg79(7 z)1t~s!yZ(TmwztD3X??}Oo=6ni+`2^gBi&#NS89A(($2%-a%j#g+FcZ%T7RAk?2#MqpYew$kUw!=4ALM*#vvr@f8 zDHAzq5<)?}z#y>Z*i`EyHPK1VybD_;Q_q&m7so}?cv4A!ErPRytn+fLcDCJ)Go9pk z(pz7z@IA;fOw%v;WSdP?2)Z80p-4C72b3FH=e@98mkpEJ`ABa`64FKmVu>54a71Rx z6rY)g9E$>bVJ^m`h~*L_i7c!Ok_ooJk?s3_*s87xzczYBov3PRWpK_eiZ6Qs$@=?u zz_gtpq}{TwC0P|vv{5QvNMdr17iSE+9`@M#ZR>0^z^P%sCH$6ZEVJP12gFLKuEeN~ zhOI)^-qr%&UT~Z3U~RPWFj(p7BB&IaqmkRIAzyvA?diW4=LoIxJ{8a{T~b9Hh}}kI zTcbJL-*CkJt@p#E#I?g0&o9GMK`y?T(k*n<6kl~d;{O2ahV&OaiYw`|yyl{Uj%kDy zGAqvnu^lEYEDqb+$8cA;CfE{RpzxDQ`gj5V0H&$(xM_c>X6+1=kZF-4hf27+8-@qE zwYTH<#_>4cKzna*cV{Z_si&s=N~x!+9}yg`;n{3;3u?8kYuJAnmYyWh(XOveNw@r}Fl#P!H&Mzo zitldb;`ikC+SsnyFQkR0{6$B^@=1~SuO?O3R$88Vc$qh6X*{8g_#B&h3@n@8m!%eh zPfg3D@A57FAIqW2pczGXO{wFfM3$-<8}k400Gg) zJ{laqE(W0<@&!OZNc9oGJ-gf2-xN(QNxx3Rr;?VEn2D9d%%Qqu3x@0)(Cm2o<7K=V zB$hxj%1T_mwxX^^l1hrbBr`w$G*e)zI}vlZ=ihu47jBH@XTw9_BcbV6 z1&71+@YAh0%;OQsC4!f0v6bA50=M&DpQyuIOE?j$ZLE;^gFODFoK#YLCT37MPP@iJ zS$4jz0N>`{fp2w&9|KDY(?C_Zg$*rxLtPx5VyIZ6JA)AU0}w5_CvN0n+@hOIRT(&@ zz4?x1Ou}lE$l;cnCjS8R>NgRVTY^H4%W-d0_rl7OZXt(Tf-@KghMtEcqIODDqtxXP z0@q`x?|yB^rUr^mHRK&zUN12Wc};Bfm2<#knq6k0V>1Au?b_$%^cw(3!!+U86r(&e zbBve9HGUrPtl}KKX_$!~bnCpO*siB;bdpMga0eLSgV{Ey?3{N+WbeKS&Z_F_9cx5d z5p{_p)VIB?3Z2J1-yM3obdF6qht`LR*NxMM^c^NOmZl7W+-fQu?h#F z_QyAgGpRVqeq|@abTH-VJU#?j7d}do6C&Vby1b>^uixGAsx!e2UWe~zt$saF7 zq?e&5U7jc<3@ z-{bc-tf{N1Ft|;05-47Zr=4Z72a|ge0Kab7%a&(U4Vu%p!c8QqUB;iw9%co3W;Zti z!{xu;_|2Lt`VF9(uQRHSqMxq?Qofl2HS7xSV1CEa#COJNE=-?DAI5$d`1xujqR~m5 zM9LtZ34({xHw=SD5Qx|smRtBNC<7F z=gh^d0N<02iQ+XBa_Qyno6oyBw}>-YYwFrsgC<<^x`d?PrV9Cf$C5{W2ch#^+nbb+ zVj5~XY7zYVAN~wIJxAgVF{h3wBZ`%!kO%4`Fi;Jzx`V3z++gU++o3)#8(|xL{{UsL z#kBI$c;(+Nk~*q~q%)6*I#Eh&;jPFb+k2dJ!L@ierjv@#f9yj@kmeFr!4(~B^)taO zprw_g3ExP+u>!}|-k4^*Ep}+hsV3@#xm{HP0N6k$zsoLPtkNNbEbF0_<7XT9upr!> zyM1w@<10(ujVQ?_D!2U|C-AqzIc7%{e?g{}DuSPxBaPGp*jmIBYkhDw{IyXMQ+lrC z8~CMFOOa)fh-A{DEoEa%SO&8F?sz|Z80u79q-CdaQIBN46v$uxn5Q+e$5AU&tcucH zy_k}h-*IiduvF@hjys!?u5p*m3R6Orf1gb!QYjeexzcP6x3=fj*53{FWdV3_`wPk{ zUS^io=}ZE$-%?3$)$MzO{+KN)uq#ZgX1R;U9&au~9MaX&FHF%rJM|)BFV7lCzwPwE zdXH;sB_pJql9ntl#F_SMRgh&+_+q-EgECY`Xyl^R1nR*{d7FR%Hawm-z7kqVkmOzD3ZWsv7{MS4JF-S%?werboN>W!I5v5O!^H^dM zLeRNWU>es0?Tf#MfzGw3<})5O%_Fo~j$EKH7DK`MAV`rt2zgUVxk`L0Fzo^?@~ zc_l;ayzX_AfdPeYZgPEF3|x9@=FI)%KA245Q{ zlGYc#C%k`_s1bZU7so9?YqIUe8|L62E7WYca*%9od{22#mPph@F3tt8HwR!md1EZD z;D*#e`LNsi6=~+iwA9@)rQ9eUhkQxO%EmM@j-rcWP*@9C-_2qBn_^8#a8*}ipAAl< z;%UP%Q{^ZEpXUQ}cwtanpnCkUO%jx9p0X=x*fHOW>OZy`GoZNGJvL2Hrk!MGc;aH{ zCX5GD*+ElcH#a96er(D(8>U@xcQ*sD7)|4C6*v*+vOzxTun84P>^HTq>#;a=?ly&M z#gM$Ss|-;?GZ_y0+{tTP?YDkL1goK=V-Qq_vVu_9;RYAg%p)FYV*!qk2?JNt-wzZk zV)0i=Q%>=_byeFz1xl{1TW{ZcVYaj)lE@WZOC+(Bc1W46c1}lg?l#3^5gP}MWe_(} zonVqcRZ5$-`+xEG+Xc1wi|6Dos)~*psFtZql%AZTM!-02X2pTnuO9aLVL7jT4zQow z`7F~exe0m0GBto7GLGPSpL{C&4Dv}q7v?mQE4V6jlAL`8G@dB}E3;hYI3&s{*vb)_ zE9)s>mfrjJzicXPF{w1hl(g}zQR{(ZAP`u9clP$e$-8+BVyH0D(@2Z12%AqAKyCEI z_cX@Zk9-^i6?hTXwzUiZ^xw7)<{hZuUy7aypTWK&kH%geg%u1uukT5(>ixA>$t^rw1?BUGrvN<`;X$*|yi;o#DEWTvh;LN5$gN7AW798uQw z3K)@e1Pf~*AM?H~DBoma>AX=mqRZB>)YeGzNWVSoR2{9V+}r%{ZdFk=M(#ovsGl&+ zY7(WQ5v1KHG;B%c$G*bE0z2Oi3@Z|ObQvx}vNu=a5|K$I+g_Dh_rDzR^~U*$Dhh*Q z+{y^Dcu8!=hN2mXK~OY?f=eAGhZ;|)wU4hjP3^p){#vXQdipH9)yQRot0l&%7Baz& zxd!`;7YNwUoYJA__+c$&Q$+I;jNL>)Ky^1EtS&B1hrRa0x=PVBoSjG~!`>Wqm}lN7 ztZJ#?9eR2iSjZ8AFMD3)h~vGzF(+qAZf-Wh{ONy?>qu7Qki3J#Cu>GFYPBzcb@8w1}OdP+}n_vAEnHm$GUnb7<#l~rZ5 z)UejpLqT042;zcgGZ(qNneWd49z6i#54k9$)souVZD6-%H3F9}nkx1yrZSEdhX-r_ z060{Xoy26^aL#p_wo{hp5z*IFLr*2usicj-xVFp-4}V?niaEy#yn#kk-C8D~mMN=h zX~tgDd^sy5l(%Fz8xlaewYMvOrNO~cyfIvAni(0EBC9eItUsLbk47NNsc&)SJ@3dEPN;Y0FoL!!AtzEdj-m9z45I5`K0*%zy^pREt&E#W&8q30 zWU5TLRymj@ibtpgBa{P?u@>ZSf}RZd64X)ERjUORFvx@`Xp}1uNx#$9{O)-eGOsX2 z(7GJXY8dkjvZFDWPLin!47+Iyykz!rEPmfyB5AuQ;?lwmk>sk(>zw9sJPI33Ryvdw z1UWs(8v*Tcf|JdGwTeV@)>2PQ%{#Z1ejm)Gl!LX3uYNb%{KlPfXeOO5c`AM^@SJ`o zsDga9ZC3zlT~1lOE&LnXfNpUOO%*k0>C*Uzr{R}GUxoPcwOo#%Xv+^{Vu12}@zEz! zOVON=R|$RB^iybZ=BRdRWnLu0zku8J6zo9xyLfSjh!#*+vV@}JGX#yNEgC6RZQ%Nk+4pT%t2vm zY)QS&=I0%ecNB2VROGp!4Cgk>^PK7&zIh%==8#7a4lKw?UI_Dc{l54Tal}HSB%IEN zn&+)e6kpS!>NHV&GDjFv))p4r?snL5vAz{Tld~tsprW#e#Cf(y1o=fZEo5>_)#_AE zB49OHfKhw#>&p5Z5169W1xD`4ax|WVNgaG(OrRGlC_T8i+hBR`zAW;SvOi3o2HA&+ zdKEH5BSfK4Zy5lv_qv;HZLqP?ZCV7i(sU^NnQ6L?BB`f#ANkILH{@s-s!cjrBIKI3 z16>9}m8_zUjwp;T)Ci&3Sdr#eDoyX|e&dWZR;5{`C|HL!q{^x3Yhxw? zpzXicY*k8lvS~vp15puB$|Nods0*o!Tld8{;G2G9NMkUu0l_RRO|Xw4PJ`kyn>SPd z1&GiM@QnpBT6dC1IxL-u8~*@&29gSsV>)N5NEte+Zb2ueFZ=p?Vr?rc7Sbg(ll(%0 zP@N-DjY6qDz>-D+js|ncY$mf(ntI29wO?6@UvEnsBTKQ~QVfy7FbA;dYWmm^ zF_Kk-TfCF4Sc;*FQY7P6(SvIbsoVD$U9Pzf<$MBWbJnzybZOv3zm#jWhrZjNrXC4a zShH`WDOZstMyg=mYn4%AN2Tw#*A%4qC3Nyw25O>EVai!UDuU@+qfYic{{Wu&hst%y z)U_8#cSBzQkIzq`NE%ySqTg|eN)ODUk{K;hy6Qoz(M5s&_?Frp$uHC@rWpV?2Ijzj zI2;&;uPmjiWohFjlKMzvweZo@lz0P4@+heA<1)I_=CzdTw@faR)86Nizuyh>e9#mt zgCoPRg?_zFT|>ARXO)G>_PwxvXOc3D?VH1u!%nOrj71r3L@m7Drw4hqo?)RSR@F3Q z>I(KY`ePe`4reN)_jk3xBYPDK+mByCi@{)&*`TJVm(Hc5h-$shneXa3x8E7GfRkdG zvZ&>&^C>aY%@ZoZZbp(oYwvMpJo059gbi^k%JWzo||AqK^PQb7Ii zV+NCNv8Ocl#dT%e&Z?y90FLDMz@coR1rnf;5e9)$)UO_U8De?4{>q_BN!~3Wc!NoX^Mkk*Ate zrlZh{8mK7kd$ZfzFbCgz_QL3=a%^pSQH6c~0AlYI3{_JJs*#+bvLh%fU^epcgKc37 zl9wd;l?-!HR7Fn+S!PnEMgX1mJdaEwZ?}P(ODSaMv-krzS)5SGm#r{9K;^-=y|%+{ z@?pO;PfXcrvSsi_?MDsYLLQ3fPzVWO=55C$9r?pKRuHN;kVq1)Notw}T7y-*m#Yt? zuLjrHY%UJoz3^3K0pBBPJf=8ilB+P5mU&p+!b&$ihWrm(bL=qb*8)3#W7YK3Fo+tP zr#wqC%F-lEU9Gx}h`q0H3AZP<65DphNhH;bs%@oRMI?NgW064mnar#1mw|@JZcD@;{*kY<#MVTsQp`>ce$SgX-EK#l5 z^&jzAZEy9*JE=XfF0LucL^<^vRb{``D5O|(iezI1#Wj2BVYR`q9N!C++C#>qlVxKr z&L1f7+&Rv3GUpkkRDt3VQ>c+k5TO-sw&ZSj+YSCSEnJ)9{T7D4bsVwgxnzM8PM6x` zgXS9>+T*yf7smR2mTPk56+ar&W%Ze?bagcJQP3CysystTxw#&oZ@}+k>xPUjFK`~C zi}01Ie8Nu%WtFs{OMZ)88v@n9@ngQzcaz z8KaING%!UXoB2T+Y@i-*&o{-D)se${UI$aunCbHAq@k@tRsgz@vFCApt^of4EC(#n zlxvX%)7{#~zkXr0HHqP@h9;gV8R|`pD%WtQa<=pXw{9+R zSv92$kcxVq304ZR~Gxdw&?`jMHDa)3L0sR|6d1 zFpnjpma{F6Dbk(*j;kONMhO~QX0uxRbI%qh4LN+Zx+3Yr<~_3e{mYNx=5bfz+_HJu zD#3t?c?-C+Fc;n<>9{?CzAmAvl7@~*q3N1BsOF4QuA&a<@^kwB z*2N{YwCqSWlU40xyl6zTwCfvMAj>8v&D01A3DHRlR)x$gyJj>T%c}fjH zSc?t#z^(!P$>6Rz3RZ@EZEx6~WT+tHNSz(^+Wsc3qH1mBkcvHAbCTWcYew z?8jFI+navaF`lBACVFsj;Poy+;hM^3riy~91$Vg&Btv_1bK4o}>qXtB1*N9?1gh{y zhxEvd^??`6Zu<|tu*>3gACN!eX`xKs63F6StuAcwdI<<|vA3W&s@K%vqH@sFu0(Zo zzYji?o++37QJ?SWi$+$sIi(uz$tfdgStF0m07}H^i*;I+qK{l{IQGhiC#%<0NV||V=O;7;aUiiQ_b9FoufPz%`RZJv%*l5@sQymNU71d?5#=O)?C6~*6 zV&Ge{{{W^b8NIZGloi`2o-s-zkh_x2u~sA3(+ZyK4Ao?$XBo`~TjKaqq9NC)F$Dk~ z_f;a>4e!1F*WV7m`2&k{v_FMRY{jXA)%zFrigxsP$>Q}w{&XFhJ_$@zzqV`kPz|ZVSjDM`C+0fCq+}r z3v>RMP|@#&fRcJK-1pKjcRw?2M~y5en4{Z|D8Ss!wH&X)QY-#Cc)FUvMzr86j@B`f zZS`VsH00`Ea+=Xq53$smH6EB`$#)Tp@1!{J)?YSX7w5*$JxUfr6LS#&>;~JA1;zFNUlxj0 z$qBaK16bjbTF9YvXrc^DU4B!^)P3*AV}`V{B{zdGyK7TX3N!-bxog?a3w{B%l1HEe z>K0gdAxR@z!%;^o$tCPnM^k>+?b_Snu+;*Zb}=$b)}?&K%yh;;dQb};U=j&D0k!Nu zd?Q^Ulg3At`Hd!ErjBKDp;gs^Dq}m?gWtcmt|YXY%6TdCR}El6<9yHHatf+Ut=PQiMIU0zvE zxt%iBBr)k$mvYwtT-%edx2J4!O5B|t5U9lzSu&U%>tu$N%@i-9S&{5CEx;Oo^o@xf zjr-%KH6C9iC2ixcf9&5h&8Q+Y)T5^y%Swe&?Q;+(%*1dldu%Oh?_rG^x06$GPJ#0% z(yk=}msu|MAcb{nZ+D=g zalC5uXL~jL!(n^uG?TEs@FKif8dC65IZxwF9b9s)XG%ktp)kQKASlel>_|6Owat&F zBk?kCEWg8~l|<*U<`qUm6!Zz$mCBH#RnI7vq-A)~0;l%L`KA3;)Pa7C6M>g`U3gYsk` z>e5$h+p)EdI$V2?XB>a|eH8xy9?(^1o*&Morl+ZzospUzoMy=Jsk14!1cn-iA+3d) zPfo8TG^FFGpIwv>0r*eEnMGpO(Rfz0Qq@t%9H304cS0PIsF2<5Ym1Y&7&>Y(Z9D@~ zPEk%gogS{5wrHv9BFXCIEXp-Xk1dG#cd#}GgKe?Z9f{Lu;cjhVIz2^~=aNl4@0Cx~ zj_|yi9ayh6yBo0EbG`P!-K4uUYd(h1W%X343P}m1HA7HPr_Et~$QB0PxDIj6W`d(S z&tTD3)>TxkCRbA8L365NV^i!dE`Mw_B)3Tlr7PPOCaCciWYrSF)pA87WTP&t6<};e zDIGX9Xh~{nCryg0YpdqeCah@`ix3~2I*ME&cQ?rt5;|!!$Vy)K)xP}N_#(WPnr{$g z)UeRW23Q4TMTWMMNoE{eZ>s*lTK?9@ETJ~qyfdOQgi>{s8JcFbIiw^(1uj)o8&q{L z6=zX%u>=e4{NZ7zx4Rlzs$3&@>m_soyD(a*(Lyw=0uygxwhD?|Aa1@`L^Fr^0d4m@ zU^Epg2wPuKZ9h|hF)~brc3{9@P*X6Hhc{BBdmL&t*(R$4dmI3Qil)@aQowLYzTUWM z7k5B&r^c|32UTWmA()jPz8WuYB1^@DABCtn))t9UwLmge3>BYh!A-ye>_rxp=xQIZIQ?RZh_6^$jAOqicEg;QM2m zN>uF~P@G>3vX+vf7Zi2YBms1@k@h%+S17u7!wjJk#tO*uN=d$_{@Z`e@RFu7R1hW% zrpCYkq}edoAP)( z;_Fr^RS4kUV@Wc@JUS|fk$KVBefj(0H?D@;=4^7Rb`X}2S%_InF(iG@KYV4V(YB@| z@n?i7^U5lPiYTG4kx?V7Ym*RH)(8XM{CeXlcVj15`~IWZsY!{oI6_v%$FHt7?24m- zCUrbCIdw%;jx|IB`P31y0~A?kSHq$#zM@L+5!FPECr%1zZyB*rT)ET_dxamjz6K(h zxvKIksRD)hLgIEk0?Cz9y;!L+CtN5{`ga2N+tUoD&>T|?=>yId!edAWjAIxDKqS}< zV-U$KV%~5s!S(jRNrJ`Mi)cweHw8f*{{VbaC`koFsKmaFV#MEkE95HZA(&fyD8`K- z0E`+1oTnwrYjW?#eA73b8EG>nmYyT0n<9{J=t__;&I~l#i*LW|ZCynzsdZnm(%x1* z?QAkc>;|f{rZ?12qKo0<5gdRXW-dsma6JXK{xL+o3E!#A^DB6R#FcWzO-?E4;*+SR zEiydu9kpNd1z2 z(4xSV7X%US*yD*wUCYUxtzw~^s{B8)ui*!uHio4V1gNQYj*ccm5?R%x3{0Qnuu;El zT-$J(YkJDQKd{N{cAppe;O(_}RYerbB*U*xKp|1=QI^1qSlZXN*z`AD(Zf`UDk#ya zkknFW3jIh=UD)5gtBwco2C9ykQH?D{Gh8$? zrGX%NX}RN!Hk_Q2{k=uhj@w=N^wDXo${wDIXk?-fNuh&jA(Kw~j{g8--+TH~55mdi zJqW1eXwsOe3#>{%)Z^7V?=>4h%9?r&{F_s1f3 z&i%V#UWa-76ON)U3@IqfO)W%{GsXZdZ7XZ@u@}ds@XP+YJgimzf#;GVUFxsz`{$E5L-&(6Vs zzM#X>_(vLhy#4z{BP)*2FWaB@eno1XWvZyms;V=o`W+($O*~X&GRJZih$B&LCd7fU zxV|kI+VMZYoV7N!wQ=9P7YwSaDyPX-uAZwhs92e(z;ht5BaH`*j@KVfFxyTqlc^K&= zTHyBd!Foxmqb*4;$N6qtk1UlHQKKsY+AXjo<4L5c2%B!fGkUn_os)VhNWC=Z+~ETR_zqH{kAh!qRf1E2|(i;JTUV z>Gm5iip1~7KgJtk=nhSW(p8GuNnS|f&>G62blBk>Xgi)lvdCo!^F!1Jg#toW!_;33 zDp(9$o>8b3H4{8_ws@F%k&VFmdSJC0!IY(W4T6k^O%ln_xBe|hN9}wgXmwz7*T@6> zG8nWqwMOi>vG0daU5fP@w2;Fs%&KZ)C6Ps#i|&5=;&OsR!%?uOpn91@Eb=6Paj^c_ zTS$GjCC#R2dXUttlSFQ=7>&n%!xfBoD<Hs~4{=}c-4HeL` zeU}WU#6Bg4hMpX+DUPaui!(fy*qz0+o8mf}P;$94+Io^vsG+7`TUAdihMOYG=9S;& zSyTx9MaU-KLF&|0v1qK<__HpdteTo? zdh;Z0q?M$Rf%*`nAKweV@A)!|Nxb9pLO+12ilRB!FnWr)3adpBWe=wQX1@A&u^?RO z+TLsx7iMyckEg$XkJx7csHci3>tqsC#;qkp;ecxnSJYgedjp27EQs>mE=IXEW>Zg_ zy=1d=>Sc>eaE7@GF4sR>pL_{LydcH)_!rjZFw+SZiOa0zU6_p*MsG1Ejjle|wi)

4NI9M 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 literal 0 HcmV?d00001 diff --git a/labWeb/kt_3/index.html b/labWeb/kt_3/index.html new file mode 100644 index 0000000..7d8de44 --- /dev/null +++ b/labWeb/kt_3/index.html @@ -0,0 +1,76 @@ + + + + + + Вокруг Света | Главная + + + +

+ +
+
+

Туристическое агентство "Вокруг Света"

+

Помогаем подобрать поездки под ваш стиль отдыха: от коротких городских уикендов до больших путешествий на 10-14 дней.

+

Сегодня:

+

Макет главной страницы в Figma: посмотреть

+
+ +
+
+

Куда можно поехать

+

В каталоге есть пляжные, экскурсионные и комбинированные туры с разным бюджетом и длительностью.

+

Мы обновляем подборку каждую неделю, чтобы в ней были только актуальные предложения.

+
+ + +
+ +
+

Идеи для следующей поездки

+
+
+ Горы +
Горные приключения
+
+
+ Пляж +
Пляжный отдых
+
+
+ Город +
Экскурсии по городам
+
+
+
+
+ +
+
ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru
+
+ + + diff --git a/labWeb/kt_3/news.html b/labWeb/kt_3/news.html new file mode 100644 index 0000000..d8e51a5 --- /dev/null +++ b/labWeb/kt_3/news.html @@ -0,0 +1,97 @@ + + + + + + Вокруг Света | Новости + + + + + +
+

Новости туризма

+

Следим за обновлениями в отрасли и публикуем важные изменения по направлениям, ценам и условиям поездок.

+
+
+ Новость 1 +
+

Открыт новый маршрут в Исландию

+

Маршрут включает ледники, водопады и вулканические зоны.

+ +
+
+
+ Новость 2 +
+

Снижены цены на летние туры

+

Раннее бронирование позволяет сэкономить до 25%.

+ +
+
+
+ Новость 3 +
+

Новые экскурсии по историческим местам

+

Добавлены программы с профессиональными гидами.

+ +
+
+
+ Новость 4 +
+

Запущена программа семейных туров

+

Специальные условия для семей с детьми до 12 лет.

+ +
+
+
+ Новость 5 +
+

Появились зимние туры на Байкал

+

Катание на коньках, фототуры и горячие источники.

+ +
+
+
+ Новость 6 +
+

Обновлены правила страхования

+

Включена расширенная медицинская поддержка.

+ +
+
+
+
+ + + +
+
ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru
+
+ + + diff --git a/labWeb/kt_3/script.js b/labWeb/kt_3/script.js new file mode 100644 index 0000000..21028d0 --- /dev/null +++ b/labWeb/kt_3/script.js @@ -0,0 +1,117 @@ +document.addEventListener("DOMContentLoaded", function () { + const burger = document.getElementById("burger"); + const nav = document.getElementById("siteNav"); + if (burger && nav) { + burger.addEventListener("click", function () { + nav.classList.toggle("open"); + }); + } + + const dateBox = document.getElementById("todayDate"); + if (dateBox) { + const now = new Date(); + dateBox.textContent = now.toLocaleDateString("ru-RU", { + year: "numeric", + month: "long", + day: "numeric", + weekday: "long" + }); + } + + const slides = Array.from(document.querySelectorAll(".slide")); + if (slides.length > 0) { + let slideIndex = 0; + setInterval(function () { + slides[slideIndex].classList.remove("active"); + slideIndex = (slideIndex + 1) % slides.length; + slides[slideIndex].classList.add("active"); + }, 3000); + } + + const newsModal = document.getElementById("newsModal"); + const modalTitle = document.getElementById("modalTitle"); + const modalText = document.getElementById("modalText"); + const closeModalBtn = document.getElementById("closeModal"); + const newsButtons = document.querySelectorAll(".open-news"); + + if (newsModal && modalTitle && modalText && closeModalBtn && newsButtons.length) { + newsButtons.forEach(function (btn) { + btn.addEventListener("click", function () { + modalTitle.textContent = btn.dataset.title || "Новость"; + modalText.textContent = btn.dataset.full || ""; + newsModal.classList.add("open"); + }); + }); + + closeModalBtn.addEventListener("click", function () { + newsModal.classList.remove("open"); + }); + + newsModal.addEventListener("click", function (event) { + if (event.target === newsModal) { + newsModal.classList.remove("open"); + } + }); + } + + const geoBtn = document.getElementById("geoBtn"); + const geoResult = document.getElementById("geoResult"); + if (geoBtn && geoResult) { + geoBtn.addEventListener("click", function () { + if (!navigator.geolocation) { + geoResult.textContent = "Геолокация не поддерживается."; + return; + } + geoResult.textContent = "Определяем координаты..."; + navigator.geolocation.getCurrentPosition( + function (position) { + const lat = position.coords.latitude.toFixed(5); + const lon = position.coords.longitude.toFixed(5); + geoResult.textContent = "Ваши координаты: " + lat + ", " + lon; + }, + function () { + geoResult.textContent = "Не удалось получить геолокацию."; + } + ); + }); + } + + const bookingForm = document.getElementById("bookingForm"); + const formResult = document.getElementById("formResult"); + if (bookingForm && formResult) { + const saved = localStorage.getItem("bookingData"); + if (saved) { + const parsed = JSON.parse(saved); + for (const key in parsed) { + const el = bookingForm.elements[key]; + if (el) { + el.value = parsed[key]; + } + } + } + + bookingForm.addEventListener("submit", function (event) { + event.preventDefault(); + const formData = new FormData(bookingForm); + const dataObj = {}; + formData.forEach(function (value, key) { + dataObj[key] = value; + }); + + localStorage.setItem("bookingData", JSON.stringify(dataObj)); + formResult.innerHTML = + "

Результат обработки формы

" + + "

Имя: " + (dataObj.firstName || "") + "

" + + "

Фамилия: " + (dataObj.lastName || "") + "

" + + "

Email: " + (dataObj.email || "") + "

" + + "

Телефон: " + (dataObj.phone || "") + "

" + + "

Город вылета: " + (dataObj.city || "") + "

" + + "

Направление: " + (dataObj.direction || "") + "

" + + "

Дата старта: " + (dataObj.startDate || "") + "

" + + "

Дата возврата: " + (dataObj.endDate || "") + "

" + + "

Количество человек: " + (dataObj.people || "") + "

" + + "

Бюджет: " + (dataObj.budget || "") + " руб.

" + + "

Комментарий: " + (dataObj.comment || "") + "

"; + }); + } +}); diff --git a/labWeb/kt_3/styles.css b/labWeb/kt_3/styles.css new file mode 100644 index 0000000..85ffd00 --- /dev/null +++ b/labWeb/kt_3/styles.css @@ -0,0 +1,375 @@ +:root { + --bg: #f6f7fb; + --card: #ffffff; + --text: #222; + --muted: #667085; + --accent: #3b82f6; + --accent-dark: #1d4ed8; + --border: #e5e7eb; + --shadow: 0 10px 20px rgba(0, 0, 0, 0.08); +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + font-family: Arial, sans-serif; + color: var(--text); + background: var(--bg); + min-height: 100vh; + display: flex; + flex-direction: column; +} + +main { + flex: 1; +} + +a { + color: inherit; + text-decoration: none; +} + +.container { + width: min(1100px, 92%); + margin: 0 auto; +} + +.site-header { + background: #0f172a; + color: #fff; + position: sticky; + top: 0; + z-index: 30; +} + +.header-inner { + display: flex; + align-items: center; + justify-content: space-between; + min-height: 64px; +} + +.logo { + font-weight: 700; + letter-spacing: 0.5px; +} + +.burger { + display: none; + border: 0; + background: transparent; + color: #fff; + font-size: 26px; + cursor: pointer; +} + +.site-nav ul { + list-style: none; + display: flex; + gap: 18px; + padding: 0; + margin: 0; +} + +.site-nav a { + color: #fff; + opacity: 0.9; +} + +.site-nav a:hover, +.site-nav a.active { + opacity: 1; + text-decoration: underline; +} + +.hero { + margin-top: 20px; + background: linear-gradient(120deg, #dbeafe, #f0f9ff); + border: 1px solid var(--border); + border-radius: 14px; + padding: 26px; +} + +.hero h1 { + margin-top: 0; +} + +.grid-home { + display: grid; + grid-template-columns: 2fr 1fr; + gap: 18px; + margin: 20px 0 30px; +} + +.card { + background: var(--card); + border: 1px solid var(--border); + border-radius: 12px; + padding: 16px; + box-shadow: var(--shadow); +} + +.slider { + overflow: hidden; + border-radius: 10px; + position: relative; + min-height: 240px; +} + +.slide { + display: none; +} + +.slide.active { + display: block; +} + +.slide img { + width: 100%; + height: 240px; + object-fit: cover; + display: block; +} + +.slide-caption { + position: absolute; + left: 8px; + right: 8px; + bottom: 8px; + background: rgba(0, 0, 0, 0.6); + color: #fff; + padding: 8px; + border-radius: 8px; +} + +.btn { + background: var(--accent); + color: #fff; + border: none; + border-radius: 8px; + padding: 9px 14px; + cursor: pointer; +} + +.btn:hover { + background: var(--accent-dark); +} + +.news-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 14px; + margin: 20px 0; +} + +.news-item { + background: #fff; + border-radius: 10px; + border: 1px solid var(--border); + overflow: hidden; + box-shadow: var(--shadow); +} + +.news-item img { + width: 100%; + height: 160px; + object-fit: cover; +} + +.news-item-content { + padding: 12px; +} + +.cards-flex { + display: flex; + flex-wrap: wrap; + gap: 14px; + margin: 20px 0; +} + +.tour-card { + display: flex; + flex-direction: column; + width: calc(25% - 11px); + background: #fff; + border: 1px solid var(--border); + border-radius: 10px; + overflow: hidden; +} + +.tour-card img { + width: 100%; + height: 140px; + object-fit: cover; +} + +.tour-card-body { + padding: 10px; +} + +table { + width: 100%; + border-collapse: collapse; + background: #fff; +} + +th, +td { + border: 1px solid var(--border); + padding: 10px; + text-align: left; +} + +th { + background: #e2e8f0; +} + +form { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 12px; +} + +label { + display: block; + font-size: 14px; + color: var(--muted); + margin-bottom: 4px; +} + +input, +select, +textarea { + width: 100%; + border: 1px solid var(--border); + border-radius: 7px; + padding: 8px; +} + +textarea { + min-height: 90px; + resize: vertical; +} + +.form-full { + grid-column: 1 / -1; +} + +.result { + margin-top: 16px; + background: #fff; + border: 1px dashed #94a3b8; + border-radius: 10px; + padding: 12px; +} + +.map-wrap iframe { + width: 100%; + border: 0; + border-radius: 10px; + min-height: 300px; +} + +.modal-overlay { + display: none; + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.65); + z-index: 100; + align-items: center; + justify-content: center; + padding: 16px; +} + +.modal-overlay.open { + display: flex; +} + +.modal { + width: min(720px, 100%); + background: #fff; + border-radius: 12px; + padding: 18px; +} + +.modal-head { + display: flex; + justify-content: space-between; + align-items: center; +} + +.close-btn { + border: 0; + background: #e2e8f0; + border-radius: 6px; + padding: 6px 10px; + cursor: pointer; +} + +.site-footer { + margin-top: 30px; + background: #0f172a; + color: #fff; + padding: 14px 0; + text-align: center; +} + +@media (max-width: 960px) { + .news-grid { + grid-template-columns: repeat(2, 1fr); + } + + .tour-card { + width: calc(33.333% - 10px); + } +} + +@media (max-width: 760px) { + .burger { + display: block; + } + + .site-nav { + display: none; + position: absolute; + top: 64px; + left: 0; + right: 0; + background: #0f172a; + border-top: 1px solid rgba(255, 255, 255, 0.16); + } + + .site-nav.open { + display: block; + } + + .site-nav ul { + flex-direction: column; + padding: 12px; + } + + .grid-home { + grid-template-columns: 1fr; + } + + .news-grid { + grid-template-columns: 1fr; + } + + .tour-card { + width: calc(50% - 7px); + } + + form { + grid-template-columns: 1fr; + } +} + +@media (max-width: 480px) { + .tour-card { + width: 100%; + } +} diff --git a/labWeb/kt_3/tours.html b/labWeb/kt_3/tours.html new file mode 100644 index 0000000..e3b190f --- /dev/null +++ b/labWeb/kt_3/tours.html @@ -0,0 +1,58 @@ + + + + + + Вокруг Света | Расписание + + + + + +
+

Расписание туров на месяц

+

Ниже представлены ближайшие выезды по популярным направлениям с актуальными ценами и количеством свободных мест.

+
+ + + + + + + + + + + + + + + + + + +
ДатаНаправлениеДлительностьЦенаСвободные места
05.05.2026Турция7 дней58 00012
08.05.2026Италия8 дней84 0006
10.05.2026Грузия6 дней49 0009
13.05.2026Франция9 дней102 0004
17.05.2026Исландия7 дней120 0005
20.05.2026Норвегия8 дней111 0007
+
+
+ +
+
ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru
+
+ + + diff --git a/labWeb/lab3/index.html b/labWeb/lab3/index.html new file mode 100644 index 0000000..ddff739 --- /dev/null +++ b/labWeb/lab3/index.html @@ -0,0 +1,84 @@ + + + + + + Озеро Байкал + + + +
+
+
+

Озеро Байкал

+
+ +
+

+ Байкал (бур. Байгал далай) — озеро тектонического происхождения в южной части + Восточной Сибири площадью 31 722 км², самое глубокое озеро на планете, крупнейший природный резервуар пресной + воды и самое большое по площади пресноводное озеро Евразии. +

+ +

+ Находится в центре Азии на границе + Иркутской области + и + Республики Бурятия + в Российской Федерации. Озеро протянулось с юго-запада на северо-восток на 636 км в виде гигантского + полумесяца. Ширина водоёма колеблется в пределах от 24 до 79 км. Дно Байкала в самой глубокой его части на + 1187 метров ниже уровня Мирового океана. Высотная отметка уреза воды Байкала установлена (так как Байкал + зарегулирован) в пределе 456—457 метров над уровнем моря, но в Тихоокеанской системе высот. В результате + «реальный» уровень Байкала фактически неизвестен. +

+ +

+ Площадь водной поверхности Байкала — 31 722 км² (без учёта островов), что примерно равно площади таких стран, + как Бельгия или Нидерланды. По площади водного зеркала Байкал занимает седьмое место среди крупнейших озёр + мира. Площадь водосборного бассейна — 571 тыс. км². Длина береговой линии — 2000 км. +

+ +

+ Озеро находится в своеобразной котловине, со всех сторон окружённой горными хребтами и сопками. При этом + западное побережье — скалистое и обрывистое, рельеф восточного побережья — более пологий (местами горы + отступают от берега на десятки километров). +

+ +

+ Запасы воды в Байкале гигантские — 23 615,39 км³ (около 19 % от 123 тыс. км³ всех мировых запасов + озёрной пресной воды). По объёму запасов пресной воды Байкал занимает первое место в мире среди озёр. В Байкале + воды больше, чем во всех вместе взятых пяти + Великих озёрах + Северной Америки (Верхнее, Мичиган, Гурон, Эри, Онтарио), и в 25 раз больше, чем в Ладожском озере. Если же + брать абсолютную величину среди всех озёр мира, то Байкал по объёму воды уступает разве что + Каспийскому морю. +

+ +

+ По данным исследований И. Д. Черского (XIX век) в Байкал впадало 336 рек и ручьё, и это число учитывало + только постоянные притоки. Более современных данных по данному вопросу нет, однако иногда приводятся цифры в + 544 или 1123 (которые приведены в результате подсчёта распадков, а не постоянных водотоков). Также считается, + что вследствие антропогенного воздействия и изменения климата на Байкале с XIX века по современное время + могло пропасть порядка 150 водотоков. +

+ +

+ Самые крупные реки, впадающие в Байкал — это Селенга, Верхняя Ангара, Баргузин, Турка, Снежная, Кичера, Тыя, + Голоустная, Бугульдейка. Из озера вытекает только одна река — + Ангара. +

+
+
+
+ + diff --git a/labWeb/lab3/style.css b/labWeb/lab3/style.css new file mode 100644 index 0000000..f6b4e61 --- /dev/null +++ b/labWeb/lab3/style.css @@ -0,0 +1,89 @@ + + +:root { + --maroon: #9f2b2b; + --maroon-dark: #7e1f1f; + --paper: #ffffff; + --highlight: #f7e3c1; + --text: #111111; + --link: #6b3e1e; + --link-hover: #b84c1b; +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + padding: 24px 0; + background: var(--paper); + color: var(--text); +} + +.page { + width: min(980px, calc(100% - 32px)); + margin: 0 auto; +} + +.note { + margin: 0 0 10px; + font: 700 14pt/1.2 "Times New Roman", Times, serif; + color: var(--maroon); +} + +.card { + + background: #fff; +} + +.card__header { + padding: 10px 14px; + background: var(--maroon); + border-bottom: 2px solid var(--maroon-dark); +} + +.title { + margin: 0; + text-align: center; + color: #fff; + font-family: Cambria, Georgia, "Times New Roman", serif; + font-size: 24pt; + line-height: 1.1; + font-weight: 700; +} + +.card__body { + padding: 10px 12px 12px; +} + +.p { + margin: 0 0 10px; + font-family: "Times New Roman", Times, serif; + font-size: 14pt; + line-height: 1.35; + text-align: justify; +} + +.p:last-child { + margin-bottom: 0; +} + +.p--highlight { + background: var(--highlight); + padding: 6px 8px; +} + +.a { + color: var(--link); + text-decoration: underline; + text-decoration-thickness: 1px; + text-underline-offset: 2px; + transition: color 120ms ease-in-out; +} + +.a:hover, +.a:focus-visible { + color: var(--link-hover); +} + diff --git a/labWeb/lab4-6/contacts.html b/labWeb/lab4-6/contacts.html new file mode 100644 index 0000000..a160e49 --- /dev/null +++ b/labWeb/lab4-6/contacts.html @@ -0,0 +1,194 @@ + + + + + + Контакты | МедСэйв + + + + + + + + +
+
+
+
+
+ +
+
+

МедСэйв

+

Медицинский центр

+
+
+ + + + +
+ + +
+
+ +
+
+

Контакты

+

Мы всегда рады помочь вам. Свяжитесь с нами удобным способом.

+
+ +
+ +
+
+
+
+ +
+
+

Адрес

+

г. Москва, ул. Здоровья, д. 15, корп. 2

+

Ближайшее метро: Медицинская (5 мин. пешком)

+
+
+ +
+
+ +
+
+

Телефоны

+

+7 (495) 123-45-67

+

+7 (495) 987-65-43

+

Единый колл-центр: круглосуточно

+
+
+ +
+
+ +
+
+

Email

+

info@medsave.ru

+

appointments@medsave.ru

+
+
+ +
+
+ +
+
+

Режим работы

+

Пн-Пт: 8:00 - 20:00

+

Сб-Вс: 9:00 - 18:00

+

Без выходных

+
+
+
+ + +
+

Мы в соцсетях и мессенджерах

+ +
+
+ + +
+
+ Здание клиники МедСэйв +
+

Наша клиника

+

Современное здание медицинского центра оснащено всем необходимым для комфортного приема пациентов. Доступно бесплатная парковка для клиентов.

+
+
+ +
+

Экстренная помощь

+

При острых состояниях звоните на горячую линию немедленно:

+
+ + +7 (495) 123-45-67 +
+
+
+
+
+ +
+
+
+
+ + МедСэйв +
+ +
+ + +7 (123) 123-12-31 +
+ +
+ Мы в соцсетях: + +
+ +

© 2024 МедСэйв. Все права защищены.

+
+
+
+ + + + diff --git a/labWeb/lab4-6/doctors.html b/labWeb/lab4-6/doctors.html new file mode 100644 index 0000000..f1cd386 --- /dev/null +++ b/labWeb/lab4-6/doctors.html @@ -0,0 +1,227 @@ + + + + + + Наши врачи | МедСэйв + + + + + + + + +
+
+
+
+
+ +
+
+

МедСэйв

+

Медицинский центр

+
+
+ + + + +
+ + +
+
+ +
+
+

Наши специалисты

+

Квалифицированные врачи с многолетним опытом работы

+
+ +
+
    +
  1. + Терапевты +
      +
    • Иванов И.И.
    • +
    • Сидорова Е.Л.
    • +
    +
  2. + +
  3. + Неврологи +
      +
    • Петрова Л.Д.
    • +
    • Орлова Г.Д.
    • +
    +
  4. + +
  5. + УЗИ-специалисты +
      +
    • Гордеев О.Т.
    • +
    • Арбатова Е.К.
    • +
    +
  6. + +
  7. + Кардиологи +
      +
    • Смирнов А.В.
    • +
    • Козлова Н.П.
    • +
    +
  8. + +
  9. + Эндокринологи +
      +
    • Морозов П.С.
    • +
    • Васильева Т.А.
    • +
    +
  10. + +
  11. + Хирурги +
      +
    • Новиков Д.Г.
    • +
    • Лебедева С.М.
    • +
    +
  12. +
+
+ +
+
+

+ + Высшая категория +

+

Более 70% наших врачей имеют высшую и первую квалификационную категорию.

+
+ +
+

+ + Запись к врачу +

+

Запишитесь на прием к нужному специалисту через наш колл-центр.

+ + Перейти к контактам + +
+
+
+ +
+
+
+
+ + МедСэйв +
+
+ + +7 (123) 123-12-31 +
+ +
+ Мы в социальных сетях: + +
+

© 2024 МедСэйв. Все права защищены.

+
+
+
+ + + + diff --git a/labWeb/lab4-6/index.html b/labWeb/lab4-6/index.html new file mode 100644 index 0000000..729ad0b --- /dev/null +++ b/labWeb/lab4-6/index.html @@ -0,0 +1,200 @@ + + + + + + МедСэйв - Главная | Медицинский центр + + + + + + + + +
+
+
+ +
+
+ +
+
+

МедСэйв

+

Медицинский центр

+
+
+ + + + + + +
+ + + +
+
+ + +
+ + +
+
+
+
+ +
+

Профессиональная диагностика

+

Современное оборудование и квалифицированные специалисты для точной постановки диагноза и эффективного лечения.

+
+ +
+
+ +
+

Безопасность и забота

+

Индивидуальный подход к каждому пациенту, строгие санитарные нормы и комфортная обстановка в клинике.

+
+ +
+
+ +
+

Удобное расписание

+

Работаем ежедневно без выходных. Запись на прием онлайн и по телефону. Минимальное время ожидания.

+
+
+
+ + +
+
+

Новости клиники

+ Актуальное +
+ +
+ +
+
+ Новое оборудование +
+
+
+ + 15 января 2024 +
+

Новое диагностическое оборудование

+

В нашей клинике установлен современный аппарат УЗИ экспертного класса. Теперь диагностика стала еще точнее и комфортнее для пациентов.

+ + Подробнее + +
+
+ + +
+
+ Новый врач +
+
+
+ + 10 января 2024 +
+

Пополнение в команде специалистов

+

Врач-невролог Петрова Людмила Дмитриевна присоединилась к нашей команде. Записаться на консультацию можно уже сейчас.

+ + Подробнее + +
+
+ + +
+
+ Акция +
+
+
+ + 5 января 2024 +
+

Акция: комплексное обследование

+

В январе действует скидка 20% на комплексное обследование организма. Успейте позаботиться о своем здоровье выгодно!

+ + Подробнее + +
+
+
+
+
+ + +
+
+
+
+ + МедСэйв +
+ +
+ + +7 (123) 123-12-31 +
+ +
+ Мы в социальных сетях: + +
+ +

© 2024 МедСэйв. Все права защищены.

+
+
+
+ + + + + diff --git a/labWeb/lab4-6/prices.html b/labWeb/lab4-6/prices.html new file mode 100644 index 0000000..72f1ffa --- /dev/null +++ b/labWeb/lab4-6/prices.html @@ -0,0 +1,214 @@ + + + + + + Цены на услуги | МедСэйв + + + + + + + + +
+
+
+
+
+ +
+
+

МедСэйв

+

Медицинский центр

+
+
+ + + + +
+ + +
+
+ +
+
+

Прайс-лист на услуги

+

Актуальные цены на медицинские услуги клиники МедСэйв

+
+ +
+
+
+ +
+
+

Стоимость консультаций и процедур

+

Цены указаны в рублях (₽)

+
+
+ +
    +
  1. +
    + Первичная консультация терапевта +

    Осмотр, назначение лечения, рекомендации

    +
    + 2 500 ₽ +
  2. + +
  3. +
    + Повторная консультация терапевта +

    Корректировка лечения, контроль динамики

    +
    + 1 800 ₽ +
  4. + +
  5. +
    + Консультация невролога +

    Неврологическое обследование, рекомендации

    +
    + 3 200 ₽ +
  6. + +
  7. +
    + УЗИ органов брюшной полости +

    Комплексное обследование печени, желчного, селезенки

    +
    + 2 800 ₽ +
  8. + +
  9. +
    + УЗИ щитовидной железы +

    Оценка структуры и размеров железы

    +
    + 1 500 ₽ +
  10. + +
  11. +
    + ЭКГ с расшифровкой +

    Электрокардиография с заключением врача

    +
    + 1 200 ₽ +
  12. + +
  13. +
    + Общий анализ крови +

    Забор крови из вены, лабораторное исследование

    +
    + 650 ₽ +
  14. + +
  15. +
    + Комплексное обследование (Check-up) +

    Полное обследование организма (консультации + анализы)

    +
    + 15 000 ₽ +
  16. +
+ +
+ +

+ Важно: Цены могут изменяться. Уточняйте актуальную стоимость при записи на прием. + Действуют скидки для пенсионеров и инвалидов — 10% на все услуги. +

+
+
+
+ +
+
+
+
+ + МедСэйв +
+
+ + +7 (123) 123-12-31 +
+ +
+ Мы в социальных сетях: + +
+

© 2024 МедСэйв. Все права защищены.

+
+
+
+ + + + diff --git a/labWeb/lab4-6/schedule.html b/labWeb/lab4-6/schedule.html new file mode 100644 index 0000000..e60f9c9 --- /dev/null +++ b/labWeb/lab4-6/schedule.html @@ -0,0 +1,317 @@ + + + + + + Расписание специалистов | МедСэйв + + + + + + + + +
+
+
+
+
+ +
+
+

МедСэйв

+

Медицинский центр

+
+
+ + + + +
+ + +
+
+ +
+
+

Расписание приема специалистов

+

График работы врачей на текущую неделю

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
СпециальностьВрачПонедельникВторникСредаЧетвергПятницаВыходные
ТерапевтыИванов И.И.09:00-13:0014:00-18:0009:00-13:0014:00-18:0009:00-13:00 +
+ + Приема нет + (только экстренные случаи) +
+
Сидорова Е.Л.14:00-18:0009:00-13:0014:00-18:0009:00-13:0014:00-18:00
НеврологиПетрова Л.Д.10:00-16:00—10:00-16:00—10:00-16:00
Орлова Г.Д.—10:00-16:00—10:00-16:00—
УЗИГордеев О.Т + + 08:00-14:00 + — + + 08:00-14:00 +
Арбатова Е.К.— + + 12:00-18:00 + —12:00-16:00
КардиологиСмирнов А.В.09:00-15:0009:00-15:0009:00-15:0009:00-15:0009:00-15:00 + +
ЭндокринологиМорозов П.С.11:00-17:00—11:00-17:00—11:00-17:00 + +
Васильева Т.А.—11:00-17:00—11:00-17:00—
+
+ +
+
+
+
+ Усиленный прием +
+
+
+ Специальность (объединение строк) +
+
+ — + Выходной день врача +
+
+
+
+ +
+
+
+ +
+
+

Важно

+

Расписание может меняться. Уточняйте актуальное время по телефону.

+
+
+ +
+
+ +
+
+

Запись по телефону

+

+7 (495) 123-45-67 (круглосуточно)

+
+
+ +
+
+ +
+
+

Онлайн-запись

+

Доступна через сайт и мобильное приложение

+
+
+
+
+ +
+
+
+
+ + МедСэйв +
+
+ + +7 (123) 123-12-31 +
+ +
+ Мы в социальных сетях: + +
+

© 2024 МедСэйв. Все права защищены.

+
+
+
+ + + + diff --git a/labWeb/lab4-6/style.css b/labWeb/lab4-6/style.css new file mode 100644 index 0000000..259aad8 --- /dev/null +++ b/labWeb/lab4-6/style.css @@ -0,0 +1,29 @@ +body { + padding: 2rem; + font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif; +} + +h1 { + font-size: 16px; + margin-top: 0; +} + +p { + color: rgb(107, 114, 128); + font-size: 15px; + margin-bottom: 10px; + margin-top: 5px; +} + +.card { + max-width: 620px; + margin: 0 auto; + padding: 16px; + border: 1px solid lightgray; + border-radius: 16px; +} + +.card p:last-child { + margin-bottom: 0; +} + diff --git a/labWeb/lab7/index.js b/labWeb/lab7/index.js new file mode 100644 index 0000000..06774d8 --- /dev/null +++ b/labWeb/lab7/index.js @@ -0,0 +1,22 @@ +let express = require(`express`); +const app = express(); +const port = 3000; + +app.listen(port, function () { + console.log(`http://localhost:${port}`); +}); +app.use(express.static(`public`)); + +const hbs = require(`hbs`); +app.set(`views`, `views`); +app.set(`view engine`, `hbs`); + +console.log(4*32*1000*2*60*32/2**23); + +app.get("/", function (req, res) { + res.render("main"); +}); + +app.get("/hf", function (req, res) { + res.render("head_and_footer"); +}); \ No newline at end of file diff --git a/labWeb/lab7/node_modules/.bin/handlebars b/labWeb/lab7/node_modules/.bin/handlebars new file mode 120000 index 0000000..fb7d090 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/handlebars @@ -0,0 +1 @@ +../handlebars/bin/handlebars \ No newline at end of file diff --git a/labWeb/lab7/node_modules/.bin/handlebars.cmd b/labWeb/lab7/node_modules/.bin/handlebars.cmd new file mode 100644 index 0000000..6b6f3ae --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/handlebars.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\handlebars\bin\handlebars" %* diff --git a/labWeb/lab7/node_modules/.bin/handlebars.ps1 b/labWeb/lab7/node_modules/.bin/handlebars.ps1 new file mode 100644 index 0000000..0928eb9 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/handlebars.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../handlebars/bin/handlebars" $args + } else { + & "$basedir/node$exe" "$basedir/../handlebars/bin/handlebars" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../handlebars/bin/handlebars" $args + } else { + & "node$exe" "$basedir/../handlebars/bin/handlebars" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/labWeb/lab7/node_modules/.bin/mime b/labWeb/lab7/node_modules/.bin/mime new file mode 100644 index 0000000..0a62a1b --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/mime @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../mime/cli.js" "$@" +else + exec node "$basedir/../mime/cli.js" "$@" +fi diff --git a/labWeb/lab7/node_modules/.bin/mime.cmd b/labWeb/lab7/node_modules/.bin/mime.cmd new file mode 100644 index 0000000..a9e48f1 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/mime.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mime\cli.js" %* diff --git a/labWeb/lab7/node_modules/.bin/mime.ps1 b/labWeb/lab7/node_modules/.bin/mime.ps1 new file mode 100644 index 0000000..2222f40 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/mime.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../mime/cli.js" $args + } else { + & "$basedir/node$exe" "$basedir/../mime/cli.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../mime/cli.js" $args + } else { + & "node$exe" "$basedir/../mime/cli.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/labWeb/lab7/node_modules/.bin/nodemon b/labWeb/lab7/node_modules/.bin/nodemon new file mode 120000 index 0000000..1056ddc --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/nodemon @@ -0,0 +1 @@ +../nodemon/bin/nodemon.js \ No newline at end of file diff --git a/labWeb/lab7/node_modules/.bin/nodemon.cmd b/labWeb/lab7/node_modules/.bin/nodemon.cmd new file mode 100644 index 0000000..98e1b95 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/nodemon.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nodemon\bin\nodemon.js" %* diff --git a/labWeb/lab7/node_modules/.bin/nodemon.ps1 b/labWeb/lab7/node_modules/.bin/nodemon.ps1 new file mode 100644 index 0000000..d4e3f5d --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/nodemon.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../nodemon/bin/nodemon.js" $args + } else { + & "$basedir/node$exe" "$basedir/../nodemon/bin/nodemon.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../nodemon/bin/nodemon.js" $args + } else { + & "node$exe" "$basedir/../nodemon/bin/nodemon.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/labWeb/lab7/node_modules/.bin/nodetouch b/labWeb/lab7/node_modules/.bin/nodetouch new file mode 100644 index 0000000..03f8b4d --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/nodetouch @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../touch/bin/nodetouch.js" "$@" +else + exec node "$basedir/../touch/bin/nodetouch.js" "$@" +fi diff --git a/labWeb/lab7/node_modules/.bin/nodetouch.cmd b/labWeb/lab7/node_modules/.bin/nodetouch.cmd new file mode 100644 index 0000000..426bfc3 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/nodetouch.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\touch\bin\nodetouch.js" %* diff --git a/labWeb/lab7/node_modules/.bin/nodetouch.ps1 b/labWeb/lab7/node_modules/.bin/nodetouch.ps1 new file mode 100644 index 0000000..5f68b4c --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/nodetouch.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../touch/bin/nodetouch.js" $args + } else { + & "$basedir/node$exe" "$basedir/../touch/bin/nodetouch.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../touch/bin/nodetouch.js" $args + } else { + & "node$exe" "$basedir/../touch/bin/nodetouch.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/labWeb/lab7/node_modules/.bin/nopt b/labWeb/lab7/node_modules/.bin/nopt new file mode 100644 index 0000000..f1ec43b --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/nopt @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../nopt/bin/nopt.js" "$@" +else + exec node "$basedir/../nopt/bin/nopt.js" "$@" +fi diff --git a/labWeb/lab7/node_modules/.bin/nopt.cmd b/labWeb/lab7/node_modules/.bin/nopt.cmd new file mode 100644 index 0000000..1c194db --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/nopt.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nopt\bin\nopt.js" %* diff --git a/labWeb/lab7/node_modules/.bin/nopt.ps1 b/labWeb/lab7/node_modules/.bin/nopt.ps1 new file mode 100644 index 0000000..9d6ba56 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/nopt.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../nopt/bin/nopt.js" $args + } else { + & "$basedir/node$exe" "$basedir/../nopt/bin/nopt.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../nopt/bin/nopt.js" $args + } else { + & "node$exe" "$basedir/../nopt/bin/nopt.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/labWeb/lab7/node_modules/.bin/npm b/labWeb/lab7/node_modules/.bin/npm new file mode 120000 index 0000000..e804334 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/npm @@ -0,0 +1 @@ +../npm/bin/npm-cli.js \ No newline at end of file diff --git a/labWeb/lab7/node_modules/.bin/npm.cmd b/labWeb/lab7/node_modules/.bin/npm.cmd new file mode 100644 index 0000000..0eee179 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/npm.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\npm\bin\npm-cli.js" %* diff --git a/labWeb/lab7/node_modules/.bin/npm.ps1 b/labWeb/lab7/node_modules/.bin/npm.ps1 new file mode 100644 index 0000000..11b3908 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/npm.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../npm/bin/npm-cli.js" $args + } else { + & "$basedir/node$exe" "$basedir/../npm/bin/npm-cli.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../npm/bin/npm-cli.js" $args + } else { + & "node$exe" "$basedir/../npm/bin/npm-cli.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/labWeb/lab7/node_modules/.bin/npx b/labWeb/lab7/node_modules/.bin/npx new file mode 120000 index 0000000..6040b47 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/npx @@ -0,0 +1 @@ +../npm/bin/npx-cli.js \ No newline at end of file diff --git a/labWeb/lab7/node_modules/.bin/npx.cmd b/labWeb/lab7/node_modules/.bin/npx.cmd new file mode 100644 index 0000000..39e7fb0 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/npx.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\npm\bin\npx-cli.js" %* diff --git a/labWeb/lab7/node_modules/.bin/npx.ps1 b/labWeb/lab7/node_modules/.bin/npx.ps1 new file mode 100644 index 0000000..0d3acdd --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/npx.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../npm/bin/npx-cli.js" $args + } else { + & "$basedir/node$exe" "$basedir/../npm/bin/npx-cli.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../npm/bin/npx-cli.js" $args + } else { + & "node$exe" "$basedir/../npm/bin/npx-cli.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/labWeb/lab7/node_modules/.bin/semver b/labWeb/lab7/node_modules/.bin/semver new file mode 100644 index 0000000..77443e7 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/semver @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@" +else + exec node "$basedir/../semver/bin/semver.js" "$@" +fi diff --git a/labWeb/lab7/node_modules/.bin/semver.cmd b/labWeb/lab7/node_modules/.bin/semver.cmd new file mode 100644 index 0000000..7d4c104 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/semver.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver.js" %* diff --git a/labWeb/lab7/node_modules/.bin/semver.ps1 b/labWeb/lab7/node_modules/.bin/semver.ps1 new file mode 100644 index 0000000..314717a --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/semver.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args + } else { + & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../semver/bin/semver.js" $args + } else { + & "node$exe" "$basedir/../semver/bin/semver.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/labWeb/lab7/node_modules/.bin/uglifyjs b/labWeb/lab7/node_modules/.bin/uglifyjs new file mode 120000 index 0000000..fef3468 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/uglifyjs @@ -0,0 +1 @@ +../uglify-js/bin/uglifyjs \ No newline at end of file diff --git a/labWeb/lab7/node_modules/.bin/uglifyjs.cmd b/labWeb/lab7/node_modules/.bin/uglifyjs.cmd new file mode 100644 index 0000000..136c785 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/uglifyjs.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\uglify-js\bin\uglifyjs" %* diff --git a/labWeb/lab7/node_modules/.bin/uglifyjs.ps1 b/labWeb/lab7/node_modules/.bin/uglifyjs.ps1 new file mode 100644 index 0000000..5e0bc56 --- /dev/null +++ b/labWeb/lab7/node_modules/.bin/uglifyjs.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../uglify-js/bin/uglifyjs" $args + } else { + & "$basedir/node$exe" "$basedir/../uglify-js/bin/uglifyjs" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../uglify-js/bin/uglifyjs" $args + } else { + & "node$exe" "$basedir/../uglify-js/bin/uglifyjs" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/labWeb/lab7/node_modules/.package-lock.json b/labWeb/lab7/node_modules/.package-lock.json new file mode 100644 index 0000000..9a3aee7 --- /dev/null +++ b/labWeb/lab7/node_modules/.package-lock.json @@ -0,0 +1,3609 @@ +{ + "name": "skill-up", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/foreachasync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", + "integrity": "sha512-J+ler7Ta54FwwNcx6wQRDhTIbNeyDcARMkOcguEqnEdtm0jKvN3Li3PDAb2Du3ubJYEWfYL83XMROXdsXAXycw==" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hbs": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.2.1.tgz", + "integrity": "sha512-jkX8bTB17JCUMhyDobTkbMcdZi3xOplVbWjzp8i40O6ZITQhcjGIy11AmF51IyBe80GnJIRhUtKL9dg/ho/uog==", + "license": "MIT", + "dependencies": { + "handlebars": "4.7.9", + "walk": "2.3.15" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/nodemon": { + "version": "3.1.14", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.14.tgz", + "integrity": "sha512-jakjZi93UtB3jHMWsXL68FXSAosbLfY0In5gtKq3niLSkrWznrVBzXFNOEMJUfc9+Ke7SHWoAZsiMkNP3vq6Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^10.2.1", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm": { + "version": "10.9.8", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.8.tgz", + "integrity": "sha512-fYwb6ODSmHkqrJQQaCxY3M2lPf/mpgC7ik0HSzzIwG5CGtabRp4bNqikatvCoT42b5INQSqudVH0R7yVmC9hVg==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "normalize-package-data", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "mock-globals", + "mock-registry", + "workspaces/*" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^8.0.5", + "@npmcli/config": "^9.0.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/map-workspaces": "^4.0.2", + "@npmcli/package-json": "^6.2.0", + "@npmcli/promise-spawn": "^8.0.3", + "@npmcli/redact": "^3.2.2", + "@npmcli/run-script": "^9.1.0", + "@sigstore/tuf": "^3.1.1", + "abbrev": "^3.0.1", + "archy": "~1.0.0", + "cacache": "^19.0.1", + "chalk": "^5.6.2", + "ci-info": "^4.4.0", + "cli-columns": "^4.0.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^10.5.0", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^8.1.0", + "ini": "^5.0.0", + "init-package-json": "^7.0.2", + "is-cidr": "^5.1.1", + "json-parse-even-better-errors": "^4.0.0", + "libnpmaccess": "^9.0.0", + "libnpmdiff": "^7.0.5", + "libnpmexec": "^9.0.5", + "libnpmfund": "^6.0.5", + "libnpmhook": "^11.0.0", + "libnpmorg": "^7.0.0", + "libnpmpack": "^8.0.5", + "libnpmpublish": "^10.0.2", + "libnpmsearch": "^8.0.0", + "libnpmteam": "^7.0.0", + "libnpmversion": "^7.0.0", + "make-fetch-happen": "^14.0.3", + "minimatch": "^9.0.9", + "minipass": "^7.1.3", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^11.5.0", + "nopt": "^8.1.0", + "normalize-package-data": "^7.0.1", + "npm-audit-report": "^6.0.0", + "npm-install-checks": "^7.1.2", + "npm-package-arg": "^12.0.2", + "npm-pick-manifest": "^10.0.0", + "npm-profile": "^11.0.1", + "npm-registry-fetch": "^18.0.2", + "npm-user-validate": "^3.0.0", + "p-map": "^7.0.4", + "pacote": "^19.0.1", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^4.1.0", + "semver": "^7.7.4", + "spdx-expression-parse": "^4.0.0", + "ssri": "^12.0.0", + "supports-color": "^9.4.0", + "tar": "^7.5.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^6.0.2", + "which": "^5.0.0", + "write-file-atomic": "^6.0.0" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "8.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/metavuln-calculator": "^8.0.0", + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.1", + "@npmcli/query": "^4.0.0", + "@npmcli/redact": "^3.0.0", + "@npmcli/run-script": "^9.0.1", + "bin-links": "^5.0.0", + "cacache": "^19.0.1", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^8.0.0", + "npm-install-checks": "^7.1.0", + "npm-package-arg": "^12.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.1", + "pacote": "^19.0.0", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "proggy": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^4.0.0", + "semver": "^7.3.7", + "ssri": "^12.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "9.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/package-json": "^6.0.1", + "ci-info": "^4.0.0", + "ini": "^5.0.0", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "8.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^19.0.0", + "json-parse-even-better-errors": "^4.0.0", + "pacote": "^20.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote": { + "version": "20.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^7.5.10" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "6.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "8.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "3.2.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "9.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "3.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/core": { + "version": "2.0.0", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.4.3", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "3.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "3.1.1", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.1", + "tuf-js": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "2.1.1", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-styles": { + "version": "6.2.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^7.0.0", + "npm-normalize-package-bin": "^4.0.0", + "proc-log": "^5.0.0", + "read-cmd-shim": "^5.0.0", + "write-file-atomic": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "2.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "19.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/chalk": { + "version": "5.6.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "3.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "4.4.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "4.1.3", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "^5.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.4.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/diff": { + "version": "5.2.2", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.3", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/node_modules/fdir": { + "version": "6.5.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/foreground-child": { + "version": "3.3.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "10.5.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "8.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.2.0", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/ini": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "7.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^6.0.0", + "npm-package-arg": "^12.0.0", + "promzard": "^2.0.0", + "read": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/ip-address": { + "version": "10.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "5.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^4.1.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/jackspeak": { + "version": "3.4.3", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "9.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmdiff": { + "version": "7.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^8.0.5", + "@npmcli/installed-package-contents": "^3.0.0", + "binary-extensions": "^2.3.0", + "diff": "^5.1.0", + "minimatch": "^9.0.4", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0", + "tar": "^7.5.11" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "9.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^8.0.5", + "@npmcli/run-script": "^9.0.1", + "ci-info": "^4.0.0", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0", + "proc-log": "^5.0.0", + "read": "^4.0.0", + "read-package-json-fast": "^4.0.0", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "6.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^8.0.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmhook": { + "version": "11.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "8.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^8.0.5", + "@npmcli/run-script": "^9.0.1", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "10.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ci-info": "^4.0.0", + "normalize-package-data": "^7.0.0", + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1", + "proc-log": "^5.0.0", + "semver": "^7.3.7", + "sigstore": "^3.0.0", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmsearch": { + "version": "8.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.1", + "@npmcli/run-script": "^9.0.1", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "10.4.3", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "14.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/minimatch": { + "version": "9.0.9", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/minipass": { + "version": "7.1.3", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "4.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/minizlib": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/negotiator": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "11.5.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "8.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "7.0.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^8.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-audit-report": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "7.1.2", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "12.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-packlist": { + "version": "9.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^7.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "10.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-profile": { + "version": "11.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "18.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-user-validate": { + "version": "3.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "7.0.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/package-json-from-dist": { + "version": "1.0.1", + "inBundle": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/npm/node_modules/pacote": { + "version": "19.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^7.5.10" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/path-key": { + "version": "3.1.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "1.11.1", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/picomatch": { + "version": "4.0.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/proggy": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "4.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^2.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/read-package-json-fast": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.7.4", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/shebang-command": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/shebang-regex": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/sigstore": { + "version": "3.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.8.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.23", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "12.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "9.4.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "7.5.11", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.15", + "inBundle": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "3.0.1", + "debug": "^4.4.1", + "make-fetch-happen": "^14.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/which": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/which/node_modules/isexe": { + "version": "3.1.5", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/yallist": { + "version": "5.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/walk": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.15.tgz", + "integrity": "sha512-4eRTBZljBfIISK1Vnt69Gvr2w/wc3U6Vtrw7qiN5iqYJPH7LElcYh/iU4XWhdCy2dZqv1ToMyYlybDylfG/5Vg==", + "dependencies": { + "foreachasync": "^3.0.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/labWeb/lab7/node_modules/abbrev/LICENSE b/labWeb/lab7/node_modules/abbrev/LICENSE new file mode 100644 index 0000000..9bcfa9d --- /dev/null +++ b/labWeb/lab7/node_modules/abbrev/LICENSE @@ -0,0 +1,46 @@ +This software is dual-licensed under the ISC and MIT licenses. +You may use this software under EITHER of the following licenses. + +---------- + +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. + +---------- + +Copyright Isaac Z. Schlueter and 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/labWeb/lab7/node_modules/abbrev/README.md b/labWeb/lab7/node_modules/abbrev/README.md new file mode 100644 index 0000000..99746fe --- /dev/null +++ b/labWeb/lab7/node_modules/abbrev/README.md @@ -0,0 +1,23 @@ +# abbrev-js + +Just like [ruby's Abbrev](http://apidock.com/ruby/Abbrev). + +Usage: + + var abbrev = require("abbrev"); + abbrev("foo", "fool", "folding", "flop"); + + // returns: + { fl: 'flop' + , flo: 'flop' + , flop: 'flop' + , fol: 'folding' + , fold: 'folding' + , foldi: 'folding' + , foldin: 'folding' + , folding: 'folding' + , foo: 'foo' + , fool: 'fool' + } + +This is handy for command-line scripts, or other cases where you want to be able to accept shorthands. diff --git a/labWeb/lab7/node_modules/abbrev/abbrev.js b/labWeb/lab7/node_modules/abbrev/abbrev.js new file mode 100644 index 0000000..7b1dc5d --- /dev/null +++ b/labWeb/lab7/node_modules/abbrev/abbrev.js @@ -0,0 +1,61 @@ +module.exports = exports = abbrev.abbrev = abbrev + +abbrev.monkeyPatch = monkeyPatch + +function monkeyPatch () { + Object.defineProperty(Array.prototype, 'abbrev', { + value: function () { return abbrev(this) }, + enumerable: false, configurable: true, writable: true + }) + + Object.defineProperty(Object.prototype, 'abbrev', { + value: function () { return abbrev(Object.keys(this)) }, + enumerable: false, configurable: true, writable: true + }) +} + +function abbrev (list) { + if (arguments.length !== 1 || !Array.isArray(list)) { + list = Array.prototype.slice.call(arguments, 0) + } + for (var i = 0, l = list.length, args = [] ; i < l ; i ++) { + args[i] = typeof list[i] === "string" ? list[i] : String(list[i]) + } + + // sort them lexicographically, so that they're next to their nearest kin + args = args.sort(lexSort) + + // walk through each, seeing how much it has in common with the next and previous + var abbrevs = {} + , prev = "" + for (var i = 0, l = args.length ; i < l ; i ++) { + var current = args[i] + , next = args[i + 1] || "" + , nextMatches = true + , prevMatches = true + if (current === next) continue + for (var j = 0, cl = current.length ; j < cl ; j ++) { + var curChar = current.charAt(j) + nextMatches = nextMatches && curChar === next.charAt(j) + prevMatches = prevMatches && curChar === prev.charAt(j) + if (!nextMatches && !prevMatches) { + j ++ + break + } + } + prev = current + if (j === cl) { + abbrevs[current] = current + continue + } + for (var a = current.substr(0, j) ; j <= cl ; j ++) { + abbrevs[a] = current + a += current.charAt(j) + } + } + return abbrevs +} + +function lexSort (a, b) { + return a === b ? 0 : a > b ? 1 : -1 +} diff --git a/labWeb/lab7/node_modules/abbrev/package.json b/labWeb/lab7/node_modules/abbrev/package.json new file mode 100644 index 0000000..bf4e801 --- /dev/null +++ b/labWeb/lab7/node_modules/abbrev/package.json @@ -0,0 +1,21 @@ +{ + "name": "abbrev", + "version": "1.1.1", + "description": "Like ruby's abbrev module, but in js", + "author": "Isaac Z. Schlueter ", + "main": "abbrev.js", + "scripts": { + "test": "tap test.js --100", + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --all; git push origin --tags" + }, + "repository": "http://github.com/isaacs/abbrev-js", + "license": "ISC", + "devDependencies": { + "tap": "^10.1" + }, + "files": [ + "abbrev.js" + ] +} diff --git a/labWeb/lab7/node_modules/accepts/HISTORY.md b/labWeb/lab7/node_modules/accepts/HISTORY.md new file mode 100644 index 0000000..cb5990c --- /dev/null +++ b/labWeb/lab7/node_modules/accepts/HISTORY.md @@ -0,0 +1,243 @@ +1.3.8 / 2022-02-02 +================== + + * deps: mime-types@~2.1.34 + - deps: mime-db@~1.51.0 + * deps: negotiator@0.6.3 + +1.3.7 / 2019-04-29 +================== + + * deps: negotiator@0.6.2 + - Fix sorting charset, encoding, and language with extra parameters + +1.3.6 / 2019-04-28 +================== + + * deps: mime-types@~2.1.24 + - deps: mime-db@~1.40.0 + +1.3.5 / 2018-02-28 +================== + + * deps: mime-types@~2.1.18 + - deps: mime-db@~1.33.0 + +1.3.4 / 2017-08-22 +================== + + * deps: mime-types@~2.1.16 + - deps: mime-db@~1.29.0 + +1.3.3 / 2016-05-02 +================== + + * deps: mime-types@~2.1.11 + - deps: mime-db@~1.23.0 + * deps: negotiator@0.6.1 + - perf: improve `Accept` parsing speed + - perf: improve `Accept-Charset` parsing speed + - perf: improve `Accept-Encoding` parsing speed + - perf: improve `Accept-Language` parsing speed + +1.3.2 / 2016-03-08 +================== + + * deps: mime-types@~2.1.10 + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + - deps: mime-db@~1.22.0 + +1.3.1 / 2016-01-19 +================== + + * deps: mime-types@~2.1.9 + - deps: mime-db@~1.21.0 + +1.3.0 / 2015-09-29 +================== + + * deps: mime-types@~2.1.7 + - deps: mime-db@~1.19.0 + * deps: negotiator@0.6.0 + - Fix including type extensions in parameters in `Accept` parsing + - Fix parsing `Accept` parameters with quoted equals + - Fix parsing `Accept` parameters with quoted semicolons + - Lazy-load modules from main entry point + - perf: delay type concatenation until needed + - perf: enable strict mode + - perf: hoist regular expressions + - perf: remove closures getting spec properties + - perf: remove a closure from media type parsing + - perf: remove property delete from media type parsing + +1.2.13 / 2015-09-06 +=================== + + * deps: mime-types@~2.1.6 + - deps: mime-db@~1.18.0 + +1.2.12 / 2015-07-30 +=================== + + * deps: mime-types@~2.1.4 + - deps: mime-db@~1.16.0 + +1.2.11 / 2015-07-16 +=================== + + * deps: mime-types@~2.1.3 + - deps: mime-db@~1.15.0 + +1.2.10 / 2015-07-01 +=================== + + * deps: mime-types@~2.1.2 + - deps: mime-db@~1.14.0 + +1.2.9 / 2015-06-08 +================== + + * deps: mime-types@~2.1.1 + - perf: fix deopt during mapping + +1.2.8 / 2015-06-07 +================== + + * deps: mime-types@~2.1.0 + - deps: mime-db@~1.13.0 + * perf: avoid argument reassignment & argument slice + * perf: avoid negotiator recursive construction + * perf: enable strict mode + * perf: remove unnecessary bitwise operator + +1.2.7 / 2015-05-10 +================== + + * deps: negotiator@0.5.3 + - Fix media type parameter matching to be case-insensitive + +1.2.6 / 2015-05-07 +================== + + * deps: mime-types@~2.0.11 + - deps: mime-db@~1.9.1 + * deps: negotiator@0.5.2 + - Fix comparing media types with quoted values + - Fix splitting media types with quoted commas + +1.2.5 / 2015-03-13 +================== + + * deps: mime-types@~2.0.10 + - deps: mime-db@~1.8.0 + +1.2.4 / 2015-02-14 +================== + + * Support Node.js 0.6 + * deps: mime-types@~2.0.9 + - deps: mime-db@~1.7.0 + * deps: negotiator@0.5.1 + - Fix preference sorting to be stable for long acceptable lists + +1.2.3 / 2015-01-31 +================== + + * deps: mime-types@~2.0.8 + - deps: mime-db@~1.6.0 + +1.2.2 / 2014-12-30 +================== + + * deps: mime-types@~2.0.7 + - deps: mime-db@~1.5.0 + +1.2.1 / 2014-12-30 +================== + + * deps: mime-types@~2.0.5 + - deps: mime-db@~1.3.1 + +1.2.0 / 2014-12-19 +================== + + * deps: negotiator@0.5.0 + - Fix list return order when large accepted list + - Fix missing identity encoding when q=0 exists + - Remove dynamic building of Negotiator class + +1.1.4 / 2014-12-10 +================== + + * deps: mime-types@~2.0.4 + - deps: mime-db@~1.3.0 + +1.1.3 / 2014-11-09 +================== + + * deps: mime-types@~2.0.3 + - deps: mime-db@~1.2.0 + +1.1.2 / 2014-10-14 +================== + + * deps: negotiator@0.4.9 + - Fix error when media type has invalid parameter + +1.1.1 / 2014-09-28 +================== + + * deps: mime-types@~2.0.2 + - deps: mime-db@~1.1.0 + * deps: negotiator@0.4.8 + - Fix all negotiations to be case-insensitive + - Stable sort preferences of same quality according to client order + +1.1.0 / 2014-09-02 +================== + + * update `mime-types` + +1.0.7 / 2014-07-04 +================== + + * Fix wrong type returned from `type` when match after unknown extension + +1.0.6 / 2014-06-24 +================== + + * deps: negotiator@0.4.7 + +1.0.5 / 2014-06-20 +================== + + * fix crash when unknown extension given + +1.0.4 / 2014-06-19 +================== + + * use `mime-types` + +1.0.3 / 2014-06-11 +================== + + * deps: negotiator@0.4.6 + - Order by specificity when quality is the same + +1.0.2 / 2014-05-29 +================== + + * Fix interpretation when header not in request + * deps: pin negotiator@0.4.5 + +1.0.1 / 2014-01-18 +================== + + * Identity encoding isn't always acceptable + * deps: negotiator@~0.4.0 + +1.0.0 / 2013-12-27 +================== + + * Genesis diff --git a/labWeb/lab7/node_modules/accepts/LICENSE b/labWeb/lab7/node_modules/accepts/LICENSE new file mode 100644 index 0000000..0616607 --- /dev/null +++ b/labWeb/lab7/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/labWeb/lab7/node_modules/accepts/README.md b/labWeb/lab7/node_modules/accepts/README.md new file mode 100644 index 0000000..82680c5 --- /dev/null +++ b/labWeb/lab7/node_modules/accepts/README.md @@ -0,0 +1,140 @@ +# accepts + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][github-actions-ci-image]][github-actions-ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator). +Extracted from [koa](https://www.npmjs.com/package/koa) for general use. + +In addition to negotiator, it allows: + +- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` + as well as `('text/html', 'application/json')`. +- Allows type shorthands such as `json`. +- Returns `false` when no types match +- Treats non-existent headers as `*` + +## Installation + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install accepts +``` + +## API + +```js +var accepts = require('accepts') +``` + +### accepts(req) + +Create a new `Accepts` object for the given `req`. + +#### .charset(charsets) + +Return the first accepted charset. If nothing in `charsets` is accepted, +then `false` is returned. + +#### .charsets() + +Return the charsets that the request accepts, in the order of the client's +preference (most preferred first). + +#### .encoding(encodings) + +Return the first accepted encoding. If nothing in `encodings` is accepted, +then `false` is returned. + +#### .encodings() + +Return the encodings that the request accepts, in the order of the client's +preference (most preferred first). + +#### .language(languages) + +Return the first accepted language. If nothing in `languages` is accepted, +then `false` is returned. + +#### .languages() + +Return the languages that the request accepts, in the order of the client's +preference (most preferred first). + +#### .type(types) + +Return the first accepted type (and it is returned as the same text as what +appears in the `types` array). If nothing in `types` is accepted, then `false` +is returned. + +The `types` array can contain full MIME types or file extensions. Any value +that is not a full MIME types is passed to `require('mime-types').lookup`. + +#### .types() + +Return the types that the request accepts, in the order of the client's +preference (most preferred first). + +## Examples + +### Simple type negotiation + +This simple example shows how to use `accepts` to return a different typed +respond body based on what the client wants to accept. The server lists it's +preferences in order and will get back the best match between the client and +server. + +```js +var accepts = require('accepts') +var http = require('http') + +function app (req, res) { + var accept = accepts(req) + + // the order of this list is significant; should be server preferred order + switch (accept.type(['json', 'html'])) { + case 'json': + res.setHeader('Content-Type', 'application/json') + res.write('{"hello":"world!"}') + break + case 'html': + res.setHeader('Content-Type', 'text/html') + res.write('hello, world!') + break + default: + // the fallback is text/plain, so no need to specify it above + res.setHeader('Content-Type', 'text/plain') + res.write('hello, world!') + break + } + + res.end() +} + +http.createServer(app).listen(3000) +``` + +You can test this out with the cURL program: +```sh +curl -I -H'Accept: text/html' http://localhost:3000/ +``` + +## License + +[MIT](LICENSE) + +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master +[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master +[github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci +[github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml +[node-version-image]: https://badgen.net/npm/node/accepts +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/accepts +[npm-url]: https://npmjs.org/package/accepts +[npm-version-image]: https://badgen.net/npm/v/accepts diff --git a/labWeb/lab7/node_modules/accepts/index.js b/labWeb/lab7/node_modules/accepts/index.js new file mode 100644 index 0000000..e9b2f63 --- /dev/null +++ b/labWeb/lab7/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/labWeb/lab7/node_modules/accepts/package.json b/labWeb/lab7/node_modules/accepts/package.json new file mode 100644 index 0000000..0f2d15d --- /dev/null +++ b/labWeb/lab7/node_modules/accepts/package.json @@ -0,0 +1,47 @@ +{ + "name": "accepts", + "description": "Higher-level content negotiation", + "version": "1.3.8", + "contributors": [ + "Douglas Christopher Wilson ", + "Jonathan Ong (http://jongleberry.com)" + ], + "license": "MIT", + "repository": "jshttp/accepts", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "devDependencies": { + "deep-equal": "1.0.1", + "eslint": "7.32.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "4.3.1", + "eslint-plugin-standard": "4.1.0", + "mocha": "9.2.0", + "nyc": "15.1.0" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + }, + "keywords": [ + "content", + "negotiation", + "accept", + "accepts" + ] +} diff --git a/labWeb/lab7/node_modules/anymatch/LICENSE b/labWeb/lab7/node_modules/anymatch/LICENSE new file mode 100644 index 0000000..491766c --- /dev/null +++ b/labWeb/lab7/node_modules/anymatch/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2019 Elan Shanker, Paul Miller (https://paulmillr.com) + +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/labWeb/lab7/node_modules/anymatch/README.md b/labWeb/lab7/node_modules/anymatch/README.md new file mode 100644 index 0000000..1dd67f5 --- /dev/null +++ b/labWeb/lab7/node_modules/anymatch/README.md @@ -0,0 +1,87 @@ +anymatch [![Build Status](https://travis-ci.org/micromatch/anymatch.svg?branch=master)](https://travis-ci.org/micromatch/anymatch) [![Coverage Status](https://img.shields.io/coveralls/micromatch/anymatch.svg?branch=master)](https://coveralls.io/r/micromatch/anymatch?branch=master) +====== +Javascript module to match a string against a regular expression, glob, string, +or function that takes the string as an argument and returns a truthy or falsy +value. The matcher can also be an array of any or all of these. Useful for +allowing a very flexible user-defined config to define things like file paths. + +__Note: This module has Bash-parity, please be aware that Windows-style backslashes are not supported as separators. See https://github.com/micromatch/micromatch#backslashes for more information.__ + + +Usage +----- +```sh +npm install anymatch +``` + +#### anymatch(matchers, testString, [returnIndex], [options]) +* __matchers__: (_Array|String|RegExp|Function_) +String to be directly matched, string with glob patterns, regular expression +test, function that takes the testString as an argument and returns a truthy +value if it should be matched, or an array of any number and mix of these types. +* __testString__: (_String|Array_) The string to test against the matchers. If +passed as an array, the first element of the array will be used as the +`testString` for non-function matchers, while the entire array will be applied +as the arguments for function matchers. +* __options__: (_Object_ [optional]_) Any of the [picomatch](https://github.com/micromatch/picomatch#options) options. + * __returnIndex__: (_Boolean [optional]_) If true, return the array index of +the first matcher that that testString matched, or -1 if no match, instead of a +boolean result. + +```js +const anymatch = require('anymatch'); + +const matchers = [ 'path/to/file.js', 'path/anyjs/**/*.js', /foo.js$/, string => string.includes('bar') && string.length > 10 ] ; + +anymatch(matchers, 'path/to/file.js'); // true +anymatch(matchers, 'path/anyjs/baz.js'); // true +anymatch(matchers, 'path/to/foo.js'); // true +anymatch(matchers, 'path/to/bar.js'); // true +anymatch(matchers, 'bar.js'); // false + +// returnIndex = true +anymatch(matchers, 'foo.js', {returnIndex: true}); // 2 +anymatch(matchers, 'path/anyjs/foo.js', {returnIndex: true}); // 1 + +// any picomatc + +// using globs to match directories and their children +anymatch('node_modules', 'node_modules'); // true +anymatch('node_modules', 'node_modules/somelib/index.js'); // false +anymatch('node_modules/**', 'node_modules/somelib/index.js'); // true +anymatch('node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // false +anymatch('**/node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // true + +const matcher = anymatch(matchers); +['foo.js', 'bar.js'].filter(matcher); // [ 'foo.js' ] +anymatch master* ❯ + +``` + +#### anymatch(matchers) +You can also pass in only your matcher(s) to get a curried function that has +already been bound to the provided matching criteria. This can be used as an +`Array#filter` callback. + +```js +var matcher = anymatch(matchers); + +matcher('path/to/file.js'); // true +matcher('path/anyjs/baz.js', true); // 1 + +['foo.js', 'bar.js'].filter(matcher); // ['foo.js'] +``` + +Changelog +---------- +[See release notes page on GitHub](https://github.com/micromatch/anymatch/releases) + +- **v3.0:** Removed `startIndex` and `endIndex` arguments. Node 8.x-only. +- **v2.0:** [micromatch](https://github.com/jonschlinkert/micromatch) moves away from minimatch-parity and inline with Bash. This includes handling backslashes differently (see https://github.com/micromatch/micromatch#backslashes for more information). +- **v1.2:** anymatch uses [micromatch](https://github.com/jonschlinkert/micromatch) +for glob pattern matching. Issues with glob pattern matching should be +reported directly to the [micromatch issue tracker](https://github.com/jonschlinkert/micromatch/issues). + +License +------- +[ISC](https://raw.github.com/micromatch/anymatch/master/LICENSE) diff --git a/labWeb/lab7/node_modules/anymatch/index.d.ts b/labWeb/lab7/node_modules/anymatch/index.d.ts new file mode 100644 index 0000000..3ef7eaa --- /dev/null +++ b/labWeb/lab7/node_modules/anymatch/index.d.ts @@ -0,0 +1,20 @@ +type AnymatchFn = (testString: string) => boolean; +type AnymatchPattern = string|RegExp|AnymatchFn; +type AnymatchMatcher = AnymatchPattern|AnymatchPattern[] +type AnymatchTester = { + (testString: string|any[], returnIndex: true): number; + (testString: string|any[]): boolean; +} + +type PicomatchOptions = {dot: boolean}; + +declare const anymatch: { + (matchers: AnymatchMatcher): AnymatchTester; + (matchers: AnymatchMatcher, testString: null, returnIndex: true | PicomatchOptions): AnymatchTester; + (matchers: AnymatchMatcher, testString: string|any[], returnIndex: true | PicomatchOptions): number; + (matchers: AnymatchMatcher, testString: string|any[]): boolean; +} + +export {AnymatchMatcher as Matcher} +export {AnymatchTester as Tester} +export default anymatch diff --git a/labWeb/lab7/node_modules/anymatch/index.js b/labWeb/lab7/node_modules/anymatch/index.js new file mode 100644 index 0000000..8eb73e9 --- /dev/null +++ b/labWeb/lab7/node_modules/anymatch/index.js @@ -0,0 +1,104 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { value: true }); + +const picomatch = require('picomatch'); +const normalizePath = require('normalize-path'); + +/** + * @typedef {(testString: string) => boolean} AnymatchFn + * @typedef {string|RegExp|AnymatchFn} AnymatchPattern + * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher + */ +const BANG = '!'; +const DEFAULT_OPTIONS = {returnIndex: false}; +const arrify = (item) => Array.isArray(item) ? item : [item]; + +/** + * @param {AnymatchPattern} matcher + * @param {object} options + * @returns {AnymatchFn} + */ +const createPattern = (matcher, options) => { + if (typeof matcher === 'function') { + return matcher; + } + if (typeof matcher === 'string') { + const glob = picomatch(matcher, options); + return (string) => matcher === string || glob(string); + } + if (matcher instanceof RegExp) { + return (string) => matcher.test(string); + } + return (string) => false; +}; + +/** + * @param {Array} patterns + * @param {Array} negPatterns + * @param {String|Array} args + * @param {Boolean} returnIndex + * @returns {boolean|number} + */ +const matchPatterns = (patterns, negPatterns, args, returnIndex) => { + const isList = Array.isArray(args); + const _path = isList ? args[0] : args; + if (!isList && typeof _path !== 'string') { + throw new TypeError('anymatch: second argument must be a string: got ' + + Object.prototype.toString.call(_path)) + } + const path = normalizePath(_path, false); + + for (let index = 0; index < negPatterns.length; index++) { + const nglob = negPatterns[index]; + if (nglob(path)) { + return returnIndex ? -1 : false; + } + } + + const applied = isList && [path].concat(args.slice(1)); + for (let index = 0; index < patterns.length; index++) { + const pattern = patterns[index]; + if (isList ? pattern(...applied) : pattern(path)) { + return returnIndex ? index : true; + } + } + + return returnIndex ? -1 : false; +}; + +/** + * @param {AnymatchMatcher} matchers + * @param {Array|string} testString + * @param {object} options + * @returns {boolean|number|Function} + */ +const anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => { + if (matchers == null) { + throw new TypeError('anymatch: specify first argument'); + } + const opts = typeof options === 'boolean' ? {returnIndex: options} : options; + const returnIndex = opts.returnIndex || false; + + // Early cache for matchers. + const mtchers = arrify(matchers); + const negatedGlobs = mtchers + .filter(item => typeof item === 'string' && item.charAt(0) === BANG) + .map(item => item.slice(1)) + .map(item => picomatch(item, opts)); + const patterns = mtchers + .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG)) + .map(matcher => createPattern(matcher, opts)); + + if (testString == null) { + return (testString, ri = false) => { + const returnIndex = typeof ri === 'boolean' ? ri : false; + return matchPatterns(patterns, negatedGlobs, testString, returnIndex); + } + } + + return matchPatterns(patterns, negatedGlobs, testString, returnIndex); +}; + +anymatch.default = anymatch; +module.exports = anymatch; diff --git a/labWeb/lab7/node_modules/anymatch/package.json b/labWeb/lab7/node_modules/anymatch/package.json new file mode 100644 index 0000000..2cb2307 --- /dev/null +++ b/labWeb/lab7/node_modules/anymatch/package.json @@ -0,0 +1,48 @@ +{ + "name": "anymatch", + "version": "3.1.3", + "description": "Matches strings against configurable strings, globs, regular expressions, and/or functions", + "files": [ + "index.js", + "index.d.ts" + ], + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "author": { + "name": "Elan Shanker", + "url": "https://github.com/es128" + }, + "license": "ISC", + "homepage": "https://github.com/micromatch/anymatch", + "repository": { + "type": "git", + "url": "https://github.com/micromatch/anymatch" + }, + "keywords": [ + "match", + "any", + "string", + "file", + "fs", + "list", + "glob", + "regex", + "regexp", + "regular", + "expression", + "function" + ], + "scripts": { + "test": "nyc mocha", + "mocha": "mocha" + }, + "devDependencies": { + "mocha": "^6.1.3", + "nyc": "^14.0.0" + }, + "engines": { + "node": ">= 8" + } +} diff --git a/labWeb/lab7/node_modules/array-flatten/LICENSE b/labWeb/lab7/node_modules/array-flatten/LICENSE new file mode 100644 index 0000000..983fbe8 --- /dev/null +++ b/labWeb/lab7/node_modules/array-flatten/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/labWeb/lab7/node_modules/array-flatten/README.md b/labWeb/lab7/node_modules/array-flatten/README.md new file mode 100644 index 0000000..91fa5b6 --- /dev/null +++ b/labWeb/lab7/node_modules/array-flatten/README.md @@ -0,0 +1,43 @@ +# Array Flatten + +[![NPM version][npm-image]][npm-url] +[![NPM downloads][downloads-image]][downloads-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] + +> Flatten an array of nested arrays into a single flat array. Accepts an optional depth. + +## Installation + +``` +npm install array-flatten --save +``` + +## Usage + +```javascript +var flatten = require('array-flatten') + +flatten([1, [2, [3, [4, [5], 6], 7], 8], 9]) +//=> [1, 2, 3, 4, 5, 6, 7, 8, 9] + +flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2) +//=> [1, 2, 3, [4, [5], 6], 7, 8, 9] + +(function () { + flatten(arguments) //=> [1, 2, 3] +})(1, [2, 3]) +``` + +## License + +MIT + +[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat +[npm-url]: https://npmjs.org/package/array-flatten +[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat +[downloads-url]: https://npmjs.org/package/array-flatten +[travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat +[travis-url]: https://travis-ci.org/blakeembrey/array-flatten +[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat +[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master diff --git a/labWeb/lab7/node_modules/array-flatten/array-flatten.js b/labWeb/lab7/node_modules/array-flatten/array-flatten.js new file mode 100644 index 0000000..089117b --- /dev/null +++ b/labWeb/lab7/node_modules/array-flatten/array-flatten.js @@ -0,0 +1,64 @@ +'use strict' + +/** + * Expose `arrayFlatten`. + */ +module.exports = arrayFlatten + +/** + * Recursive flatten function with depth. + * + * @param {Array} array + * @param {Array} result + * @param {Number} depth + * @return {Array} + */ +function flattenWithDepth (array, result, depth) { + for (var i = 0; i < array.length; i++) { + var value = array[i] + + if (depth > 0 && Array.isArray(value)) { + flattenWithDepth(value, result, depth - 1) + } else { + result.push(value) + } + } + + return result +} + +/** + * Recursive flatten function. Omitting depth is slightly faster. + * + * @param {Array} array + * @param {Array} result + * @return {Array} + */ +function flattenForever (array, result) { + for (var i = 0; i < array.length; i++) { + var value = array[i] + + if (Array.isArray(value)) { + flattenForever(value, result) + } else { + result.push(value) + } + } + + return result +} + +/** + * Flatten an array, with the ability to define a depth. + * + * @param {Array} array + * @param {Number} depth + * @return {Array} + */ +function arrayFlatten (array, depth) { + if (depth == null) { + return flattenForever(array, []) + } + + return flattenWithDepth(array, [], depth) +} diff --git a/labWeb/lab7/node_modules/array-flatten/package.json b/labWeb/lab7/node_modules/array-flatten/package.json new file mode 100644 index 0000000..1a24e2a --- /dev/null +++ b/labWeb/lab7/node_modules/array-flatten/package.json @@ -0,0 +1,39 @@ +{ + "name": "array-flatten", + "version": "1.1.1", + "description": "Flatten an array of nested arrays into a single flat array", + "main": "array-flatten.js", + "files": [ + "array-flatten.js", + "LICENSE" + ], + "scripts": { + "test": "istanbul cover _mocha -- -R spec" + }, + "repository": { + "type": "git", + "url": "git://github.com/blakeembrey/array-flatten.git" + }, + "keywords": [ + "array", + "flatten", + "arguments", + "depth" + ], + "author": { + "name": "Blake Embrey", + "email": "hello@blakeembrey.com", + "url": "http://blakeembrey.me" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/blakeembrey/array-flatten/issues" + }, + "homepage": "https://github.com/blakeembrey/array-flatten", + "devDependencies": { + "istanbul": "^0.3.13", + "mocha": "^2.2.4", + "pre-commit": "^1.0.7", + "standard": "^3.7.3" + } +} diff --git a/labWeb/lab7/node_modules/balanced-match/LICENSE.md b/labWeb/lab7/node_modules/balanced-match/LICENSE.md new file mode 100644 index 0000000..61ece8c --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/LICENSE.md @@ -0,0 +1,23 @@ +(MIT) + +Original code Copyright Julian Gruber + +Port to TypeScript Copyright Isaac Z. Schlueter + +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/labWeb/lab7/node_modules/balanced-match/README.md b/labWeb/lab7/node_modules/balanced-match/README.md new file mode 100644 index 0000000..f3bb377 --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/README.md @@ -0,0 +1,57 @@ +# balanced-match + +Match balanced string pairs, like `{` and `}` or `` and +``. Supports regular expressions as well! + +## Example + +Get the first matching pair of braces: + +```js +import { balanced } from '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 + +### const 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', '}']`. + +### const 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]`. diff --git a/labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.d.ts b/labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.d.ts new file mode 100644 index 0000000..f819cfd --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.d.ts @@ -0,0 +1,9 @@ +export declare const balanced: (a: string | RegExp, b: string | RegExp, str: string) => false | { + start: number; + end: number; + pre: string; + body: string; + post: string; +} | undefined; +export declare const range: (a: string, b: string, str: string) => undefined | [number, number]; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.d.ts.map b/labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.d.ts.map new file mode 100644 index 0000000..6306762 --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,GACnB,GAAG,MAAM,GAAG,MAAM,EAClB,GAAG,MAAM,GAAG,MAAM,EAClB,KAAK,MAAM;;;;;;aAgBZ,CAAA;AAOD,eAAO,MAAM,KAAK,GAChB,GAAG,MAAM,EACT,GAAG,MAAM,EACT,KAAK,MAAM,KACV,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CA2C7B,CAAA"} \ No newline at end of file diff --git a/labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.js b/labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.js new file mode 100644 index 0000000..0c9014b --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.range = exports.balanced = void 0; +const balanced = (a, b, str) => { + const ma = a instanceof RegExp ? maybeMatch(a, str) : a; + const mb = b instanceof RegExp ? maybeMatch(b, str) : b; + const r = ma !== null && mb != null && (0, exports.range)(ma, mb, str); + return (r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + ma.length, r[1]), + post: str.slice(r[1] + mb.length), + }); +}; +exports.balanced = balanced; +const maybeMatch = (reg, str) => { + const m = str.match(reg); + return m ? m[0] : null; +}; +const range = (a, b, str) => { + let begs, beg, left, right = undefined, result; + let ai = str.indexOf(a); + let bi = str.indexOf(b, ai + 1); + let 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) { + const r = begs.pop(); + if (r !== undefined) + result = [r, bi]; + } + else { + beg = begs.pop(); + if (beg !== undefined && beg < left) { + left = beg; + right = bi; + } + bi = str.indexOf(b, i + 1); + } + i = ai < bi && ai >= 0 ? ai : bi; + } + if (begs.length && right !== undefined) { + result = [left, right]; + } + } + return result; +}; +exports.range = range; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.js.map b/labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.js.map new file mode 100644 index 0000000..83f547c --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/dist/commonjs/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export const balanced = (\n a: string | RegExp,\n b: string | RegExp,\n str: string,\n) => {\n const ma = a instanceof RegExp ? maybeMatch(a, str) : a\n const mb = b instanceof RegExp ? maybeMatch(b, str) : b\n\n const r = ma !== null && mb != null && range(ma, mb, str)\n\n return (\n r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + ma.length, r[1]),\n post: str.slice(r[1] + mb.length),\n }\n )\n}\n\nconst maybeMatch = (reg: RegExp, str: string) => {\n const m = str.match(reg)\n return m ? m[0] : null\n}\n\nexport const range = (\n a: string,\n b: string,\n str: string,\n): undefined | [number, number] => {\n let begs: number[],\n beg: number | undefined,\n left: number,\n right: number | undefined = undefined,\n result: undefined | [number, number]\n let ai = str.indexOf(a)\n let bi = str.indexOf(b, ai + 1)\n let i = ai\n\n if (ai >= 0 && bi > 0) {\n if (a === b) {\n return [ai, bi]\n }\n begs = []\n left = str.length\n\n while (i >= 0 && !result) {\n if (i === ai) {\n begs.push(i)\n ai = str.indexOf(a, i + 1)\n } else if (begs.length === 1) {\n const r = begs.pop()\n if (r !== undefined) result = [r, bi]\n } else {\n beg = begs.pop()\n if (beg !== undefined && beg < left) {\n left = beg\n right = bi\n }\n\n bi = str.indexOf(b, i + 1)\n }\n\n i = ai < bi && ai >= 0 ? ai : bi\n }\n\n if (begs.length && right !== undefined) {\n result = [left, right]\n }\n }\n\n return result\n}\n"]} \ No newline at end of file diff --git a/labWeb/lab7/node_modules/balanced-match/dist/commonjs/package.json b/labWeb/lab7/node_modules/balanced-match/dist/commonjs/package.json new file mode 100644 index 0000000..5bbefff --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/dist/commonjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/labWeb/lab7/node_modules/balanced-match/dist/esm/index.d.ts b/labWeb/lab7/node_modules/balanced-match/dist/esm/index.d.ts new file mode 100644 index 0000000..f819cfd --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/dist/esm/index.d.ts @@ -0,0 +1,9 @@ +export declare const balanced: (a: string | RegExp, b: string | RegExp, str: string) => false | { + start: number; + end: number; + pre: string; + body: string; + post: string; +} | undefined; +export declare const range: (a: string, b: string, str: string) => undefined | [number, number]; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/labWeb/lab7/node_modules/balanced-match/dist/esm/index.d.ts.map b/labWeb/lab7/node_modules/balanced-match/dist/esm/index.d.ts.map new file mode 100644 index 0000000..6306762 --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/dist/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,GACnB,GAAG,MAAM,GAAG,MAAM,EAClB,GAAG,MAAM,GAAG,MAAM,EAClB,KAAK,MAAM;;;;;;aAgBZ,CAAA;AAOD,eAAO,MAAM,KAAK,GAChB,GAAG,MAAM,EACT,GAAG,MAAM,EACT,KAAK,MAAM,KACV,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CA2C7B,CAAA"} \ No newline at end of file diff --git a/labWeb/lab7/node_modules/balanced-match/dist/esm/index.js b/labWeb/lab7/node_modules/balanced-match/dist/esm/index.js new file mode 100644 index 0000000..fe81200 --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/dist/esm/index.js @@ -0,0 +1,54 @@ +export const balanced = (a, b, str) => { + const ma = a instanceof RegExp ? maybeMatch(a, str) : a; + const mb = b instanceof RegExp ? maybeMatch(b, str) : b; + const r = ma !== null && mb != null && range(ma, mb, str); + return (r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + ma.length, r[1]), + post: str.slice(r[1] + mb.length), + }); +}; +const maybeMatch = (reg, str) => { + const m = str.match(reg); + return m ? m[0] : null; +}; +export const range = (a, b, str) => { + let begs, beg, left, right = undefined, result; + let ai = str.indexOf(a); + let bi = str.indexOf(b, ai + 1); + let 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) { + const r = begs.pop(); + if (r !== undefined) + result = [r, bi]; + } + else { + beg = begs.pop(); + if (beg !== undefined && beg < left) { + left = beg; + right = bi; + } + bi = str.indexOf(b, i + 1); + } + i = ai < bi && ai >= 0 ? ai : bi; + } + if (begs.length && right !== undefined) { + result = [left, right]; + } + } + return result; +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/labWeb/lab7/node_modules/balanced-match/dist/esm/index.js.map b/labWeb/lab7/node_modules/balanced-match/dist/esm/index.js.map new file mode 100644 index 0000000..b476cae --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export const balanced = (\n a: string | RegExp,\n b: string | RegExp,\n str: string,\n) => {\n const ma = a instanceof RegExp ? maybeMatch(a, str) : a\n const mb = b instanceof RegExp ? maybeMatch(b, str) : b\n\n const r = ma !== null && mb != null && range(ma, mb, str)\n\n return (\n r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + ma.length, r[1]),\n post: str.slice(r[1] + mb.length),\n }\n )\n}\n\nconst maybeMatch = (reg: RegExp, str: string) => {\n const m = str.match(reg)\n return m ? m[0] : null\n}\n\nexport const range = (\n a: string,\n b: string,\n str: string,\n): undefined | [number, number] => {\n let begs: number[],\n beg: number | undefined,\n left: number,\n right: number | undefined = undefined,\n result: undefined | [number, number]\n let ai = str.indexOf(a)\n let bi = str.indexOf(b, ai + 1)\n let i = ai\n\n if (ai >= 0 && bi > 0) {\n if (a === b) {\n return [ai, bi]\n }\n begs = []\n left = str.length\n\n while (i >= 0 && !result) {\n if (i === ai) {\n begs.push(i)\n ai = str.indexOf(a, i + 1)\n } else if (begs.length === 1) {\n const r = begs.pop()\n if (r !== undefined) result = [r, bi]\n } else {\n beg = begs.pop()\n if (beg !== undefined && beg < left) {\n left = beg\n right = bi\n }\n\n bi = str.indexOf(b, i + 1)\n }\n\n i = ai < bi && ai >= 0 ? ai : bi\n }\n\n if (begs.length && right !== undefined) {\n result = [left, right]\n }\n }\n\n return result\n}\n"]} \ No newline at end of file diff --git a/labWeb/lab7/node_modules/balanced-match/dist/esm/package.json b/labWeb/lab7/node_modules/balanced-match/dist/esm/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/dist/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/labWeb/lab7/node_modules/balanced-match/package.json b/labWeb/lab7/node_modules/balanced-match/package.json new file mode 100644 index 0000000..48f1a63 --- /dev/null +++ b/labWeb/lab7/node_modules/balanced-match/package.json @@ -0,0 +1,68 @@ +{ + "name": "balanced-match", + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "version": "4.0.4", + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/balanced-match.git" + }, + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "type": "module", + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write .", + "benchmark": "node benchmark/index.js", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "devDependencies": { + "@types/brace-expansion": "^1.1.2", + "@types/node": "^25.2.1", + "mkdirp": "^3.0.1", + "prettier": "^3.3.2", + "tap": "^21.6.2", + "tshy": "^3.0.2", + "typedoc": "^0.28.5" + }, + "keywords": [ + "match", + "regexp", + "test", + "balanced", + "parse" + ], + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + }, + "tshy": { + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "module": "./dist/esm/index.js" +} diff --git a/labWeb/lab7/node_modules/binary-extensions/binary-extensions.json b/labWeb/lab7/node_modules/binary-extensions/binary-extensions.json new file mode 100644 index 0000000..4aab383 --- /dev/null +++ b/labWeb/lab7/node_modules/binary-extensions/binary-extensions.json @@ -0,0 +1,260 @@ +[ + "3dm", + "3ds", + "3g2", + "3gp", + "7z", + "a", + "aac", + "adp", + "ai", + "aif", + "aiff", + "alz", + "ape", + "apk", + "appimage", + "ar", + "arj", + "asf", + "au", + "avi", + "bak", + "baml", + "bh", + "bin", + "bk", + "bmp", + "btif", + "bz2", + "bzip2", + "cab", + "caf", + "cgm", + "class", + "cmx", + "cpio", + "cr2", + "cur", + "dat", + "dcm", + "deb", + "dex", + "djvu", + "dll", + "dmg", + "dng", + "doc", + "docm", + "docx", + "dot", + "dotm", + "dra", + "DS_Store", + "dsk", + "dts", + "dtshd", + "dvb", + "dwg", + "dxf", + "ecelp4800", + "ecelp7470", + "ecelp9600", + "egg", + "eol", + "eot", + "epub", + "exe", + "f4v", + "fbs", + "fh", + "fla", + "flac", + "flatpak", + "fli", + "flv", + "fpx", + "fst", + "fvt", + "g3", + "gh", + "gif", + "graffle", + "gz", + "gzip", + "h261", + "h263", + "h264", + "icns", + "ico", + "ief", + "img", + "ipa", + "iso", + "jar", + "jpeg", + "jpg", + "jpgv", + "jpm", + "jxr", + "key", + "ktx", + "lha", + "lib", + "lvp", + "lz", + "lzh", + "lzma", + "lzo", + "m3u", + "m4a", + "m4v", + "mar", + "mdi", + "mht", + "mid", + "midi", + "mj2", + "mka", + "mkv", + "mmr", + "mng", + "mobi", + "mov", + "movie", + "mp3", + "mp4", + "mp4a", + "mpeg", + "mpg", + "mpga", + "mxu", + "nef", + "npx", + "numbers", + "nupkg", + "o", + "odp", + "ods", + "odt", + "oga", + "ogg", + "ogv", + "otf", + "ott", + "pages", + "pbm", + "pcx", + "pdb", + "pdf", + "pea", + "pgm", + "pic", + "png", + "pnm", + "pot", + "potm", + "potx", + "ppa", + "ppam", + "ppm", + "pps", + "ppsm", + "ppsx", + "ppt", + "pptm", + "pptx", + "psd", + "pya", + "pyc", + "pyo", + "pyv", + "qt", + "rar", + "ras", + "raw", + "resources", + "rgb", + "rip", + "rlc", + "rmf", + "rmvb", + "rpm", + "rtf", + "rz", + "s3m", + "s7z", + "scpt", + "sgi", + "shar", + "snap", + "sil", + "sketch", + "slk", + "smv", + "snk", + "so", + "stl", + "suo", + "sub", + "swf", + "tar", + "tbz", + "tbz2", + "tga", + "tgz", + "thmx", + "tif", + "tiff", + "tlz", + "ttc", + "ttf", + "txz", + "udf", + "uvh", + "uvi", + "uvm", + "uvp", + "uvs", + "uvu", + "viv", + "vob", + "war", + "wav", + "wax", + "wbmp", + "wdp", + "weba", + "webm", + "webp", + "whl", + "wim", + "wm", + "wma", + "wmv", + "wmx", + "woff", + "woff2", + "wrm", + "wvx", + "xbm", + "xif", + "xla", + "xlam", + "xls", + "xlsb", + "xlsm", + "xlsx", + "xlt", + "xltm", + "xltx", + "xm", + "xmind", + "xpi", + "xpm", + "xwd", + "xz", + "z", + "zip", + "zipx" +] diff --git a/labWeb/lab7/node_modules/binary-extensions/binary-extensions.json.d.ts b/labWeb/lab7/node_modules/binary-extensions/binary-extensions.json.d.ts new file mode 100644 index 0000000..94a248c --- /dev/null +++ b/labWeb/lab7/node_modules/binary-extensions/binary-extensions.json.d.ts @@ -0,0 +1,3 @@ +declare const binaryExtensionsJson: readonly string[]; + +export = binaryExtensionsJson; diff --git a/labWeb/lab7/node_modules/binary-extensions/index.d.ts b/labWeb/lab7/node_modules/binary-extensions/index.d.ts new file mode 100644 index 0000000..f469ac5 --- /dev/null +++ b/labWeb/lab7/node_modules/binary-extensions/index.d.ts @@ -0,0 +1,14 @@ +/** +List of binary file extensions. + +@example +``` +import binaryExtensions = require('binary-extensions'); + +console.log(binaryExtensions); +//=> ['3ds', '3g2', …] +``` +*/ +declare const binaryExtensions: readonly string[]; + +export = binaryExtensions; diff --git a/labWeb/lab7/node_modules/binary-extensions/index.js b/labWeb/lab7/node_modules/binary-extensions/index.js new file mode 100644 index 0000000..d46e468 --- /dev/null +++ b/labWeb/lab7/node_modules/binary-extensions/index.js @@ -0,0 +1 @@ +module.exports = require('./binary-extensions.json'); diff --git a/labWeb/lab7/node_modules/binary-extensions/license b/labWeb/lab7/node_modules/binary-extensions/license new file mode 100644 index 0000000..401b1c7 --- /dev/null +++ b/labWeb/lab7/node_modules/binary-extensions/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2019 Sindre Sorhus (https://sindresorhus.com), Paul Miller (https://paulmillr.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/labWeb/lab7/node_modules/binary-extensions/package.json b/labWeb/lab7/node_modules/binary-extensions/package.json new file mode 100644 index 0000000..c4d3641 --- /dev/null +++ b/labWeb/lab7/node_modules/binary-extensions/package.json @@ -0,0 +1,38 @@ +{ + "name": "binary-extensions", + "version": "2.2.0", + "description": "List of binary file extensions", + "license": "MIT", + "repository": "sindresorhus/binary-extensions", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts", + "binary-extensions.json", + "binary-extensions.json.d.ts" + ], + "keywords": [ + "binary", + "extensions", + "extension", + "file", + "json", + "list", + "array" + ], + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + } +} diff --git a/labWeb/lab7/node_modules/binary-extensions/readme.md b/labWeb/lab7/node_modules/binary-extensions/readme.md new file mode 100644 index 0000000..3e25dd8 --- /dev/null +++ b/labWeb/lab7/node_modules/binary-extensions/readme.md @@ -0,0 +1,41 @@ +# binary-extensions + +> List of binary file extensions + +The list is just a [JSON file](binary-extensions.json) and can be used anywhere. + + +## Install + +``` +$ npm install binary-extensions +``` + + +## Usage + +```js +const binaryExtensions = require('binary-extensions'); + +console.log(binaryExtensions); +//=> ['3ds', '3g2', …] +``` + + +## Related + +- [is-binary-path](https://github.com/sindresorhus/is-binary-path) - Check if a filepath is a binary file +- [text-extensions](https://github.com/sindresorhus/text-extensions) - List of text file extensions + + +--- + +
+ + 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/labWeb/lab7/node_modules/body-parser/HISTORY.md b/labWeb/lab7/node_modules/body-parser/HISTORY.md new file mode 100644 index 0000000..c9b0b5b --- /dev/null +++ b/labWeb/lab7/node_modules/body-parser/HISTORY.md @@ -0,0 +1,680 @@ +1.20.4 / 2025-12-01 +=================== + + * deps: qs@~6.14.0 + * deps: use tilde notation for dependencies + * deps: http-errors@~2.0.1 + * deps: raw-body@~2.5.3 + +1.20.3 / 2024-09-10 +=================== + + * deps: qs@6.13.0 + * add `depth` option to customize the depth level in the parser + * IMPORTANT: The default `depth` level for parsing URL-encoded data is now `32` (previously was `Infinity`) + +1.20.2 / 2023-02-21 +=================== + + * Fix strict json error message on Node.js 19+ + * deps: content-type@~1.0.5 + - perf: skip value escaping when unnecessary + * deps: raw-body@2.5.2 + +1.20.1 / 2022-10-06 +=================== + + * deps: qs@6.11.0 + * perf: remove unnecessary object clone + +1.20.0 / 2022-04-02 +=================== + + * Fix error message for json parse whitespace in `strict` + * Fix internal error when inflated body exceeds limit + * Prevent loss of async hooks context + * Prevent hanging when request already read + * deps: depd@2.0.0 + - Replace internal `eval` usage with `Function` constructor + - Use instance methods on `process` to check for listeners + * deps: http-errors@2.0.0 + - deps: depd@2.0.0 + - deps: statuses@2.0.1 + * deps: on-finished@2.4.1 + * deps: qs@6.10.3 + * deps: raw-body@2.5.1 + - deps: http-errors@2.0.0 + +1.19.2 / 2022-02-15 +=================== + + * deps: bytes@3.1.2 + * deps: qs@6.9.7 + * Fix handling of `__proto__` keys + * deps: raw-body@2.4.3 + - deps: bytes@3.1.2 + +1.19.1 / 2021-12-10 +=================== + + * deps: bytes@3.1.1 + * deps: http-errors@1.8.1 + - deps: inherits@2.0.4 + - deps: toidentifier@1.0.1 + - deps: setprototypeof@1.2.0 + * deps: qs@6.9.6 + * deps: raw-body@2.4.2 + - deps: bytes@3.1.1 + - deps: http-errors@1.8.1 + * deps: safe-buffer@5.2.1 + * deps: type-is@~1.6.18 + +1.19.0 / 2019-04-25 +=================== + + * deps: bytes@3.1.0 + - Add petabyte (`pb`) support + * deps: http-errors@1.7.2 + - Set constructor name when possible + - deps: setprototypeof@1.1.1 + - deps: statuses@'>= 1.5.0 < 2' + * deps: iconv-lite@0.4.24 + - Added encoding MIK + * deps: qs@6.7.0 + - Fix parsing array brackets after index + * deps: raw-body@2.4.0 + - deps: bytes@3.1.0 + - deps: http-errors@1.7.2 + - deps: iconv-lite@0.4.24 + * deps: type-is@~1.6.17 + - deps: mime-types@~2.1.24 + - perf: prevent internal `throw` on invalid type + +1.18.3 / 2018-05-14 +=================== + + * Fix stack trace for strict json parse error + * deps: depd@~1.1.2 + - perf: remove argument reassignment + * deps: http-errors@~1.6.3 + - deps: depd@~1.1.2 + - deps: setprototypeof@1.1.0 + - deps: statuses@'>= 1.3.1 < 2' + * deps: iconv-lite@0.4.23 + - Fix loading encoding with year appended + - Fix deprecation warnings on Node.js 10+ + * deps: qs@6.5.2 + * deps: raw-body@2.3.3 + - deps: http-errors@1.6.3 + - deps: iconv-lite@0.4.23 + * deps: type-is@~1.6.16 + - deps: mime-types@~2.1.18 + +1.18.2 / 2017-09-22 +=================== + + * deps: debug@2.6.9 + * perf: remove argument reassignment + +1.18.1 / 2017-09-12 +=================== + + * deps: content-type@~1.0.4 + - perf: remove argument reassignment + - perf: skip parameter parsing when no parameters + * deps: iconv-lite@0.4.19 + - Fix ISO-8859-1 regression + - Update Windows-1255 + * deps: qs@6.5.1 + - Fix parsing & compacting very deep objects + * deps: raw-body@2.3.2 + - deps: iconv-lite@0.4.19 + +1.18.0 / 2017-09-08 +=================== + + * Fix JSON strict violation error to match native parse error + * Include the `body` property on verify errors + * Include the `type` property on all generated errors + * Use `http-errors` to set status code on errors + * deps: bytes@3.0.0 + * deps: debug@2.6.8 + * deps: depd@~1.1.1 + - Remove unnecessary `Buffer` loading + * deps: http-errors@~1.6.2 + - deps: depd@1.1.1 + * deps: iconv-lite@0.4.18 + - Add support for React Native + - Add a warning if not loaded as utf-8 + - Fix CESU-8 decoding in Node.js 8 + - Improve speed of ISO-8859-1 encoding + * deps: qs@6.5.0 + * deps: raw-body@2.3.1 + - Use `http-errors` for standard emitted errors + - deps: bytes@3.0.0 + - deps: iconv-lite@0.4.18 + - perf: skip buffer decoding on overage chunk + * perf: prevent internal `throw` when missing charset + +1.17.2 / 2017-05-17 +=================== + + * deps: debug@2.6.7 + - Fix `DEBUG_MAX_ARRAY_LENGTH` + - deps: ms@2.0.0 + * deps: type-is@~1.6.15 + - deps: mime-types@~2.1.15 + +1.17.1 / 2017-03-06 +=================== + + * deps: qs@6.4.0 + - Fix regression parsing keys starting with `[` + +1.17.0 / 2017-03-01 +=================== + + * deps: http-errors@~1.6.1 + - Make `message` property enumerable for `HttpError`s + - deps: setprototypeof@1.0.3 + * deps: qs@6.3.1 + - Fix compacting nested arrays + +1.16.1 / 2017-02-10 +=================== + + * deps: debug@2.6.1 + - Fix deprecation messages in WebStorm and other editors + - Undeprecate `DEBUG_FD` set to `1` or `2` + +1.16.0 / 2017-01-17 +=================== + + * 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 + * deps: http-errors@~1.5.1 + - deps: inherits@2.0.3 + - deps: setprototypeof@1.0.2 + - deps: statuses@'>= 1.3.1 < 2' + * deps: iconv-lite@0.4.15 + - Added encoding MS-31J + - Added encoding MS-932 + - Added encoding MS-936 + - Added encoding MS-949 + - Added encoding MS-950 + - Fix GBK/GB18030 handling of Euro character + * deps: qs@6.2.1 + - Fix array parsing from skipping empty values + * deps: raw-body@~2.2.0 + - deps: iconv-lite@0.4.15 + * deps: type-is@~1.6.14 + - deps: mime-types@~2.1.13 + +1.15.2 / 2016-06-19 +=================== + + * deps: bytes@2.4.0 + * deps: content-type@~1.0.2 + - perf: enable strict mode + * deps: http-errors@~1.5.0 + - Use `setprototypeof` module to replace `__proto__` setting + - deps: statuses@'>= 1.3.0 < 2' + - perf: enable strict mode + * deps: qs@6.2.0 + * deps: raw-body@~2.1.7 + - deps: bytes@2.4.0 + - perf: remove double-cleanup on happy path + * deps: type-is@~1.6.13 + - deps: mime-types@~2.1.11 + +1.15.1 / 2016-05-05 +=================== + + * deps: bytes@2.3.0 + - Drop partial bytes on all parsed units + - Fix parsing byte string that looks like hex + * deps: raw-body@~2.1.6 + - deps: bytes@2.3.0 + * deps: type-is@~1.6.12 + - deps: mime-types@~2.1.10 + +1.15.0 / 2016-02-10 +=================== + + * deps: http-errors@~1.4.0 + - Add `HttpError` export, for `err instanceof createError.HttpError` + - deps: inherits@2.0.1 + - deps: statuses@'>= 1.2.1 < 2' + * deps: qs@6.1.0 + * deps: type-is@~1.6.11 + - deps: mime-types@~2.1.9 + +1.14.2 / 2015-12-16 +=================== + + * deps: bytes@2.2.0 + * deps: iconv-lite@0.4.13 + * deps: qs@5.2.0 + * deps: raw-body@~2.1.5 + - deps: bytes@2.2.0 + - deps: iconv-lite@0.4.13 + * deps: type-is@~1.6.10 + - deps: mime-types@~2.1.8 + +1.14.1 / 2015-09-27 +=================== + + * Fix issue where invalid charset results in 400 when `verify` used + * deps: iconv-lite@0.4.12 + - Fix CESU-8 decoding in Node.js 4.x + * deps: raw-body@~2.1.4 + - Fix masking critical errors from `iconv-lite` + - deps: iconv-lite@0.4.12 + * deps: type-is@~1.6.9 + - deps: mime-types@~2.1.7 + +1.14.0 / 2015-09-16 +=================== + + * Fix JSON strict parse error to match syntax errors + * Provide static `require` analysis in `urlencoded` parser + * deps: depd@~1.1.0 + - Support web browser loading + * deps: qs@5.1.0 + * deps: raw-body@~2.1.3 + - Fix sync callback when attaching data listener causes sync read + * deps: type-is@~1.6.8 + - Fix type error when given invalid type to match against + - deps: mime-types@~2.1.6 + +1.13.3 / 2015-07-31 +=================== + + * deps: type-is@~1.6.6 + - deps: mime-types@~2.1.4 + +1.13.2 / 2015-07-05 +=================== + + * deps: iconv-lite@0.4.11 + * deps: qs@4.0.0 + - Fix dropping parameters like `hasOwnProperty` + - Fix user-visible incompatibilities from 3.1.0 + - Fix various parsing edge cases + * deps: raw-body@~2.1.2 + - Fix error stack traces to skip `makeError` + - deps: iconv-lite@0.4.11 + * deps: type-is@~1.6.4 + - deps: mime-types@~2.1.2 + - perf: enable strict mode + - perf: remove argument reassignment + +1.13.1 / 2015-06-16 +=================== + + * deps: qs@2.4.2 + - Downgraded from 3.1.0 because of user-visible incompatibilities + +1.13.0 / 2015-06-14 +=================== + + * Add `statusCode` property on `Error`s, in addition to `status` + * Change `type` default to `application/json` for JSON parser + * Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser + * Provide static `require` analysis + * Use the `http-errors` module to generate errors + * deps: bytes@2.1.0 + - Slight optimizations + * deps: iconv-lite@0.4.10 + - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails + - Leading BOM is now removed when decoding + * 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 + * deps: qs@3.1.0 + - Fix dropping parameters like `hasOwnProperty` + - Fix various parsing edge cases + - Parsed object now has `null` prototype + * deps: raw-body@~2.1.1 + - Use `unpipe` module for unpiping requests + - deps: iconv-lite@0.4.10 + * deps: type-is@~1.6.3 + - deps: mime-types@~2.1.1 + - perf: reduce try block size + - perf: remove bitwise operations + * perf: enable strict mode + * perf: remove argument reassignment + * perf: remove delete call + +1.12.4 / 2015-05-10 +=================== + + * deps: debug@~2.2.0 + * deps: qs@2.4.2 + - Fix allowing parameters like `constructor` + * deps: on-finished@~2.2.1 + * deps: raw-body@~2.0.1 + - Fix a false-positive when unpiping in Node.js 0.8 + - deps: bytes@2.0.1 + * deps: type-is@~1.6.2 + - deps: mime-types@~2.0.11 + +1.12.3 / 2015-04-15 +=================== + + * Slight efficiency improvement when not debugging + * deps: depd@~1.0.1 + * deps: iconv-lite@0.4.8 + - Add encoding alias UNICODE-1-1-UTF-7 + * deps: raw-body@1.3.4 + - Fix hanging callback if request aborts during read + - deps: iconv-lite@0.4.8 + +1.12.2 / 2015-03-16 +=================== + + * deps: qs@2.4.1 + - Fix error when parameter `hasOwnProperty` is present + +1.12.1 / 2015-03-15 +=================== + + * deps: debug@~2.1.3 + - Fix high intensity foreground color for bold + - deps: ms@0.7.0 + * deps: type-is@~1.6.1 + - deps: mime-types@~2.0.10 + +1.12.0 / 2015-02-13 +=================== + + * add `debug` messages + * accept a function for the `type` option + * use `content-type` to parse `Content-Type` headers + * deps: iconv-lite@0.4.7 + - Gracefully support enumerables on `Object.prototype` + * deps: raw-body@1.3.3 + - deps: iconv-lite@0.4.7 + * deps: type-is@~1.6.0 + - fix argument reassignment + - fix false-positives in `hasBody` `Transfer-Encoding` check + - support wildcard for both type and subtype (`*/*`) + - deps: mime-types@~2.0.9 + +1.11.0 / 2015-01-30 +=================== + + * make internal `extended: true` depth limit infinity + * deps: type-is@~1.5.6 + - deps: mime-types@~2.0.8 + +1.10.2 / 2015-01-20 +=================== + + * deps: iconv-lite@0.4.6 + - Fix rare aliases of single-byte encodings + * deps: raw-body@1.3.2 + - deps: iconv-lite@0.4.6 + +1.10.1 / 2015-01-01 +=================== + + * deps: on-finished@~2.2.0 + * deps: type-is@~1.5.5 + - deps: mime-types@~2.0.7 + +1.10.0 / 2014-12-02 +=================== + + * make internal `extended: true` array limit dynamic + +1.9.3 / 2014-11-21 +================== + + * deps: iconv-lite@0.4.5 + - Fix Windows-31J and X-SJIS encoding support + * deps: qs@2.3.3 + - Fix `arrayLimit` behavior + * deps: raw-body@1.3.1 + - deps: iconv-lite@0.4.5 + * deps: type-is@~1.5.3 + - deps: mime-types@~2.0.3 + +1.9.2 / 2014-10-27 +================== + + * deps: qs@2.3.2 + - Fix parsing of mixed objects and values + +1.9.1 / 2014-10-22 +================== + + * deps: on-finished@~2.1.1 + - Fix handling of pipelined requests + * deps: qs@2.3.0 + - Fix parsing of mixed implicit and explicit arrays + * deps: type-is@~1.5.2 + - deps: mime-types@~2.0.2 + +1.9.0 / 2014-09-24 +================== + + * include the charset in "unsupported charset" error message + * include the encoding in "unsupported content encoding" error message + * deps: depd@~1.0.0 + +1.8.4 / 2014-09-23 +================== + + * fix content encoding to be case-insensitive + +1.8.3 / 2014-09-19 +================== + + * deps: qs@2.2.4 + - Fix issue with object keys starting with numbers truncated + +1.8.2 / 2014-09-15 +================== + + * deps: depd@0.4.5 + +1.8.1 / 2014-09-07 +================== + + * deps: media-typer@0.3.0 + * deps: type-is@~1.5.1 + +1.8.0 / 2014-09-05 +================== + + * make empty-body-handling consistent between chunked requests + - empty `json` produces `{}` + - empty `raw` produces `new Buffer(0)` + - empty `text` produces `''` + - empty `urlencoded` produces `{}` + * deps: qs@2.2.3 + - Fix issue where first empty value in array is discarded + * deps: type-is@~1.5.0 + - fix `hasbody` to be true for `content-length: 0` + +1.7.0 / 2014-09-01 +================== + + * add `parameterLimit` option to `urlencoded` parser + * change `urlencoded` extended array limit to 100 + * respond with 413 when over `parameterLimit` in `urlencoded` + +1.6.7 / 2014-08-29 +================== + + * deps: qs@2.2.2 + - Remove unnecessary cloning + +1.6.6 / 2014-08-27 +================== + + * deps: qs@2.2.0 + - Array parsing fix + - Performance improvements + +1.6.5 / 2014-08-16 +================== + + * deps: on-finished@2.1.0 + +1.6.4 / 2014-08-14 +================== + + * deps: qs@1.2.2 + +1.6.3 / 2014-08-10 +================== + + * deps: qs@1.2.1 + +1.6.2 / 2014-08-07 +================== + + * deps: qs@1.2.0 + - Fix parsing array of objects + +1.6.1 / 2014-08-06 +================== + + * deps: qs@1.1.0 + - Accept urlencoded square brackets + - Accept empty values in implicit array notation + +1.6.0 / 2014-08-05 +================== + + * deps: qs@1.0.2 + - Complete rewrite + - Limits array length to 20 + - Limits object depth to 5 + - Limits parameters to 1,000 + +1.5.2 / 2014-07-27 +================== + + * deps: depd@0.4.4 + - Work-around v8 generating empty stack traces + +1.5.1 / 2014-07-26 +================== + + * deps: depd@0.4.3 + - Fix exception when global `Error.stackTraceLimit` is too low + +1.5.0 / 2014-07-20 +================== + + * deps: depd@0.4.2 + - Add `TRACE_DEPRECATION` environment variable + - Remove non-standard grey color from color output + - Support `--no-deprecation` argument + - Support `--trace-deprecation` argument + * deps: iconv-lite@0.4.4 + - Added encoding UTF-7 + * deps: raw-body@1.3.0 + - deps: iconv-lite@0.4.4 + - Added encoding UTF-7 + - Fix `Cannot switch to old mode now` error on Node.js 0.10+ + * deps: type-is@~1.3.2 + +1.4.3 / 2014-06-19 +================== + + * deps: type-is@1.3.1 + - fix global variable leak + +1.4.2 / 2014-06-19 +================== + + * deps: type-is@1.3.0 + - improve type parsing + +1.4.1 / 2014-06-19 +================== + + * fix urlencoded extended deprecation message + +1.4.0 / 2014-06-19 +================== + + * add `text` parser + * add `raw` parser + * check accepted charset in content-type (accepts utf-8) + * check accepted encoding in content-encoding (accepts identity) + * deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed + * deprecate `urlencoded()` without provided `extended` option + * lazy-load urlencoded parsers + * parsers split into files for reduced mem usage + * support gzip and deflate bodies + - set `inflate: false` to turn off + * deps: raw-body@1.2.2 + - Support all encodings from `iconv-lite` + +1.3.1 / 2014-06-11 +================== + + * deps: type-is@1.2.1 + - Switch dependency from mime to mime-types@1.0.0 + +1.3.0 / 2014-05-31 +================== + + * add `extended` option to urlencoded parser + +1.2.2 / 2014-05-27 +================== + + * deps: raw-body@1.1.6 + - assert stream encoding on node.js 0.8 + - assert stream encoding on node.js < 0.10.6 + - deps: bytes@1 + +1.2.1 / 2014-05-26 +================== + + * invoke `next(err)` after request fully read + - prevents hung responses and socket hang ups + +1.2.0 / 2014-05-11 +================== + + * add `verify` option + * deps: type-is@1.2.0 + - support suffix matching + +1.1.2 / 2014-05-11 +================== + + * improve json parser speed + +1.1.1 / 2014-05-11 +================== + + * fix repeated limit parsing with every request + +1.1.0 / 2014-05-10 +================== + + * add `type` option + * deps: pin for safety and consistency + +1.0.2 / 2014-04-14 +================== + + * use `type-is` module + +1.0.1 / 2014-03-20 +================== + + * lower default limits to 100kb diff --git a/labWeb/lab7/node_modules/body-parser/LICENSE b/labWeb/lab7/node_modules/body-parser/LICENSE new file mode 100644 index 0000000..386b7b6 --- /dev/null +++ b/labWeb/lab7/node_modules/body-parser/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +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/labWeb/lab7/node_modules/body-parser/README.md b/labWeb/lab7/node_modules/body-parser/README.md new file mode 100644 index 0000000..f6661b7 --- /dev/null +++ b/labWeb/lab7/node_modules/body-parser/README.md @@ -0,0 +1,476 @@ +# body-parser + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Build Status][ci-image]][ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] +[![OpenSSF Scorecard Badge][ossf-scorecard-badge]][ossf-scorecard-visualizer] + +Node.js body parsing middleware. + +Parse incoming request bodies in a middleware before your handlers, available +under the `req.body` property. + +**Note** As `req.body`'s shape is based on user-controlled input, all +properties and values in this object are untrusted and should be validated +before trusting. For example, `req.body.foo.toString()` may fail in multiple +ways, for example the `foo` property may not be there or may not be a string, +and `toString` may not be a function and instead a string or other user input. + +[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/). + +_This does not handle multipart bodies_, due to their complex and typically +large nature. For multipart bodies, you may be interested in the following +modules: + + * [busboy](https://www.npmjs.org/package/busboy#readme) and + [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme) + * [multiparty](https://www.npmjs.org/package/multiparty#readme) and + [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme) + * [formidable](https://www.npmjs.org/package/formidable#readme) + * [multer](https://www.npmjs.org/package/multer#readme) + +This module provides the following parsers: + + * [JSON body parser](#bodyparserjsonoptions) + * [Raw body parser](#bodyparserrawoptions) + * [Text body parser](#bodyparsertextoptions) + * [URL-encoded form body parser](#bodyparserurlencodedoptions) + +Other body parsers you might be interested in: + +- [body](https://www.npmjs.org/package/body#readme) +- [co-body](https://www.npmjs.org/package/co-body#readme) + +## Installation + +```sh +$ npm install body-parser +``` + +## API + +```js +var bodyParser = require('body-parser') +``` + +The `bodyParser` object exposes various factories to create middlewares. All +middlewares will populate the `req.body` property with the parsed body when +the `Content-Type` request header matches the `type` option, or an empty +object (`{}`) if there was no body to parse, the `Content-Type` was not matched, +or an error occurred. + +The various errors returned by this module are described in the +[errors section](#errors). + +### bodyParser.json([options]) + +Returns middleware that only parses `json` and only looks at requests where +the `Content-Type` header matches the `type` option. This parser accepts any +Unicode encoding of the body and supports automatic inflation of `gzip` and +`deflate` encodings. + +A new `body` object containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). + +#### Options + +The `json` function takes an optional `options` object that may contain any of +the following keys: + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### reviver + +The `reviver` option is passed directly to `JSON.parse` as the second +argument. You can find more information on this argument +[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter). + +##### strict + +When set to `true`, will only accept arrays and objects; when `false` will +accept anything `JSON.parse` accepts. Defaults to `true`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a string, array of strings, or a function. If not a +function, `type` option is passed directly to the +[type-is](https://www.npmjs.org/package/type-is#readme) library and this can +be an extension name (like `json`), a mime type (like `application/json`), or +a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type` +option is called as `fn(req)` and the request is parsed if it returns a truthy +value. Defaults to `application/json`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.raw([options]) + +Returns middleware that parses all bodies as a `Buffer` and only looks at +requests where the `Content-Type` header matches the `type` option. This +parser supports automatic inflation of `gzip` and `deflate` encodings. + +A new `body` object containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). This will be a `Buffer` object +of the body. + +#### Options + +The `raw` function takes an optional `options` object that may contain any of +the following keys: + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a string, array of strings, or a function. +If not a function, `type` option is passed directly to the +[type-is](https://www.npmjs.org/package/type-is#readme) library and this +can be an extension name (like `bin`), a mime type (like +`application/octet-stream`), or a mime type with a wildcard (like `*/*` or +`application/*`). If a function, the `type` option is called as `fn(req)` +and the request is parsed if it returns a truthy value. Defaults to +`application/octet-stream`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.text([options]) + +Returns middleware that parses all bodies as a string and only looks at +requests where the `Content-Type` header matches the `type` option. This +parser supports automatic inflation of `gzip` and `deflate` encodings. + +A new `body` string containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). This will be a string of the +body. + +#### Options + +The `text` function takes an optional `options` object that may contain any of +the following keys: + +##### defaultCharset + +Specify the default character set for the text content if the charset is not +specified in the `Content-Type` header of the request. Defaults to `utf-8`. + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a string, array of strings, or a function. If not +a function, `type` option is passed directly to the +[type-is](https://www.npmjs.org/package/type-is#readme) library and this can +be an extension name (like `txt`), a mime type (like `text/plain`), or a mime +type with a wildcard (like `*/*` or `text/*`). If a function, the `type` +option is called as `fn(req)` and the request is parsed if it returns a +truthy value. Defaults to `text/plain`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.urlencoded([options]) + +Returns middleware that only parses `urlencoded` bodies and only looks at +requests where the `Content-Type` header matches the `type` option. This +parser accepts only UTF-8 encoding of the body and supports automatic +inflation of `gzip` and `deflate` encodings. + +A new `body` object containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). This object will contain +key-value pairs, where the value can be a string or array (when `extended` is +`false`), or any type (when `extended` is `true`). + +#### Options + +The `urlencoded` function takes an optional `options` object that may contain +any of the following keys: + +##### extended + +The `extended` option allows to choose between parsing the URL-encoded data +with the `querystring` library (when `false`) or the `qs` library (when +`true`). The "extended" syntax allows for rich objects and arrays to be +encoded into the URL-encoded format, allowing for a JSON-like experience +with URL-encoded. For more information, please +[see the qs library](https://www.npmjs.org/package/qs#readme). + +Defaults to `true`, but using the default has been deprecated. Please +research into the difference between `qs` and `querystring` and choose the +appropriate setting. + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### parameterLimit + +The `parameterLimit` option controls the maximum number of parameters that +are allowed in the URL-encoded data. If a request contains more parameters +than this value, a 413 will be returned to the client. Defaults to `1000`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a string, array of strings, or a function. If not +a function, `type` option is passed directly to the +[type-is](https://www.npmjs.org/package/type-is#readme) library and this can +be an extension name (like `urlencoded`), a mime type (like +`application/x-www-form-urlencoded`), or a mime type with a wildcard (like +`*/x-www-form-urlencoded`). If a function, the `type` option is called as +`fn(req)` and the request is parsed if it returns a truthy value. Defaults +to `application/x-www-form-urlencoded`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +#### depth + +The `depth` option is used to configure the maximum depth of the `qs` library when `extended` is `true`. This allows you to limit the amount of keys that are parsed and can be useful to prevent certain types of abuse. Defaults to `32`. It is recommended to keep this value as low as possible. + +## Errors + +The middlewares provided by this module create errors using the +[`http-errors` module](https://www.npmjs.com/package/http-errors). The errors +will typically have a `status`/`statusCode` property that contains the suggested +HTTP response code, an `expose` property to determine if the `message` property +should be displayed to the client, a `type` property to determine the type of +error without matching against the `message`, and a `body` property containing +the read body, if available. + +The following are the common errors created, though any error can come through +for various reasons. + +### content encoding unsupported + +This error will occur when the request had a `Content-Encoding` header that +contained an encoding but the "inflation" option was set to `false`. The +`status` property is set to `415`, the `type` property is set to +`'encoding.unsupported'`, and the `charset` property will be set to the +encoding that is unsupported. + +### entity parse failed + +This error will occur when the request contained an entity that could not be +parsed by the middleware. The `status` property is set to `400`, the `type` +property is set to `'entity.parse.failed'`, and the `body` property is set to +the entity value that failed parsing. + +### entity verify failed + +This error will occur when the request contained an entity that could not be +failed verification by the defined `verify` option. The `status` property is +set to `403`, the `type` property is set to `'entity.verify.failed'`, and the +`body` property is set to the entity value that failed verification. + +### request aborted + +This error will occur when the request is aborted by the client before reading +the body has finished. The `received` property will be set to the number of +bytes received before the request was aborted and the `expected` property is +set to the number of expected bytes. The `status` property is set to `400` +and `type` property is set to `'request.aborted'`. + +### request entity too large + +This error will occur when the request body's size is larger than the "limit" +option. The `limit` property will be set to the byte limit and the `length` +property will be set to the request body's length. The `status` property is +set to `413` and the `type` property is set to `'entity.too.large'`. + +### request size did not match content length + +This error will occur when the request's length did not match the length from +the `Content-Length` header. This typically occurs when the request is malformed, +typically when the `Content-Length` header was calculated based on characters +instead of bytes. The `status` property is set to `400` and the `type` property +is set to `'request.size.invalid'`. + +### stream encoding should not be set + +This error will occur when something called the `req.setEncoding` method prior +to this middleware. This module operates directly on bytes only and you cannot +call `req.setEncoding` when using this module. The `status` property is set to +`500` and the `type` property is set to `'stream.encoding.set'`. + +### stream is not readable + +This error will occur when the request is no longer readable when this middleware +attempts to read it. This typically means something other than a middleware from +this module read the request body already and the middleware was also configured to +read the same request. The `status` property is set to `500` and the `type` +property is set to `'stream.not.readable'`. + +### too many parameters + +This error will occur when the content of the request exceeds the configured +`parameterLimit` for the `urlencoded` parser. The `status` property is set to +`413` and the `type` property is set to `'parameters.too.many'`. + +### unsupported charset "BOGUS" + +This error will occur when the request had a charset parameter in the +`Content-Type` header, but the `iconv-lite` module does not support it OR the +parser does not support it. The charset is contained in the message as well +as in the `charset` property. The `status` property is set to `415`, the +`type` property is set to `'charset.unsupported'`, and the `charset` property +is set to the charset that is unsupported. + +### unsupported content encoding "bogus" + +This error will occur when the request had a `Content-Encoding` header that +contained an unsupported encoding. The encoding is contained in the message +as well as in the `encoding` property. The `status` property is set to `415`, +the `type` property is set to `'encoding.unsupported'`, and the `encoding` +property is set to the encoding that is unsupported. + +### The input exceeded the depth + +This error occurs when using `bodyParser.urlencoded` with the `extended` property set to `true` and the input exceeds the configured `depth` option. The `status` property is set to `400`. It is recommended to review the `depth` option and evaluate if it requires a higher value. When the `depth` option is set to `32` (default value), the error will not be thrown. + +## Examples + +### Express/Connect top-level generic + +This example demonstrates adding a generic JSON and URL-encoded parser as a +top-level middleware, which will parse the bodies of all incoming requests. +This is the simplest setup. + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// parse application/x-www-form-urlencoded +app.use(bodyParser.urlencoded({ extended: false })) + +// parse application/json +app.use(bodyParser.json()) + +app.use(function (req, res) { + res.setHeader('Content-Type', 'text/plain') + res.write('you posted:\n') + res.end(JSON.stringify(req.body, null, 2)) +}) +``` + +### Express route-specific + +This example demonstrates adding body parsers specifically to the routes that +need them. In general, this is the most recommended way to use body-parser with +Express. + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// create application/json parser +var jsonParser = bodyParser.json() + +// create application/x-www-form-urlencoded parser +var urlencodedParser = bodyParser.urlencoded({ extended: false }) + +// POST /login gets urlencoded bodies +app.post('/login', urlencodedParser, function (req, res) { + res.send('welcome, ' + req.body.username) +}) + +// POST /api/users gets JSON bodies +app.post('/api/users', jsonParser, function (req, res) { + // create user in req.body +}) +``` + +### Change accepted type for parsers + +All the parsers accept a `type` option which allows you to change the +`Content-Type` that the middleware will parse. + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// parse various different custom JSON types as JSON +app.use(bodyParser.json({ type: 'application/*+json' })) + +// parse some custom thing into a Buffer +app.use(bodyParser.raw({ type: 'application/vnd.custom-type' })) + +// parse an HTML body into a string +app.use(bodyParser.text({ type: 'text/html' })) +``` + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/expressjs/body-parser/master?label=ci +[ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/body-parser/master +[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master +[node-version-image]: https://badgen.net/npm/node/body-parser +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/body-parser +[npm-url]: https://npmjs.org/package/body-parser +[npm-version-image]: https://badgen.net/npm/v/body-parser +[ossf-scorecard-badge]: https://api.scorecard.dev/projects/github.com/expressjs/body-parser/badge +[ossf-scorecard-visualizer]: https://ossf.github.io/scorecard-visualizer/#/projects/github.com/expressjs/body-parser \ No newline at end of file diff --git a/labWeb/lab7/node_modules/body-parser/index.js b/labWeb/lab7/node_modules/body-parser/index.js new file mode 100644 index 0000000..bb24d73 --- /dev/null +++ b/labWeb/lab7/node_modules/body-parser/index.js @@ -0,0 +1,156 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var deprecate = require('depd')('body-parser') + +/** + * Cache of loaded parsers. + * @private + */ + +var parsers = Object.create(null) + +/** + * @typedef Parsers + * @type {function} + * @property {function} json + * @property {function} raw + * @property {function} text + * @property {function} urlencoded + */ + +/** + * Module exports. + * @type {Parsers} + */ + +exports = module.exports = deprecate.function(bodyParser, + 'bodyParser: use individual json/urlencoded middlewares') + +/** + * JSON parser. + * @public + */ + +Object.defineProperty(exports, 'json', { + configurable: true, + enumerable: true, + get: createParserGetter('json') +}) + +/** + * Raw parser. + * @public + */ + +Object.defineProperty(exports, 'raw', { + configurable: true, + enumerable: true, + get: createParserGetter('raw') +}) + +/** + * Text parser. + * @public + */ + +Object.defineProperty(exports, 'text', { + configurable: true, + enumerable: true, + get: createParserGetter('text') +}) + +/** + * URL-encoded parser. + * @public + */ + +Object.defineProperty(exports, 'urlencoded', { + configurable: true, + enumerable: true, + get: createParserGetter('urlencoded') +}) + +/** + * Create a middleware to parse json and urlencoded bodies. + * + * @param {object} [options] + * @return {function} + * @deprecated + * @public + */ + +function bodyParser (options) { + // use default type for parsers + var opts = Object.create(options || null, { + type: { + configurable: true, + enumerable: true, + value: undefined, + writable: true + } + }) + + var _urlencoded = exports.urlencoded(opts) + var _json = exports.json(opts) + + return function bodyParser (req, res, next) { + _json(req, res, function (err) { + if (err) return next(err) + _urlencoded(req, res, next) + }) + } +} + +/** + * Create a getter for loading a parser. + * @private + */ + +function createParserGetter (name) { + return function get () { + return loadParser(name) + } +} + +/** + * Load a parser module. + * @private + */ + +function loadParser (parserName) { + var parser = parsers[parserName] + + if (parser !== undefined) { + return parser + } + + // this uses a switch for static require analysis + switch (parserName) { + case 'json': + parser = require('./lib/types/json') + break + case 'raw': + parser = require('./lib/types/raw') + break + case 'text': + parser = require('./lib/types/text') + break + case 'urlencoded': + parser = require('./lib/types/urlencoded') + break + } + + // store to prevent invoking require() + return (parsers[parserName] = parser) +} diff --git a/labWeb/lab7/node_modules/body-parser/lib/read.js b/labWeb/lab7/node_modules/body-parser/lib/read.js new file mode 100644 index 0000000..fce6283 --- /dev/null +++ b/labWeb/lab7/node_modules/body-parser/lib/read.js @@ -0,0 +1,205 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var createError = require('http-errors') +var destroy = require('destroy') +var getBody = require('raw-body') +var iconv = require('iconv-lite') +var onFinished = require('on-finished') +var unpipe = require('unpipe') +var zlib = require('zlib') + +/** + * Module exports. + */ + +module.exports = read + +/** + * Read a request into a buffer and parse. + * + * @param {object} req + * @param {object} res + * @param {function} next + * @param {function} parse + * @param {function} debug + * @param {object} options + * @private + */ + +function read (req, res, next, parse, debug, options) { + var length + var opts = options + var stream + + // flag as parsed + req._body = true + + // read options + var encoding = opts.encoding !== null + ? opts.encoding + : null + var verify = opts.verify + + try { + // get the content stream + stream = contentstream(req, debug, opts.inflate) + length = stream.length + stream.length = undefined + } catch (err) { + return next(err) + } + + // set raw-body options + opts.length = length + opts.encoding = verify + ? null + : encoding + + // assert charset is supported + if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) { + return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { + charset: encoding.toLowerCase(), + type: 'charset.unsupported' + })) + } + + // read body + debug('read body') + getBody(stream, opts, function (error, body) { + if (error) { + var _error + + if (error.type === 'encoding.unsupported') { + // echo back charset + _error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { + charset: encoding.toLowerCase(), + type: 'charset.unsupported' + }) + } else { + // set status code on error + _error = createError(400, error) + } + + // unpipe from stream and destroy + if (stream !== req) { + unpipe(req) + destroy(stream, true) + } + + // read off entire request + dump(req, function onfinished () { + next(createError(400, _error)) + }) + return + } + + // verify + if (verify) { + try { + debug('verify body') + verify(req, res, body, encoding) + } catch (err) { + next(createError(403, err, { + body: body, + type: err.type || 'entity.verify.failed' + })) + return + } + } + + // parse + var str = body + try { + debug('parse body') + str = typeof body !== 'string' && encoding !== null + ? iconv.decode(body, encoding) + : body + req.body = parse(str) + } catch (err) { + next(createError(400, err, { + body: str, + type: err.type || 'entity.parse.failed' + })) + return + } + + next() + }) +} + +/** + * Get the content stream of the request. + * + * @param {object} req + * @param {function} debug + * @param {boolean} [inflate=true] + * @return {object} + * @api private + */ + +function contentstream (req, debug, inflate) { + var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase() + var length = req.headers['content-length'] + var stream + + debug('content-encoding "%s"', encoding) + + if (inflate === false && encoding !== 'identity') { + throw createError(415, 'content encoding unsupported', { + encoding: encoding, + type: 'encoding.unsupported' + }) + } + + switch (encoding) { + case 'deflate': + stream = zlib.createInflate() + debug('inflate body') + req.pipe(stream) + break + case 'gzip': + stream = zlib.createGunzip() + debug('gunzip body') + req.pipe(stream) + break + case 'identity': + stream = req + stream.length = length + break + default: + throw createError(415, 'unsupported content encoding "' + encoding + '"', { + encoding: encoding, + type: 'encoding.unsupported' + }) + } + + return stream +} + +/** + * Dump the contents of a request. + * + * @param {object} req + * @param {function} callback + * @api private + */ + +function dump (req, callback) { + if (onFinished.isFinished(req)) { + callback(null) + } else { + onFinished(req, callback) + req.resume() + } +} diff --git a/labWeb/lab7/node_modules/body-parser/lib/types/json.js b/labWeb/lab7/node_modules/body-parser/lib/types/json.js new file mode 100644 index 0000000..59f3f7e --- /dev/null +++ b/labWeb/lab7/node_modules/body-parser/lib/types/json.js @@ -0,0 +1,247 @@ +/*! + * body-parser + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var bytes = require('bytes') +var contentType = require('content-type') +var createError = require('http-errors') +var debug = require('debug')('body-parser:json') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = json + +/** + * RegExp to match the first non-space in a string. + * + * Allowed whitespace is defined in RFC 7159: + * + * ws = *( + * %x20 / ; Space + * %x09 / ; Horizontal tab + * %x0A / ; Line feed or New line + * %x0D ) ; Carriage return + */ + +var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*([^\x20\x09\x0a\x0d])/ // eslint-disable-line no-control-regex + +var JSON_SYNTAX_CHAR = '#' +var JSON_SYNTAX_REGEXP = /#+/g + +/** + * Create a middleware to parse JSON bodies. + * + * @param {object} [options] + * @return {function} + * @public + */ + +function json (options) { + var opts = options || {} + + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var inflate = opts.inflate !== false + var reviver = opts.reviver + var strict = opts.strict !== false + var type = opts.type || 'application/json' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (body) { + if (body.length === 0) { + // special-case empty json body, as it's a common client-side mistake + // TODO: maybe make this configurable or part of "strict" option + return {} + } + + if (strict) { + var first = firstchar(body) + + if (first !== '{' && first !== '[') { + debug('strict violation') + throw createStrictSyntaxError(body, first) + } + } + + try { + debug('parse json') + return JSON.parse(body, reviver) + } catch (e) { + throw normalizeJsonSyntaxError(e, { + message: e.message, + stack: e.stack + }) + } + } + + return function jsonParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // assert charset per RFC 7159 sec 8.1 + var charset = getCharset(req) || 'utf-8' + if (charset.slice(0, 4) !== 'utf-') { + debug('invalid charset') + next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { + charset: charset, + type: 'charset.unsupported' + })) + return + } + + // read + read(req, res, next, parse, debug, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Create strict violation syntax error matching native error. + * + * @param {string} str + * @param {string} char + * @return {Error} + * @private + */ + +function createStrictSyntaxError (str, char) { + var index = str.indexOf(char) + var partial = '' + + if (index !== -1) { + partial = str.substring(0, index) + JSON_SYNTAX_CHAR + + for (var i = index + 1; i < str.length; i++) { + partial += JSON_SYNTAX_CHAR + } + } + + try { + JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation') + } catch (e) { + return normalizeJsonSyntaxError(e, { + message: e.message.replace(JSON_SYNTAX_REGEXP, function (placeholder) { + return str.substring(index, index + placeholder.length) + }), + stack: e.stack + }) + } +} + +/** + * Get the first non-whitespace character in a string. + * + * @param {string} str + * @return {function} + * @private + */ + +function firstchar (str) { + var match = FIRST_CHAR_REGEXP.exec(str) + + return match + ? match[1] + : undefined +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return (contentType.parse(req).parameters.charset || '').toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Normalize a SyntaxError for JSON.parse. + * + * @param {SyntaxError} error + * @param {object} obj + * @return {SyntaxError} + */ + +function normalizeJsonSyntaxError (error, obj) { + var keys = Object.getOwnPropertyNames(error) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i] + if (key !== 'stack' && key !== 'message') { + delete error[key] + } + } + + // replace stack before message for Node.js 0.10 and below + error.stack = obj.stack.replace(error.message, obj.message) + error.message = obj.message + + return error +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/labWeb/lab7/node_modules/body-parser/lib/types/raw.js b/labWeb/lab7/node_modules/body-parser/lib/types/raw.js new file mode 100644 index 0000000..f5d1b67 --- /dev/null +++ b/labWeb/lab7/node_modules/body-parser/lib/types/raw.js @@ -0,0 +1,101 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + */ + +var bytes = require('bytes') +var debug = require('debug')('body-parser:raw') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = raw + +/** + * Create a middleware to parse raw bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function raw (options) { + var opts = options || {} + + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'application/octet-stream' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (buf) { + return buf + } + + return function rawParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // read + read(req, res, next, parse, debug, { + encoding: null, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/labWeb/lab7/node_modules/body-parser/lib/types/text.js b/labWeb/lab7/node_modules/body-parser/lib/types/text.js new file mode 100644 index 0000000..083a009 --- /dev/null +++ b/labWeb/lab7/node_modules/body-parser/lib/types/text.js @@ -0,0 +1,121 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + */ + +var bytes = require('bytes') +var contentType = require('content-type') +var debug = require('debug')('body-parser:text') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = text + +/** + * Create a middleware to parse text bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function text (options) { + var opts = options || {} + + var defaultCharset = opts.defaultCharset || 'utf-8' + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'text/plain' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (buf) { + return buf + } + + return function textParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // get charset + var charset = getCharset(req) || defaultCharset + + // read + read(req, res, next, parse, debug, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return (contentType.parse(req).parameters.charset || '').toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/labWeb/lab7/node_modules/body-parser/lib/types/urlencoded.js b/labWeb/lab7/node_modules/body-parser/lib/types/urlencoded.js new file mode 100644 index 0000000..832992c --- /dev/null +++ b/labWeb/lab7/node_modules/body-parser/lib/types/urlencoded.js @@ -0,0 +1,300 @@ +/*! + * body-parser + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var bytes = require('bytes') +var contentType = require('content-type') +var createError = require('http-errors') +var debug = require('debug')('body-parser:urlencoded') +var deprecate = require('depd')('body-parser') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = urlencoded + +/** + * Cache of parser modules. + */ + +var parsers = Object.create(null) + +/** + * Create a middleware to parse urlencoded bodies. + * + * @param {object} [options] + * @return {function} + * @public + */ + +function urlencoded (options) { + var opts = options || {} + + // notice because option default will flip in next major + if (opts.extended === undefined) { + deprecate('undefined extended: provide extended option') + } + + var extended = opts.extended !== false + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'application/x-www-form-urlencoded' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate query parser + var queryparse = extended + ? extendedparser(opts) + : simpleparser(opts) + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (body) { + return body.length + ? queryparse(body) + : {} + } + + return function urlencodedParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // assert charset + var charset = getCharset(req) || 'utf-8' + if (charset !== 'utf-8') { + debug('invalid charset') + next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { + charset: charset, + type: 'charset.unsupported' + })) + return + } + + // read + read(req, res, next, parse, debug, { + debug: debug, + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the extended query parser. + * + * @param {object} options + */ + +function extendedparser (options) { + var parameterLimit = options.parameterLimit !== undefined + ? options.parameterLimit + : 1000 + var depth = options.depth !== undefined ? options.depth : 32 + var parse = parser('qs') + + if (isNaN(parameterLimit) || parameterLimit < 1) { + throw new TypeError('option parameterLimit must be a positive number') + } + + if (isNaN(depth) || depth < 0) { + throw new TypeError('option depth must be a zero or a positive number') + } + + if (isFinite(parameterLimit)) { + parameterLimit = parameterLimit | 0 + } + + return function queryparse (body) { + var paramCount = parameterCount(body, parameterLimit) + + if (paramCount === undefined) { + debug('too many parameters') + throw createError(413, 'too many parameters', { + type: 'parameters.too.many' + }) + } + + var arrayLimit = Math.max(100, paramCount) + + debug('parse extended urlencoding') + try { + return parse(body, { + allowPrototypes: true, + arrayLimit: arrayLimit, + depth: depth, + strictDepth: true, + parameterLimit: parameterLimit + }) + } catch (err) { + if (err instanceof RangeError) { + throw createError(400, 'The input exceeded the depth', { + type: 'querystring.parse.rangeError' + }) + } else { + throw err + } + } + } +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return (contentType.parse(req).parameters.charset || '').toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Count the number of parameters, stopping once limit reached + * + * @param {string} body + * @param {number} limit + * @api private + */ + +function parameterCount (body, limit) { + var count = 0 + var index = 0 + + while ((index = body.indexOf('&', index)) !== -1) { + count++ + index++ + + if (count === limit) { + return undefined + } + } + + return count +} + +/** + * Get parser for module name dynamically. + * + * @param {string} name + * @return {function} + * @api private + */ + +function parser (name) { + var mod = parsers[name] + + if (mod !== undefined) { + return mod.parse + } + + // this uses a switch for static require analysis + switch (name) { + case 'qs': + mod = require('qs') + break + case 'querystring': + mod = require('querystring') + break + } + + // store to prevent invoking require() + parsers[name] = mod + + return mod.parse +} + +/** + * Get the simple query parser. + * + * @param {object} options + */ + +function simpleparser (options) { + var parameterLimit = options.parameterLimit !== undefined + ? options.parameterLimit + : 1000 + var parse = parser('querystring') + + if (isNaN(parameterLimit) || parameterLimit < 1) { + throw new TypeError('option parameterLimit must be a positive number') + } + + if (isFinite(parameterLimit)) { + parameterLimit = parameterLimit | 0 + } + + return function queryparse (body) { + var paramCount = parameterCount(body, parameterLimit) + + if (paramCount === undefined) { + debug('too many parameters') + throw createError(413, 'too many parameters', { + type: 'parameters.too.many' + }) + } + + debug('parse urlencoding') + return parse(body, undefined, undefined, { maxKeys: parameterLimit }) + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/labWeb/lab7/node_modules/body-parser/package.json b/labWeb/lab7/node_modules/body-parser/package.json new file mode 100644 index 0000000..c8e61c1 --- /dev/null +++ b/labWeb/lab7/node_modules/body-parser/package.json @@ -0,0 +1,55 @@ +{ + "name": "body-parser", + "description": "Node.js body parsing middleware", + "version": "1.20.4", + "contributors": [ + "Douglas Christopher Wilson ", + "Jonathan Ong (http://jongleberry.com)" + ], + "license": "MIT", + "repository": "expressjs/body-parser", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "devDependencies": { + "eslint": "8.34.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-markdown": "3.0.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "6.1.1", + "eslint-plugin-standard": "4.1.0", + "methods": "1.1.2", + "mocha": "10.2.0", + "nyc": "15.1.0", + "safe-buffer": "5.2.1", + "supertest": "6.3.3" + }, + "files": [ + "lib/", + "LICENSE", + "HISTORY.md", + "index.js" + ], + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --require test/support/env --reporter spec --check-leaks --bail test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + } +} diff --git a/labWeb/lab7/node_modules/brace-expansion/LICENSE b/labWeb/lab7/node_modules/brace-expansion/LICENSE new file mode 100644 index 0000000..46e7b75 --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/LICENSE @@ -0,0 +1,23 @@ +MIT License + +Copyright Julian Gruber + +TypeScript port Copyright Isaac Z. Schlueter + +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/labWeb/lab7/node_modules/brace-expansion/README.md b/labWeb/lab7/node_modules/brace-expansion/README.md new file mode 100644 index 0000000..d00b24d --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/README.md @@ -0,0 +1,94 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![CI](https://github.com/juliangruber/brace-expansion/actions/workflows/ci.yml/badge.svg)](https://github.com/juliangruber/brace-expansion/actions/workflows/ci.yml) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) + +## Example + +```js +import { expand } from '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 +import { expand } from 'brace-expansion' +``` + +### const expanded = expand(str, [options]) + +Return an array of all possible and valid expansions of `str`. If +none are found, `[str]` is returned. + +The `options` object can provide a `max` value to cap the number +of expansions allowed. This is limited to `100_000` by default, +to prevent DoS attacks. + +```js +const expansions = expand('{1..100}'.repeat(5), { + max: 100, +}) +// expansions.length will be 100, not 100^5 +``` + +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. diff --git a/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.d.ts b/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.d.ts new file mode 100644 index 0000000..92b7a7f --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.d.ts @@ -0,0 +1,6 @@ +export declare const EXPANSION_MAX = 100000; +export type BraceExpansionOptions = { + max?: number; +}; +export declare function expand(str: string, options?: BraceExpansionOptions): string[]; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.d.ts.map b/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.d.ts.map new file mode 100644 index 0000000..a4f36ae --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,aAAa,SAAU,CAAA;AAwDpC,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,YAkBtE"} \ No newline at end of file diff --git a/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.js b/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.js new file mode 100644 index 0000000..b9f3c6f --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.js @@ -0,0 +1,201 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EXPANSION_MAX = void 0; +exports.expand = expand; +const balanced_match_1 = require("balanced-match"); +const escSlash = '\0SLASH' + Math.random() + '\0'; +const escOpen = '\0OPEN' + Math.random() + '\0'; +const escClose = '\0CLOSE' + Math.random() + '\0'; +const escComma = '\0COMMA' + Math.random() + '\0'; +const escPeriod = '\0PERIOD' + Math.random() + '\0'; +const escSlashPattern = new RegExp(escSlash, 'g'); +const escOpenPattern = new RegExp(escOpen, 'g'); +const escClosePattern = new RegExp(escClose, 'g'); +const escCommaPattern = new RegExp(escComma, 'g'); +const escPeriodPattern = new RegExp(escPeriod, 'g'); +const slashPattern = /\\\\/g; +const openPattern = /\\{/g; +const closePattern = /\\}/g; +const commaPattern = /\\,/g; +const periodPattern = /\\\./g; +exports.EXPANSION_MAX = 100_000; +function numeric(str) { + return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0); +} +function escapeBraces(str) { + return str + .replace(slashPattern, escSlash) + .replace(openPattern, escOpen) + .replace(closePattern, escClose) + .replace(commaPattern, escComma) + .replace(periodPattern, escPeriod); +} +function unescapeBraces(str) { + return str + .replace(escSlashPattern, '\\') + .replace(escOpenPattern, '{') + .replace(escClosePattern, '}') + .replace(escCommaPattern, ',') + .replace(escPeriodPattern, '.'); +} +/** + * 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 ['']; + } + const parts = []; + const m = (0, balanced_match_1.balanced)('{', '}', str); + if (!m) { + return str.split(','); + } + const { pre, body, post } = m; + const p = pre.split(','); + p[p.length - 1] += '{' + body + '}'; + const 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 expand(str, options = {}) { + if (!str) { + return []; + } + const { max = exports.EXPANSION_MAX } = options; + // 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.slice(0, 2) === '{}') { + str = '\\{\\}' + str.slice(2); + } + return expand_(escapeBraces(str), max, true).map(unescapeBraces); +} +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, max, isTop) { + /** @type {string[]} */ + const expansions = []; + const m = (0, balanced_match_1.balanced)('{', '}', str); + if (!m) + return [str]; + // no need to expand pre, since it is guaranteed to be free of brace-sets + const pre = m.pre; + const post = m.post.length ? expand_(m.post, max, false) : ['']; + if (/\$$/.test(m.pre)) { + for (let k = 0; k < post.length && k < max; k++) { + const expansion = pre + '{' + m.body + '}' + post[k]; + expansions.push(expansion); + } + } + else { + const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + const isSequence = isNumericSequence || isAlphaSequence; + const 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, max, true); + } + return [str]; + } + let n; + if (isSequence) { + n = m.body.split(/\.\./); + } + else { + n = parseCommaParts(m.body); + if (n.length === 1 && n[0] !== undefined) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand_(n[0], max, false).map(embrace); + //XXX is this necessary? Can't seem to hit it in tests. + /* c8 ignore start */ + if (n.length === 1) { + return post.map(p => m.pre + n[0] + p); + } + /* c8 ignore stop */ + } + } + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + let N; + if (isSequence && n[0] !== undefined && n[1] !== undefined) { + const x = numeric(n[0]); + const y = numeric(n[1]); + const width = Math.max(n[0].length, n[1].length); + let incr = n.length === 3 && n[2] !== undefined ? + Math.max(Math.abs(numeric(n[2])), 1) + : 1; + let test = lte; + const reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + const pad = n.some(isPadded); + N = []; + for (let i = x; test(i, y); i += incr) { + let c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') { + c = ''; + } + } + else { + c = String(i); + if (pad) { + const need = width - c.length; + if (need > 0) { + const z = new Array(need + 1).join('0'); + if (i < 0) { + c = '-' + z + c.slice(1); + } + else { + c = z + c; + } + } + } + } + N.push(c); + } + } + else { + N = []; + for (let j = 0; j < n.length; j++) { + N.push.apply(N, expand_(n[j], max, false)); + } + } + for (let j = 0; j < N.length; j++) { + for (let k = 0; k < post.length && expansions.length < max; k++) { + const expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) { + expansions.push(expansion); + } + } + } + } + return expansions; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.js.map b/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.js.map new file mode 100644 index 0000000..c9d1511 --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { balanced } from 'balanced-match'\n\nconst escSlash = '\\0SLASH' + Math.random() + '\\0'\nconst escOpen = '\\0OPEN' + Math.random() + '\\0'\nconst escClose = '\\0CLOSE' + Math.random() + '\\0'\nconst escComma = '\\0COMMA' + Math.random() + '\\0'\nconst escPeriod = '\\0PERIOD' + Math.random() + '\\0'\nconst escSlashPattern = new RegExp(escSlash, 'g')\nconst escOpenPattern = new RegExp(escOpen, 'g')\nconst escClosePattern = new RegExp(escClose, 'g')\nconst escCommaPattern = new RegExp(escComma, 'g')\nconst escPeriodPattern = new RegExp(escPeriod, 'g')\nconst slashPattern = /\\\\\\\\/g\nconst openPattern = /\\\\{/g\nconst closePattern = /\\\\}/g\nconst commaPattern = /\\\\,/g\nconst periodPattern = /\\\\\\./g\n\nexport const EXPANSION_MAX = 100_000\n\nfunction numeric(str: string) {\n return !isNaN(str as any) ? parseInt(str, 10) : str.charCodeAt(0)\n}\n\nfunction escapeBraces(str: string) {\n return str\n .replace(slashPattern, escSlash)\n .replace(openPattern, escOpen)\n .replace(closePattern, escClose)\n .replace(commaPattern, escComma)\n .replace(periodPattern, escPeriod)\n}\n\nfunction unescapeBraces(str: string) {\n return str\n .replace(escSlashPattern, '\\\\')\n .replace(escOpenPattern, '{')\n .replace(escClosePattern, '}')\n .replace(escCommaPattern, ',')\n .replace(escPeriodPattern, '.')\n}\n\n/**\n * Basically just str.split(\",\"), but handling cases\n * where we have nested braced sections, which should be\n * treated as individual members, like {a,{b,c},d}\n */\nfunction parseCommaParts(str: string) {\n if (!str) {\n return ['']\n }\n\n const parts: string[] = []\n const m = balanced('{', '}', str)\n\n if (!m) {\n return str.split(',')\n }\n\n const { pre, body, post } = m\n const p = pre.split(',')\n\n p[p.length - 1] += '{' + body + '}'\n const postParts = parseCommaParts(post)\n if (post.length) {\n ;(p[p.length - 1] as string) += postParts.shift()\n p.push.apply(p, postParts)\n }\n\n parts.push.apply(parts, p)\n\n return parts\n}\n\nexport type BraceExpansionOptions = {\n max?: number\n}\n\nexport function expand(str: string, options: BraceExpansionOptions = {}) {\n if (!str) {\n return []\n }\n\n const { max = EXPANSION_MAX } = options\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.slice(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.slice(2)\n }\n\n return expand_(escapeBraces(str), max, true).map(unescapeBraces)\n}\n\nfunction embrace(str: string) {\n return '{' + str + '}'\n}\n\nfunction isPadded(el: string) {\n return /^-?0\\d/.test(el)\n}\n\nfunction lte(i: number, y: number) {\n return i <= y\n}\n\nfunction gte(i: number, y: number) {\n return i >= y\n}\n\nfunction expand_(str: string, max: number, isTop: boolean): string[] {\n /** @type {string[]} */\n const expansions: string[] = []\n\n const m = balanced('{', '}', str)\n if (!m) return [str]\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n const pre = m.pre\n const post: string[] = m.post.length ? expand_(m.post, max, false) : ['']\n\n if (/\\$$/.test(m.pre)) {\n for (let k = 0; k < post.length && k < max; k++) {\n const expansion = pre + '{' + m.body + '}' + post[k]\n expansions.push(expansion)\n }\n } else {\n const isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body)\n const isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(\n m.body,\n )\n const isSequence = isNumericSequence || isAlphaSequence\n const isOptions = m.body.indexOf(',') >= 0\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,(?!,).*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post\n return expand_(str, max, true)\n }\n return [str]\n }\n\n let n: string[]\n if (isSequence) {\n n = m.body.split(/\\.\\./)\n } else {\n n = parseCommaParts(m.body)\n if (n.length === 1 && n[0] !== undefined) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand_(n[0], max, false).map(embrace)\n //XXX is this necessary? Can't seem to hit it in tests.\n /* c8 ignore start */\n if (n.length === 1) {\n return post.map(p => m.pre + n[0] + p)\n }\n /* c8 ignore stop */\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n let N: string[]\n\n if (isSequence && n[0] !== undefined && n[1] !== undefined) {\n const x = numeric(n[0])\n const y = numeric(n[1])\n const width = Math.max(n[0].length, n[1].length)\n let incr =\n n.length === 3 && n[2] !== undefined ?\n Math.max(Math.abs(numeric(n[2])), 1)\n : 1\n let test = lte\n const reverse = y < x\n if (reverse) {\n incr *= -1\n test = gte\n }\n const pad = n.some(isPadded)\n\n N = []\n\n for (let i = x; test(i, y); i += incr) {\n let c\n if (isAlphaSequence) {\n c = String.fromCharCode(i)\n if (c === '\\\\') {\n c = ''\n }\n } else {\n c = String(i)\n if (pad) {\n const need = width - c.length\n if (need > 0) {\n const z = new Array(need + 1).join('0')\n if (i < 0) {\n c = '-' + z + c.slice(1)\n } else {\n c = z + c\n }\n }\n }\n }\n N.push(c)\n }\n } else {\n N = []\n\n for (let j = 0; j < n.length; j++) {\n N.push.apply(N, expand_(n[j] as string, max, false))\n }\n }\n\n for (let j = 0; j < N.length; j++) {\n for (let k = 0; k < post.length && expansions.length < max; k++) {\n const expansion = pre + N[j] + post[k]\n if (!isTop || isSequence || expansion) {\n expansions.push(expansion)\n }\n }\n }\n }\n\n return expansions\n}\n"]} \ No newline at end of file diff --git a/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/package.json b/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/package.json new file mode 100644 index 0000000..5bbefff --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/dist/commonjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/labWeb/lab7/node_modules/brace-expansion/dist/esm/index.d.ts b/labWeb/lab7/node_modules/brace-expansion/dist/esm/index.d.ts new file mode 100644 index 0000000..92b7a7f --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/dist/esm/index.d.ts @@ -0,0 +1,6 @@ +export declare const EXPANSION_MAX = 100000; +export type BraceExpansionOptions = { + max?: number; +}; +export declare function expand(str: string, options?: BraceExpansionOptions): string[]; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/labWeb/lab7/node_modules/brace-expansion/dist/esm/index.d.ts.map b/labWeb/lab7/node_modules/brace-expansion/dist/esm/index.d.ts.map new file mode 100644 index 0000000..a4f36ae --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/dist/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,aAAa,SAAU,CAAA;AAwDpC,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,YAkBtE"} \ No newline at end of file diff --git a/labWeb/lab7/node_modules/brace-expansion/dist/esm/index.js b/labWeb/lab7/node_modules/brace-expansion/dist/esm/index.js new file mode 100644 index 0000000..855e22c --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/dist/esm/index.js @@ -0,0 +1,197 @@ +import { balanced } from 'balanced-match'; +const escSlash = '\0SLASH' + Math.random() + '\0'; +const escOpen = '\0OPEN' + Math.random() + '\0'; +const escClose = '\0CLOSE' + Math.random() + '\0'; +const escComma = '\0COMMA' + Math.random() + '\0'; +const escPeriod = '\0PERIOD' + Math.random() + '\0'; +const escSlashPattern = new RegExp(escSlash, 'g'); +const escOpenPattern = new RegExp(escOpen, 'g'); +const escClosePattern = new RegExp(escClose, 'g'); +const escCommaPattern = new RegExp(escComma, 'g'); +const escPeriodPattern = new RegExp(escPeriod, 'g'); +const slashPattern = /\\\\/g; +const openPattern = /\\{/g; +const closePattern = /\\}/g; +const commaPattern = /\\,/g; +const periodPattern = /\\\./g; +export const EXPANSION_MAX = 100_000; +function numeric(str) { + return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0); +} +function escapeBraces(str) { + return str + .replace(slashPattern, escSlash) + .replace(openPattern, escOpen) + .replace(closePattern, escClose) + .replace(commaPattern, escComma) + .replace(periodPattern, escPeriod); +} +function unescapeBraces(str) { + return str + .replace(escSlashPattern, '\\') + .replace(escOpenPattern, '{') + .replace(escClosePattern, '}') + .replace(escCommaPattern, ',') + .replace(escPeriodPattern, '.'); +} +/** + * 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 ['']; + } + const parts = []; + const m = balanced('{', '}', str); + if (!m) { + return str.split(','); + } + const { pre, body, post } = m; + const p = pre.split(','); + p[p.length - 1] += '{' + body + '}'; + const postParts = parseCommaParts(post); + if (post.length) { + ; + p[p.length - 1] += postParts.shift(); + p.push.apply(p, postParts); + } + parts.push.apply(parts, p); + return parts; +} +export function expand(str, options = {}) { + if (!str) { + return []; + } + const { max = EXPANSION_MAX } = options; + // 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.slice(0, 2) === '{}') { + str = '\\{\\}' + str.slice(2); + } + return expand_(escapeBraces(str), max, true).map(unescapeBraces); +} +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, max, isTop) { + /** @type {string[]} */ + const expansions = []; + const m = balanced('{', '}', str); + if (!m) + return [str]; + // no need to expand pre, since it is guaranteed to be free of brace-sets + const pre = m.pre; + const post = m.post.length ? expand_(m.post, max, false) : ['']; + if (/\$$/.test(m.pre)) { + for (let k = 0; k < post.length && k < max; k++) { + const expansion = pre + '{' + m.body + '}' + post[k]; + expansions.push(expansion); + } + } + else { + const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + const isSequence = isNumericSequence || isAlphaSequence; + const 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, max, true); + } + return [str]; + } + let n; + if (isSequence) { + n = m.body.split(/\.\./); + } + else { + n = parseCommaParts(m.body); + if (n.length === 1 && n[0] !== undefined) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand_(n[0], max, false).map(embrace); + //XXX is this necessary? Can't seem to hit it in tests. + /* c8 ignore start */ + if (n.length === 1) { + return post.map(p => m.pre + n[0] + p); + } + /* c8 ignore stop */ + } + } + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + let N; + if (isSequence && n[0] !== undefined && n[1] !== undefined) { + const x = numeric(n[0]); + const y = numeric(n[1]); + const width = Math.max(n[0].length, n[1].length); + let incr = n.length === 3 && n[2] !== undefined ? + Math.max(Math.abs(numeric(n[2])), 1) + : 1; + let test = lte; + const reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + const pad = n.some(isPadded); + N = []; + for (let i = x; test(i, y); i += incr) { + let c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') { + c = ''; + } + } + else { + c = String(i); + if (pad) { + const need = width - c.length; + if (need > 0) { + const z = new Array(need + 1).join('0'); + if (i < 0) { + c = '-' + z + c.slice(1); + } + else { + c = z + c; + } + } + } + } + N.push(c); + } + } + else { + N = []; + for (let j = 0; j < n.length; j++) { + N.push.apply(N, expand_(n[j], max, false)); + } + } + for (let j = 0; j < N.length; j++) { + for (let k = 0; k < post.length && expansions.length < max; k++) { + const expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) { + expansions.push(expansion); + } + } + } + } + return expansions; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/labWeb/lab7/node_modules/brace-expansion/dist/esm/index.js.map b/labWeb/lab7/node_modules/brace-expansion/dist/esm/index.js.map new file mode 100644 index 0000000..1bf0ab5 --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { balanced } from 'balanced-match'\n\nconst escSlash = '\\0SLASH' + Math.random() + '\\0'\nconst escOpen = '\\0OPEN' + Math.random() + '\\0'\nconst escClose = '\\0CLOSE' + Math.random() + '\\0'\nconst escComma = '\\0COMMA' + Math.random() + '\\0'\nconst escPeriod = '\\0PERIOD' + Math.random() + '\\0'\nconst escSlashPattern = new RegExp(escSlash, 'g')\nconst escOpenPattern = new RegExp(escOpen, 'g')\nconst escClosePattern = new RegExp(escClose, 'g')\nconst escCommaPattern = new RegExp(escComma, 'g')\nconst escPeriodPattern = new RegExp(escPeriod, 'g')\nconst slashPattern = /\\\\\\\\/g\nconst openPattern = /\\\\{/g\nconst closePattern = /\\\\}/g\nconst commaPattern = /\\\\,/g\nconst periodPattern = /\\\\\\./g\n\nexport const EXPANSION_MAX = 100_000\n\nfunction numeric(str: string) {\n return !isNaN(str as any) ? parseInt(str, 10) : str.charCodeAt(0)\n}\n\nfunction escapeBraces(str: string) {\n return str\n .replace(slashPattern, escSlash)\n .replace(openPattern, escOpen)\n .replace(closePattern, escClose)\n .replace(commaPattern, escComma)\n .replace(periodPattern, escPeriod)\n}\n\nfunction unescapeBraces(str: string) {\n return str\n .replace(escSlashPattern, '\\\\')\n .replace(escOpenPattern, '{')\n .replace(escClosePattern, '}')\n .replace(escCommaPattern, ',')\n .replace(escPeriodPattern, '.')\n}\n\n/**\n * Basically just str.split(\",\"), but handling cases\n * where we have nested braced sections, which should be\n * treated as individual members, like {a,{b,c},d}\n */\nfunction parseCommaParts(str: string) {\n if (!str) {\n return ['']\n }\n\n const parts: string[] = []\n const m = balanced('{', '}', str)\n\n if (!m) {\n return str.split(',')\n }\n\n const { pre, body, post } = m\n const p = pre.split(',')\n\n p[p.length - 1] += '{' + body + '}'\n const postParts = parseCommaParts(post)\n if (post.length) {\n ;(p[p.length - 1] as string) += postParts.shift()\n p.push.apply(p, postParts)\n }\n\n parts.push.apply(parts, p)\n\n return parts\n}\n\nexport type BraceExpansionOptions = {\n max?: number\n}\n\nexport function expand(str: string, options: BraceExpansionOptions = {}) {\n if (!str) {\n return []\n }\n\n const { max = EXPANSION_MAX } = options\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.slice(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.slice(2)\n }\n\n return expand_(escapeBraces(str), max, true).map(unescapeBraces)\n}\n\nfunction embrace(str: string) {\n return '{' + str + '}'\n}\n\nfunction isPadded(el: string) {\n return /^-?0\\d/.test(el)\n}\n\nfunction lte(i: number, y: number) {\n return i <= y\n}\n\nfunction gte(i: number, y: number) {\n return i >= y\n}\n\nfunction expand_(str: string, max: number, isTop: boolean): string[] {\n /** @type {string[]} */\n const expansions: string[] = []\n\n const m = balanced('{', '}', str)\n if (!m) return [str]\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n const pre = m.pre\n const post: string[] = m.post.length ? expand_(m.post, max, false) : ['']\n\n if (/\\$$/.test(m.pre)) {\n for (let k = 0; k < post.length && k < max; k++) {\n const expansion = pre + '{' + m.body + '}' + post[k]\n expansions.push(expansion)\n }\n } else {\n const isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body)\n const isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(\n m.body,\n )\n const isSequence = isNumericSequence || isAlphaSequence\n const isOptions = m.body.indexOf(',') >= 0\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,(?!,).*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post\n return expand_(str, max, true)\n }\n return [str]\n }\n\n let n: string[]\n if (isSequence) {\n n = m.body.split(/\\.\\./)\n } else {\n n = parseCommaParts(m.body)\n if (n.length === 1 && n[0] !== undefined) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand_(n[0], max, false).map(embrace)\n //XXX is this necessary? Can't seem to hit it in tests.\n /* c8 ignore start */\n if (n.length === 1) {\n return post.map(p => m.pre + n[0] + p)\n }\n /* c8 ignore stop */\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n let N: string[]\n\n if (isSequence && n[0] !== undefined && n[1] !== undefined) {\n const x = numeric(n[0])\n const y = numeric(n[1])\n const width = Math.max(n[0].length, n[1].length)\n let incr =\n n.length === 3 && n[2] !== undefined ?\n Math.max(Math.abs(numeric(n[2])), 1)\n : 1\n let test = lte\n const reverse = y < x\n if (reverse) {\n incr *= -1\n test = gte\n }\n const pad = n.some(isPadded)\n\n N = []\n\n for (let i = x; test(i, y); i += incr) {\n let c\n if (isAlphaSequence) {\n c = String.fromCharCode(i)\n if (c === '\\\\') {\n c = ''\n }\n } else {\n c = String(i)\n if (pad) {\n const need = width - c.length\n if (need > 0) {\n const z = new Array(need + 1).join('0')\n if (i < 0) {\n c = '-' + z + c.slice(1)\n } else {\n c = z + c\n }\n }\n }\n }\n N.push(c)\n }\n } else {\n N = []\n\n for (let j = 0; j < n.length; j++) {\n N.push.apply(N, expand_(n[j] as string, max, false))\n }\n }\n\n for (let j = 0; j < N.length; j++) {\n for (let k = 0; k < post.length && expansions.length < max; k++) {\n const expansion = pre + N[j] + post[k]\n if (!isTop || isSequence || expansion) {\n expansions.push(expansion)\n }\n }\n }\n }\n\n return expansions\n}\n"]} \ No newline at end of file diff --git a/labWeb/lab7/node_modules/brace-expansion/dist/esm/package.json b/labWeb/lab7/node_modules/brace-expansion/dist/esm/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/dist/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/labWeb/lab7/node_modules/brace-expansion/package.json b/labWeb/lab7/node_modules/brace-expansion/package.json new file mode 100644 index 0000000..83a8289 --- /dev/null +++ b/labWeb/lab7/node_modules/brace-expansion/package.json @@ -0,0 +1,64 @@ +{ + "name": "brace-expansion", + "description": "Brace expansion as known from sh/bash", + "version": "5.0.5", + "files": [ + "dist" + ], + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "type": "module", + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write .", + "benchmark": "node benchmark/index.js", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "devDependencies": { + "@types/brace-expansion": "^1.1.2", + "@types/node": "^25.2.1", + "mkdirp": "^3.0.1", + "prettier": "^3.3.2", + "tap": "^21.6.2", + "tshy": "^3.0.2", + "typedoc": "^0.28.5" + }, + "dependencies": { + "balanced-match": "^4.0.2" + }, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + }, + "tshy": { + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "module": "./dist/esm/index.js", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/juliangruber/brace-expansion.git" + } +} diff --git a/labWeb/lab7/node_modules/braces/LICENSE b/labWeb/lab7/node_modules/braces/LICENSE new file mode 100644 index 0000000..9af4a67 --- /dev/null +++ b/labWeb/lab7/node_modules/braces/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/labWeb/lab7/node_modules/braces/README.md b/labWeb/lab7/node_modules/braces/README.md new file mode 100644 index 0000000..f59dd60 --- /dev/null +++ b/labWeb/lab7/node_modules/braces/README.md @@ -0,0 +1,586 @@ +# braces [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [![NPM version](https://img.shields.io/npm/v/braces.svg?style=flat)](https://www.npmjs.com/package/braces) [![NPM monthly downloads](https://img.shields.io/npm/dm/braces.svg?style=flat)](https://npmjs.org/package/braces) [![NPM total downloads](https://img.shields.io/npm/dt/braces.svg?style=flat)](https://npmjs.org/package/braces) [![Linux Build Status](https://img.shields.io/travis/micromatch/braces.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/braces) + +> Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save braces +``` + +## v3.0.0 Released!! + +See the [changelog](CHANGELOG.md) for details. + +## Why use braces? + +Brace patterns make globs more powerful by adding the ability to match specific ranges and sequences of characters. + +- **Accurate** - complete support for the [Bash 4.3 Brace Expansion](www.gnu.org/software/bash/) specification (passes all of the Bash braces tests) +- **[fast and performant](#benchmarks)** - Starts fast, runs fast and [scales well](#performance) as patterns increase in complexity. +- **Organized code base** - The parser and compiler are easy to maintain and update when edge cases crop up. +- **Well-tested** - Thousands of test assertions, and passes all of the Bash, minimatch, and [brace-expansion](https://github.com/juliangruber/brace-expansion) unit tests (as of the date this was written). +- **Safer** - You shouldn't have to worry about users defining aggressive or malicious brace patterns that can break your application. Braces takes measures to prevent malicious regex that can be used for DDoS attacks (see [catastrophic backtracking](https://www.regular-expressions.info/catastrophic.html)). +- [Supports lists](#lists) - (aka "sets") `a/{b,c}/d` => `['a/b/d', 'a/c/d']` +- [Supports sequences](#sequences) - (aka "ranges") `{01..03}` => `['01', '02', '03']` +- [Supports steps](#steps) - (aka "increments") `{2..10..2}` => `['2', '4', '6', '8', '10']` +- [Supports escaping](#escaping) - To prevent evaluation of special characters. + +## Usage + +The main export is a function that takes one or more brace `patterns` and `options`. + +```js +const braces = require('braces'); +// braces(patterns[, options]); + +console.log(braces(['{01..05}', '{a..e}'])); +//=> ['(0[1-5])', '([a-e])'] + +console.log(braces(['{01..05}', '{a..e}'], { expand: true })); +//=> ['01', '02', '03', '04', '05', 'a', 'b', 'c', 'd', 'e'] +``` + +### Brace Expansion vs. Compilation + +By default, brace patterns are compiled into strings that are optimized for creating regular expressions and matching. + +**Compiled** + +```js +console.log(braces('a/{x,y,z}/b')); +//=> ['a/(x|y|z)/b'] +console.log(braces(['a/{01..20}/b', 'a/{1..5}/b'])); +//=> [ 'a/(0[1-9]|1[0-9]|20)/b', 'a/([1-5])/b' ] +``` + +**Expanded** + +Enable brace expansion by setting the `expand` option to true, or by using [braces.expand()](#expand) (returns an array similar to what you'd expect from Bash, or `echo {1..5}`, or [minimatch](https://github.com/isaacs/minimatch)): + +```js +console.log(braces('a/{x,y,z}/b', { expand: true })); +//=> ['a/x/b', 'a/y/b', 'a/z/b'] + +console.log(braces.expand('{01..10}')); +//=> ['01','02','03','04','05','06','07','08','09','10'] +``` + +### Lists + +Expand lists (like Bash "sets"): + +```js +console.log(braces('a/{foo,bar,baz}/*.js')); +//=> ['a/(foo|bar|baz)/*.js'] + +console.log(braces.expand('a/{foo,bar,baz}/*.js')); +//=> ['a/foo/*.js', 'a/bar/*.js', 'a/baz/*.js'] +``` + +### Sequences + +Expand ranges of characters (like Bash "sequences"): + +```js +console.log(braces.expand('{1..3}')); // ['1', '2', '3'] +console.log(braces.expand('a/{1..3}/b')); // ['a/1/b', 'a/2/b', 'a/3/b'] +console.log(braces('{a..c}', { expand: true })); // ['a', 'b', 'c'] +console.log(braces('foo/{a..c}', { expand: true })); // ['foo/a', 'foo/b', 'foo/c'] + +// supports zero-padded ranges +console.log(braces('a/{01..03}/b')); //=> ['a/(0[1-3])/b'] +console.log(braces('a/{001..300}/b')); //=> ['a/(0{2}[1-9]|0[1-9][0-9]|[12][0-9]{2}|300)/b'] +``` + +See [fill-range](https://github.com/jonschlinkert/fill-range) for all available range-expansion options. + +### Steppped ranges + +Steps, or increments, may be used with ranges: + +```js +console.log(braces.expand('{2..10..2}')); +//=> ['2', '4', '6', '8', '10'] + +console.log(braces('{2..10..2}')); +//=> ['(2|4|6|8|10)'] +``` + +When the [.optimize](#optimize) method is used, or [options.optimize](#optionsoptimize) is set to true, sequences are passed to [to-regex-range](https://github.com/jonschlinkert/to-regex-range) for expansion. + +### Nesting + +Brace patterns may be nested. The results of each expanded string are not sorted, and left to right order is preserved. + +**"Expanded" braces** + +```js +console.log(braces.expand('a{b,c,/{x,y}}/e')); +//=> ['ab/e', 'ac/e', 'a/x/e', 'a/y/e'] + +console.log(braces.expand('a/{x,{1..5},y}/c')); +//=> ['a/x/c', 'a/1/c', 'a/2/c', 'a/3/c', 'a/4/c', 'a/5/c', 'a/y/c'] +``` + +**"Optimized" braces** + +```js +console.log(braces('a{b,c,/{x,y}}/e')); +//=> ['a(b|c|/(x|y))/e'] + +console.log(braces('a/{x,{1..5},y}/c')); +//=> ['a/(x|([1-5])|y)/c'] +``` + +### Escaping + +**Escaping braces** + +A brace pattern will not be expanded or evaluted if _either the opening or closing brace is escaped_: + +```js +console.log(braces.expand('a\\{d,c,b}e')); +//=> ['a{d,c,b}e'] + +console.log(braces.expand('a{d,c,b\\}e')); +//=> ['a{d,c,b}e'] +``` + +**Escaping commas** + +Commas inside braces may also be escaped: + +```js +console.log(braces.expand('a{b\\,c}d')); +//=> ['a{b,c}d'] + +console.log(braces.expand('a{d\\,c,b}e')); +//=> ['ad,ce', 'abe'] +``` + +**Single items** + +Following bash conventions, a brace pattern is also not expanded when it contains a single character: + +```js +console.log(braces.expand('a{b}c')); +//=> ['a{b}c'] +``` + +## Options + +### options.maxLength + +**Type**: `Number` + +**Default**: `10,000` + +**Description**: Limit the length of the input string. Useful when the input string is generated or your application allows users to pass a string, et cetera. + +```js +console.log(braces('a/{b,c}/d', { maxLength: 3 })); //=> throws an error +``` + +### options.expand + +**Type**: `Boolean` + +**Default**: `undefined` + +**Description**: Generate an "expanded" brace pattern (alternatively you can use the `braces.expand()` method, which does the same thing). + +```js +console.log(braces('a/{b,c}/d', { expand: true })); +//=> [ 'a/b/d', 'a/c/d' ] +``` + +### options.nodupes + +**Type**: `Boolean` + +**Default**: `undefined` + +**Description**: Remove duplicates from the returned array. + +### options.rangeLimit + +**Type**: `Number` + +**Default**: `1000` + +**Description**: To prevent malicious patterns from being passed by users, an error is thrown when `braces.expand()` is used or `options.expand` is true and the generated range will exceed the `rangeLimit`. + +You can customize `options.rangeLimit` or set it to `Inifinity` to disable this altogether. + +**Examples** + +```js +// pattern exceeds the "rangeLimit", so it's optimized automatically +console.log(braces.expand('{1..1000}')); +//=> ['([1-9]|[1-9][0-9]{1,2}|1000)'] + +// pattern does not exceed "rangeLimit", so it's NOT optimized +console.log(braces.expand('{1..100}')); +//=> ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100'] +``` + +### options.transform + +**Type**: `Function` + +**Default**: `undefined` + +**Description**: Customize range expansion. + +**Example: Transforming non-numeric values** + +```js +const alpha = braces.expand('x/{a..e}/y', { + transform(value, index) { + // When non-numeric values are passed, "value" is a character code. + return 'foo/' + String.fromCharCode(value) + '-' + index; + }, +}); +console.log(alpha); +//=> [ 'x/foo/a-0/y', 'x/foo/b-1/y', 'x/foo/c-2/y', 'x/foo/d-3/y', 'x/foo/e-4/y' ] +``` + +**Example: Transforming numeric values** + +```js +const numeric = braces.expand('{1..5}', { + transform(value) { + // when numeric values are passed, "value" is a number + return 'foo/' + value * 2; + }, +}); +console.log(numeric); +//=> [ 'foo/2', 'foo/4', 'foo/6', 'foo/8', 'foo/10' ] +``` + +### options.quantifiers + +**Type**: `Boolean` + +**Default**: `undefined` + +**Description**: In regular expressions, quanitifiers can be used to specify how many times a token can be repeated. For example, `a{1,3}` will match the letter `a` one to three times. + +Unfortunately, regex quantifiers happen to share the same syntax as [Bash lists](#lists) + +The `quantifiers` option tells braces to detect when [regex quantifiers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#quantifiers) are defined in the given pattern, and not to try to expand them as lists. + +**Examples** + +```js +const braces = require('braces'); +console.log(braces('a/b{1,3}/{x,y,z}')); +//=> [ 'a/b(1|3)/(x|y|z)' ] +console.log(braces('a/b{1,3}/{x,y,z}', { quantifiers: true })); +//=> [ 'a/b{1,3}/(x|y|z)' ] +console.log(braces('a/b{1,3}/{x,y,z}', { quantifiers: true, expand: true })); +//=> [ 'a/b{1,3}/x', 'a/b{1,3}/y', 'a/b{1,3}/z' ] +``` + +### options.keepEscaping + +**Type**: `Boolean` + +**Default**: `undefined` + +**Description**: Do not strip backslashes that were used for escaping from the result. + +## What is "brace expansion"? + +Brace expansion is a type of parameter expansion that was made popular by unix shells for generating lists of strings, as well as regex-like matching when used alongside wildcards (globs). + +In addition to "expansion", braces are also used for matching. In other words: + +- [brace expansion](#brace-expansion) is for generating new lists +- [brace matching](#brace-matching) is for filtering existing lists + +
+More about brace expansion (click to expand) + +There are two main types of brace expansion: + +1. **lists**: which are defined using comma-separated values inside curly braces: `{a,b,c}` +2. **sequences**: which are defined using a starting value and an ending value, separated by two dots: `a{1..3}b`. Optionally, a third argument may be passed to define a "step" or increment to use: `a{1..100..10}b`. These are also sometimes referred to as "ranges". + +Here are some example brace patterns to illustrate how they work: + +**Sets** + +``` +{a,b,c} => a b c +{a,b,c}{1,2} => a1 a2 b1 b2 c1 c2 +``` + +**Sequences** + +``` +{1..9} => 1 2 3 4 5 6 7 8 9 +{4..-4} => 4 3 2 1 0 -1 -2 -3 -4 +{1..20..3} => 1 4 7 10 13 16 19 +{a..j} => a b c d e f g h i j +{j..a} => j i h g f e d c b a +{a..z..3} => a d g j m p s v y +``` + +**Combination** + +Sets and sequences can be mixed together or used along with any other strings. + +``` +{a,b,c}{1..3} => a1 a2 a3 b1 b2 b3 c1 c2 c3 +foo/{a,b,c}/bar => foo/a/bar foo/b/bar foo/c/bar +``` + +The fact that braces can be "expanded" from relatively simple patterns makes them ideal for quickly generating test fixtures, file paths, and similar use cases. + +## Brace matching + +In addition to _expansion_, brace patterns are also useful for performing regular-expression-like matching. + +For example, the pattern `foo/{1..3}/bar` would match any of following strings: + +``` +foo/1/bar +foo/2/bar +foo/3/bar +``` + +But not: + +``` +baz/1/qux +baz/2/qux +baz/3/qux +``` + +Braces can also be combined with [glob patterns](https://github.com/jonschlinkert/micromatch) to perform more advanced wildcard matching. For example, the pattern `*/{1..3}/*` would match any of following strings: + +``` +foo/1/bar +foo/2/bar +foo/3/bar +baz/1/qux +baz/2/qux +baz/3/qux +``` + +## Brace matching pitfalls + +Although brace patterns offer a user-friendly way of matching ranges or sets of strings, there are also some major disadvantages and potential risks you should be aware of. + +### tldr + +**"brace bombs"** + +- brace expansion can eat up a huge amount of processing resources +- as brace patterns increase _linearly in size_, the system resources required to expand the pattern increase exponentially +- users can accidentally (or intentially) exhaust your system's resources resulting in the equivalent of a DoS attack (bonus: no programming knowledge is required!) + +For a more detailed explanation with examples, see the [geometric complexity](#geometric-complexity) section. + +### The solution + +Jump to the [performance section](#performance) to see how Braces solves this problem in comparison to other libraries. + +### Geometric complexity + +At minimum, brace patterns with sets limited to two elements have quadradic or `O(n^2)` complexity. But the complexity of the algorithm increases exponentially as the number of sets, _and elements per set_, increases, which is `O(n^c)`. + +For example, the following sets demonstrate quadratic (`O(n^2)`) complexity: + +``` +{1,2}{3,4} => (2X2) => 13 14 23 24 +{1,2}{3,4}{5,6} => (2X2X2) => 135 136 145 146 235 236 245 246 +``` + +But add an element to a set, and we get a n-fold Cartesian product with `O(n^c)` complexity: + +``` +{1,2,3}{4,5,6}{7,8,9} => (3X3X3) => 147 148 149 157 158 159 167 168 169 247 248 + 249 257 258 259 267 268 269 347 348 349 357 + 358 359 367 368 369 +``` + +Now, imagine how this complexity grows given that each element is a n-tuple: + +``` +{1..100}{1..100} => (100X100) => 10,000 elements (38.4 kB) +{1..100}{1..100}{1..100} => (100X100X100) => 1,000,000 elements (5.76 MB) +``` + +Although these examples are clearly contrived, they demonstrate how brace patterns can quickly grow out of control. + +**More information** + +Interested in learning more about brace expansion? + +- [linuxjournal/bash-brace-expansion](http://www.linuxjournal.com/content/bash-brace-expansion) +- [rosettacode/Brace_expansion](https://rosettacode.org/wiki/Brace_expansion) +- [cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) + +
+ +## Performance + +Braces is not only screaming fast, it's also more accurate the other brace expansion libraries. + +### Better algorithms + +Fortunately there is a solution to the ["brace bomb" problem](#brace-matching-pitfalls): _don't expand brace patterns into an array when they're used for matching_. + +Instead, convert the pattern into an optimized regular expression. This is easier said than done, and braces is the only library that does this currently. + +**The proof is in the numbers** + +Minimatch gets exponentially slower as patterns increase in complexity, braces does not. The following results were generated using `braces()` and `minimatch.braceExpand()`, respectively. + +| **Pattern** | **braces** | **[minimatch][]** | +| --------------------------- | ------------------- | ---------------------------- | +| `{1..9007199254740991}`[^1] | `298 B` (5ms 459μs) | N/A (freezes) | +| `{1..1000000000000000}` | `41 B` (1ms 15μs) | N/A (freezes) | +| `{1..100000000000000}` | `40 B` (890μs) | N/A (freezes) | +| `{1..10000000000000}` | `39 B` (2ms 49μs) | N/A (freezes) | +| `{1..1000000000000}` | `38 B` (608μs) | N/A (freezes) | +| `{1..100000000000}` | `37 B` (397μs) | N/A (freezes) | +| `{1..10000000000}` | `35 B` (983μs) | N/A (freezes) | +| `{1..1000000000}` | `34 B` (798μs) | N/A (freezes) | +| `{1..100000000}` | `33 B` (733μs) | N/A (freezes) | +| `{1..10000000}` | `32 B` (5ms 632μs) | `78.89 MB` (16s 388ms 569μs) | +| `{1..1000000}` | `31 B` (1ms 381μs) | `6.89 MB` (1s 496ms 887μs) | +| `{1..100000}` | `30 B` (950μs) | `588.89 kB` (146ms 921μs) | +| `{1..10000}` | `29 B` (1ms 114μs) | `48.89 kB` (14ms 187μs) | +| `{1..1000}` | `28 B` (760μs) | `3.89 kB` (1ms 453μs) | +| `{1..100}` | `22 B` (345μs) | `291 B` (196μs) | +| `{1..10}` | `10 B` (533μs) | `20 B` (37μs) | +| `{1..3}` | `7 B` (190μs) | `5 B` (27μs) | + +### Faster algorithms + +When you need expansion, braces is still much faster. + +_(the following results were generated using `braces.expand()` and `minimatch.braceExpand()`, respectively)_ + +| **Pattern** | **braces** | **[minimatch][]** | +| --------------- | --------------------------- | ---------------------------- | +| `{1..10000000}` | `78.89 MB` (2s 698ms 642μs) | `78.89 MB` (18s 601ms 974μs) | +| `{1..1000000}` | `6.89 MB` (458ms 576μs) | `6.89 MB` (1s 491ms 621μs) | +| `{1..100000}` | `588.89 kB` (20ms 728μs) | `588.89 kB` (156ms 919μs) | +| `{1..10000}` | `48.89 kB` (2ms 202μs) | `48.89 kB` (13ms 641μs) | +| `{1..1000}` | `3.89 kB` (1ms 796μs) | `3.89 kB` (1ms 958μs) | +| `{1..100}` | `291 B` (424μs) | `291 B` (211μs) | +| `{1..10}` | `20 B` (487μs) | `20 B` (72μs) | +| `{1..3}` | `5 B` (166μs) | `5 B` (27μs) | + +If you'd like to run these comparisons yourself, see [test/support/generate.js](test/support/generate.js). + +## Benchmarks + +### Running benchmarks + +Install dev dependencies: + +```bash +npm i -d && npm benchmark +``` + +### Latest results + +Braces is more accurate, without sacrificing performance. + +```bash +● expand - range (expanded) + braces x 53,167 ops/sec ±0.12% (102 runs sampled) + minimatch x 11,378 ops/sec ±0.10% (102 runs sampled) +● expand - range (optimized for regex) + braces x 373,442 ops/sec ±0.04% (100 runs sampled) + minimatch x 3,262 ops/sec ±0.18% (100 runs sampled) +● expand - nested ranges (expanded) + braces x 33,921 ops/sec ±0.09% (99 runs sampled) + minimatch x 10,855 ops/sec ±0.28% (100 runs sampled) +● expand - nested ranges (optimized for regex) + braces x 287,479 ops/sec ±0.52% (98 runs sampled) + minimatch x 3,219 ops/sec ±0.28% (101 runs sampled) +● expand - set (expanded) + braces x 238,243 ops/sec ±0.19% (97 runs sampled) + minimatch x 538,268 ops/sec ±0.31% (96 runs sampled) +● expand - set (optimized for regex) + braces x 321,844 ops/sec ±0.10% (97 runs sampled) + minimatch x 140,600 ops/sec ±0.15% (100 runs sampled) +● expand - nested sets (expanded) + braces x 165,371 ops/sec ±0.42% (96 runs sampled) + minimatch x 337,720 ops/sec ±0.28% (100 runs sampled) +● expand - nested sets (optimized for regex) + braces x 242,948 ops/sec ±0.12% (99 runs sampled) + minimatch x 87,403 ops/sec ±0.79% (96 runs sampled) +``` + +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
+ +
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Contributors + +| **Commits** | **Contributor** | +| ----------- | ------------------------------------------------------------- | +| 197 | [jonschlinkert](https://github.com/jonschlinkert) | +| 4 | [doowb](https://github.com/doowb) | +| 1 | [es128](https://github.com/es128) | +| 1 | [eush77](https://github.com/eush77) | +| 1 | [hemanth](https://github.com/hemanth) | +| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) | + +### Author + +**Jon Schlinkert** + +- [GitHub Profile](https://github.com/jonschlinkert) +- [Twitter Profile](https://twitter.com/jonschlinkert) +- [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) + +### License + +Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +--- + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 08, 2019._ diff --git a/labWeb/lab7/node_modules/braces/index.js b/labWeb/lab7/node_modules/braces/index.js new file mode 100644 index 0000000..d222c13 --- /dev/null +++ b/labWeb/lab7/node_modules/braces/index.js @@ -0,0 +1,170 @@ +'use strict'; + +const stringify = require('./lib/stringify'); +const compile = require('./lib/compile'); +const expand = require('./lib/expand'); +const parse = require('./lib/parse'); + +/** + * Expand the given pattern or create a regex-compatible string. + * + * ```js + * const braces = require('braces'); + * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)'] + * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c'] + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {String} + * @api public + */ + +const braces = (input, options = {}) => { + let output = []; + + if (Array.isArray(input)) { + for (const pattern of input) { + const result = braces.create(pattern, options); + if (Array.isArray(result)) { + output.push(...result); + } else { + output.push(result); + } + } + } else { + output = [].concat(braces.create(input, options)); + } + + if (options && options.expand === true && options.nodupes === true) { + output = [...new Set(output)]; + } + return output; +}; + +/** + * Parse the given `str` with the given `options`. + * + * ```js + * // braces.parse(pattern, [, options]); + * const ast = braces.parse('a/{b,c}/d'); + * console.log(ast); + * ``` + * @param {String} pattern Brace pattern to parse + * @param {Object} options + * @return {Object} Returns an AST + * @api public + */ + +braces.parse = (input, options = {}) => parse(input, options); + +/** + * Creates a braces string from an AST, or an AST node. + * + * ```js + * const braces = require('braces'); + * let ast = braces.parse('foo/{a,b}/bar'); + * console.log(stringify(ast.nodes[2])); //=> '{a,b}' + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.stringify = (input, options = {}) => { + if (typeof input === 'string') { + return stringify(braces.parse(input, options), options); + } + return stringify(input, options); +}; + +/** + * Compiles a brace pattern into a regex-compatible, optimized string. + * This method is called by the main [braces](#braces) function by default. + * + * ```js + * const braces = require('braces'); + * console.log(braces.compile('a/{b,c}/d')); + * //=> ['a/(b|c)/d'] + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.compile = (input, options = {}) => { + if (typeof input === 'string') { + input = braces.parse(input, options); + } + return compile(input, options); +}; + +/** + * Expands a brace pattern into an array. This method is called by the + * main [braces](#braces) function when `options.expand` is true. Before + * using this method it's recommended that you read the [performance notes](#performance)) + * and advantages of using [.compile](#compile) instead. + * + * ```js + * const braces = require('braces'); + * console.log(braces.expand('a/{b,c}/d')); + * //=> ['a/b/d', 'a/c/d']; + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.expand = (input, options = {}) => { + if (typeof input === 'string') { + input = braces.parse(input, options); + } + + let result = expand(input, options); + + // filter out empty strings if specified + if (options.noempty === true) { + result = result.filter(Boolean); + } + + // filter out duplicates if specified + if (options.nodupes === true) { + result = [...new Set(result)]; + } + + return result; +}; + +/** + * Processes a brace pattern and returns either an expanded array + * (if `options.expand` is true), a highly optimized regex-compatible string. + * This method is called by the main [braces](#braces) function. + * + * ```js + * const braces = require('braces'); + * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) + * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.create = (input, options = {}) => { + if (input === '' || input.length < 3) { + return [input]; + } + + return options.expand !== true + ? braces.compile(input, options) + : braces.expand(input, options); +}; + +/** + * Expose "braces" + */ + +module.exports = braces; diff --git a/labWeb/lab7/node_modules/braces/lib/compile.js b/labWeb/lab7/node_modules/braces/lib/compile.js new file mode 100644 index 0000000..dce69be --- /dev/null +++ b/labWeb/lab7/node_modules/braces/lib/compile.js @@ -0,0 +1,60 @@ +'use strict'; + +const fill = require('fill-range'); +const utils = require('./utils'); + +const compile = (ast, options = {}) => { + const walk = (node, parent = {}) => { + const invalidBlock = utils.isInvalidBrace(parent); + const invalidNode = node.invalid === true && options.escapeInvalid === true; + const invalid = invalidBlock === true || invalidNode === true; + const prefix = options.escapeInvalid === true ? '\\' : ''; + let output = ''; + + if (node.isOpen === true) { + return prefix + node.value; + } + + if (node.isClose === true) { + console.log('node.isClose', prefix, node.value); + return prefix + node.value; + } + + if (node.type === 'open') { + return invalid ? prefix + node.value : '('; + } + + if (node.type === 'close') { + return invalid ? prefix + node.value : ')'; + } + + if (node.type === 'comma') { + return node.prev.type === 'comma' ? '' : invalid ? node.value : '|'; + } + + if (node.value) { + return node.value; + } + + if (node.nodes && node.ranges > 0) { + const args = utils.reduce(node.nodes); + const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true }); + + if (range.length !== 0) { + return args.length > 1 && range.length > 1 ? `(${range})` : range; + } + } + + if (node.nodes) { + for (const child of node.nodes) { + output += walk(child, node); + } + } + + return output; + }; + + return walk(ast); +}; + +module.exports = compile; diff --git a/labWeb/lab7/node_modules/braces/lib/constants.js b/labWeb/lab7/node_modules/braces/lib/constants.js new file mode 100644 index 0000000..2bb3b88 --- /dev/null +++ b/labWeb/lab7/node_modules/braces/lib/constants.js @@ -0,0 +1,57 @@ +'use strict'; + +module.exports = { + MAX_LENGTH: 10000, + + // Digits + CHAR_0: '0', /* 0 */ + CHAR_9: '9', /* 9 */ + + // Alphabet chars. + CHAR_UPPERCASE_A: 'A', /* A */ + CHAR_LOWERCASE_A: 'a', /* a */ + CHAR_UPPERCASE_Z: 'Z', /* Z */ + CHAR_LOWERCASE_Z: 'z', /* z */ + + CHAR_LEFT_PARENTHESES: '(', /* ( */ + CHAR_RIGHT_PARENTHESES: ')', /* ) */ + + CHAR_ASTERISK: '*', /* * */ + + // Non-alphabetic chars. + CHAR_AMPERSAND: '&', /* & */ + CHAR_AT: '@', /* @ */ + CHAR_BACKSLASH: '\\', /* \ */ + CHAR_BACKTICK: '`', /* ` */ + CHAR_CARRIAGE_RETURN: '\r', /* \r */ + CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */ + CHAR_COLON: ':', /* : */ + CHAR_COMMA: ',', /* , */ + CHAR_DOLLAR: '$', /* . */ + CHAR_DOT: '.', /* . */ + CHAR_DOUBLE_QUOTE: '"', /* " */ + CHAR_EQUAL: '=', /* = */ + CHAR_EXCLAMATION_MARK: '!', /* ! */ + CHAR_FORM_FEED: '\f', /* \f */ + CHAR_FORWARD_SLASH: '/', /* / */ + CHAR_HASH: '#', /* # */ + CHAR_HYPHEN_MINUS: '-', /* - */ + CHAR_LEFT_ANGLE_BRACKET: '<', /* < */ + CHAR_LEFT_CURLY_BRACE: '{', /* { */ + CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */ + CHAR_LINE_FEED: '\n', /* \n */ + CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */ + CHAR_PERCENT: '%', /* % */ + CHAR_PLUS: '+', /* + */ + CHAR_QUESTION_MARK: '?', /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */ + CHAR_RIGHT_CURLY_BRACE: '}', /* } */ + CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */ + CHAR_SEMICOLON: ';', /* ; */ + CHAR_SINGLE_QUOTE: '\'', /* ' */ + CHAR_SPACE: ' ', /* */ + CHAR_TAB: '\t', /* \t */ + CHAR_UNDERSCORE: '_', /* _ */ + CHAR_VERTICAL_LINE: '|', /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */ +}; diff --git a/labWeb/lab7/node_modules/braces/lib/expand.js b/labWeb/lab7/node_modules/braces/lib/expand.js new file mode 100644 index 0000000..35b2c41 --- /dev/null +++ b/labWeb/lab7/node_modules/braces/lib/expand.js @@ -0,0 +1,113 @@ +'use strict'; + +const fill = require('fill-range'); +const stringify = require('./stringify'); +const utils = require('./utils'); + +const append = (queue = '', stash = '', enclose = false) => { + const result = []; + + queue = [].concat(queue); + stash = [].concat(stash); + + if (!stash.length) return queue; + if (!queue.length) { + return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash; + } + + for (const item of queue) { + if (Array.isArray(item)) { + for (const value of item) { + result.push(append(value, stash, enclose)); + } + } else { + for (let ele of stash) { + if (enclose === true && typeof ele === 'string') ele = `{${ele}}`; + result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele); + } + } + } + return utils.flatten(result); +}; + +const expand = (ast, options = {}) => { + const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit; + + const walk = (node, parent = {}) => { + node.queue = []; + + let p = parent; + let q = parent.queue; + + while (p.type !== 'brace' && p.type !== 'root' && p.parent) { + p = p.parent; + q = p.queue; + } + + if (node.invalid || node.dollar) { + q.push(append(q.pop(), stringify(node, options))); + return; + } + + if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) { + q.push(append(q.pop(), ['{}'])); + return; + } + + if (node.nodes && node.ranges > 0) { + const args = utils.reduce(node.nodes); + + if (utils.exceedsLimit(...args, options.step, rangeLimit)) { + throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.'); + } + + let range = fill(...args, options); + if (range.length === 0) { + range = stringify(node, options); + } + + q.push(append(q.pop(), range)); + node.nodes = []; + return; + } + + const enclose = utils.encloseBrace(node); + let queue = node.queue; + let block = node; + + while (block.type !== 'brace' && block.type !== 'root' && block.parent) { + block = block.parent; + queue = block.queue; + } + + for (let i = 0; i < node.nodes.length; i++) { + const child = node.nodes[i]; + + if (child.type === 'comma' && node.type === 'brace') { + if (i === 1) queue.push(''); + queue.push(''); + continue; + } + + if (child.type === 'close') { + q.push(append(q.pop(), queue, enclose)); + continue; + } + + if (child.value && child.type !== 'open') { + queue.push(append(queue.pop(), child.value)); + continue; + } + + if (child.nodes) { + walk(child, node); + } + } + + return queue; + }; + + return utils.flatten(walk(ast)); +}; + +module.exports = expand; diff --git a/labWeb/lab7/node_modules/braces/lib/parse.js b/labWeb/lab7/node_modules/braces/lib/parse.js new file mode 100644 index 0000000..3a6988e --- /dev/null +++ b/labWeb/lab7/node_modules/braces/lib/parse.js @@ -0,0 +1,331 @@ +'use strict'; + +const stringify = require('./stringify'); + +/** + * Constants + */ + +const { + MAX_LENGTH, + CHAR_BACKSLASH, /* \ */ + CHAR_BACKTICK, /* ` */ + CHAR_COMMA, /* , */ + CHAR_DOT, /* . */ + CHAR_LEFT_PARENTHESES, /* ( */ + CHAR_RIGHT_PARENTHESES, /* ) */ + CHAR_LEFT_CURLY_BRACE, /* { */ + CHAR_RIGHT_CURLY_BRACE, /* } */ + CHAR_LEFT_SQUARE_BRACKET, /* [ */ + CHAR_RIGHT_SQUARE_BRACKET, /* ] */ + CHAR_DOUBLE_QUOTE, /* " */ + CHAR_SINGLE_QUOTE, /* ' */ + CHAR_NO_BREAK_SPACE, + CHAR_ZERO_WIDTH_NOBREAK_SPACE +} = require('./constants'); + +/** + * parse + */ + +const parse = (input, options = {}) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } + + const opts = options || {}; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + if (input.length > max) { + throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); + } + + const ast = { type: 'root', input, nodes: [] }; + const stack = [ast]; + let block = ast; + let prev = ast; + let brackets = 0; + const length = input.length; + let index = 0; + let depth = 0; + let value; + + /** + * Helpers + */ + + const advance = () => input[index++]; + const push = node => { + if (node.type === 'text' && prev.type === 'dot') { + prev.type = 'text'; + } + + if (prev && prev.type === 'text' && node.type === 'text') { + prev.value += node.value; + return; + } + + block.nodes.push(node); + node.parent = block; + node.prev = prev; + prev = node; + return node; + }; + + push({ type: 'bos' }); + + while (index < length) { + block = stack[stack.length - 1]; + value = advance(); + + /** + * Invalid chars + */ + + if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) { + continue; + } + + /** + * Escaped chars + */ + + if (value === CHAR_BACKSLASH) { + push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() }); + continue; + } + + /** + * Right square bracket (literal): ']' + */ + + if (value === CHAR_RIGHT_SQUARE_BRACKET) { + push({ type: 'text', value: '\\' + value }); + continue; + } + + /** + * Left square bracket: '[' + */ + + if (value === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + + let next; + + while (index < length && (next = advance())) { + value += next; + + if (next === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + continue; + } + + if (next === CHAR_BACKSLASH) { + value += advance(); + continue; + } + + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + brackets--; + + if (brackets === 0) { + break; + } + } + } + + push({ type: 'text', value }); + continue; + } + + /** + * Parentheses + */ + + if (value === CHAR_LEFT_PARENTHESES) { + block = push({ type: 'paren', nodes: [] }); + stack.push(block); + push({ type: 'text', value }); + continue; + } + + if (value === CHAR_RIGHT_PARENTHESES) { + if (block.type !== 'paren') { + push({ type: 'text', value }); + continue; + } + block = stack.pop(); + push({ type: 'text', value }); + block = stack[stack.length - 1]; + continue; + } + + /** + * Quotes: '|"|` + */ + + if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) { + const open = value; + let next; + + if (options.keepQuotes !== true) { + value = ''; + } + + while (index < length && (next = advance())) { + if (next === CHAR_BACKSLASH) { + value += next + advance(); + continue; + } + + if (next === open) { + if (options.keepQuotes === true) value += next; + break; + } + + value += next; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Left curly brace: '{' + */ + + if (value === CHAR_LEFT_CURLY_BRACE) { + depth++; + + const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true; + const brace = { + type: 'brace', + open: true, + close: false, + dollar, + depth, + commas: 0, + ranges: 0, + nodes: [] + }; + + block = push(brace); + stack.push(block); + push({ type: 'open', value }); + continue; + } + + /** + * Right curly brace: '}' + */ + + if (value === CHAR_RIGHT_CURLY_BRACE) { + if (block.type !== 'brace') { + push({ type: 'text', value }); + continue; + } + + const type = 'close'; + block = stack.pop(); + block.close = true; + + push({ type, value }); + depth--; + + block = stack[stack.length - 1]; + continue; + } + + /** + * Comma: ',' + */ + + if (value === CHAR_COMMA && depth > 0) { + if (block.ranges > 0) { + block.ranges = 0; + const open = block.nodes.shift(); + block.nodes = [open, { type: 'text', value: stringify(block) }]; + } + + push({ type: 'comma', value }); + block.commas++; + continue; + } + + /** + * Dot: '.' + */ + + if (value === CHAR_DOT && depth > 0 && block.commas === 0) { + const siblings = block.nodes; + + if (depth === 0 || siblings.length === 0) { + push({ type: 'text', value }); + continue; + } + + if (prev.type === 'dot') { + block.range = []; + prev.value += value; + prev.type = 'range'; + + if (block.nodes.length !== 3 && block.nodes.length !== 5) { + block.invalid = true; + block.ranges = 0; + prev.type = 'text'; + continue; + } + + block.ranges++; + block.args = []; + continue; + } + + if (prev.type === 'range') { + siblings.pop(); + + const before = siblings[siblings.length - 1]; + before.value += prev.value + value; + prev = before; + block.ranges--; + continue; + } + + push({ type: 'dot', value }); + continue; + } + + /** + * Text + */ + + push({ type: 'text', value }); + } + + // Mark imbalanced braces and brackets as invalid + do { + block = stack.pop(); + + if (block.type !== 'root') { + block.nodes.forEach(node => { + if (!node.nodes) { + if (node.type === 'open') node.isOpen = true; + if (node.type === 'close') node.isClose = true; + if (!node.nodes) node.type = 'text'; + node.invalid = true; + } + }); + + // get the location of the block on parent.nodes (block's siblings) + const parent = stack[stack.length - 1]; + const index = parent.nodes.indexOf(block); + // replace the (invalid) block with it's nodes + parent.nodes.splice(index, 1, ...block.nodes); + } + } while (stack.length > 0); + + push({ type: 'eos' }); + return ast; +}; + +module.exports = parse; diff --git a/labWeb/lab7/node_modules/braces/lib/stringify.js b/labWeb/lab7/node_modules/braces/lib/stringify.js new file mode 100644 index 0000000..8bcf872 --- /dev/null +++ b/labWeb/lab7/node_modules/braces/lib/stringify.js @@ -0,0 +1,32 @@ +'use strict'; + +const utils = require('./utils'); + +module.exports = (ast, options = {}) => { + const stringify = (node, parent = {}) => { + const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent); + const invalidNode = node.invalid === true && options.escapeInvalid === true; + let output = ''; + + if (node.value) { + if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) { + return '\\' + node.value; + } + return node.value; + } + + if (node.value) { + return node.value; + } + + if (node.nodes) { + for (const child of node.nodes) { + output += stringify(child); + } + } + return output; + }; + + return stringify(ast); +}; + diff --git a/labWeb/lab7/node_modules/braces/lib/utils.js b/labWeb/lab7/node_modules/braces/lib/utils.js new file mode 100644 index 0000000..d19311f --- /dev/null +++ b/labWeb/lab7/node_modules/braces/lib/utils.js @@ -0,0 +1,122 @@ +'use strict'; + +exports.isInteger = num => { + if (typeof num === 'number') { + return Number.isInteger(num); + } + if (typeof num === 'string' && num.trim() !== '') { + return Number.isInteger(Number(num)); + } + return false; +}; + +/** + * Find a node of the given type + */ + +exports.find = (node, type) => node.nodes.find(node => node.type === type); + +/** + * Find a node of the given type + */ + +exports.exceedsLimit = (min, max, step = 1, limit) => { + if (limit === false) return false; + if (!exports.isInteger(min) || !exports.isInteger(max)) return false; + return ((Number(max) - Number(min)) / Number(step)) >= limit; +}; + +/** + * Escape the given node with '\\' before node.value + */ + +exports.escapeNode = (block, n = 0, type) => { + const node = block.nodes[n]; + if (!node) return; + + if ((type && node.type === type) || node.type === 'open' || node.type === 'close') { + if (node.escaped !== true) { + node.value = '\\' + node.value; + node.escaped = true; + } + } +}; + +/** + * Returns true if the given brace node should be enclosed in literal braces + */ + +exports.encloseBrace = node => { + if (node.type !== 'brace') return false; + if ((node.commas >> 0 + node.ranges >> 0) === 0) { + node.invalid = true; + return true; + } + return false; +}; + +/** + * Returns true if a brace node is invalid. + */ + +exports.isInvalidBrace = block => { + if (block.type !== 'brace') return false; + if (block.invalid === true || block.dollar) return true; + if ((block.commas >> 0 + block.ranges >> 0) === 0) { + block.invalid = true; + return true; + } + if (block.open !== true || block.close !== true) { + block.invalid = true; + return true; + } + return false; +}; + +/** + * Returns true if a node is an open or close node + */ + +exports.isOpenOrClose = node => { + if (node.type === 'open' || node.type === 'close') { + return true; + } + return node.open === true || node.close === true; +}; + +/** + * Reduce an array of text nodes. + */ + +exports.reduce = nodes => nodes.reduce((acc, node) => { + if (node.type === 'text') acc.push(node.value); + if (node.type === 'range') node.type = 'text'; + return acc; +}, []); + +/** + * Flatten an array + */ + +exports.flatten = (...args) => { + const result = []; + + const flat = arr => { + for (let i = 0; i < arr.length; i++) { + const ele = arr[i]; + + if (Array.isArray(ele)) { + flat(ele); + continue; + } + + if (ele !== undefined) { + result.push(ele); + } + } + return result; + }; + + flat(args); + return result; +}; diff --git a/labWeb/lab7/node_modules/braces/package.json b/labWeb/lab7/node_modules/braces/package.json new file mode 100644 index 0000000..c3c056e --- /dev/null +++ b/labWeb/lab7/node_modules/braces/package.json @@ -0,0 +1,77 @@ +{ + "name": "braces", + "description": "Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.", + "version": "3.0.3", + "homepage": "https://github.com/micromatch/braces", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Brian Woodward (https://twitter.com/doowb)", + "Elan Shanker (https://github.com/es128)", + "Eugene Sharygin (https://github.com/eush77)", + "hemanth.hm (http://h3manth.com)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)" + ], + "repository": "micromatch/braces", + "bugs": { + "url": "https://github.com/micromatch/braces/issues" + }, + "license": "MIT", + "files": [ + "index.js", + "lib" + ], + "main": "index.js", + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "mocha", + "benchmark": "node benchmark" + }, + "dependencies": { + "fill-range": "^7.1.1" + }, + "devDependencies": { + "ansi-colors": "^3.2.4", + "bash-path": "^2.0.1", + "gulp-format-md": "^2.0.0", + "mocha": "^6.1.1" + }, + "keywords": [ + "alpha", + "alphabetical", + "bash", + "brace", + "braces", + "expand", + "expansion", + "filepath", + "fill", + "fs", + "glob", + "globbing", + "letter", + "match", + "matches", + "matching", + "number", + "numerical", + "path", + "range", + "ranges", + "sh" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "lint": { + "reflinks": true + }, + "plugins": [ + "gulp-format-md" + ] + } +} diff --git a/labWeb/lab7/node_modules/bytes/History.md b/labWeb/lab7/node_modules/bytes/History.md new file mode 100644 index 0000000..d60ce0e --- /dev/null +++ b/labWeb/lab7/node_modules/bytes/History.md @@ -0,0 +1,97 @@ +3.1.2 / 2022-01-27 +================== + + * Fix return value for un-parsable strings + +3.1.1 / 2021-11-15 +================== + + * Fix "thousandsSeparator" incorrecting formatting fractional part + +3.1.0 / 2019-01-22 +================== + + * Add petabyte (`pb`) support + +3.0.0 / 2017-08-31 +================== + + * Change "kB" to "KB" in format output + * Remove support for Node.js 0.6 + * Remove support for ComponentJS + +2.5.0 / 2017-03-24 +================== + + * Add option "unit" + +2.4.0 / 2016-06-01 +================== + + * Add option "unitSeparator" + +2.3.0 / 2016-02-15 +================== + + * Drop partial bytes on all parsed units + * Fix non-finite numbers to `.format` to return `null` + * Fix parsing byte string that looks like hex + * perf: hoist regular expressions + +2.2.0 / 2015-11-13 +================== + + * add option "decimalPlaces" + * add option "fixedDecimals" + +2.1.0 / 2015-05-21 +================== + + * add `.format` export + * add `.parse` export + +2.0.2 / 2015-05-20 +================== + + * remove map recreation + * remove unnecessary object construction + +2.0.1 / 2015-05-07 +================== + + * fix browserify require + * remove node.extend dependency + +2.0.0 / 2015-04-12 +================== + + * add option "case" + * add option "thousandsSeparator" + * return "null" on invalid parse input + * support proper round-trip: bytes(bytes(num)) === num + * units no longer case sensitive when parsing + +1.0.0 / 2014-05-05 +================== + + * add negative support. fixes #6 + +0.3.0 / 2014-03-19 +================== + + * added terabyte support + +0.2.1 / 2013-04-01 +================== + + * add .component + +0.2.0 / 2012-10-28 +================== + + * bytes(200).should.eql('200b') + +0.1.0 / 2012-07-04 +================== + + * add bytes to string conversion [yields] diff --git a/labWeb/lab7/node_modules/bytes/LICENSE b/labWeb/lab7/node_modules/bytes/LICENSE new file mode 100644 index 0000000..63e95a9 --- /dev/null +++ b/labWeb/lab7/node_modules/bytes/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2012-2014 TJ Holowaychuk +Copyright (c) 2015 Jed Watson + +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/labWeb/lab7/node_modules/bytes/Readme.md b/labWeb/lab7/node_modules/bytes/Readme.md new file mode 100644 index 0000000..5790e23 --- /dev/null +++ b/labWeb/lab7/node_modules/bytes/Readme.md @@ -0,0 +1,152 @@ +# Bytes utility + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Build Status][ci-image]][ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Utility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa. + +## Installation + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```bash +$ npm install bytes +``` + +## Usage + +```js +var bytes = require('bytes'); +``` + +#### bytes(number|string value, [options]): number|string|null + +Default export function. Delegates to either `bytes.format` or `bytes.parse` based on the type of `value`. + +**Arguments** + +| Name | Type | Description | +|---------|----------|--------------------| +| value | `number`|`string` | Number value to format or string value to parse | +| options | `Object` | Conversion options for `format` | + +**Returns** + +| Name | Type | Description | +|---------|------------------|-------------------------------------------------| +| results | `string`|`number`|`null` | Return null upon error. Numeric value in bytes, or string value otherwise. | + +**Example** + +```js +bytes(1024); +// output: '1KB' + +bytes('1KB'); +// output: 1024 +``` + +#### bytes.format(number value, [options]): string|null + +Format the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is + rounded. + +**Arguments** + +| Name | Type | Description | +|---------|----------|--------------------| +| value | `number` | Value in bytes | +| options | `Object` | Conversion options | + +**Options** + +| Property | Type | Description | +|-------------------|--------|-----------------------------------------------------------------------------------------| +| decimalPlaces | `number`|`null` | Maximum number of decimal places to include in output. Default value to `2`. | +| fixedDecimals | `boolean`|`null` | Whether to always display the maximum number of decimal places. Default value to `false` | +| thousandsSeparator | `string`|`null` | Example of values: `' '`, `','` and `'.'`... Default value to `''`. | +| unit | `string`|`null` | The unit in which the result will be returned (B/KB/MB/GB/TB). Default value to `''` (which means auto detect). | +| unitSeparator | `string`|`null` | Separator to use between number and unit. Default value to `''`. | + +**Returns** + +| Name | Type | Description | +|---------|------------------|-------------------------------------------------| +| results | `string`|`null` | Return null upon error. String value otherwise. | + +**Example** + +```js +bytes.format(1024); +// output: '1KB' + +bytes.format(1000); +// output: '1000B' + +bytes.format(1000, {thousandsSeparator: ' '}); +// output: '1 000B' + +bytes.format(1024 * 1.7, {decimalPlaces: 0}); +// output: '2KB' + +bytes.format(1024, {unitSeparator: ' '}); +// output: '1 KB' +``` + +#### bytes.parse(string|number value): number|null + +Parse the string value into an integer in bytes. If no unit is given, or `value` +is a number, it is assumed the value is in bytes. + +Supported units and abbreviations are as follows and are case-insensitive: + + * `b` for bytes + * `kb` for kilobytes + * `mb` for megabytes + * `gb` for gigabytes + * `tb` for terabytes + * `pb` for petabytes + +The units are in powers of two, not ten. This means 1kb = 1024b according to this parser. + +**Arguments** + +| Name | Type | Description | +|---------------|--------|--------------------| +| value | `string`|`number` | String to parse, or number in bytes. | + +**Returns** + +| Name | Type | Description | +|---------|-------------|-------------------------| +| results | `number`|`null` | Return null upon error. Value in bytes otherwise. | + +**Example** + +```js +bytes.parse('1KB'); +// output: 1024 + +bytes.parse('1024'); +// output: 1024 + +bytes.parse(1024); +// output: 1024 +``` + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/visionmedia/bytes.js/master?label=ci +[ci-url]: https://github.com/visionmedia/bytes.js/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/visionmedia/bytes.js/master +[coveralls-url]: https://coveralls.io/r/visionmedia/bytes.js?branch=master +[downloads-image]: https://badgen.net/npm/dm/bytes +[downloads-url]: https://npmjs.org/package/bytes +[npm-image]: https://badgen.net/npm/v/bytes +[npm-url]: https://npmjs.org/package/bytes diff --git a/labWeb/lab7/node_modules/bytes/index.js b/labWeb/lab7/node_modules/bytes/index.js new file mode 100644 index 0000000..6f2d0f8 --- /dev/null +++ b/labWeb/lab7/node_modules/bytes/index.js @@ -0,0 +1,170 @@ +/*! + * bytes + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015 Jed Watson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +module.exports = bytes; +module.exports.format = format; +module.exports.parse = parse; + +/** + * Module variables. + * @private + */ + +var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g; + +var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/; + +var map = { + b: 1, + kb: 1 << 10, + mb: 1 << 20, + gb: 1 << 30, + tb: Math.pow(1024, 4), + pb: Math.pow(1024, 5), +}; + +var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i; + +/** + * Convert the given value in bytes into a string or parse to string to an integer in bytes. + * + * @param {string|number} value + * @param {{ + * case: [string], + * decimalPlaces: [number] + * fixedDecimals: [boolean] + * thousandsSeparator: [string] + * unitSeparator: [string] + * }} [options] bytes options. + * + * @returns {string|number|null} + */ + +function bytes(value, options) { + if (typeof value === 'string') { + return parse(value); + } + + if (typeof value === 'number') { + return format(value, options); + } + + return null; +} + +/** + * Format the given value in bytes into a string. + * + * If the value is negative, it is kept as such. If it is a float, + * it is rounded. + * + * @param {number} value + * @param {object} [options] + * @param {number} [options.decimalPlaces=2] + * @param {number} [options.fixedDecimals=false] + * @param {string} [options.thousandsSeparator=] + * @param {string} [options.unit=] + * @param {string} [options.unitSeparator=] + * + * @returns {string|null} + * @public + */ + +function format(value, options) { + if (!Number.isFinite(value)) { + return null; + } + + var mag = Math.abs(value); + var thousandsSeparator = (options && options.thousandsSeparator) || ''; + var unitSeparator = (options && options.unitSeparator) || ''; + var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2; + var fixedDecimals = Boolean(options && options.fixedDecimals); + var unit = (options && options.unit) || ''; + + if (!unit || !map[unit.toLowerCase()]) { + if (mag >= map.pb) { + unit = 'PB'; + } else if (mag >= map.tb) { + unit = 'TB'; + } else if (mag >= map.gb) { + unit = 'GB'; + } else if (mag >= map.mb) { + unit = 'MB'; + } else if (mag >= map.kb) { + unit = 'KB'; + } else { + unit = 'B'; + } + } + + var val = value / map[unit.toLowerCase()]; + var str = val.toFixed(decimalPlaces); + + if (!fixedDecimals) { + str = str.replace(formatDecimalsRegExp, '$1'); + } + + if (thousandsSeparator) { + str = str.split('.').map(function (s, i) { + return i === 0 + ? s.replace(formatThousandsRegExp, thousandsSeparator) + : s + }).join('.'); + } + + return str + unitSeparator + unit; +} + +/** + * Parse the string value into an integer in bytes. + * + * If no unit is given, it is assumed the value is in bytes. + * + * @param {number|string} val + * + * @returns {number|null} + * @public + */ + +function parse(val) { + if (typeof val === 'number' && !isNaN(val)) { + return val; + } + + if (typeof val !== 'string') { + return null; + } + + // Test if the string passed is valid + var results = parseRegExp.exec(val); + var floatValue; + var unit = 'b'; + + if (!results) { + // Nothing could be extracted from the given string + floatValue = parseInt(val, 10); + unit = 'b' + } else { + // Retrieve the value and the unit + floatValue = parseFloat(results[1]); + unit = results[4].toLowerCase(); + } + + if (isNaN(floatValue)) { + return null; + } + + return Math.floor(map[unit] * floatValue); +} diff --git a/labWeb/lab7/node_modules/bytes/package.json b/labWeb/lab7/node_modules/bytes/package.json new file mode 100644 index 0000000..f2b6a8b --- /dev/null +++ b/labWeb/lab7/node_modules/bytes/package.json @@ -0,0 +1,42 @@ +{ + "name": "bytes", + "description": "Utility to parse a string bytes to bytes and vice-versa", + "version": "3.1.2", + "author": "TJ Holowaychuk (http://tjholowaychuk.com)", + "contributors": [ + "Jed Watson ", + "Théo FIDRY " + ], + "license": "MIT", + "keywords": [ + "byte", + "bytes", + "utility", + "parse", + "parser", + "convert", + "converter" + ], + "repository": "visionmedia/bytes.js", + "devDependencies": { + "eslint": "7.32.0", + "eslint-plugin-markdown": "2.2.1", + "mocha": "9.2.0", + "nyc": "15.1.0" + }, + "files": [ + "History.md", + "LICENSE", + "Readme.md", + "index.js" + ], + "engines": { + "node": ">= 0.8" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --check-leaks --reporter spec", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + } +} diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/.eslintrc b/labWeb/lab7/node_modules/call-bind-apply-helpers/.eslintrc new file mode 100644 index 0000000..201e859 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/.eslintrc @@ -0,0 +1,17 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "func-name-matching": 0, + "id-length": 0, + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + "no-extra-parens": 0, + "no-magic-numbers": 0, + }, +} diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/.github/FUNDING.yml b/labWeb/lab7/node_modules/call-bind-apply-helpers/.github/FUNDING.yml new file mode 100644 index 0000000..0011e9d --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/.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/call-bind-apply-helpers +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/labWeb/lab7/node_modules/call-bind-apply-helpers/.nycrc b/labWeb/lab7/node_modules/call-bind-apply-helpers/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/CHANGELOG.md b/labWeb/lab7/node_modules/call-bind-apply-helpers/CHANGELOG.md new file mode 100644 index 0000000..2484942 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/CHANGELOG.md @@ -0,0 +1,30 @@ +# 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/ljharb/call-bind-apply-helpers/compare/v1.0.1...v1.0.2) - 2025-02-12 + +### Commits + +- [types] improve inferred types [`e6f9586`](https://github.com/ljharb/call-bind-apply-helpers/commit/e6f95860a3c72879cb861a858cdfb8138fbedec1) +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `@types/tape`, `es-value-fixtures`, `for-each`, `has-strict-mode`, `object-inspect` [`e43d540`](https://github.com/ljharb/call-bind-apply-helpers/commit/e43d5409f97543bfbb11f345d47d8ce4e066d8c1) + +## [v1.0.1](https://github.com/ljharb/call-bind-apply-helpers/compare/v1.0.0...v1.0.1) - 2024-12-08 + +### Commits + +- [types] `reflectApply`: fix types [`4efc396`](https://github.com/ljharb/call-bind-apply-helpers/commit/4efc3965351a4f02cc55e836fa391d3d11ef2ef8) +- [Fix] `reflectApply`: oops, Reflect is not a function [`83cc739`](https://github.com/ljharb/call-bind-apply-helpers/commit/83cc7395de6b79b7730bdf092f1436f0b1263c75) +- [Dev Deps] update `@arethetypeswrong/cli` [`80bd5d3`](https://github.com/ljharb/call-bind-apply-helpers/commit/80bd5d3ae58b4f6b6995ce439dd5a1bcb178a940) + +## v1.0.0 - 2024-12-05 + +### Commits + +- Initial implementation, tests, readme [`7879629`](https://github.com/ljharb/call-bind-apply-helpers/commit/78796290f9b7430c9934d6f33d94ae9bc89fce04) +- Initial commit [`3f1dc16`](https://github.com/ljharb/call-bind-apply-helpers/commit/3f1dc164afc43285631b114a5f9dd9137b2b952f) +- npm init [`081df04`](https://github.com/ljharb/call-bind-apply-helpers/commit/081df048c312fcee400922026f6e97281200a603) +- Only apps should have lockfiles [`5b9ca0f`](https://github.com/ljharb/call-bind-apply-helpers/commit/5b9ca0fe8101ebfaf309c549caac4e0a017ed930) diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/LICENSE b/labWeb/lab7/node_modules/call-bind-apply-helpers/LICENSE new file mode 100644 index 0000000..f82f389 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 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/labWeb/lab7/node_modules/call-bind-apply-helpers/README.md b/labWeb/lab7/node_modules/call-bind-apply-helpers/README.md new file mode 100644 index 0000000..8fc0dae --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/README.md @@ -0,0 +1,62 @@ +# call-bind-apply-helpers [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Helper functions around Function call/apply/bind, for use in `call-bind`. + +The only packages that should likely ever use this package directly are `call-bind` and `get-intrinsic`. +Please use `call-bind` unless you have a very good reason not to. + +## Getting started + +```sh +npm install --save call-bind-apply-helpers +``` + +## Usage/Examples + +```js +const assert = require('assert'); +const callBindBasic = require('call-bind-apply-helpers'); + +function f(a, b) { + assert.equal(this, 1); + assert.equal(a, 2); + assert.equal(b, 3); + assert.equal(arguments.length, 2); +} + +const fBound = callBindBasic([f, 1]); + +delete Function.prototype.call; +delete Function.prototype.bind; + +fBound(2, 3); +``` + +## Tests + +Clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/call-bind-apply-helpers +[npm-version-svg]: https://versionbadg.es/ljharb/call-bind-apply-helpers.svg +[deps-svg]: https://david-dm.org/ljharb/call-bind-apply-helpers.svg +[deps-url]: https://david-dm.org/ljharb/call-bind-apply-helpers +[dev-deps-svg]: https://david-dm.org/ljharb/call-bind-apply-helpers/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/call-bind-apply-helpers#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/call-bind-apply-helpers.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/call-bind-apply-helpers.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/call-bind-apply-helpers.svg +[downloads-url]: https://npm-stat.com/charts.html?package=call-bind-apply-helpers +[codecov-image]: https://codecov.io/gh/ljharb/call-bind-apply-helpers/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/call-bind-apply-helpers/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/call-bind-apply-helpers +[actions-url]: https://github.com/ljharb/call-bind-apply-helpers/actions diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/actualApply.d.ts b/labWeb/lab7/node_modules/call-bind-apply-helpers/actualApply.d.ts new file mode 100644 index 0000000..b87286a --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/actualApply.d.ts @@ -0,0 +1 @@ +export = Reflect.apply; \ No newline at end of file diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/actualApply.js b/labWeb/lab7/node_modules/call-bind-apply-helpers/actualApply.js new file mode 100644 index 0000000..ffa5135 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/actualApply.js @@ -0,0 +1,10 @@ +'use strict'; + +var bind = require('function-bind'); + +var $apply = require('./functionApply'); +var $call = require('./functionCall'); +var $reflectApply = require('./reflectApply'); + +/** @type {import('./actualApply')} */ +module.exports = $reflectApply || bind.call($call, $apply); diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/applyBind.d.ts b/labWeb/lab7/node_modules/call-bind-apply-helpers/applyBind.d.ts new file mode 100644 index 0000000..d176c1a --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/applyBind.d.ts @@ -0,0 +1,19 @@ +import actualApply from './actualApply'; + +type TupleSplitHead = T['length'] extends N + ? T + : T extends [...infer R, any] + ? TupleSplitHead + : never + +type TupleSplitTail = O['length'] extends N + ? T + : T extends [infer F, ...infer R] + ? TupleSplitTail<[...R], N, [...O, F]> + : never + +type TupleSplit = [TupleSplitHead, TupleSplitTail] + +declare function applyBind(...args: TupleSplit, 2>[1]): ReturnType; + +export = applyBind; \ No newline at end of file diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/applyBind.js b/labWeb/lab7/node_modules/call-bind-apply-helpers/applyBind.js new file mode 100644 index 0000000..d2b7723 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/applyBind.js @@ -0,0 +1,10 @@ +'use strict'; + +var bind = require('function-bind'); +var $apply = require('./functionApply'); +var actualApply = require('./actualApply'); + +/** @type {import('./applyBind')} */ +module.exports = function applyBind() { + return actualApply(bind, $apply, arguments); +}; diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/functionApply.d.ts b/labWeb/lab7/node_modules/call-bind-apply-helpers/functionApply.d.ts new file mode 100644 index 0000000..1f6e11b --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/functionApply.d.ts @@ -0,0 +1 @@ +export = Function.prototype.apply; \ No newline at end of file diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/functionApply.js b/labWeb/lab7/node_modules/call-bind-apply-helpers/functionApply.js new file mode 100644 index 0000000..c71df9c --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/functionApply.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./functionApply')} */ +module.exports = Function.prototype.apply; diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/functionCall.d.ts b/labWeb/lab7/node_modules/call-bind-apply-helpers/functionCall.d.ts new file mode 100644 index 0000000..15e93df --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/functionCall.d.ts @@ -0,0 +1 @@ +export = Function.prototype.call; \ No newline at end of file diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/functionCall.js b/labWeb/lab7/node_modules/call-bind-apply-helpers/functionCall.js new file mode 100644 index 0000000..7a8d873 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/functionCall.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./functionCall')} */ +module.exports = Function.prototype.call; diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/index.d.ts b/labWeb/lab7/node_modules/call-bind-apply-helpers/index.d.ts new file mode 100644 index 0000000..541516b --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/index.d.ts @@ -0,0 +1,64 @@ +type RemoveFromTuple< + Tuple extends readonly unknown[], + RemoveCount extends number, + Index extends 1[] = [] +> = Index["length"] extends RemoveCount + ? Tuple + : Tuple extends [infer First, ...infer Rest] + ? RemoveFromTuple + : Tuple; + +type ConcatTuples< + Prefix extends readonly unknown[], + Suffix extends readonly unknown[] +> = [...Prefix, ...Suffix]; + +type ExtractFunctionParams = T extends (this: infer TThis, ...args: infer P extends readonly unknown[]) => infer R + ? { thisArg: TThis; params: P; returnType: R } + : never; + +type BindFunction< + T extends (this: any, ...args: any[]) => any, + TThis, + TBoundArgs extends readonly unknown[], + ReceiverBound extends boolean +> = ExtractFunctionParams extends { + thisArg: infer OrigThis; + params: infer P extends readonly unknown[]; + returnType: infer R; +} + ? ReceiverBound extends true + ? (...args: RemoveFromTuple>) => R extends [OrigThis, ...infer Rest] + ? [TThis, ...Rest] // Replace `this` with `thisArg` + : R + : >>( + thisArg: U, + ...args: RemainingArgs + ) => R extends [OrigThis, ...infer Rest] + ? [U, ...ConcatTuples] // Preserve bound args in return type + : R + : never; + +declare function callBind< + const T extends (this: any, ...args: any[]) => any, + Extracted extends ExtractFunctionParams, + const TBoundArgs extends Partial & readonly unknown[], + const TThis extends Extracted["thisArg"] +>( + args: [fn: T, thisArg: TThis, ...boundArgs: TBoundArgs] +): BindFunction; + +declare function callBind< + const T extends (this: any, ...args: any[]) => any, + Extracted extends ExtractFunctionParams, + const TBoundArgs extends Partial & readonly unknown[] +>( + args: [fn: T, ...boundArgs: TBoundArgs] +): BindFunction; + +declare function callBind( + args: [fn: Exclude, ...rest: TArgs] +): never; + +// export as namespace callBind; +export = callBind; diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/index.js b/labWeb/lab7/node_modules/call-bind-apply-helpers/index.js new file mode 100644 index 0000000..2f6dab4 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/index.js @@ -0,0 +1,15 @@ +'use strict'; + +var bind = require('function-bind'); +var $TypeError = require('es-errors/type'); + +var $call = require('./functionCall'); +var $actualApply = require('./actualApply'); + +/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */ +module.exports = function callBindBasic(args) { + if (args.length < 1 || typeof args[0] !== 'function') { + throw new $TypeError('a function is required'); + } + return $actualApply(bind, $call, args); +}; diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/package.json b/labWeb/lab7/node_modules/call-bind-apply-helpers/package.json new file mode 100644 index 0000000..923b8be --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/package.json @@ -0,0 +1,85 @@ +{ + "name": "call-bind-apply-helpers", + "version": "1.0.2", + "description": "Helper functions around Function call/apply/bind, for use in `call-bind`", + "main": "index.js", + "exports": { + ".": "./index.js", + "./actualApply": "./actualApply.js", + "./applyBind": "./applyBind.js", + "./functionApply": "./functionApply.js", + "./functionCall": "./functionCall.js", + "./reflectApply": "./reflectApply.js", + "./package.json": "./package.json" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=auto", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=.js,.mjs .", + "postlint": "tsc -p . && attw -P", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/call-bind-apply-helpers.git" + }, + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/call-bind-apply-helpers/issues" + }, + "homepage": "https://github.com/ljharb/call-bind-apply-helpers#readme", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.3", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/for-each": "^0.3.3", + "@types/function-bind": "^1.1.10", + "@types/object-inspect": "^1.13.0", + "@types/tape": "^5.8.1", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "es-value-fixtures": "^1.7.1", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.5", + "has-strict-mode": "^1.1.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.4", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/reflectApply.d.ts b/labWeb/lab7/node_modules/call-bind-apply-helpers/reflectApply.d.ts new file mode 100644 index 0000000..6b2ae76 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/reflectApply.d.ts @@ -0,0 +1,3 @@ +declare const reflectApply: false | typeof Reflect.apply; + +export = reflectApply; diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/reflectApply.js b/labWeb/lab7/node_modules/call-bind-apply-helpers/reflectApply.js new file mode 100644 index 0000000..3d03caa --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/reflectApply.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./reflectApply')} */ +module.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply; diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/test/index.js b/labWeb/lab7/node_modules/call-bind-apply-helpers/test/index.js new file mode 100644 index 0000000..1cdc89e --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/test/index.js @@ -0,0 +1,63 @@ +'use strict'; + +var callBind = require('../'); +var hasStrictMode = require('has-strict-mode')(); +var forEach = require('for-each'); +var inspect = require('object-inspect'); +var v = require('es-value-fixtures'); + +var test = require('tape'); + +test('callBindBasic', function (t) { + forEach(v.nonFunctions, function (nonFunction) { + t['throws']( + // @ts-expect-error + function () { callBind([nonFunction]); }, + TypeError, + inspect(nonFunction) + ' is not a function' + ); + }); + + var sentinel = { sentinel: true }; + /** @type {(this: T, a: A, b: B) => [T | undefined, A, B]} */ + var func = function (a, b) { + // eslint-disable-next-line no-invalid-this + return [!hasStrictMode && this === global ? undefined : this, a, b]; + }; + t.equal(func.length, 2, 'original function length is 2'); + + /** type {(thisArg: unknown, a: number, b: number) => [unknown, number, number]} */ + var bound = callBind([func]); + /** type {((a: number, b: number) => [typeof sentinel, typeof a, typeof b])} */ + var boundR = callBind([func, sentinel]); + /** type {((b: number) => [typeof sentinel, number, typeof b])} */ + var boundArg = callBind([func, sentinel, /** @type {const} */ (1)]); + + // @ts-expect-error + t.deepEqual(bound(), [undefined, undefined, undefined], 'bound func with no args'); + + // @ts-expect-error + t.deepEqual(func(), [undefined, undefined, undefined], 'unbound func with too few args'); + // @ts-expect-error + t.deepEqual(bound(1, 2), [hasStrictMode ? 1 : Object(1), 2, undefined], 'bound func too few args'); + // @ts-expect-error + t.deepEqual(boundR(), [sentinel, undefined, undefined], 'bound func with receiver, with too few args'); + // @ts-expect-error + t.deepEqual(boundArg(), [sentinel, 1, undefined], 'bound func with receiver and arg, with too few args'); + + t.deepEqual(func(1, 2), [undefined, 1, 2], 'unbound func with right args'); + t.deepEqual(bound(1, 2, 3), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with right args'); + t.deepEqual(boundR(1, 2), [sentinel, 1, 2], 'bound func with receiver, with right args'); + t.deepEqual(boundArg(2), [sentinel, 1, 2], 'bound func with receiver and arg, with right arg'); + + // @ts-expect-error + t.deepEqual(func(1, 2, 3), [undefined, 1, 2], 'unbound func with too many args'); + // @ts-expect-error + t.deepEqual(bound(1, 2, 3, 4), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with too many args'); + // @ts-expect-error + t.deepEqual(boundR(1, 2, 3), [sentinel, 1, 2], 'bound func with receiver, with too many args'); + // @ts-expect-error + t.deepEqual(boundArg(2, 3), [sentinel, 1, 2], 'bound func with receiver and arg, with too many args'); + + t.end(); +}); diff --git a/labWeb/lab7/node_modules/call-bind-apply-helpers/tsconfig.json b/labWeb/lab7/node_modules/call-bind-apply-helpers/tsconfig.json new file mode 100644 index 0000000..aef9993 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bind-apply-helpers/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2021", + }, + "exclude": [ + "coverage", + ], +} \ No newline at end of file diff --git a/labWeb/lab7/node_modules/call-bound/.eslintrc b/labWeb/lab7/node_modules/call-bound/.eslintrc new file mode 100644 index 0000000..2612ed8 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bound/.eslintrc @@ -0,0 +1,13 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + }, +} diff --git a/labWeb/lab7/node_modules/call-bound/.github/FUNDING.yml b/labWeb/lab7/node_modules/call-bound/.github/FUNDING.yml new file mode 100644 index 0000000..2a2a135 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bound/.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/call-bound +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/labWeb/lab7/node_modules/call-bound/.nycrc b/labWeb/lab7/node_modules/call-bound/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/labWeb/lab7/node_modules/call-bound/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/labWeb/lab7/node_modules/call-bound/CHANGELOG.md b/labWeb/lab7/node_modules/call-bound/CHANGELOG.md new file mode 100644 index 0000000..8bde4e9 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bound/CHANGELOG.md @@ -0,0 +1,42 @@ +# 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.4](https://github.com/ljharb/call-bound/compare/v1.0.3...v1.0.4) - 2025-03-03 + +### Commits + +- [types] improve types [`e648922`](https://github.com/ljharb/call-bound/commit/e6489222a9e54f350fbf952ceabe51fd8b6027ff) +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `@types/tape`, `es-value-fixtures`, `for-each`, `has-strict-mode`, `object-inspect` [`a42a5eb`](https://github.com/ljharb/call-bound/commit/a42a5ebe6c1b54fcdc7997c7dc64fdca9e936719) +- [Deps] update `call-bind-apply-helpers`, `get-intrinsic` [`f529eac`](https://github.com/ljharb/call-bound/commit/f529eac132404c17156bbc23ab2297a25d0f20b8) + +## [v1.0.3](https://github.com/ljharb/call-bound/compare/v1.0.2...v1.0.3) - 2024-12-15 + +### Commits + +- [Refactor] use `call-bind-apply-helpers` instead of `call-bind` [`5e0b134`](https://github.com/ljharb/call-bound/commit/5e0b13496df14fb7d05dae9412f088da8d3f75be) +- [Deps] update `get-intrinsic` [`41fc967`](https://github.com/ljharb/call-bound/commit/41fc96732a22c7b7e8f381f93ccc54bb6293be2e) +- [readme] fix example [`79a0137`](https://github.com/ljharb/call-bound/commit/79a0137723f7c6d09c9c05452bbf8d5efb5d6e49) +- [meta] add `sideEffects` flag [`08b07be`](https://github.com/ljharb/call-bound/commit/08b07be7f1c03f67dc6f3cdaf0906259771859f7) + +## [v1.0.2](https://github.com/ljharb/call-bound/compare/v1.0.1...v1.0.2) - 2024-12-10 + +### Commits + +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `gopd` [`e6a5ffe`](https://github.com/ljharb/call-bound/commit/e6a5ffe849368fe4f74dfd6cdeca1b9baa39e8d5) +- [Deps] update `call-bind`, `get-intrinsic` [`2aeb5b5`](https://github.com/ljharb/call-bound/commit/2aeb5b521dc2b2683d1345c753ea1161de2d1c14) +- [types] improve return type [`1a0c9fe`](https://github.com/ljharb/call-bound/commit/1a0c9fe3114471e7ca1f57d104e2efe713bb4871) + +## v1.0.1 - 2024-12-05 + +### Commits + +- Initial implementation, tests, readme, types [`6d94121`](https://github.com/ljharb/call-bound/commit/6d94121a9243602e506334069f7a03189fe3363d) +- Initial commit [`0eae867`](https://github.com/ljharb/call-bound/commit/0eae867334ea025c33e6e91cdecfc9df96680cf9) +- npm init [`71b2479`](https://github.com/ljharb/call-bound/commit/71b2479c6723e0b7d91a6b663613067e98b7b275) +- Only apps should have lockfiles [`c3754a9`](https://github.com/ljharb/call-bound/commit/c3754a949b7f9132b47e2d18c1729889736741eb) +- [actions] skip `npm ls` in node < 10 [`74275a5`](https://github.com/ljharb/call-bound/commit/74275a5186b8caf6309b6b97472bdcb0df4683a8) +- [Dev Deps] add missing peer dep [`1354de8`](https://github.com/ljharb/call-bound/commit/1354de8679413e4ae9c523d85f76fa7a5e032d97) diff --git a/labWeb/lab7/node_modules/call-bound/LICENSE b/labWeb/lab7/node_modules/call-bound/LICENSE new file mode 100644 index 0000000..f82f389 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bound/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 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/labWeb/lab7/node_modules/call-bound/README.md b/labWeb/lab7/node_modules/call-bound/README.md new file mode 100644 index 0000000..a44e43e --- /dev/null +++ b/labWeb/lab7/node_modules/call-bound/README.md @@ -0,0 +1,53 @@ +# call-bound [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Robust call-bound JavaScript intrinsics, using `call-bind` and `get-intrinsic`. + +## Getting started + +```sh +npm install --save call-bound +``` + +## Usage/Examples + +```js +const assert = require('assert'); +const callBound = require('call-bound'); + +const slice = callBound('Array.prototype.slice'); + +delete Function.prototype.call; +delete Function.prototype.bind; +delete Array.prototype.slice; + +assert.deepEqual(slice([1, 2, 3, 4], 1, -1), [2, 3]); +``` + +## Tests + +Clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/call-bound +[npm-version-svg]: https://versionbadg.es/ljharb/call-bound.svg +[deps-svg]: https://david-dm.org/ljharb/call-bound.svg +[deps-url]: https://david-dm.org/ljharb/call-bound +[dev-deps-svg]: https://david-dm.org/ljharb/call-bound/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/call-bound#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/call-bound.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/call-bound.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/call-bound.svg +[downloads-url]: https://npm-stat.com/charts.html?package=call-bound +[codecov-image]: https://codecov.io/gh/ljharb/call-bound/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/call-bound/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/call-bound +[actions-url]: https://github.com/ljharb/call-bound/actions diff --git a/labWeb/lab7/node_modules/call-bound/index.d.ts b/labWeb/lab7/node_modules/call-bound/index.d.ts new file mode 100644 index 0000000..5562f00 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bound/index.d.ts @@ -0,0 +1,94 @@ +type Intrinsic = typeof globalThis; + +type IntrinsicName = keyof Intrinsic | `%${keyof Intrinsic}%`; + +type IntrinsicPath = IntrinsicName | `${StripPercents}.${string}` | `%${StripPercents}.${string}%`; + +type AllowMissing = boolean; + +type StripPercents = T extends `%${infer U}%` ? U : T; + +type BindMethodPrecise = + F extends (this: infer This, ...args: infer Args) => infer R + ? (obj: This, ...args: Args) => R + : F extends { + (this: infer This1, ...args: infer Args1): infer R1; + (this: infer This2, ...args: infer Args2): infer R2 + } + ? { + (obj: This1, ...args: Args1): R1; + (obj: This2, ...args: Args2): R2 + } + : never + +// Extract method type from a prototype +type GetPrototypeMethod = + (typeof globalThis)[T] extends { prototype: any } + ? M extends keyof (typeof globalThis)[T]['prototype'] + ? (typeof globalThis)[T]['prototype'][M] + : never + : never + +// Get static property/method +type GetStaticMember = + P extends keyof (typeof globalThis)[T] ? (typeof globalThis)[T][P] : never + +// Type that maps string path to actual bound function or value with better precision +type BoundIntrinsic = + S extends `${infer Obj}.prototype.${infer Method}` + ? Obj extends keyof typeof globalThis + ? BindMethodPrecise> + : unknown + : S extends `${infer Obj}.${infer Prop}` + ? Obj extends keyof typeof globalThis + ? GetStaticMember + : unknown + : unknown + +declare function arraySlice(array: readonly T[], start?: number, end?: number): T[]; +declare function arraySlice(array: ArrayLike, start?: number, end?: number): T[]; +declare function arraySlice(array: IArguments, start?: number, end?: number): T[]; + +// Special cases for methods that need explicit typing +interface SpecialCases { + '%Object.prototype.isPrototypeOf%': (thisArg: {}, obj: unknown) => boolean; + '%String.prototype.replace%': { + (str: string, searchValue: string | RegExp, replaceValue: string): string; + (str: string, searchValue: string | RegExp, replacer: (substring: string, ...args: any[]) => string): string + }; + '%Object.prototype.toString%': (obj: {}) => string; + '%Object.prototype.hasOwnProperty%': (obj: {}, v: PropertyKey) => boolean; + '%Array.prototype.slice%': typeof arraySlice; + '%Array.prototype.map%': (array: readonly T[], callbackfn: (value: T, index: number, array: readonly T[]) => U, thisArg?: any) => U[]; + '%Array.prototype.filter%': (array: readonly T[], predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any) => T[]; + '%Array.prototype.indexOf%': (array: readonly T[], searchElement: T, fromIndex?: number) => number; + '%Function.prototype.apply%': (fn: (...args: A) => R, thisArg: any, args: A) => R; + '%Function.prototype.call%': (fn: (...args: A) => R, thisArg: any, ...args: A) => R; + '%Function.prototype.bind%': (fn: (...args: A) => R, thisArg: any, ...args: A) => (...remainingArgs: A) => R; + '%Promise.prototype.then%': { + (promise: Promise, onfulfilled: (value: T) => R | PromiseLike): Promise; + (promise: Promise, onfulfilled: ((value: T) => R | PromiseLike) | undefined | null, onrejected: (reason: any) => R | PromiseLike): Promise; + }; + '%RegExp.prototype.test%': (regexp: RegExp, str: string) => boolean; + '%RegExp.prototype.exec%': (regexp: RegExp, str: string) => RegExpExecArray | null; + '%Error.prototype.toString%': (error: Error) => string; + '%TypeError.prototype.toString%': (error: TypeError) => string; + '%String.prototype.split%': ( + obj: unknown, + splitter: string | RegExp | { + [Symbol.split](string: string, limit?: number): string[]; + }, + limit?: number | undefined + ) => string[]; +} + +/** + * Returns a bound function for a prototype method, or a value for a static property. + * + * @param name - The name of the intrinsic (e.g. 'Array.prototype.slice') + * @param {AllowMissing} [allowMissing] - Whether to allow missing intrinsics (default: false) + */ +declare function callBound, S extends IntrinsicPath>(name: K, allowMissing?: AllowMissing): SpecialCases[`%${StripPercents}%`]; +declare function callBound, S extends IntrinsicPath>(name: S, allowMissing?: AllowMissing): BoundIntrinsic; + +export = callBound; diff --git a/labWeb/lab7/node_modules/call-bound/index.js b/labWeb/lab7/node_modules/call-bound/index.js new file mode 100644 index 0000000..e9ade74 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bound/index.js @@ -0,0 +1,19 @@ +'use strict'; + +var GetIntrinsic = require('get-intrinsic'); + +var callBindBasic = require('call-bind-apply-helpers'); + +/** @type {(thisArg: string, searchString: string, position?: number) => number} */ +var $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]); + +/** @type {import('.')} */ +module.exports = function callBoundIntrinsic(name, allowMissing) { + /* eslint no-extra-parens: 0 */ + + var intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing)); + if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { + return callBindBasic(/** @type {const} */ ([intrinsic])); + } + return intrinsic; +}; diff --git a/labWeb/lab7/node_modules/call-bound/package.json b/labWeb/lab7/node_modules/call-bound/package.json new file mode 100644 index 0000000..d542db4 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bound/package.json @@ -0,0 +1,99 @@ +{ + "name": "call-bound", + "version": "1.0.4", + "description": "Robust call-bound JavaScript intrinsics, using `call-bind` and `get-intrinsic`.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=auto", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=.js,.mjs .", + "postlint": "tsc -p . && attw -P", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/call-bound.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "es", + "js", + "callbind", + "callbound", + "call", + "bind", + "bound", + "call-bind", + "call-bound", + "function", + "es-abstract" + ], + "author": "Jordan Harband ", + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/call-bound/issues" + }, + "homepage": "https://github.com/ljharb/call-bound#readme", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.4", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.3.0", + "@types/call-bind": "^1.0.5", + "@types/get-intrinsic": "^1.2.3", + "@types/tape": "^5.8.1", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "es-value-fixtures": "^1.7.1", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "has-strict-mode": "^1.1.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.4", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/labWeb/lab7/node_modules/call-bound/test/index.js b/labWeb/lab7/node_modules/call-bound/test/index.js new file mode 100644 index 0000000..a2fc9f0 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bound/test/index.js @@ -0,0 +1,61 @@ +'use strict'; + +var test = require('tape'); + +var callBound = require('../'); + +/** @template {true} T @template U @typedef {T extends U ? T : never} AssertType */ + +test('callBound', function (t) { + // static primitive + t.equal(callBound('Array.length'), Array.length, 'Array.length yields itself'); + t.equal(callBound('%Array.length%'), Array.length, '%Array.length% yields itself'); + + // static non-function object + t.equal(callBound('Array.prototype'), Array.prototype, 'Array.prototype yields itself'); + t.equal(callBound('%Array.prototype%'), Array.prototype, '%Array.prototype% yields itself'); + t.equal(callBound('Array.constructor'), Array.constructor, 'Array.constructor yields itself'); + t.equal(callBound('%Array.constructor%'), Array.constructor, '%Array.constructor% yields itself'); + + // static function + t.equal(callBound('Date.parse'), Date.parse, 'Date.parse yields itself'); + t.equal(callBound('%Date.parse%'), Date.parse, '%Date.parse% yields itself'); + + // prototype primitive + t.equal(callBound('Error.prototype.message'), Error.prototype.message, 'Error.prototype.message yields itself'); + t.equal(callBound('%Error.prototype.message%'), Error.prototype.message, '%Error.prototype.message% yields itself'); + + var x = callBound('Object.prototype.toString'); + var y = callBound('%Object.prototype.toString%'); + + // prototype function + t.notEqual(x, Object.prototype.toString, 'Object.prototype.toString does not yield itself'); + t.notEqual(y, Object.prototype.toString, '%Object.prototype.toString% does not yield itself'); + t.equal(x(true), Object.prototype.toString.call(true), 'call-bound Object.prototype.toString calls into the original'); + t.equal(y(true), Object.prototype.toString.call(true), 'call-bound %Object.prototype.toString% calls into the original'); + + t['throws']( + // @ts-expect-error + function () { callBound('does not exist'); }, + SyntaxError, + 'nonexistent intrinsic throws' + ); + t['throws']( + // @ts-expect-error + function () { callBound('does not exist', true); }, + SyntaxError, + 'allowMissing arg still throws for unknown intrinsic' + ); + + t.test('real but absent intrinsic', { skip: typeof WeakRef !== 'undefined' }, function (st) { + st['throws']( + function () { callBound('WeakRef'); }, + TypeError, + 'real but absent intrinsic throws' + ); + st.equal(callBound('WeakRef', true), undefined, 'allowMissing arg avoids exception'); + st.end(); + }); + + t.end(); +}); diff --git a/labWeb/lab7/node_modules/call-bound/tsconfig.json b/labWeb/lab7/node_modules/call-bound/tsconfig.json new file mode 100644 index 0000000..8976d98 --- /dev/null +++ b/labWeb/lab7/node_modules/call-bound/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "ESNext", + "lib": ["es2024"], + }, + "exclude": [ + "coverage", + ], +} diff --git a/labWeb/lab7/node_modules/chokidar/LICENSE b/labWeb/lab7/node_modules/chokidar/LICENSE new file mode 100644 index 0000000..fa9162b --- /dev/null +++ b/labWeb/lab7/node_modules/chokidar/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2012-2019 Paul Miller (https://paulmillr.com), Elan Shanker + +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/labWeb/lab7/node_modules/chokidar/README.md b/labWeb/lab7/node_modules/chokidar/README.md new file mode 100644 index 0000000..d6a57fd --- /dev/null +++ b/labWeb/lab7/node_modules/chokidar/README.md @@ -0,0 +1,308 @@ +# Chokidar [![Weekly downloads](https://img.shields.io/npm/dw/chokidar.svg)](https://github.com/paulmillr/chokidar) [![Yearly downloads](https://img.shields.io/npm/dy/chokidar.svg)](https://github.com/paulmillr/chokidar) + +> Minimal and efficient cross-platform file watching library + +[![NPM](https://nodei.co/npm/chokidar.png)](https://www.npmjs.com/package/chokidar) + +## Why? + +Node.js `fs.watch`: + +* Doesn't report filenames on MacOS. +* Doesn't report events at all when using editors like Sublime on MacOS. +* Often reports events twice. +* Emits most changes as `rename`. +* Does not provide an easy way to recursively watch file trees. +* Does not support recursive watching on Linux. + +Node.js `fs.watchFile`: + +* Almost as bad at event handling. +* Also does not provide any recursive watching. +* Results in high CPU utilization. + +Chokidar resolves these problems. + +Initially made for **[Brunch](https://brunch.io/)** (an ultra-swift web app build tool), it is now used in +[Microsoft's Visual Studio Code](https://github.com/microsoft/vscode), +[gulp](https://github.com/gulpjs/gulp/), +[karma](https://karma-runner.github.io/), +[PM2](https://github.com/Unitech/PM2), +[browserify](http://browserify.org/), +[webpack](https://webpack.github.io/), +[BrowserSync](https://www.browsersync.io/), +and [many others](https://www.npmjs.com/browse/depended/chokidar). +It has proven itself in production environments. + +Version 3 is out! Check out our blog post about it: [Chokidar 3: How to save 32TB of traffic every week](https://paulmillr.com/posts/chokidar-3-save-32tb-of-traffic/) + +## How? + +Chokidar does still rely on the Node.js core `fs` module, but when using +`fs.watch` and `fs.watchFile` for watching, it normalizes the events it +receives, often checking for truth by getting file stats and/or dir contents. + +On MacOS, chokidar by default uses a native extension exposing the Darwin +`FSEvents` API. This provides very efficient recursive watching compared with +implementations like `kqueue` available on most \*nix platforms. Chokidar still +does have to do some work to normalize the events received that way as well. + +On most other platforms, the `fs.watch`-based implementation is the default, which +avoids polling and keeps CPU usage down. Be advised that chokidar will initiate +watchers recursively for everything within scope of the paths that have been +specified, so be judicious about not wasting system resources by watching much +more than needed. + +## Getting started + +Install with npm: + +```sh +npm install chokidar +``` + +Then `require` and use it in your code: + +```javascript +const chokidar = require('chokidar'); + +// One-liner for current directory +chokidar.watch('.').on('all', (event, path) => { + console.log(event, path); +}); +``` + +## API + +```javascript +// Example of a more typical implementation structure + +// Initialize watcher. +const watcher = chokidar.watch('file, dir, glob, or array', { + ignored: /(^|[\/\\])\../, // ignore dotfiles + persistent: true +}); + +// Something to use when events are received. +const log = console.log.bind(console); +// Add event listeners. +watcher + .on('add', path => log(`File ${path} has been added`)) + .on('change', path => log(`File ${path} has been changed`)) + .on('unlink', path => log(`File ${path} has been removed`)); + +// More possible events. +watcher + .on('addDir', path => log(`Directory ${path} has been added`)) + .on('unlinkDir', path => log(`Directory ${path} has been removed`)) + .on('error', error => log(`Watcher error: ${error}`)) + .on('ready', () => log('Initial scan complete. Ready for changes')) + .on('raw', (event, path, details) => { // internal + log('Raw event info:', event, path, details); + }); + +// 'add', 'addDir' and 'change' events also receive stat() results as second +// argument when available: https://nodejs.org/api/fs.html#fs_class_fs_stats +watcher.on('change', (path, stats) => { + if (stats) console.log(`File ${path} changed size to ${stats.size}`); +}); + +// Watch new files. +watcher.add('new-file'); +watcher.add(['new-file-2', 'new-file-3', '**/other-file*']); + +// Get list of actual paths being watched on the filesystem +var watchedPaths = watcher.getWatched(); + +// Un-watch some files. +await watcher.unwatch('new-file*'); + +// Stop watching. +// The method is async! +watcher.close().then(() => console.log('closed')); + +// Full list of options. See below for descriptions. +// Do not use this example! +chokidar.watch('file', { + persistent: true, + + ignored: '*.txt', + ignoreInitial: false, + followSymlinks: true, + cwd: '.', + disableGlobbing: false, + + usePolling: false, + interval: 100, + binaryInterval: 300, + alwaysStat: false, + depth: 99, + awaitWriteFinish: { + stabilityThreshold: 2000, + pollInterval: 100 + }, + + ignorePermissionErrors: false, + atomic: true // or a custom 'atomicity delay', in milliseconds (default 100) +}); + +``` + +`chokidar.watch(paths, [options])` + +* `paths` (string or array of strings). Paths to files, dirs to be watched +recursively, or glob patterns. + - Note: globs must not contain windows separators (`\`), + because that's how they work by the standard — + you'll need to replace them with forward slashes (`/`). + - Note 2: for additional glob documentation, check out low-level + library: [picomatch](https://github.com/micromatch/picomatch). +* `options` (object) Options object as defined below: + +#### Persistence + +* `persistent` (default: `true`). Indicates whether the process +should continue to run as long as files are being watched. If set to +`false` when using `fsevents` to watch, no more events will be emitted +after `ready`, even if the process continues to run. + +#### Path filtering + +* `ignored` ([anymatch](https://github.com/es128/anymatch)-compatible definition) +Defines files/paths to be ignored. The whole relative or absolute path is +tested, not just filename. If a function with two arguments is provided, it +gets called twice per path - once with a single argument (the path), second +time with two arguments (the path and the +[`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) +object of that path). +* `ignoreInitial` (default: `false`). If set to `false` then `add`/`addDir` events are also emitted for matching paths while +instantiating the watching as chokidar discovers these file paths (before the `ready` event). +* `followSymlinks` (default: `true`). When `false`, only the +symlinks themselves will be watched for changes instead of following +the link references and bubbling events through the link's path. +* `cwd` (no default). The base directory from which watch `paths` are to be +derived. Paths emitted with events will be relative to this. +* `disableGlobbing` (default: `false`). If set to `true` then the strings passed to `.watch()` and `.add()` are treated as +literal path names, even if they look like globs. + +#### Performance + +* `usePolling` (default: `false`). +Whether to use fs.watchFile (backed by polling), or fs.watch. If polling +leads to high CPU utilization, consider setting this to `false`. It is +typically necessary to **set this to `true` to successfully watch files over +a network**, and it may be necessary to successfully watch files in other +non-standard situations. Setting to `true` explicitly on MacOS overrides the +`useFsEvents` default. You may also set the CHOKIDAR_USEPOLLING env variable +to true (1) or false (0) in order to override this option. +* _Polling-specific settings_ (effective when `usePolling: true`) + * `interval` (default: `100`). Interval of file system polling, in milliseconds. You may also + set the CHOKIDAR_INTERVAL env variable to override this option. + * `binaryInterval` (default: `300`). Interval of file system + polling for binary files. + ([see list of binary extensions](https://github.com/sindresorhus/binary-extensions/blob/master/binary-extensions.json)) +* `useFsEvents` (default: `true` on MacOS). Whether to use the +`fsevents` watching interface if available. When set to `true` explicitly +and `fsevents` is available this supercedes the `usePolling` setting. When +set to `false` on MacOS, `usePolling: true` becomes the default. +* `alwaysStat` (default: `false`). If relying upon the +[`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) +object that may get passed with `add`, `addDir`, and `change` events, set +this to `true` to ensure it is provided even in cases where it wasn't +already available from the underlying watch events. +* `depth` (default: `undefined`). If set, limits how many levels of +subdirectories will be traversed. +* `awaitWriteFinish` (default: `false`). +By default, the `add` event will fire when a file first appears on disk, before +the entire file has been written. Furthermore, in some cases some `change` +events will be emitted while the file is being written. In some cases, +especially when watching for large files there will be a need to wait for the +write operation to finish before responding to a file creation or modification. +Setting `awaitWriteFinish` to `true` (or a truthy value) will poll file size, +holding its `add` and `change` events until the size does not change for a +configurable amount of time. The appropriate duration setting is heavily +dependent on the OS and hardware. For accurate detection this parameter should +be relatively high, making file watching much less responsive. +Use with caution. + * *`options.awaitWriteFinish` can be set to an object in order to adjust + timing params:* + * `awaitWriteFinish.stabilityThreshold` (default: 2000). Amount of time in + milliseconds for a file size to remain constant before emitting its event. + * `awaitWriteFinish.pollInterval` (default: 100). File size polling interval, in milliseconds. + +#### Errors + +* `ignorePermissionErrors` (default: `false`). Indicates whether to watch files +that don't have read permissions if possible. If watching fails due to `EPERM` +or `EACCES` with this set to `true`, the errors will be suppressed silently. +* `atomic` (default: `true` if `useFsEvents` and `usePolling` are `false`). +Automatically filters out artifacts that occur when using editors that use +"atomic writes" instead of writing directly to the source file. If a file is +re-added within 100 ms of being deleted, Chokidar emits a `change` event +rather than `unlink` then `add`. If the default of 100 ms does not work well +for you, you can override it by setting `atomic` to a custom value, in +milliseconds. + +### Methods & Events + +`chokidar.watch()` produces an instance of `FSWatcher`. Methods of `FSWatcher`: + +* `.add(path / paths)`: Add files, directories, or glob patterns for tracking. +Takes an array of strings or just one string. +* `.on(event, callback)`: Listen for an FS event. +Available events: `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `ready`, +`raw`, `error`. +Additionally `all` is available which gets emitted with the underlying event +name and path for every event other than `ready`, `raw`, and `error`. `raw` is internal, use it carefully. +* `.unwatch(path / paths)`: Stop watching files, directories, or glob patterns. +Takes an array of strings or just one string. +* `.close()`: **async** Removes all listeners from watched files. Asynchronous, returns Promise. Use with `await` to ensure bugs don't happen. +* `.getWatched()`: Returns an object representing all the paths on the file +system being watched by this `FSWatcher` instance. The object's keys are all the +directories (using absolute paths unless the `cwd` option was used), and the +values are arrays of the names of the items contained in each directory. + +## CLI + +If you need a CLI interface for your file watching, check out +[chokidar-cli](https://github.com/open-cli-tools/chokidar-cli), allowing you to +execute a command on each change, or get a stdio stream of change events. + +## Install Troubleshooting + +* `npm WARN optional dep failed, continuing fsevents@n.n.n` + * This message is normal part of how `npm` handles optional dependencies and is + not indicative of a problem. Even if accompanied by other related error messages, + Chokidar should function properly. + +* `TypeError: fsevents is not a constructor` + * Update chokidar by doing `rm -rf node_modules package-lock.json yarn.lock && npm install`, or update your dependency that uses chokidar. + +* Chokidar is producing `ENOSP` error on Linux, like this: + * `bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell` + `Error: watch /home/ ENOSPC` + * This means Chokidar ran out of file handles and you'll need to increase their count by executing the following command in Terminal: + `echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p` + +## Changelog + +For more detailed changelog, see [`full_changelog.md`](.github/full_changelog.md). +- **v3.5 (Jan 6, 2021):** Support for ARM Macs with Apple Silicon. Fixes for deleted symlinks. +- **v3.4 (Apr 26, 2020):** Support for directory-based symlinks. Fixes for macos file replacement. +- **v3.3 (Nov 2, 2019):** `FSWatcher#close()` method became async. That fixes IO race conditions related to close method. +- **v3.2 (Oct 1, 2019):** Improve Linux RAM usage by 50%. Race condition fixes. Windows glob fixes. Improve stability by using tight range of dependency versions. +- **v3.1 (Sep 16, 2019):** dotfiles are no longer filtered out by default. Use `ignored` option if needed. Improve initial Linux scan time by 50%. +- **v3 (Apr 30, 2019):** massive CPU & RAM consumption improvements; reduces deps / package size by a factor of 17x and bumps Node.js requirement to v8.16 and higher. +- **v2 (Dec 29, 2017):** Globs are now posix-style-only; without windows support. Tons of bugfixes. +- **v1 (Apr 7, 2015):** Glob support, symlink support, tons of bugfixes. Node 0.8+ is supported +- **v0.1 (Apr 20, 2012):** Initial release, extracted from [Brunch](https://github.com/brunch/brunch/blob/9847a065aea300da99bd0753f90354cde9de1261/src/helpers.coffee#L66) + +## Also + +Why was chokidar named this way? What's the meaning behind it? + +>Chowkidar is a transliteration of a Hindi word meaning 'watchman, gatekeeper', चौकीदार. This ultimately comes from Sanskrit _ चतुष्क_ (crossway, quadrangle, consisting-of-four). + +## License + +MIT (c) Paul Miller (), see [LICENSE](LICENSE) file. diff --git a/labWeb/lab7/node_modules/chokidar/index.js b/labWeb/lab7/node_modules/chokidar/index.js new file mode 100644 index 0000000..ed4b6d5 --- /dev/null +++ b/labWeb/lab7/node_modules/chokidar/index.js @@ -0,0 +1,973 @@ +'use strict'; + +const { EventEmitter } = require('events'); +const fs = require('fs'); +const sysPath = require('path'); +const { promisify } = require('util'); +const readdirp = require('readdirp'); +const anymatch = require('anymatch').default; +const globParent = require('glob-parent'); +const isGlob = require('is-glob'); +const braces = require('braces'); +const normalizePath = require('normalize-path'); + +const NodeFsHandler = require('./lib/nodefs-handler'); +const FsEventsHandler = require('./lib/fsevents-handler'); +const { + EV_ALL, + EV_READY, + EV_ADD, + EV_CHANGE, + EV_UNLINK, + EV_ADD_DIR, + EV_UNLINK_DIR, + EV_RAW, + EV_ERROR, + + STR_CLOSE, + STR_END, + + BACK_SLASH_RE, + DOUBLE_SLASH_RE, + SLASH_OR_BACK_SLASH_RE, + DOT_RE, + REPLACER_RE, + + SLASH, + SLASH_SLASH, + BRACE_START, + BANG, + ONE_DOT, + TWO_DOTS, + GLOBSTAR, + SLASH_GLOBSTAR, + ANYMATCH_OPTS, + STRING_TYPE, + FUNCTION_TYPE, + EMPTY_STR, + EMPTY_FN, + + isWindows, + isMacos, + isIBMi +} = require('./lib/constants'); + +const stat = promisify(fs.stat); +const readdir = promisify(fs.readdir); + +/** + * @typedef {String} Path + * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName + * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType + */ + +/** + * + * @typedef {Object} WatchHelpers + * @property {Boolean} followSymlinks + * @property {'stat'|'lstat'} statMethod + * @property {Path} path + * @property {Path} watchPath + * @property {Function} entryPath + * @property {Boolean} hasGlob + * @property {Object} globFilter + * @property {Function} filterPath + * @property {Function} filterDir + */ + +const arrify = (value = []) => Array.isArray(value) ? value : [value]; +const flatten = (list, result = []) => { + list.forEach(item => { + if (Array.isArray(item)) { + flatten(item, result); + } else { + result.push(item); + } + }); + return result; +}; + +const unifyPaths = (paths_) => { + /** + * @type {Array} + */ + const paths = flatten(arrify(paths_)); + if (!paths.every(p => typeof p === STRING_TYPE)) { + throw new TypeError(`Non-string provided as watch path: ${paths}`); + } + return paths.map(normalizePathToUnix); +}; + +// If SLASH_SLASH occurs at the beginning of path, it is not replaced +// because "//StoragePC/DrivePool/Movies" is a valid network path +const toUnix = (string) => { + let str = string.replace(BACK_SLASH_RE, SLASH); + let prepend = false; + if (str.startsWith(SLASH_SLASH)) { + prepend = true; + } + while (str.match(DOUBLE_SLASH_RE)) { + str = str.replace(DOUBLE_SLASH_RE, SLASH); + } + if (prepend) { + str = SLASH + str; + } + return str; +}; + +// Our version of upath.normalize +// TODO: this is not equal to path-normalize module - investigate why +const normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path))); + +const normalizeIgnored = (cwd = EMPTY_STR) => (path) => { + if (typeof path !== STRING_TYPE) return path; + return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path)); +}; + +const getAbsolutePath = (path, cwd) => { + if (sysPath.isAbsolute(path)) { + return path; + } + if (path.startsWith(BANG)) { + return BANG + sysPath.join(cwd, path.slice(1)); + } + return sysPath.join(cwd, path); +}; + +const undef = (opts, key) => opts[key] === undefined; + +/** + * Directory entry. + * @property {Path} path + * @property {Set} items + */ +class DirEntry { + /** + * @param {Path} dir + * @param {Function} removeWatcher + */ + constructor(dir, removeWatcher) { + this.path = dir; + this._removeWatcher = removeWatcher; + /** @type {Set} */ + this.items = new Set(); + } + + add(item) { + const {items} = this; + if (!items) return; + if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item); + } + + async remove(item) { + const {items} = this; + if (!items) return; + items.delete(item); + if (items.size > 0) return; + + const dir = this.path; + try { + await readdir(dir); + } catch (err) { + if (this._removeWatcher) { + this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir)); + } + } + } + + has(item) { + const {items} = this; + if (!items) return; + return items.has(item); + } + + /** + * @returns {Array} + */ + getChildren() { + const {items} = this; + if (!items) return; + return [...items.values()]; + } + + dispose() { + this.items.clear(); + delete this.path; + delete this._removeWatcher; + delete this.items; + Object.freeze(this); + } +} + +const STAT_METHOD_F = 'stat'; +const STAT_METHOD_L = 'lstat'; +class WatchHelper { + constructor(path, watchPath, follow, fsw) { + this.fsw = fsw; + this.path = path = path.replace(REPLACER_RE, EMPTY_STR); + this.watchPath = watchPath; + this.fullWatchPath = sysPath.resolve(watchPath); + this.hasGlob = watchPath !== path; + /** @type {object|boolean} */ + if (path === EMPTY_STR) this.hasGlob = false; + this.globSymlink = this.hasGlob && follow ? undefined : false; + this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false; + this.dirParts = this.getDirParts(path); + this.dirParts.forEach((parts) => { + if (parts.length > 1) parts.pop(); + }); + this.followSymlinks = follow; + this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L; + } + + checkGlobSymlink(entry) { + // only need to resolve once + // first entry should always have entry.parentDir === EMPTY_STR + if (this.globSymlink === undefined) { + this.globSymlink = entry.fullParentDir === this.fullWatchPath ? + false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath}; + } + + if (this.globSymlink) { + return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath); + } + + return entry.fullPath; + } + + entryPath(entry) { + return sysPath.join(this.watchPath, + sysPath.relative(this.watchPath, this.checkGlobSymlink(entry)) + ); + } + + filterPath(entry) { + const {stats} = entry; + if (stats && stats.isSymbolicLink()) return this.filterDir(entry); + const resolvedPath = this.entryPath(entry); + const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ? + this.globFilter(resolvedPath) : true; + return matchesGlob && + this.fsw._isntIgnored(resolvedPath, stats) && + this.fsw._hasReadPermissions(stats); + } + + getDirParts(path) { + if (!this.hasGlob) return []; + const parts = []; + const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path]; + expandedPath.forEach((path) => { + parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE)); + }); + return parts; + } + + filterDir(entry) { + if (this.hasGlob) { + const entryParts = this.getDirParts(this.checkGlobSymlink(entry)); + let globstar = false; + this.unmatchedGlob = !this.dirParts.some((parts) => { + return parts.every((part, i) => { + if (part === GLOBSTAR) globstar = true; + return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS); + }); + }); + } + return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats); + } +} + +/** + * Watches files & directories for changes. Emitted events: + * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error` + * + * new FSWatcher() + * .add(directories) + * .on('add', path => log('File', path, 'was added')) + */ +class FSWatcher extends EventEmitter { +// Not indenting methods for history sake; for now. +constructor(_opts) { + super(); + + const opts = {}; + if (_opts) Object.assign(opts, _opts); // for frozen objects + + /** @type {Map} */ + this._watched = new Map(); + /** @type {Map} */ + this._closers = new Map(); + /** @type {Set} */ + this._ignoredPaths = new Set(); + + /** @type {Map} */ + this._throttled = new Map(); + + /** @type {Map} */ + this._symlinkPaths = new Map(); + + this._streams = new Set(); + this.closed = false; + + // Set up default options. + if (undef(opts, 'persistent')) opts.persistent = true; + if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false; + if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false; + if (undef(opts, 'interval')) opts.interval = 100; + if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300; + if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false; + opts.enableBinaryInterval = opts.binaryInterval !== opts.interval; + + // Enable fsevents on OS X when polling isn't explicitly enabled. + if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling; + + // If we can't use fsevents, ensure the options reflect it's disabled. + const canUseFsEvents = FsEventsHandler.canUse(); + if (!canUseFsEvents) opts.useFsEvents = false; + + // Use polling on Mac if not using fsevents. + // Other platforms use non-polling fs_watch. + if (undef(opts, 'usePolling') && !opts.useFsEvents) { + opts.usePolling = isMacos; + } + + // Always default to polling on IBM i because fs.watch() is not available on IBM i. + if(isIBMi) { + opts.usePolling = true; + } + + // Global override (useful for end-developers that need to force polling for all + // instances of chokidar, regardless of usage/dependency depth) + const envPoll = process.env.CHOKIDAR_USEPOLLING; + if (envPoll !== undefined) { + const envLower = envPoll.toLowerCase(); + + if (envLower === 'false' || envLower === '0') { + opts.usePolling = false; + } else if (envLower === 'true' || envLower === '1') { + opts.usePolling = true; + } else { + opts.usePolling = !!envLower; + } + } + const envInterval = process.env.CHOKIDAR_INTERVAL; + if (envInterval) { + opts.interval = Number.parseInt(envInterval, 10); + } + + // Editor atomic write normalization enabled by default with fs.watch + if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents; + if (opts.atomic) this._pendingUnlinks = new Map(); + + if (undef(opts, 'followSymlinks')) opts.followSymlinks = true; + + if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false; + if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {}; + const awf = opts.awaitWriteFinish; + if (awf) { + if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000; + if (!awf.pollInterval) awf.pollInterval = 100; + this._pendingWrites = new Map(); + } + if (opts.ignored) opts.ignored = arrify(opts.ignored); + + let readyCalls = 0; + this._emitReady = () => { + readyCalls++; + if (readyCalls >= this._readyCount) { + this._emitReady = EMPTY_FN; + this._readyEmitted = true; + // use process.nextTick to allow time for listener to be bound + process.nextTick(() => this.emit(EV_READY)); + } + }; + this._emitRaw = (...args) => this.emit(EV_RAW, ...args); + this._readyEmitted = false; + this.options = opts; + + // Initialize with proper watcher. + if (opts.useFsEvents) { + this._fsEventsHandler = new FsEventsHandler(this); + } else { + this._nodeFsHandler = new NodeFsHandler(this); + } + + // You’re frozen when your heart’s not open. + Object.freeze(opts); +} + +// Public methods + +/** + * Adds paths to be watched on an existing FSWatcher instance + * @param {Path|Array} paths_ + * @param {String=} _origAdd private; for handling non-existent paths to be watched + * @param {Boolean=} _internal private; indicates a non-user add + * @returns {FSWatcher} for chaining + */ +add(paths_, _origAdd, _internal) { + const {cwd, disableGlobbing} = this.options; + this.closed = false; + let paths = unifyPaths(paths_); + if (cwd) { + paths = paths.map((path) => { + const absPath = getAbsolutePath(path, cwd); + + // Check `path` instead of `absPath` because the cwd portion can't be a glob + if (disableGlobbing || !isGlob(path)) { + return absPath; + } + return normalizePath(absPath); + }); + } + + // set aside negated glob strings + paths = paths.filter((path) => { + if (path.startsWith(BANG)) { + this._ignoredPaths.add(path.slice(1)); + return false; + } + + // if a path is being added that was previously ignored, stop ignoring it + this._ignoredPaths.delete(path); + this._ignoredPaths.delete(path + SLASH_GLOBSTAR); + + // reset the cached userIgnored anymatch fn + // to make ignoredPaths changes effective + this._userIgnored = undefined; + + return true; + }); + + if (this.options.useFsEvents && this._fsEventsHandler) { + if (!this._readyCount) this._readyCount = paths.length; + if (this.options.persistent) this._readyCount *= 2; + paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path)); + } else { + if (!this._readyCount) this._readyCount = 0; + this._readyCount += paths.length; + Promise.all( + paths.map(async path => { + const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd); + if (res) this._emitReady(); + return res; + }) + ).then(results => { + if (this.closed) return; + results.filter(item => item).forEach(item => { + this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item)); + }); + }); + } + + return this; +} + +/** + * Close watchers or start ignoring events from specified paths. + * @param {Path|Array} paths_ - string or array of strings, file/directory paths and/or globs + * @returns {FSWatcher} for chaining +*/ +unwatch(paths_) { + if (this.closed) return this; + const paths = unifyPaths(paths_); + const {cwd} = this.options; + + paths.forEach((path) => { + // convert to absolute path unless relative path already matches + if (!sysPath.isAbsolute(path) && !this._closers.has(path)) { + if (cwd) path = sysPath.join(cwd, path); + path = sysPath.resolve(path); + } + + this._closePath(path); + + this._ignoredPaths.add(path); + if (this._watched.has(path)) { + this._ignoredPaths.add(path + SLASH_GLOBSTAR); + } + + // reset the cached userIgnored anymatch fn + // to make ignoredPaths changes effective + this._userIgnored = undefined; + }); + + return this; +} + +/** + * Close watchers and remove all listeners from watched paths. + * @returns {Promise}. +*/ +close() { + if (this.closed) return this._closePromise; + this.closed = true; + + // Memory management. + this.removeAllListeners(); + const closers = []; + this._closers.forEach(closerList => closerList.forEach(closer => { + const promise = closer(); + if (promise instanceof Promise) closers.push(promise); + })); + this._streams.forEach(stream => stream.destroy()); + this._userIgnored = undefined; + this._readyCount = 0; + this._readyEmitted = false; + this._watched.forEach(dirent => dirent.dispose()); + ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => { + this[`_${key}`].clear(); + }); + + this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve(); + return this._closePromise; +} + +/** + * Expose list of watched paths + * @returns {Object} for chaining +*/ +getWatched() { + const watchList = {}; + this._watched.forEach((entry, dir) => { + const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir; + watchList[key || ONE_DOT] = entry.getChildren().sort(); + }); + return watchList; +} + +emitWithAll(event, args) { + this.emit(...args); + if (event !== EV_ERROR) this.emit(EV_ALL, ...args); +} + +// Common helpers +// -------------- + +/** + * Normalize and emit events. + * Calling _emit DOES NOT MEAN emit() would be called! + * @param {EventName} event Type of event + * @param {Path} path File or directory path + * @param {*=} val1 arguments to be passed with event + * @param {*=} val2 + * @param {*=} val3 + * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag + */ +async _emit(event, path, val1, val2, val3) { + if (this.closed) return; + + const opts = this.options; + if (isWindows) path = sysPath.normalize(path); + if (opts.cwd) path = sysPath.relative(opts.cwd, path); + /** @type Array */ + const args = [event, path]; + if (val3 !== undefined) args.push(val1, val2, val3); + else if (val2 !== undefined) args.push(val1, val2); + else if (val1 !== undefined) args.push(val1); + + const awf = opts.awaitWriteFinish; + let pw; + if (awf && (pw = this._pendingWrites.get(path))) { + pw.lastChange = new Date(); + return this; + } + + if (opts.atomic) { + if (event === EV_UNLINK) { + this._pendingUnlinks.set(path, args); + setTimeout(() => { + this._pendingUnlinks.forEach((entry, path) => { + this.emit(...entry); + this.emit(EV_ALL, ...entry); + this._pendingUnlinks.delete(path); + }); + }, typeof opts.atomic === 'number' ? opts.atomic : 100); + return this; + } + if (event === EV_ADD && this._pendingUnlinks.has(path)) { + event = args[0] = EV_CHANGE; + this._pendingUnlinks.delete(path); + } + } + + if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) { + const awfEmit = (err, stats) => { + if (err) { + event = args[0] = EV_ERROR; + args[1] = err; + this.emitWithAll(event, args); + } else if (stats) { + // if stats doesn't exist the file must have been deleted + if (args.length > 2) { + args[2] = stats; + } else { + args.push(stats); + } + this.emitWithAll(event, args); + } + }; + + this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit); + return this; + } + + if (event === EV_CHANGE) { + const isThrottled = !this._throttle(EV_CHANGE, path, 50); + if (isThrottled) return this; + } + + if (opts.alwaysStat && val1 === undefined && + (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE) + ) { + const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path; + let stats; + try { + stats = await stat(fullPath); + } catch (err) {} + // Suppress event when fs_stat fails, to avoid sending undefined 'stat' + if (!stats || this.closed) return; + args.push(stats); + } + this.emitWithAll(event, args); + + return this; +} + +/** + * Common handler for errors + * @param {Error} error + * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag + */ +_handleError(error) { + const code = error && error.code; + if (error && code !== 'ENOENT' && code !== 'ENOTDIR' && + (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES')) + ) { + this.emit(EV_ERROR, error); + } + return error || this.closed; +} + +/** + * Helper utility for throttling + * @param {ThrottleType} actionType type being throttled + * @param {Path} path being acted upon + * @param {Number} timeout duration of time to suppress duplicate actions + * @returns {Object|false} tracking object or false if action should be suppressed + */ +_throttle(actionType, path, timeout) { + if (!this._throttled.has(actionType)) { + this._throttled.set(actionType, new Map()); + } + + /** @type {Map} */ + const action = this._throttled.get(actionType); + /** @type {Object} */ + const actionPath = action.get(path); + + if (actionPath) { + actionPath.count++; + return false; + } + + let timeoutObject; + const clear = () => { + const item = action.get(path); + const count = item ? item.count : 0; + action.delete(path); + clearTimeout(timeoutObject); + if (item) clearTimeout(item.timeoutObject); + return count; + }; + timeoutObject = setTimeout(clear, timeout); + const thr = {timeoutObject, clear, count: 0}; + action.set(path, thr); + return thr; +} + +_incrReadyCount() { + return this._readyCount++; +} + +/** + * Awaits write operation to finish. + * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback. + * @param {Path} path being acted upon + * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished + * @param {EventName} event + * @param {Function} awfEmit Callback to be called when ready for event to be emitted. + */ +_awaitWriteFinish(path, threshold, event, awfEmit) { + let timeoutHandler; + + let fullPath = path; + if (this.options.cwd && !sysPath.isAbsolute(path)) { + fullPath = sysPath.join(this.options.cwd, path); + } + + const now = new Date(); + + const awaitWriteFinish = (prevStat) => { + fs.stat(fullPath, (err, curStat) => { + if (err || !this._pendingWrites.has(path)) { + if (err && err.code !== 'ENOENT') awfEmit(err); + return; + } + + const now = Number(new Date()); + + if (prevStat && curStat.size !== prevStat.size) { + this._pendingWrites.get(path).lastChange = now; + } + const pw = this._pendingWrites.get(path); + const df = now - pw.lastChange; + + if (df >= threshold) { + this._pendingWrites.delete(path); + awfEmit(undefined, curStat); + } else { + timeoutHandler = setTimeout( + awaitWriteFinish, + this.options.awaitWriteFinish.pollInterval, + curStat + ); + } + }); + }; + + if (!this._pendingWrites.has(path)) { + this._pendingWrites.set(path, { + lastChange: now, + cancelWait: () => { + this._pendingWrites.delete(path); + clearTimeout(timeoutHandler); + return event; + } + }); + timeoutHandler = setTimeout( + awaitWriteFinish, + this.options.awaitWriteFinish.pollInterval + ); + } +} + +_getGlobIgnored() { + return [...this._ignoredPaths.values()]; +} + +/** + * Determines whether user has asked to ignore this path. + * @param {Path} path filepath or dir + * @param {fs.Stats=} stats result of fs.stat + * @returns {Boolean} + */ +_isIgnored(path, stats) { + if (this.options.atomic && DOT_RE.test(path)) return true; + if (!this._userIgnored) { + const {cwd} = this.options; + const ign = this.options.ignored; + + const ignored = ign && ign.map(normalizeIgnored(cwd)); + const paths = arrify(ignored) + .filter((path) => typeof path === STRING_TYPE && !isGlob(path)) + .map((path) => path + SLASH_GLOBSTAR); + const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths); + this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS); + } + + return this._userIgnored([path, stats]); +} + +_isntIgnored(path, stat) { + return !this._isIgnored(path, stat); +} + +/** + * Provides a set of common helpers and properties relating to symlink and glob handling. + * @param {Path} path file, directory, or glob pattern being watched + * @param {Number=} depth at any depth > 0, this isn't a glob + * @returns {WatchHelper} object containing helpers for this path + */ +_getWatchHelpers(path, depth) { + const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path); + const follow = this.options.followSymlinks; + + return new WatchHelper(path, watchPath, follow, this); +} + +// Directory helpers +// ----------------- + +/** + * Provides directory tracking objects + * @param {String} directory path of the directory + * @returns {DirEntry} the directory's tracking object + */ +_getWatchedDir(directory) { + if (!this._boundRemove) this._boundRemove = this._remove.bind(this); + const dir = sysPath.resolve(directory); + if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove)); + return this._watched.get(dir); +} + +// File helpers +// ------------ + +/** + * Check for read permissions. + * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405 + * @param {fs.Stats} stats - object, result of fs_stat + * @returns {Boolean} indicates whether the file can be read +*/ +_hasReadPermissions(stats) { + if (this.options.ignorePermissionErrors) return true; + + // stats.mode may be bigint + const md = stats && Number.parseInt(stats.mode, 10); + const st = md & 0o777; + const it = Number.parseInt(st.toString(8)[0], 10); + return Boolean(4 & it); +} + +/** + * Handles emitting unlink events for + * files and directories, and via recursion, for + * files and directories within directories that are unlinked + * @param {String} directory within which the following item is located + * @param {String} item base path of item/directory + * @returns {void} +*/ +_remove(directory, item, isDirectory) { + // if what is being deleted is a directory, get that directory's paths + // for recursive deleting and cleaning of watched object + // if it is not a directory, nestedDirectoryChildren will be empty array + const path = sysPath.join(directory, item); + const fullPath = sysPath.resolve(path); + isDirectory = isDirectory != null + ? isDirectory + : this._watched.has(path) || this._watched.has(fullPath); + + // prevent duplicate handling in case of arriving here nearly simultaneously + // via multiple paths (such as _handleFile and _handleDir) + if (!this._throttle('remove', path, 100)) return; + + // if the only watched file is removed, watch for its return + if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) { + this.add(directory, item, true); + } + + // This will create a new entry in the watched object in either case + // so we got to do the directory check beforehand + const wp = this._getWatchedDir(path); + const nestedDirectoryChildren = wp.getChildren(); + + // Recursively remove children directories / files. + nestedDirectoryChildren.forEach(nested => this._remove(path, nested)); + + // Check if item was on the watched list and remove it + const parent = this._getWatchedDir(directory); + const wasTracked = parent.has(item); + parent.remove(item); + + // Fixes issue #1042 -> Relative paths were detected and added as symlinks + // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612), + // but never removed from the map in case the path was deleted. + // This leads to an incorrect state if the path was recreated: + // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553 + if (this._symlinkPaths.has(fullPath)) { + this._symlinkPaths.delete(fullPath); + } + + // If we wait for this file to be fully written, cancel the wait. + let relPath = path; + if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path); + if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) { + const event = this._pendingWrites.get(relPath).cancelWait(); + if (event === EV_ADD) return; + } + + // The Entry will either be a directory that just got removed + // or a bogus entry to a file, in either case we have to remove it + this._watched.delete(path); + this._watched.delete(fullPath); + const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK; + if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path); + + // Avoid conflicts if we later create another file with the same name + if (!this.options.useFsEvents) { + this._closePath(path); + } +} + +/** + * Closes all watchers for a path + * @param {Path} path + */ +_closePath(path) { + this._closeFile(path) + const dir = sysPath.dirname(path); + this._getWatchedDir(dir).remove(sysPath.basename(path)); +} + +/** + * Closes only file-specific watchers + * @param {Path} path + */ +_closeFile(path) { + const closers = this._closers.get(path); + if (!closers) return; + closers.forEach(closer => closer()); + this._closers.delete(path); +} + +/** + * + * @param {Path} path + * @param {Function} closer + */ +_addPathCloser(path, closer) { + if (!closer) return; + let list = this._closers.get(path); + if (!list) { + list = []; + this._closers.set(path, list); + } + list.push(closer); +} + +_readdirp(root, opts) { + if (this.closed) return; + const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts}; + let stream = readdirp(root, options); + this._streams.add(stream); + stream.once(STR_CLOSE, () => { + stream = undefined; + }); + stream.once(STR_END, () => { + if (stream) { + this._streams.delete(stream); + stream = undefined; + } + }); + return stream; +} + +} + +// Export FSWatcher class +exports.FSWatcher = FSWatcher; + +/** + * Instantiates watcher with paths to be tracked. + * @param {String|Array} paths file/directory paths and/or globs + * @param {Object=} options chokidar opts + * @returns an instance of FSWatcher for chaining. + */ +const watch = (paths, options) => { + const watcher = new FSWatcher(options); + watcher.add(paths); + return watcher; +}; + +exports.watch = watch; diff --git a/labWeb/lab7/node_modules/chokidar/lib/constants.js b/labWeb/lab7/node_modules/chokidar/lib/constants.js new file mode 100644 index 0000000..1454f85 --- /dev/null +++ b/labWeb/lab7/node_modules/chokidar/lib/constants.js @@ -0,0 +1,65 @@ +'use strict'; + +const {sep} = require('path'); +const {platform} = process; +const os = require('os'); + +exports.EV_ALL = 'all'; +exports.EV_READY = 'ready'; +exports.EV_ADD = 'add'; +exports.EV_CHANGE = 'change'; +exports.EV_ADD_DIR = 'addDir'; +exports.EV_UNLINK = 'unlink'; +exports.EV_UNLINK_DIR = 'unlinkDir'; +exports.EV_RAW = 'raw'; +exports.EV_ERROR = 'error'; + +exports.STR_DATA = 'data'; +exports.STR_END = 'end'; +exports.STR_CLOSE = 'close'; + +exports.FSEVENT_CREATED = 'created'; +exports.FSEVENT_MODIFIED = 'modified'; +exports.FSEVENT_DELETED = 'deleted'; +exports.FSEVENT_MOVED = 'moved'; +exports.FSEVENT_CLONED = 'cloned'; +exports.FSEVENT_UNKNOWN = 'unknown'; +exports.FSEVENT_TYPE_FILE = 'file'; +exports.FSEVENT_TYPE_DIRECTORY = 'directory'; +exports.FSEVENT_TYPE_SYMLINK = 'symlink'; + +exports.KEY_LISTENERS = 'listeners'; +exports.KEY_ERR = 'errHandlers'; +exports.KEY_RAW = 'rawEmitters'; +exports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW]; + +exports.DOT_SLASH = `.${sep}`; + +exports.BACK_SLASH_RE = /\\/g; +exports.DOUBLE_SLASH_RE = /\/\//; +exports.SLASH_OR_BACK_SLASH_RE = /[/\\]/; +exports.DOT_RE = /\..*\.(sw[px])$|~$|\.subl.*\.tmp/; +exports.REPLACER_RE = /^\.[/\\]/; + +exports.SLASH = '/'; +exports.SLASH_SLASH = '//'; +exports.BRACE_START = '{'; +exports.BANG = '!'; +exports.ONE_DOT = '.'; +exports.TWO_DOTS = '..'; +exports.STAR = '*'; +exports.GLOBSTAR = '**'; +exports.ROOT_GLOBSTAR = '/**/*'; +exports.SLASH_GLOBSTAR = '/**'; +exports.DIR_SUFFIX = 'Dir'; +exports.ANYMATCH_OPTS = {dot: true}; +exports.STRING_TYPE = 'string'; +exports.FUNCTION_TYPE = 'function'; +exports.EMPTY_STR = ''; +exports.EMPTY_FN = () => {}; +exports.IDENTITY_FN = val => val; + +exports.isWindows = platform === 'win32'; +exports.isMacos = platform === 'darwin'; +exports.isLinux = platform === 'linux'; +exports.isIBMi = os.type() === 'OS400'; diff --git a/labWeb/lab7/node_modules/chokidar/lib/fsevents-handler.js b/labWeb/lab7/node_modules/chokidar/lib/fsevents-handler.js new file mode 100644 index 0000000..0f7f2cb --- /dev/null +++ b/labWeb/lab7/node_modules/chokidar/lib/fsevents-handler.js @@ -0,0 +1,524 @@ +'use strict'; + +const fs = require('fs'); +const sysPath = require('path'); +const { promisify } = require('util'); + +let fsevents; +try { + fsevents = require('fsevents'); +} catch (error) { + if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error); +} + +if (fsevents) { + // TODO: real check + const mtch = process.version.match(/v(\d+)\.(\d+)/); + if (mtch && mtch[1] && mtch[2]) { + const maj = Number.parseInt(mtch[1], 10); + const min = Number.parseInt(mtch[2], 10); + if (maj === 8 && min < 16) { + fsevents = undefined; + } + } +} + +const { + EV_ADD, + EV_CHANGE, + EV_ADD_DIR, + EV_UNLINK, + EV_ERROR, + STR_DATA, + STR_END, + FSEVENT_CREATED, + FSEVENT_MODIFIED, + FSEVENT_DELETED, + FSEVENT_MOVED, + // FSEVENT_CLONED, + FSEVENT_UNKNOWN, + FSEVENT_TYPE_FILE, + FSEVENT_TYPE_DIRECTORY, + FSEVENT_TYPE_SYMLINK, + + ROOT_GLOBSTAR, + DIR_SUFFIX, + DOT_SLASH, + FUNCTION_TYPE, + EMPTY_FN, + IDENTITY_FN +} = require('./constants'); + +const Depth = (value) => isNaN(value) ? {} : {depth: value}; + +const stat = promisify(fs.stat); +const lstat = promisify(fs.lstat); +const realpath = promisify(fs.realpath); + +const statMethods = { stat, lstat }; + +/** + * @typedef {String} Path + */ + +/** + * @typedef {Object} FsEventsWatchContainer + * @property {Set} listeners + * @property {Function} rawEmitter + * @property {{stop: Function}} watcher + */ + +// fsevents instance helper functions +/** + * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances) + * @type {Map} + */ +const FSEventsWatchers = new Map(); + +// Threshold of duplicate path prefixes at which to start +// consolidating going forward +const consolidateThreshhold = 10; + +const wrongEventFlags = new Set([ + 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912 +]); + +/** + * Instantiates the fsevents interface + * @param {Path} path path to be watched + * @param {Function} callback called when fsevents is bound and ready + * @returns {{stop: Function}} new fsevents instance + */ +const createFSEventsInstance = (path, callback) => { + const stop = fsevents.watch(path, callback); + return {stop}; +}; + +/** + * Instantiates the fsevents interface or binds listeners to an existing one covering + * the same file tree. + * @param {Path} path - to be watched + * @param {Path} realPath - real path for symlinks + * @param {Function} listener - called when fsevents emits events + * @param {Function} rawEmitter - passes data to listeners of the 'raw' event + * @returns {Function} closer + */ +function setFSEventsListener(path, realPath, listener, rawEmitter) { + let watchPath = sysPath.extname(realPath) ? sysPath.dirname(realPath) : realPath; + + const parentPath = sysPath.dirname(watchPath); + let cont = FSEventsWatchers.get(watchPath); + + // If we've accumulated a substantial number of paths that + // could have been consolidated by watching one directory + // above the current one, create a watcher on the parent + // path instead, so that we do consolidate going forward. + if (couldConsolidate(parentPath)) { + watchPath = parentPath; + } + + const resolvedPath = sysPath.resolve(path); + const hasSymlink = resolvedPath !== realPath; + + const filteredListener = (fullPath, flags, info) => { + if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath); + if ( + fullPath === resolvedPath || + !fullPath.indexOf(resolvedPath + sysPath.sep) + ) listener(fullPath, flags, info); + }; + + // check if there is already a watcher on a parent path + // modifies `watchPath` to the parent path when it finds a match + let watchedParent = false; + for (const watchedPath of FSEventsWatchers.keys()) { + if (realPath.indexOf(sysPath.resolve(watchedPath) + sysPath.sep) === 0) { + watchPath = watchedPath; + cont = FSEventsWatchers.get(watchPath); + watchedParent = true; + break; + } + } + + if (cont || watchedParent) { + cont.listeners.add(filteredListener); + } else { + cont = { + listeners: new Set([filteredListener]), + rawEmitter, + watcher: createFSEventsInstance(watchPath, (fullPath, flags) => { + if (!cont.listeners.size) return; + const info = fsevents.getInfo(fullPath, flags); + cont.listeners.forEach(list => { + list(fullPath, flags, info); + }); + + cont.rawEmitter(info.event, fullPath, info); + }) + }; + FSEventsWatchers.set(watchPath, cont); + } + + // removes this instance's listeners and closes the underlying fsevents + // instance if there are no more listeners left + return () => { + const lst = cont.listeners; + + lst.delete(filteredListener); + if (!lst.size) { + FSEventsWatchers.delete(watchPath); + if (cont.watcher) return cont.watcher.stop().then(() => { + cont.rawEmitter = cont.watcher = undefined; + Object.freeze(cont); + }); + } + }; +} + +// Decide whether or not we should start a new higher-level +// parent watcher +const couldConsolidate = (path) => { + let count = 0; + for (const watchPath of FSEventsWatchers.keys()) { + if (watchPath.indexOf(path) === 0) { + count++; + if (count >= consolidateThreshhold) { + return true; + } + } + } + + return false; +}; + +// returns boolean indicating whether fsevents can be used +const canUse = () => fsevents && FSEventsWatchers.size < 128; + +// determines subdirectory traversal levels from root to path +const calcDepth = (path, root) => { + let i = 0; + while (!path.indexOf(root) && (path = sysPath.dirname(path)) !== root) i++; + return i; +}; + +// returns boolean indicating whether the fsevents' event info has the same type +// as the one returned by fs.stat +const sameTypes = (info, stats) => ( + info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() || + info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() || + info.type === FSEVENT_TYPE_FILE && stats.isFile() +) + +/** + * @mixin + */ +class FsEventsHandler { + +/** + * @param {import('../index').FSWatcher} fsw + */ +constructor(fsw) { + this.fsw = fsw; +} +checkIgnored(path, stats) { + const ipaths = this.fsw._ignoredPaths; + if (this.fsw._isIgnored(path, stats)) { + ipaths.add(path); + if (stats && stats.isDirectory()) { + ipaths.add(path + ROOT_GLOBSTAR); + } + return true; + } + + ipaths.delete(path); + ipaths.delete(path + ROOT_GLOBSTAR); +} + +addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) { + const event = watchedDir.has(item) ? EV_CHANGE : EV_ADD; + this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts); +} + +async checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) { + try { + const stats = await stat(path) + if (this.fsw.closed) return; + if (sameTypes(info, stats)) { + this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } else { + this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } catch (error) { + if (error.code === 'EACCES') { + this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } else { + this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } +} + +handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) { + if (this.fsw.closed || this.checkIgnored(path)) return; + + if (event === EV_UNLINK) { + const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY + // suppress unlink events on never before seen files + if (isDirectory || watchedDir.has(item)) { + this.fsw._remove(parent, item, isDirectory); + } + } else { + if (event === EV_ADD) { + // track new directories + if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path); + + if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) { + // push symlinks back to the top of the stack to get handled + const curDepth = opts.depth === undefined ? + undefined : calcDepth(fullPath, realPath) + 1; + return this._addToFsEvents(path, false, true, curDepth); + } + + // track new paths + // (other than symlinks being followed, which will be tracked soon) + this.fsw._getWatchedDir(parent).add(item); + } + /** + * @type {'add'|'addDir'|'unlink'|'unlinkDir'} + */ + const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event; + this.fsw._emit(eventName, path); + if (eventName === EV_ADD_DIR) this._addToFsEvents(path, false, true); + } +} + +/** + * Handle symlinks encountered during directory scan + * @param {String} watchPath - file/dir path to be watched with fsevents + * @param {String} realPath - real path (in case of symlinks) + * @param {Function} transform - path transformer + * @param {Function} globFilter - path filter in case a glob pattern was provided + * @returns {Function} closer for the watcher instance +*/ +_watchWithFsEvents(watchPath, realPath, transform, globFilter) { + if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return; + const opts = this.fsw.options; + const watchCallback = async (fullPath, flags, info) => { + if (this.fsw.closed) return; + if ( + opts.depth !== undefined && + calcDepth(fullPath, realPath) > opts.depth + ) return; + const path = transform(sysPath.join( + watchPath, sysPath.relative(watchPath, fullPath) + )); + if (globFilter && !globFilter(path)) return; + // ensure directories are tracked + const parent = sysPath.dirname(path); + const item = sysPath.basename(path); + const watchedDir = this.fsw._getWatchedDir( + info.type === FSEVENT_TYPE_DIRECTORY ? path : parent + ); + + // correct for wrong events emitted + if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) { + if (typeof opts.ignored === FUNCTION_TYPE) { + let stats; + try { + stats = await stat(path); + } catch (error) {} + if (this.fsw.closed) return; + if (this.checkIgnored(path, stats)) return; + if (sameTypes(info, stats)) { + this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } else { + this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } else { + this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } else { + switch (info.event) { + case FSEVENT_CREATED: + case FSEVENT_MODIFIED: + return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + case FSEVENT_DELETED: + case FSEVENT_MOVED: + return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } + }; + + const closer = setFSEventsListener( + watchPath, + realPath, + watchCallback, + this.fsw._emitRaw + ); + + this.fsw._emitReady(); + return closer; +} + +/** + * Handle symlinks encountered during directory scan + * @param {String} linkPath path to symlink + * @param {String} fullPath absolute path to the symlink + * @param {Function} transform pre-existing path transformer + * @param {Number} curDepth level of subdirectories traversed to where symlink is + * @returns {Promise} + */ +async _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) { + // don't follow the same symlink more than once + if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return; + + this.fsw._symlinkPaths.set(fullPath, true); + this.fsw._incrReadyCount(); + + try { + const linkTarget = await realpath(linkPath); + if (this.fsw.closed) return; + if (this.fsw._isIgnored(linkTarget)) { + return this.fsw._emitReady(); + } + + this.fsw._incrReadyCount(); + + // add the linkTarget for watching with a wrapper for transform + // that causes emitted paths to incorporate the link's path + this._addToFsEvents(linkTarget || linkPath, (path) => { + let aliasedPath = linkPath; + if (linkTarget && linkTarget !== DOT_SLASH) { + aliasedPath = path.replace(linkTarget, linkPath); + } else if (path !== DOT_SLASH) { + aliasedPath = sysPath.join(linkPath, path); + } + return transform(aliasedPath); + }, false, curDepth); + } catch(error) { + if (this.fsw._handleError(error)) { + return this.fsw._emitReady(); + } + } +} + +/** + * + * @param {Path} newPath + * @param {fs.Stats} stats + */ +emitAdd(newPath, stats, processPath, opts, forceAdd) { + const pp = processPath(newPath); + const isDir = stats.isDirectory(); + const dirObj = this.fsw._getWatchedDir(sysPath.dirname(pp)); + const base = sysPath.basename(pp); + + // ensure empty dirs get tracked + if (isDir) this.fsw._getWatchedDir(pp); + if (dirObj.has(base)) return; + dirObj.add(base); + + if (!opts.ignoreInitial || forceAdd === true) { + this.fsw._emit(isDir ? EV_ADD_DIR : EV_ADD, pp, stats); + } +} + +initWatch(realPath, path, wh, processPath) { + if (this.fsw.closed) return; + const closer = this._watchWithFsEvents( + wh.watchPath, + sysPath.resolve(realPath || wh.watchPath), + processPath, + wh.globFilter + ); + this.fsw._addPathCloser(path, closer); +} + +/** + * Handle added path with fsevents + * @param {String} path file/dir path or glob pattern + * @param {Function|Boolean=} transform converts working path to what the user expects + * @param {Boolean=} forceAdd ensure add is emitted + * @param {Number=} priorDepth Level of subdirectories already traversed. + * @returns {Promise} + */ +async _addToFsEvents(path, transform, forceAdd, priorDepth) { + if (this.fsw.closed) { + return; + } + const opts = this.fsw.options; + const processPath = typeof transform === FUNCTION_TYPE ? transform : IDENTITY_FN; + + const wh = this.fsw._getWatchHelpers(path); + + // evaluate what is at the path we're being asked to watch + try { + const stats = await statMethods[wh.statMethod](wh.watchPath); + if (this.fsw.closed) return; + if (this.fsw._isIgnored(wh.watchPath, stats)) { + throw null; + } + if (stats.isDirectory()) { + // emit addDir unless this is a glob parent + if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd); + + // don't recurse further if it would exceed depth setting + if (priorDepth && priorDepth > opts.depth) return; + + // scan the contents of the dir + this.fsw._readdirp(wh.watchPath, { + fileFilter: entry => wh.filterPath(entry), + directoryFilter: entry => wh.filterDir(entry), + ...Depth(opts.depth - (priorDepth || 0)) + }).on(STR_DATA, (entry) => { + // need to check filterPath on dirs b/c filterDir is less restrictive + if (this.fsw.closed) { + return; + } + if (entry.stats.isDirectory() && !wh.filterPath(entry)) return; + + const joinedPath = sysPath.join(wh.watchPath, entry.path); + const {fullPath} = entry; + + if (wh.followSymlinks && entry.stats.isSymbolicLink()) { + // preserve the current depth here since it can't be derived from + // real paths past the symlink + const curDepth = opts.depth === undefined ? + undefined : calcDepth(joinedPath, sysPath.resolve(wh.watchPath)) + 1; + + this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth); + } else { + this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd); + } + }).on(EV_ERROR, EMPTY_FN).on(STR_END, () => { + this.fsw._emitReady(); + }); + } else { + this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd); + this.fsw._emitReady(); + } + } catch (error) { + if (!error || this.fsw._handleError(error)) { + // TODO: Strange thing: "should not choke on an ignored watch path" will be failed without 2 ready calls -__- + this.fsw._emitReady(); + this.fsw._emitReady(); + } + } + + if (opts.persistent && forceAdd !== true) { + if (typeof transform === FUNCTION_TYPE) { + // realpath has already been resolved + this.initWatch(undefined, path, wh, processPath); + } else { + let realPath; + try { + realPath = await realpath(wh.watchPath); + } catch (e) {} + this.initWatch(realPath, path, wh, processPath); + } + } +} + +} + +module.exports = FsEventsHandler; +module.exports.canUse = canUse; diff --git a/labWeb/lab7/node_modules/chokidar/lib/nodefs-handler.js b/labWeb/lab7/node_modules/chokidar/lib/nodefs-handler.js new file mode 100644 index 0000000..199cfe9 --- /dev/null +++ b/labWeb/lab7/node_modules/chokidar/lib/nodefs-handler.js @@ -0,0 +1,654 @@ +'use strict'; + +const fs = require('fs'); +const sysPath = require('path'); +const { promisify } = require('util'); +const isBinaryPath = require('is-binary-path'); +const { + isWindows, + isLinux, + EMPTY_FN, + EMPTY_STR, + KEY_LISTENERS, + KEY_ERR, + KEY_RAW, + HANDLER_KEYS, + EV_CHANGE, + EV_ADD, + EV_ADD_DIR, + EV_ERROR, + STR_DATA, + STR_END, + BRACE_START, + STAR +} = require('./constants'); + +const THROTTLE_MODE_WATCH = 'watch'; + +const open = promisify(fs.open); +const stat = promisify(fs.stat); +const lstat = promisify(fs.lstat); +const close = promisify(fs.close); +const fsrealpath = promisify(fs.realpath); + +const statMethods = { lstat, stat }; + +// TODO: emit errors properly. Example: EMFILE on Macos. +const foreach = (val, fn) => { + if (val instanceof Set) { + val.forEach(fn); + } else { + fn(val); + } +}; + +const addAndConvert = (main, prop, item) => { + let container = main[prop]; + if (!(container instanceof Set)) { + main[prop] = container = new Set([container]); + } + container.add(item); +}; + +const clearItem = cont => key => { + const set = cont[key]; + if (set instanceof Set) { + set.clear(); + } else { + delete cont[key]; + } +}; + +const delFromSet = (main, prop, item) => { + const container = main[prop]; + if (container instanceof Set) { + container.delete(item); + } else if (container === item) { + delete main[prop]; + } +}; + +const isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val; + +/** + * @typedef {String} Path + */ + +// fs_watch helpers + +// object to hold per-process fs_watch instances +// (may be shared across chokidar FSWatcher instances) + +/** + * @typedef {Object} FsWatchContainer + * @property {Set} listeners + * @property {Set} errHandlers + * @property {Set} rawEmitters + * @property {fs.FSWatcher=} watcher + * @property {Boolean=} watcherUnusable + */ + +/** + * @type {Map} + */ +const FsWatchInstances = new Map(); + +/** + * Instantiates the fs_watch interface + * @param {String} path to be watched + * @param {Object} options to be passed to fs_watch + * @param {Function} listener main event handler + * @param {Function} errHandler emits info about errors + * @param {Function} emitRaw emits raw event data + * @returns {fs.FSWatcher} new fsevents instance + */ +function createFsWatchInstance(path, options, listener, errHandler, emitRaw) { + const handleEvent = (rawEvent, evPath) => { + listener(path); + emitRaw(rawEvent, evPath, {watchedPath: path}); + + // emit based on events occurring for files from a directory's watcher in + // case the file's watcher misses it (and rely on throttling to de-dupe) + if (evPath && path !== evPath) { + fsWatchBroadcast( + sysPath.resolve(path, evPath), KEY_LISTENERS, sysPath.join(path, evPath) + ); + } + }; + try { + return fs.watch(path, options, handleEvent); + } catch (error) { + errHandler(error); + } +} + +/** + * Helper for passing fs_watch event data to a collection of listeners + * @param {Path} fullPath absolute path bound to fs_watch instance + * @param {String} type listener type + * @param {*=} val1 arguments to be passed to listeners + * @param {*=} val2 + * @param {*=} val3 + */ +const fsWatchBroadcast = (fullPath, type, val1, val2, val3) => { + const cont = FsWatchInstances.get(fullPath); + if (!cont) return; + foreach(cont[type], (listener) => { + listener(val1, val2, val3); + }); +}; + +/** + * Instantiates the fs_watch interface or binds listeners + * to an existing one covering the same file system entry + * @param {String} path + * @param {String} fullPath absolute path + * @param {Object} options to be passed to fs_watch + * @param {Object} handlers container for event listener functions + */ +const setFsWatchListener = (path, fullPath, options, handlers) => { + const {listener, errHandler, rawEmitter} = handlers; + let cont = FsWatchInstances.get(fullPath); + + /** @type {fs.FSWatcher=} */ + let watcher; + if (!options.persistent) { + watcher = createFsWatchInstance( + path, options, listener, errHandler, rawEmitter + ); + return watcher.close.bind(watcher); + } + if (cont) { + addAndConvert(cont, KEY_LISTENERS, listener); + addAndConvert(cont, KEY_ERR, errHandler); + addAndConvert(cont, KEY_RAW, rawEmitter); + } else { + watcher = createFsWatchInstance( + path, + options, + fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS), + errHandler, // no need to use broadcast here + fsWatchBroadcast.bind(null, fullPath, KEY_RAW) + ); + if (!watcher) return; + watcher.on(EV_ERROR, async (error) => { + const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR); + cont.watcherUnusable = true; // documented since Node 10.4.1 + // Workaround for https://github.com/joyent/node/issues/4337 + if (isWindows && error.code === 'EPERM') { + try { + const fd = await open(path, 'r'); + await close(fd); + broadcastErr(error); + } catch (err) {} + } else { + broadcastErr(error); + } + }); + cont = { + listeners: listener, + errHandlers: errHandler, + rawEmitters: rawEmitter, + watcher + }; + FsWatchInstances.set(fullPath, cont); + } + // const index = cont.listeners.indexOf(listener); + + // removes this instance's listeners and closes the underlying fs_watch + // instance if there are no more listeners left + return () => { + delFromSet(cont, KEY_LISTENERS, listener); + delFromSet(cont, KEY_ERR, errHandler); + delFromSet(cont, KEY_RAW, rawEmitter); + if (isEmptySet(cont.listeners)) { + // Check to protect against issue gh-730. + // if (cont.watcherUnusable) { + cont.watcher.close(); + // } + FsWatchInstances.delete(fullPath); + HANDLER_KEYS.forEach(clearItem(cont)); + cont.watcher = undefined; + Object.freeze(cont); + } + }; +}; + +// fs_watchFile helpers + +// object to hold per-process fs_watchFile instances +// (may be shared across chokidar FSWatcher instances) +const FsWatchFileInstances = new Map(); + +/** + * Instantiates the fs_watchFile interface or binds listeners + * to an existing one covering the same file system entry + * @param {String} path to be watched + * @param {String} fullPath absolute path + * @param {Object} options options to be passed to fs_watchFile + * @param {Object} handlers container for event listener functions + * @returns {Function} closer + */ +const setFsWatchFileListener = (path, fullPath, options, handlers) => { + const {listener, rawEmitter} = handlers; + let cont = FsWatchFileInstances.get(fullPath); + + /* eslint-disable no-unused-vars, prefer-destructuring */ + let listeners = new Set(); + let rawEmitters = new Set(); + + const copts = cont && cont.options; + if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) { + // "Upgrade" the watcher to persistence or a quicker interval. + // This creates some unlikely edge case issues if the user mixes + // settings in a very weird way, but solving for those cases + // doesn't seem worthwhile for the added complexity. + listeners = cont.listeners; + rawEmitters = cont.rawEmitters; + fs.unwatchFile(fullPath); + cont = undefined; + } + + /* eslint-enable no-unused-vars, prefer-destructuring */ + + if (cont) { + addAndConvert(cont, KEY_LISTENERS, listener); + addAndConvert(cont, KEY_RAW, rawEmitter); + } else { + // TODO + // listeners.add(listener); + // rawEmitters.add(rawEmitter); + cont = { + listeners: listener, + rawEmitters: rawEmitter, + options, + watcher: fs.watchFile(fullPath, options, (curr, prev) => { + foreach(cont.rawEmitters, (rawEmitter) => { + rawEmitter(EV_CHANGE, fullPath, {curr, prev}); + }); + const currmtime = curr.mtimeMs; + if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) { + foreach(cont.listeners, (listener) => listener(path, curr)); + } + }) + }; + FsWatchFileInstances.set(fullPath, cont); + } + // const index = cont.listeners.indexOf(listener); + + // Removes this instance's listeners and closes the underlying fs_watchFile + // instance if there are no more listeners left. + return () => { + delFromSet(cont, KEY_LISTENERS, listener); + delFromSet(cont, KEY_RAW, rawEmitter); + if (isEmptySet(cont.listeners)) { + FsWatchFileInstances.delete(fullPath); + fs.unwatchFile(fullPath); + cont.options = cont.watcher = undefined; + Object.freeze(cont); + } + }; +}; + +/** + * @mixin + */ +class NodeFsHandler { + +/** + * @param {import("../index").FSWatcher} fsW + */ +constructor(fsW) { + this.fsw = fsW; + this._boundHandleError = (error) => fsW._handleError(error); +} + +/** + * Watch file for changes with fs_watchFile or fs_watch. + * @param {String} path to file or dir + * @param {Function} listener on fs change + * @returns {Function} closer for the watcher instance + */ +_watchWithNodeFs(path, listener) { + const opts = this.fsw.options; + const directory = sysPath.dirname(path); + const basename = sysPath.basename(path); + const parent = this.fsw._getWatchedDir(directory); + parent.add(basename); + const absolutePath = sysPath.resolve(path); + const options = {persistent: opts.persistent}; + if (!listener) listener = EMPTY_FN; + + let closer; + if (opts.usePolling) { + options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ? + opts.binaryInterval : opts.interval; + closer = setFsWatchFileListener(path, absolutePath, options, { + listener, + rawEmitter: this.fsw._emitRaw + }); + } else { + closer = setFsWatchListener(path, absolutePath, options, { + listener, + errHandler: this._boundHandleError, + rawEmitter: this.fsw._emitRaw + }); + } + return closer; +} + +/** + * Watch a file and emit add event if warranted. + * @param {Path} file Path + * @param {fs.Stats} stats result of fs_stat + * @param {Boolean} initialAdd was the file added at watch instantiation? + * @returns {Function} closer for the watcher instance + */ +_handleFile(file, stats, initialAdd) { + if (this.fsw.closed) { + return; + } + const dirname = sysPath.dirname(file); + const basename = sysPath.basename(file); + const parent = this.fsw._getWatchedDir(dirname); + // stats is always present + let prevStats = stats; + + // if the file is already being watched, do nothing + if (parent.has(basename)) return; + + const listener = async (path, newStats) => { + if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return; + if (!newStats || newStats.mtimeMs === 0) { + try { + const newStats = await stat(file); + if (this.fsw.closed) return; + // Check that change event was not fired because of changed only accessTime. + const at = newStats.atimeMs; + const mt = newStats.mtimeMs; + if (!at || at <= mt || mt !== prevStats.mtimeMs) { + this.fsw._emit(EV_CHANGE, file, newStats); + } + if (isLinux && prevStats.ino !== newStats.ino) { + this.fsw._closeFile(path) + prevStats = newStats; + this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener)); + } else { + prevStats = newStats; + } + } catch (error) { + // Fix issues where mtime is null but file is still present + this.fsw._remove(dirname, basename); + } + // add is about to be emitted if file not already tracked in parent + } else if (parent.has(basename)) { + // Check that change event was not fired because of changed only accessTime. + const at = newStats.atimeMs; + const mt = newStats.mtimeMs; + if (!at || at <= mt || mt !== prevStats.mtimeMs) { + this.fsw._emit(EV_CHANGE, file, newStats); + } + prevStats = newStats; + } + } + // kick off the watcher + const closer = this._watchWithNodeFs(file, listener); + + // emit an add event if we're supposed to + if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) { + if (!this.fsw._throttle(EV_ADD, file, 0)) return; + this.fsw._emit(EV_ADD, file, stats); + } + + return closer; +} + +/** + * Handle symlinks encountered while reading a dir. + * @param {Object} entry returned by readdirp + * @param {String} directory path of dir being read + * @param {String} path of this item + * @param {String} item basename of this item + * @returns {Promise} true if no more processing is needed for this entry. + */ +async _handleSymlink(entry, directory, path, item) { + if (this.fsw.closed) { + return; + } + const full = entry.fullPath; + const dir = this.fsw._getWatchedDir(directory); + + if (!this.fsw.options.followSymlinks) { + // watch symlink directly (don't follow) and detect changes + this.fsw._incrReadyCount(); + + let linkPath; + try { + linkPath = await fsrealpath(path); + } catch (e) { + this.fsw._emitReady(); + return true; + } + + if (this.fsw.closed) return; + if (dir.has(item)) { + if (this.fsw._symlinkPaths.get(full) !== linkPath) { + this.fsw._symlinkPaths.set(full, linkPath); + this.fsw._emit(EV_CHANGE, path, entry.stats); + } + } else { + dir.add(item); + this.fsw._symlinkPaths.set(full, linkPath); + this.fsw._emit(EV_ADD, path, entry.stats); + } + this.fsw._emitReady(); + return true; + } + + // don't follow the same symlink more than once + if (this.fsw._symlinkPaths.has(full)) { + return true; + } + + this.fsw._symlinkPaths.set(full, true); +} + +_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) { + // Normalize the directory name on Windows + directory = sysPath.join(directory, EMPTY_STR); + + if (!wh.hasGlob) { + throttler = this.fsw._throttle('readdir', directory, 1000); + if (!throttler) return; + } + + const previous = this.fsw._getWatchedDir(wh.path); + const current = new Set(); + + let stream = this.fsw._readdirp(directory, { + fileFilter: entry => wh.filterPath(entry), + directoryFilter: entry => wh.filterDir(entry), + depth: 0 + }).on(STR_DATA, async (entry) => { + if (this.fsw.closed) { + stream = undefined; + return; + } + const item = entry.path; + let path = sysPath.join(directory, item); + current.add(item); + + if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) { + return; + } + + if (this.fsw.closed) { + stream = undefined; + return; + } + // Files that present in current directory snapshot + // but absent in previous are added to watch list and + // emit `add` event. + if (item === target || !target && !previous.has(item)) { + this.fsw._incrReadyCount(); + + // ensure relativeness of path is preserved in case of watcher reuse + path = sysPath.join(dir, sysPath.relative(dir, path)); + + this._addToNodeFs(path, initialAdd, wh, depth + 1); + } + }).on(EV_ERROR, this._boundHandleError); + + return new Promise(resolve => + stream.once(STR_END, () => { + if (this.fsw.closed) { + stream = undefined; + return; + } + const wasThrottled = throttler ? throttler.clear() : false; + + resolve(); + + // Files that absent in current directory snapshot + // but present in previous emit `remove` event + // and are removed from @watched[directory]. + previous.getChildren().filter((item) => { + return item !== directory && + !current.has(item) && + // in case of intersecting globs; + // a path may have been filtered out of this readdir, but + // shouldn't be removed because it matches a different glob + (!wh.hasGlob || wh.filterPath({ + fullPath: sysPath.resolve(directory, item) + })); + }).forEach((item) => { + this.fsw._remove(directory, item); + }); + + stream = undefined; + + // one more time for any missed in case changes came in extremely quickly + if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler); + }) + ); +} + +/** + * Read directory to add / remove files from `@watched` list and re-read it on change. + * @param {String} dir fs path + * @param {fs.Stats} stats + * @param {Boolean} initialAdd + * @param {Number} depth relative to user-supplied path + * @param {String} target child path targeted for watch + * @param {Object} wh Common watch helpers for this path + * @param {String} realpath + * @returns {Promise} closer for the watcher instance. + */ +async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) { + const parentDir = this.fsw._getWatchedDir(sysPath.dirname(dir)); + const tracked = parentDir.has(sysPath.basename(dir)); + if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) { + if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR, dir, stats); + } + + // ensure dir is tracked (harmless if redundant) + parentDir.add(sysPath.basename(dir)); + this.fsw._getWatchedDir(dir); + let throttler; + let closer; + + const oDepth = this.fsw.options.depth; + if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) { + if (!target) { + await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler); + if (this.fsw.closed) return; + } + + closer = this._watchWithNodeFs(dir, (dirPath, stats) => { + // if current directory is removed, do nothing + if (stats && stats.mtimeMs === 0) return; + + this._handleRead(dirPath, false, wh, target, dir, depth, throttler); + }); + } + return closer; +} + +/** + * Handle added file, directory, or glob pattern. + * Delegates call to _handleFile / _handleDir after checks. + * @param {String} path to file or ir + * @param {Boolean} initialAdd was the file added at watch instantiation? + * @param {Object} priorWh depth relative to user-supplied path + * @param {Number} depth Child path actually targeted for watch + * @param {String=} target Child path actually targeted for watch + * @returns {Promise} + */ +async _addToNodeFs(path, initialAdd, priorWh, depth, target) { + const ready = this.fsw._emitReady; + if (this.fsw._isIgnored(path) || this.fsw.closed) { + ready(); + return false; + } + + const wh = this.fsw._getWatchHelpers(path, depth); + if (!wh.hasGlob && priorWh) { + wh.hasGlob = priorWh.hasGlob; + wh.globFilter = priorWh.globFilter; + wh.filterPath = entry => priorWh.filterPath(entry); + wh.filterDir = entry => priorWh.filterDir(entry); + } + + // evaluate what is at the path we're being asked to watch + try { + const stats = await statMethods[wh.statMethod](wh.watchPath); + if (this.fsw.closed) return; + if (this.fsw._isIgnored(wh.watchPath, stats)) { + ready(); + return false; + } + + const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START); + let closer; + if (stats.isDirectory()) { + const absPath = sysPath.resolve(path); + const targetPath = follow ? await fsrealpath(path) : path; + if (this.fsw.closed) return; + closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath); + if (this.fsw.closed) return; + // preserve this symlink's target path + if (absPath !== targetPath && targetPath !== undefined) { + this.fsw._symlinkPaths.set(absPath, targetPath); + } + } else if (stats.isSymbolicLink()) { + const targetPath = follow ? await fsrealpath(path) : path; + if (this.fsw.closed) return; + const parent = sysPath.dirname(wh.watchPath); + this.fsw._getWatchedDir(parent).add(wh.watchPath); + this.fsw._emit(EV_ADD, wh.watchPath, stats); + closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath); + if (this.fsw.closed) return; + + // preserve this symlink's target path + if (targetPath !== undefined) { + this.fsw._symlinkPaths.set(sysPath.resolve(path), targetPath); + } + } else { + closer = this._handleFile(wh.watchPath, stats, initialAdd); + } + ready(); + + this.fsw._addPathCloser(path, closer); + return false; + + } catch (error) { + if (this.fsw._handleError(error)) { + ready(); + return path; + } + } +} + +} + +module.exports = NodeFsHandler; diff --git a/labWeb/lab7/node_modules/chokidar/package.json b/labWeb/lab7/node_modules/chokidar/package.json new file mode 100644 index 0000000..6c3cd27 --- /dev/null +++ b/labWeb/lab7/node_modules/chokidar/package.json @@ -0,0 +1,85 @@ +{ + "name": "chokidar", + "description": "Minimal and efficient cross-platform file watching library", + "version": "3.5.3", + "homepage": "https://github.com/paulmillr/chokidar", + "author": "Paul Miller (https://paulmillr.com)", + "contributors": [ + "Paul Miller (https://paulmillr.com)", + "Elan Shanker" + ], + "engines": { + "node": ">= 8.10.0" + }, + "main": "index.js", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "devDependencies": { + "@types/node": "^14", + "chai": "^4.3", + "dtslint": "^3.3.0", + "eslint": "^7.0.0", + "mocha": "^7.0.0", + "nyc": "^15.0.0", + "rimraf": "^3.0.0", + "sinon": "^9.0.1", + "sinon-chai": "^3.3.0", + "typescript": "~4.4.3", + "upath": "^1.2.0" + }, + "files": [ + "index.js", + "lib/*.js", + "types/index.d.ts" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/paulmillr/chokidar.git" + }, + "bugs": { + "url": "https://github.com/paulmillr/chokidar/issues" + }, + "license": "MIT", + "scripts": { + "dtslint": "dtslint types", + "lint": "eslint --report-unused-disable-directives --ignore-path .gitignore .", + "mocha": "mocha --exit --timeout 90000", + "test": "npm run lint && npm run mocha" + }, + "keywords": [ + "fs", + "watch", + "watchFile", + "watcher", + "watching", + "file", + "fsevents" + ], + "types": "./types/index.d.ts", + "nyc": { + "include": [ + "index.js", + "lib/*.js" + ], + "reporter": [ + "html", + "text" + ] + }, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] +} diff --git a/labWeb/lab7/node_modules/chokidar/types/index.d.ts b/labWeb/lab7/node_modules/chokidar/types/index.d.ts new file mode 100644 index 0000000..aab8e33 --- /dev/null +++ b/labWeb/lab7/node_modules/chokidar/types/index.d.ts @@ -0,0 +1,188 @@ +// TypeScript Version: 3.0 + +/// + +import * as fs from "fs"; +import { EventEmitter } from "events"; +import { Matcher } from 'anymatch'; + +export class FSWatcher extends EventEmitter implements fs.FSWatcher { + options: WatchOptions; + + /** + * Constructs a new FSWatcher instance with optional WatchOptions parameter. + */ + constructor(options?: WatchOptions); + + /** + * Add files, directories, or glob patterns for tracking. Takes an array of strings or just one + * string. + */ + add(paths: string | ReadonlyArray): this; + + /** + * Stop watching files, directories, or glob patterns. Takes an array of strings or just one + * string. + */ + unwatch(paths: string | ReadonlyArray): this; + + /** + * Returns an object representing all the paths on the file system being watched by this + * `FSWatcher` instance. The object's keys are all the directories (using absolute paths unless + * the `cwd` option was used), and the values are arrays of the names of the items contained in + * each directory. + */ + getWatched(): { + [directory: string]: string[]; + }; + + /** + * Removes all listeners from watched files. + */ + close(): Promise; + + on(event: 'add'|'addDir'|'change', listener: (path: string, stats?: fs.Stats) => void): this; + + on(event: 'all', listener: (eventName: 'add'|'addDir'|'change'|'unlink'|'unlinkDir', path: string, stats?: fs.Stats) => void): this; + + /** + * Error occurred + */ + on(event: 'error', listener: (error: Error) => void): this; + + /** + * Exposes the native Node `fs.FSWatcher events` + */ + on(event: 'raw', listener: (eventName: string, path: string, details: any) => void): this; + + /** + * Fires when the initial scan is complete + */ + on(event: 'ready', listener: () => void): this; + + on(event: 'unlink'|'unlinkDir', listener: (path: string) => void): this; + + on(event: string, listener: (...args: any[]) => void): this; +} + +export interface WatchOptions { + /** + * Indicates whether the process should continue to run as long as files are being watched. If + * set to `false` when using `fsevents` to watch, no more events will be emitted after `ready`, + * even if the process continues to run. + */ + persistent?: boolean; + + /** + * ([anymatch](https://github.com/micromatch/anymatch)-compatible definition) Defines files/paths to + * be ignored. The whole relative or absolute path is tested, not just filename. If a function + * with two arguments is provided, it gets called twice per path - once with a single argument + * (the path), second time with two arguments (the path and the + * [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object of that path). + */ + ignored?: Matcher; + + /** + * If set to `false` then `add`/`addDir` events are also emitted for matching paths while + * instantiating the watching as chokidar discovers these file paths (before the `ready` event). + */ + ignoreInitial?: boolean; + + /** + * When `false`, only the symlinks themselves will be watched for changes instead of following + * the link references and bubbling events through the link's path. + */ + followSymlinks?: boolean; + + /** + * The base directory from which watch `paths` are to be derived. Paths emitted with events will + * be relative to this. + */ + cwd?: string; + + /** + * If set to true then the strings passed to .watch() and .add() are treated as literal path + * names, even if they look like globs. Default: false. + */ + disableGlobbing?: boolean; + + /** + * Whether to use fs.watchFile (backed by polling), or fs.watch. If polling leads to high CPU + * utilization, consider setting this to `false`. It is typically necessary to **set this to + * `true` to successfully watch files over a network**, and it may be necessary to successfully + * watch files in other non-standard situations. Setting to `true` explicitly on OS X overrides + * the `useFsEvents` default. + */ + usePolling?: boolean; + + /** + * Whether to use the `fsevents` watching interface if available. When set to `true` explicitly + * and `fsevents` is available this supercedes the `usePolling` setting. When set to `false` on + * OS X, `usePolling: true` becomes the default. + */ + useFsEvents?: boolean; + + /** + * If relying upon the [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object that + * may get passed with `add`, `addDir`, and `change` events, set this to `true` to ensure it is + * provided even in cases where it wasn't already available from the underlying watch events. + */ + alwaysStat?: boolean; + + /** + * If set, limits how many levels of subdirectories will be traversed. + */ + depth?: number; + + /** + * Interval of file system polling. + */ + interval?: number; + + /** + * Interval of file system polling for binary files. ([see list of binary extensions](https://gi + * thub.com/sindresorhus/binary-extensions/blob/master/binary-extensions.json)) + */ + binaryInterval?: number; + + /** + * Indicates whether to watch files that don't have read permissions if possible. If watching + * fails due to `EPERM` or `EACCES` with this set to `true`, the errors will be suppressed + * silently. + */ + ignorePermissionErrors?: boolean; + + /** + * `true` if `useFsEvents` and `usePolling` are `false`). Automatically filters out artifacts + * that occur when using editors that use "atomic writes" instead of writing directly to the + * source file. If a file is re-added within 100 ms of being deleted, Chokidar emits a `change` + * event rather than `unlink` then `add`. If the default of 100 ms does not work well for you, + * you can override it by setting `atomic` to a custom value, in milliseconds. + */ + atomic?: boolean | number; + + /** + * can be set to an object in order to adjust timing params: + */ + awaitWriteFinish?: AwaitWriteFinishOptions | boolean; +} + +export interface AwaitWriteFinishOptions { + /** + * Amount of time in milliseconds for a file size to remain constant before emitting its event. + */ + stabilityThreshold?: number; + + /** + * File size polling interval. + */ + pollInterval?: number; +} + +/** + * produces an instance of `FSWatcher`. + */ +export function watch( + paths: string | ReadonlyArray, + options?: WatchOptions +): FSWatcher; diff --git a/labWeb/lab7/node_modules/content-disposition/HISTORY.md b/labWeb/lab7/node_modules/content-disposition/HISTORY.md new file mode 100644 index 0000000..488effa --- /dev/null +++ b/labWeb/lab7/node_modules/content-disposition/HISTORY.md @@ -0,0 +1,60 @@ +0.5.4 / 2021-12-10 +================== + + * deps: safe-buffer@5.2.1 + +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/labWeb/lab7/node_modules/content-disposition/LICENSE b/labWeb/lab7/node_modules/content-disposition/LICENSE new file mode 100644 index 0000000..84441fb --- /dev/null +++ b/labWeb/lab7/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/labWeb/lab7/node_modules/content-disposition/README.md b/labWeb/lab7/node_modules/content-disposition/README.md new file mode 100644 index 0000000..3a0bb05 --- /dev/null +++ b/labWeb/lab7/node_modules/content-disposition/README.md @@ -0,0 +1,142 @@ +# 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][github-actions-ci-image]][github-actions-ci-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 +[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 +[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/content-disposition/ci/master?label=ci +[github-actions-ci-url]: https://github.com/jshttp/content-disposition?query=workflow%3Aci diff --git a/labWeb/lab7/node_modules/content-disposition/index.js b/labWeb/lab7/node_modules/content-disposition/index.js new file mode 100644 index 0000000..ecec899 --- /dev/null +++ b/labWeb/lab7/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 5987 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/labWeb/lab7/node_modules/content-disposition/package.json b/labWeb/lab7/node_modules/content-disposition/package.json new file mode 100644 index 0000000..43c70ce --- /dev/null +++ b/labWeb/lab7/node_modules/content-disposition/package.json @@ -0,0 +1,44 @@ +{ + "name": "content-disposition", + "description": "Create and parse Content-Disposition header", + "version": "0.5.4", + "author": "Douglas Christopher Wilson ", + "license": "MIT", + "keywords": [ + "content-disposition", + "http", + "rfc6266", + "res" + ], + "repository": "jshttp/content-disposition", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "devDependencies": { + "deep-equal": "1.0.1", + "eslint": "7.32.0", + "eslint-config-standard": "13.0.1", + "eslint-plugin-import": "2.25.3", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.2.0", + "eslint-plugin-standard": "4.1.0", + "istanbul": "0.4.5", + "mocha": "9.1.3" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "README.md", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "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/" + } +} diff --git a/labWeb/lab7/node_modules/content-type/HISTORY.md b/labWeb/lab7/node_modules/content-type/HISTORY.md new file mode 100644 index 0000000..4583671 --- /dev/null +++ b/labWeb/lab7/node_modules/content-type/HISTORY.md @@ -0,0 +1,29 @@ +1.0.5 / 2023-01-29 +================== + + * perf: skip value escaping when unnecessary + +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/labWeb/lab7/node_modules/content-type/LICENSE b/labWeb/lab7/node_modules/content-type/LICENSE new file mode 100644 index 0000000..34b1a2d --- /dev/null +++ b/labWeb/lab7/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/labWeb/lab7/node_modules/content-type/README.md b/labWeb/lab7/node_modules/content-type/README.md new file mode 100644 index 0000000..c1a922a --- /dev/null +++ b/labWeb/lab7/node_modules/content-type/README.md @@ -0,0 +1,94 @@ +# content-type + +[![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] + +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` header. 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', + parameters: { charset: 'utf-8' } +}) +``` + +Format an object into a `Content-Type` header. 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) + +[ci-image]: https://badgen.net/github/checks/jshttp/content-type/master?label=ci +[ci-url]: https://github.com/jshttp/content-type/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/content-type/master +[coveralls-url]: https://coveralls.io/r/jshttp/content-type?branch=master +[node-image]: https://badgen.net/npm/node/content-type +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/content-type +[npm-url]: https://npmjs.org/package/content-type +[npm-version-image]: https://badgen.net/npm/v/content-type diff --git a/labWeb/lab7/node_modules/content-type/index.js b/labWeb/lab7/node_modules/content-type/index.js new file mode 100644 index 0000000..41840e7 --- /dev/null +++ b/labWeb/lab7/node_modules/content-type/index.js @@ -0,0 +1,225 @@ +/*! + * 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 // eslint-disable-line no-control-regex +var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/ // eslint-disable-line no-control-regex +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 // eslint-disable-line no-control-regex + +/** + * 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.slice(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.charCodeAt(0) === 0x22 /* " */) { + // remove quotes + value = value.slice(1, -1) + + // remove escapes + if (value.indexOf('\\') !== -1) { + value = value.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/labWeb/lab7/node_modules/content-type/package.json b/labWeb/lab7/node_modules/content-type/package.json new file mode 100644 index 0000000..9db19f6 --- /dev/null +++ b/labWeb/lab7/node_modules/content-type/package.json @@ -0,0 +1,42 @@ +{ + "name": "content-type", + "description": "Create and parse HTTP Content-Type header", + "version": "1.0.5", + "author": "Douglas Christopher Wilson ", + "license": "MIT", + "keywords": [ + "content-type", + "http", + "req", + "res", + "rfc7231" + ], + "repository": "jshttp/content-type", + "devDependencies": { + "deep-equal": "1.0.1", + "eslint": "8.32.0", + "eslint-config-standard": "15.0.1", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "6.1.1", + "eslint-plugin-standard": "4.1.0", + "mocha": "10.2.0", + "nyc": "15.1.0" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "README.md", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-ci": "nyc --reporter=lcovonly --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "version": "node scripts/version-history.js && git add HISTORY.md" + } +} diff --git a/labWeb/lab7/node_modules/cookie-signature/.npmignore b/labWeb/lab7/node_modules/cookie-signature/.npmignore new file mode 100644 index 0000000..f1250e5 --- /dev/null +++ b/labWeb/lab7/node_modules/cookie-signature/.npmignore @@ -0,0 +1,4 @@ +support +test +examples +*.sock diff --git a/labWeb/lab7/node_modules/cookie-signature/History.md b/labWeb/lab7/node_modules/cookie-signature/History.md new file mode 100644 index 0000000..78513cc --- /dev/null +++ b/labWeb/lab7/node_modules/cookie-signature/History.md @@ -0,0 +1,38 @@ +1.0.6 / 2015-02-03 +================== + +* use `npm test` instead of `make test` to run tests +* clearer assertion messages when checking input + + +1.0.5 / 2014-09-05 +================== + +* add license to package.json + +1.0.4 / 2014-06-25 +================== + + * corrected avoidance of timing attacks (thanks @tenbits!) + +1.0.3 / 2014-01-28 +================== + + * [incorrect] fix for timing attacks + +1.0.2 / 2014-01-28 +================== + + * fix missing repository warning + * fix typo in test + +1.0.1 / 2013-04-15 +================== + + * Revert "Changed underlying HMAC algo. to sha512." + * Revert "Fix for timing attacks on MAC verification." + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/labWeb/lab7/node_modules/cookie-signature/Readme.md b/labWeb/lab7/node_modules/cookie-signature/Readme.md new file mode 100644 index 0000000..2559e84 --- /dev/null +++ b/labWeb/lab7/node_modules/cookie-signature/Readme.md @@ -0,0 +1,42 @@ + +# cookie-signature + + Sign and unsign cookies. + +## Example + +```js +var cookie = require('cookie-signature'); + +var val = cookie.sign('hello', 'tobiiscool'); +val.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI'); + +var val = cookie.sign('hello', 'tobiiscool'); +cookie.unsign(val, 'tobiiscool').should.equal('hello'); +cookie.unsign(val, 'luna').should.be.false; +``` + +## License + +(The MIT License) + +Copyright (c) 2012 LearnBoost <tj@learnboost.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. \ No newline at end of file diff --git a/labWeb/lab7/node_modules/cookie-signature/index.js b/labWeb/lab7/node_modules/cookie-signature/index.js new file mode 100644 index 0000000..b8c9463 --- /dev/null +++ b/labWeb/lab7/node_modules/cookie-signature/index.js @@ -0,0 +1,51 @@ +/** + * Module dependencies. + */ + +var crypto = require('crypto'); + +/** + * Sign the given `val` with `secret`. + * + * @param {String} val + * @param {String} secret + * @return {String} + * @api private + */ + +exports.sign = function(val, secret){ + if ('string' != typeof val) throw new TypeError("Cookie value must be provided as a string."); + if ('string' != typeof secret) throw new TypeError("Secret string must be provided."); + return val + '.' + crypto + .createHmac('sha256', secret) + .update(val) + .digest('base64') + .replace(/\=+$/, ''); +}; + +/** + * Unsign and decode the given `val` with `secret`, + * returning `false` if the signature is invalid. + * + * @param {String} val + * @param {String} secret + * @return {String|Boolean} + * @api private + */ + +exports.unsign = function(val, secret){ + if ('string' != typeof val) throw new TypeError("Signed cookie string must be provided."); + if ('string' != typeof secret) throw new TypeError("Secret string must be provided."); + var str = val.slice(0, val.lastIndexOf('.')) + , mac = exports.sign(str, secret); + + return sha1(mac) == sha1(val) ? str : false; +}; + +/** + * Private + */ + +function sha1(str){ + return crypto.createHash('sha1').update(str).digest('hex'); +} diff --git a/labWeb/lab7/node_modules/cookie-signature/package.json b/labWeb/lab7/node_modules/cookie-signature/package.json new file mode 100644 index 0000000..29c4498 --- /dev/null +++ b/labWeb/lab7/node_modules/cookie-signature/package.json @@ -0,0 +1,18 @@ +{ + "name": "cookie-signature", + "version": "1.0.6", + "description": "Sign and unsign cookies", + "keywords": ["cookie", "sign", "unsign"], + "author": "TJ Holowaychuk ", + "license": "MIT", + "repository": { "type": "git", "url": "https://github.com/visionmedia/node-cookie-signature.git"}, + "dependencies": {}, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "scripts": { + "test": "mocha --require should --reporter spec" + }, + "main": "index" +} diff --git a/labWeb/lab7/node_modules/cookie/LICENSE b/labWeb/lab7/node_modules/cookie/LICENSE new file mode 100644 index 0000000..058b6b4 --- /dev/null +++ b/labWeb/lab7/node_modules/cookie/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2012-2014 Roman Shtylman +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/labWeb/lab7/node_modules/cookie/README.md b/labWeb/lab7/node_modules/cookie/README.md new file mode 100644 index 0000000..71fdac1 --- /dev/null +++ b/labWeb/lab7/node_modules/cookie/README.md @@ -0,0 +1,317 @@ +# cookie + +[![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] + +Basic HTTP cookie parser and serializer for HTTP servers. + +## 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 cookie +``` + +## API + +```js +var cookie = require('cookie'); +``` + +### cookie.parse(str, options) + +Parse an HTTP `Cookie` header string and returning an object of all cookie name-value pairs. +The `str` argument is the string representing a `Cookie` header value and `options` is an +optional object containing additional parsing options. + +```js +var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2'); +// { foo: 'bar', equation: 'E=mc^2' } +``` + +#### Options + +`cookie.parse` accepts these properties in the options object. + +##### decode + +Specifies a function that will be used to decode a cookie's value. Since the value of a cookie +has a limited character set (and must be a simple string), this function can be used to decode +a previously-encoded cookie value into a JavaScript string or other object. + +The default function is the global `decodeURIComponent`, which will decode any URL-encoded +sequences into their byte representations. + +**note** if an error is thrown from this function, the original, non-decoded cookie value will +be returned as the cookie's value. + +### cookie.serialize(name, value, options) + +Serialize a cookie name-value pair into a `Set-Cookie` header string. The `name` argument is the +name for the cookie, the `value` argument is the value to set the cookie to, and the `options` +argument is an optional object containing additional serialization options. + +```js +var setCookie = cookie.serialize('foo', 'bar'); +// foo=bar +``` + +#### Options + +`cookie.serialize` accepts these properties in the options object. + +##### domain + +Specifies the value for the [`Domain` `Set-Cookie` attribute][rfc-6265-5.2.3]. By default, no +domain is set, and most clients will consider the cookie to apply to only the current domain. + +##### encode + +Specifies a function that will be used to encode a cookie's value. Since value of a cookie +has a limited character set (and must be a simple string), this function can be used to encode +a value into a string suited for a cookie's value. + +The default function is the global `encodeURIComponent`, which will encode a JavaScript string +into UTF-8 byte sequences and then URL-encode any that fall outside of the cookie range. + +##### expires + +Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute][rfc-6265-5.2.1]. +By default, no expiration is set, and most clients will consider this a "non-persistent cookie" and +will delete it on a condition like exiting a web browser application. + +**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and +`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this, +so if both are set, they should point to the same date and time. + +##### httpOnly + +Specifies the `boolean` value for the [`HttpOnly` `Set-Cookie` attribute][rfc-6265-5.2.6]. When truthy, +the `HttpOnly` attribute is set, otherwise it is not. By default, the `HttpOnly` attribute is not set. + +**note** be careful when setting this to `true`, as compliant clients will not allow client-side +JavaScript to see the cookie in `document.cookie`. + +##### maxAge + +Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute][rfc-6265-5.2.2]. +The given number will be converted to an integer by rounding down. By default, no maximum age is set. + +**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and +`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this, +so if both are set, they should point to the same date and time. + +##### partitioned + +Specifies the `boolean` value for the [`Partitioned` `Set-Cookie`](rfc-cutler-httpbis-partitioned-cookies) +attribute. When truthy, the `Partitioned` attribute is set, otherwise it is not. By default, the +`Partitioned` attribute is not set. + +**note** This is an attribute that has not yet been fully standardized, and may change in the future. +This also means many clients may ignore this attribute until they understand it. + +More information about can be found in [the proposal](https://github.com/privacycg/CHIPS). + +##### path + +Specifies the value for the [`Path` `Set-Cookie` attribute][rfc-6265-5.2.4]. By default, the path +is considered the ["default path"][rfc-6265-5.1.4]. + +##### priority + +Specifies the `string` to be the value for the [`Priority` `Set-Cookie` attribute][rfc-west-cookie-priority-00-4.1]. + + - `'low'` will set the `Priority` attribute to `Low`. + - `'medium'` will set the `Priority` attribute to `Medium`, the default priority when not set. + - `'high'` will set the `Priority` attribute to `High`. + +More information about the different priority levels can be found in +[the specification][rfc-west-cookie-priority-00-4.1]. + +**note** This is an attribute that has not yet been fully standardized, and may change in the future. +This also means many clients may ignore this attribute until they understand it. + +##### sameSite + +Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][rfc-6265bis-09-5.4.7]. + + - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement. + - `false` will not set the `SameSite` attribute. + - `'lax'` will set the `SameSite` attribute to `Lax` for lax same site enforcement. + - `'none'` will set the `SameSite` attribute to `None` for an explicit cross-site cookie. + - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement. + +More information about the different enforcement levels can be found in +[the specification][rfc-6265bis-09-5.4.7]. + +**note** This is an attribute that has not yet been fully standardized, and may change in the future. +This also means many clients may ignore this attribute until they understand it. + +##### secure + +Specifies the `boolean` value for the [`Secure` `Set-Cookie` attribute][rfc-6265-5.2.5]. When truthy, +the `Secure` attribute is set, otherwise it is not. By default, the `Secure` attribute is not set. + +**note** be careful when setting this to `true`, as compliant clients will not send the cookie back to +the server in the future if the browser does not have an HTTPS connection. + +## Example + +The following example uses this module in conjunction with the Node.js core HTTP server +to prompt a user for their name and display it back on future visits. + +```js +var cookie = require('cookie'); +var escapeHtml = require('escape-html'); +var http = require('http'); +var url = require('url'); + +function onRequest(req, res) { + // Parse the query string + var query = url.parse(req.url, true, true).query; + + if (query && query.name) { + // Set a new cookie with the name + res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), { + httpOnly: true, + maxAge: 60 * 60 * 24 * 7 // 1 week + })); + + // Redirect back after setting cookie + res.statusCode = 302; + res.setHeader('Location', req.headers.referer || '/'); + res.end(); + return; + } + + // Parse the cookies on the request + var cookies = cookie.parse(req.headers.cookie || ''); + + // Get the visitor name set in the cookie + var name = cookies.name; + + res.setHeader('Content-Type', 'text/html; charset=UTF-8'); + + if (name) { + res.write('

Welcome back, ' + escapeHtml(name) + '!

'); + } else { + res.write('

Hello, new visitor!

'); + } + + res.write('
'); + res.write(' '); + res.end('
'); +} + +http.createServer(onRequest).listen(3000); +``` + +## Testing + +```sh +$ npm test +``` + +## Benchmark + +``` +$ npm run bench + +> cookie@0.5.0 bench +> node benchmark/index.js + + node@18.18.2 + acorn@8.10.0 + ada@2.6.0 + ares@1.19.1 + brotli@1.0.9 + cldr@43.1 + icu@73.2 + llhttp@6.0.11 + modules@108 + napi@9 + nghttp2@1.57.0 + nghttp3@0.7.0 + ngtcp2@0.8.1 + openssl@3.0.10+quic + simdutf@3.2.14 + tz@2023c + undici@5.26.3 + unicode@15.0 + uv@1.44.2 + uvwasi@0.0.18 + v8@10.2.154.26-node.26 + zlib@1.2.13.1-motley + +> node benchmark/parse-top.js + + cookie.parse - top sites + + 14 tests completed. + + parse accounts.google.com x 2,588,913 ops/sec ±0.74% (186 runs sampled) + parse apple.com x 2,370,002 ops/sec ±0.69% (186 runs sampled) + parse cloudflare.com x 2,213,102 ops/sec ±0.88% (188 runs sampled) + parse docs.google.com x 2,194,157 ops/sec ±1.03% (184 runs sampled) + parse drive.google.com x 2,265,084 ops/sec ±0.79% (187 runs sampled) + parse en.wikipedia.org x 457,099 ops/sec ±0.81% (186 runs sampled) + parse linkedin.com x 504,407 ops/sec ±0.89% (186 runs sampled) + parse maps.google.com x 1,230,959 ops/sec ±0.98% (186 runs sampled) + parse microsoft.com x 926,294 ops/sec ±0.88% (184 runs sampled) + parse play.google.com x 2,311,338 ops/sec ±0.83% (185 runs sampled) + parse support.google.com x 1,508,850 ops/sec ±0.86% (186 runs sampled) + parse www.google.com x 1,022,582 ops/sec ±1.32% (182 runs sampled) + parse youtu.be x 332,136 ops/sec ±1.02% (185 runs sampled) + parse youtube.com x 323,833 ops/sec ±0.77% (183 runs sampled) + +> node benchmark/parse.js + + cookie.parse - generic + + 6 tests completed. + + simple x 3,214,032 ops/sec ±1.61% (183 runs sampled) + decode x 587,237 ops/sec ±1.16% (187 runs sampled) + unquote x 2,954,618 ops/sec ±1.35% (183 runs sampled) + duplicates x 857,008 ops/sec ±0.89% (187 runs sampled) + 10 cookies x 292,133 ops/sec ±0.89% (187 runs sampled) + 100 cookies x 22,610 ops/sec ±0.68% (187 runs sampled) +``` + +## References + +- [RFC 6265: HTTP State Management Mechanism][rfc-6265] +- [Same-site Cookies][rfc-6265bis-09-5.4.7] + +[rfc-cutler-httpbis-partitioned-cookies]: https://tools.ietf.org/html/draft-cutler-httpbis-partitioned-cookies/ +[rfc-west-cookie-priority-00-4.1]: https://tools.ietf.org/html/draft-west-cookie-priority-00#section-4.1 +[rfc-6265bis-09-5.4.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-09#section-5.4.7 +[rfc-6265]: https://tools.ietf.org/html/rfc6265 +[rfc-6265-5.1.4]: https://tools.ietf.org/html/rfc6265#section-5.1.4 +[rfc-6265-5.2.1]: https://tools.ietf.org/html/rfc6265#section-5.2.1 +[rfc-6265-5.2.2]: https://tools.ietf.org/html/rfc6265#section-5.2.2 +[rfc-6265-5.2.3]: https://tools.ietf.org/html/rfc6265#section-5.2.3 +[rfc-6265-5.2.4]: https://tools.ietf.org/html/rfc6265#section-5.2.4 +[rfc-6265-5.2.5]: https://tools.ietf.org/html/rfc6265#section-5.2.5 +[rfc-6265-5.2.6]: https://tools.ietf.org/html/rfc6265#section-5.2.6 +[rfc-6265-5.3]: https://tools.ietf.org/html/rfc6265#section-5.3 + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/jshttp/cookie/master?label=ci +[ci-url]: https://github.com/jshttp/cookie/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/cookie/master +[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master +[node-image]: https://badgen.net/npm/node/cookie +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/cookie +[npm-url]: https://npmjs.org/package/cookie +[npm-version-image]: https://badgen.net/npm/v/cookie diff --git a/labWeb/lab7/node_modules/cookie/SECURITY.md b/labWeb/lab7/node_modules/cookie/SECURITY.md new file mode 100644 index 0000000..fd4a6c5 --- /dev/null +++ b/labWeb/lab7/node_modules/cookie/SECURITY.md @@ -0,0 +1,25 @@ +# Security Policies and Procedures + +## Reporting a Bug + +The `cookie` team and community take all security bugs seriously. Thank +you for improving the security of the project. We appreciate your efforts and +responsible disclosure and will make every effort to acknowledge your +contributions. + +Report security bugs by emailing the current owner(s) of `cookie`. This +information can be found in the npm registry using the command +`npm owner ls cookie`. +If unsure or unable to get the information from the above, open an issue +in the [project issue tracker](https://github.com/jshttp/cookie/issues) +asking for the current contact information. + +To ensure the timely response to your report, please ensure that the entirety +of the report is contained within the email body and not solely behind a web +link or an attachment. + +At least one owner will acknowledge your email within 48 hours, and will send a +more detailed response within 48 hours indicating the next steps in handling +your report. After the initial reply to your report, the owners will +endeavor to keep you informed of the progress towards a fix and full +announcement, and may ask for additional information or guidance. diff --git a/labWeb/lab7/node_modules/cookie/index.js b/labWeb/lab7/node_modules/cookie/index.js new file mode 100644 index 0000000..acd5acd --- /dev/null +++ b/labWeb/lab7/node_modules/cookie/index.js @@ -0,0 +1,335 @@ +/*! + * cookie + * Copyright(c) 2012-2014 Roman Shtylman + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +exports.parse = parse; +exports.serialize = serialize; + +/** + * Module variables. + * @private + */ + +var __toString = Object.prototype.toString +var __hasOwnProperty = Object.prototype.hasOwnProperty + +/** + * RegExp to match cookie-name in RFC 6265 sec 4.1.1 + * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2 + * which has been replaced by the token definition in RFC 7230 appendix B. + * + * cookie-name = token + * token = 1*tchar + * tchar = "!" / "#" / "$" / "%" / "&" / "'" / + * "*" / "+" / "-" / "." / "^" / "_" / + * "`" / "|" / "~" / DIGIT / ALPHA + */ + +var cookieNameRegExp = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/; + +/** + * RegExp to match cookie-value in RFC 6265 sec 4.1.1 + * + * cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE ) + * cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E + * ; US-ASCII characters excluding CTLs, + * ; whitespace DQUOTE, comma, semicolon, + * ; and backslash + */ + +var cookieValueRegExp = /^("?)[\u0021\u0023-\u002B\u002D-\u003A\u003C-\u005B\u005D-\u007E]*\1$/; + +/** + * RegExp to match domain-value in RFC 6265 sec 4.1.1 + * + * domain-value = + * ; defined in [RFC1034], Section 3.5, as + * ; enhanced by [RFC1123], Section 2.1 + * =