From 27325ea5f10c65bffcb49caa36008d7fc9ade86c Mon Sep 17 00:00:00 2001 From: Elijah Date: Wed, 20 May 2026 17:40:17 -0700 Subject: [PATCH] initial commit --- .dockerignore | 6 + Dockerfile | 30 + docker-compose.yml | 26 + node_modules/.bin/mime | 16 + node_modules/.bin/mime.cmd | 17 + node_modules/.bin/mime.ps1 | 28 + node_modules/.bin/mkdirp | 16 + node_modules/.bin/mkdirp.cmd | 17 + node_modules/.bin/mkdirp.ps1 | 28 + node_modules/.bin/uuid | 16 + node_modules/.bin/uuid.cmd | 17 + node_modules/.bin/uuid.ps1 | 28 + node_modules/.package-lock.json | 1067 + .../@pdf-lib/standard-fonts/LICENSE.md | 21 + .../@pdf-lib/standard-fonts/README.md | 83 + .../standard-fonts/dist/standard-fonts.js | 7023 +++ .../standard-fonts/dist/standard-fonts.min.js | 1 + .../es/Courier-Bold.compressed.json | 1 + .../es/Courier-BoldOblique.compressed.json | 1 + .../es/Courier-Oblique.compressed.json | 1 + .../standard-fonts/es/Courier.compressed.json | 1 + .../@pdf-lib/standard-fonts/es/Encoding.d.ts | 24 + .../@pdf-lib/standard-fonts/es/Encoding.js | 34 + .../@pdf-lib/standard-fonts/es/Font.d.ts | 83 + .../@pdf-lib/standard-fonts/es/Font.js | 83 + .../es/Helvetica-Bold.compressed.json | 1 + .../es/Helvetica-BoldOblique.compressed.json | 1 + .../es/Helvetica-Oblique.compressed.json | 1 + .../es/Helvetica.compressed.json | 1 + .../standard-fonts/es/Symbol.compressed.json | 1 + .../es/Times-Bold.compressed.json | 1 + .../es/Times-BoldItalic.compressed.json | 1 + .../es/Times-Italic.compressed.json | 1 + .../es/Times-Roman.compressed.json | 1 + .../es/ZapfDingbats.compressed.json | 1 + .../es/all-encodings.compressed.json | 1 + .../@pdf-lib/standard-fonts/es/index.d.ts | 2 + .../@pdf-lib/standard-fonts/es/index.js | 2 + .../@pdf-lib/standard-fonts/es/utils.d.ts | 3 + .../@pdf-lib/standard-fonts/es/utils.js | 62 + .../lib/Courier-Bold.compressed.json | 1 + .../lib/Courier-BoldOblique.compressed.json | 1 + .../lib/Courier-Oblique.compressed.json | 1 + .../lib/Courier.compressed.json | 1 + .../@pdf-lib/standard-fonts/lib/Encoding.d.ts | 24 + .../@pdf-lib/standard-fonts/lib/Encoding.js | 39 + .../@pdf-lib/standard-fonts/lib/Font.d.ts | 83 + .../@pdf-lib/standard-fonts/lib/Font.js | 88 + .../lib/Helvetica-Bold.compressed.json | 1 + .../lib/Helvetica-BoldOblique.compressed.json | 1 + .../lib/Helvetica-Oblique.compressed.json | 1 + .../lib/Helvetica.compressed.json | 1 + .../standard-fonts/lib/Symbol.compressed.json | 1 + .../lib/Times-Bold.compressed.json | 1 + .../lib/Times-BoldItalic.compressed.json | 1 + .../lib/Times-Italic.compressed.json | 1 + .../lib/Times-Roman.compressed.json | 1 + .../lib/ZapfDingbats.compressed.json | 1 + .../lib/all-encodings.compressed.json | 1 + .../@pdf-lib/standard-fonts/lib/index.d.ts | 2 + .../@pdf-lib/standard-fonts/lib/index.js | 7 + .../@pdf-lib/standard-fonts/lib/utils.d.ts | 3 + .../@pdf-lib/standard-fonts/lib/utils.js | 67 + .../@pdf-lib/standard-fonts/package.json | 55 + node_modules/@pdf-lib/upng/LICENSE | 21 + node_modules/@pdf-lib/upng/README.md | 143 + node_modules/@pdf-lib/upng/UPNG.js | 1027 + node_modules/@pdf-lib/upng/cjs/UPNG.js | 2017 + node_modules/@pdf-lib/upng/dist/UPNG.js | 7832 +++ node_modules/@pdf-lib/upng/dist/UPNG.min.js | 7832 +++ node_modules/@pdf-lib/upng/index.d.ts | 88 + node_modules/@pdf-lib/upng/package.json | 54 + node_modules/@pdf-lib/upng/yarn.lock | 1423 + node_modules/accepts/HISTORY.md | 243 + node_modules/accepts/LICENSE | 23 + node_modules/accepts/README.md | 140 + node_modules/accepts/index.js | 238 + node_modules/accepts/package.json | 47 + node_modules/append-field/.npmignore | 1 + node_modules/append-field/LICENSE | 21 + node_modules/append-field/README.md | 44 + node_modules/append-field/index.js | 12 + node_modules/append-field/lib/parse-path.js | 53 + node_modules/append-field/lib/set-value.js | 64 + node_modules/append-field/package.json | 19 + node_modules/append-field/test/forms.js | 19 + node_modules/array-flatten/LICENSE | 21 + node_modules/array-flatten/README.md | 43 + node_modules/array-flatten/array-flatten.js | 64 + node_modules/array-flatten/package.json | 39 + node_modules/body-parser/HISTORY.md | 686 + node_modules/body-parser/LICENSE | 23 + node_modules/body-parser/README.md | 476 + node_modules/body-parser/index.js | 156 + node_modules/body-parser/lib/read.js | 205 + node_modules/body-parser/lib/types/json.js | 243 + node_modules/body-parser/lib/types/raw.js | 101 + node_modules/body-parser/lib/types/text.js | 121 + .../body-parser/lib/types/urlencoded.js | 299 + node_modules/body-parser/package.json | 55 + node_modules/buffer-from/LICENSE | 21 + node_modules/buffer-from/index.js | 72 + node_modules/buffer-from/package.json | 19 + node_modules/buffer-from/readme.md | 69 + node_modules/busboy/.eslintrc.js | 5 + node_modules/busboy/.github/workflows/ci.yml | 24 + .../busboy/.github/workflows/lint.yml | 23 + node_modules/busboy/LICENSE | 19 + node_modules/busboy/README.md | 191 + .../bench/bench-multipart-fields-100mb-big.js | 149 + .../bench-multipart-fields-100mb-small.js | 143 + .../bench/bench-multipart-files-100mb-big.js | 154 + .../bench-multipart-files-100mb-small.js | 148 + .../bench-urlencoded-fields-100pairs-small.js | 101 + ...ch-urlencoded-fields-900pairs-small-alt.js | 84 + node_modules/busboy/lib/index.js | 57 + node_modules/busboy/lib/types/multipart.js | 653 + node_modules/busboy/lib/types/urlencoded.js | 350 + node_modules/busboy/lib/utils.js | 596 + node_modules/busboy/package.json | 22 + node_modules/busboy/test/common.js | 109 + .../test/test-types-multipart-charsets.js | 94 + .../test/test-types-multipart-stream-pause.js | 102 + .../busboy/test/test-types-multipart.js | 1053 + .../busboy/test/test-types-urlencoded.js | 488 + node_modules/busboy/test/test.js | 20 + node_modules/bytes/History.md | 97 + node_modules/bytes/LICENSE | 23 + node_modules/bytes/Readme.md | 152 + node_modules/bytes/index.js | 170 + node_modules/bytes/package.json | 42 + .../call-bind-apply-helpers/.eslintrc | 17 + .../.github/FUNDING.yml | 12 + node_modules/call-bind-apply-helpers/.nycrc | 9 + .../call-bind-apply-helpers/CHANGELOG.md | 30 + node_modules/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 + node_modules/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 + node_modules/call-bound/.eslintrc | 13 + node_modules/call-bound/.github/FUNDING.yml | 12 + node_modules/call-bound/.nycrc | 9 + node_modules/call-bound/CHANGELOG.md | 42 + node_modules/call-bound/LICENSE | 21 + node_modules/call-bound/README.md | 53 + node_modules/call-bound/index.d.ts | 94 + node_modules/call-bound/index.js | 19 + node_modules/call-bound/package.json | 99 + node_modules/call-bound/test/index.js | 61 + node_modules/call-bound/tsconfig.json | 10 + node_modules/concat-stream/LICENSE | 24 + node_modules/concat-stream/index.js | 144 + node_modules/concat-stream/package.json | 55 + node_modules/concat-stream/readme.md | 102 + node_modules/content-disposition/HISTORY.md | 60 + node_modules/content-disposition/LICENSE | 22 + node_modules/content-disposition/README.md | 142 + node_modules/content-disposition/index.js | 458 + node_modules/content-disposition/package.json | 44 + node_modules/content-type/HISTORY.md | 29 + node_modules/content-type/LICENSE | 22 + node_modules/content-type/README.md | 94 + node_modules/content-type/index.js | 225 + node_modules/content-type/package.json | 42 + node_modules/cookie-signature/History.md | 42 + node_modules/cookie-signature/Readme.md | 42 + node_modules/cookie-signature/index.js | 51 + node_modules/cookie-signature/package.json | 18 + node_modules/cookie/LICENSE | 24 + node_modules/cookie/README.md | 317 + node_modules/cookie/SECURITY.md | 25 + node_modules/cookie/index.js | 335 + node_modules/cookie/package.json | 44 + node_modules/core-util-is/LICENSE | 19 + node_modules/core-util-is/README.md | 3 + node_modules/core-util-is/lib/util.js | 107 + node_modules/core-util-is/package.json | 38 + node_modules/debug/.coveralls.yml | 1 + node_modules/debug/.eslintrc | 11 + node_modules/debug/.npmignore | 9 + node_modules/debug/.travis.yml | 14 + node_modules/debug/CHANGELOG.md | 362 + node_modules/debug/LICENSE | 19 + node_modules/debug/Makefile | 50 + node_modules/debug/README.md | 312 + node_modules/debug/component.json | 19 + node_modules/debug/karma.conf.js | 70 + node_modules/debug/node.js | 1 + node_modules/debug/package.json | 49 + node_modules/debug/src/browser.js | 185 + node_modules/debug/src/debug.js | 202 + node_modules/debug/src/index.js | 10 + node_modules/debug/src/inspector-log.js | 15 + node_modules/debug/src/node.js | 248 + node_modules/depd/History.md | 103 + node_modules/depd/LICENSE | 22 + node_modules/depd/Readme.md | 280 + node_modules/depd/index.js | 538 + node_modules/depd/lib/browser/index.js | 77 + node_modules/depd/package.json | 45 + node_modules/destroy/LICENSE | 23 + node_modules/destroy/README.md | 63 + node_modules/destroy/index.js | 209 + node_modules/destroy/package.json | 48 + node_modules/dunder-proto/.eslintrc | 5 + node_modules/dunder-proto/.github/FUNDING.yml | 12 + node_modules/dunder-proto/.nycrc | 13 + node_modules/dunder-proto/CHANGELOG.md | 24 + node_modules/dunder-proto/LICENSE | 21 + node_modules/dunder-proto/README.md | 54 + node_modules/dunder-proto/get.d.ts | 5 + node_modules/dunder-proto/get.js | 30 + node_modules/dunder-proto/package.json | 76 + node_modules/dunder-proto/set.d.ts | 5 + 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 + node_modules/ee-first/LICENSE | 22 + node_modules/ee-first/README.md | 80 + node_modules/ee-first/index.js | 95 + node_modules/ee-first/package.json | 29 + node_modules/encodeurl/LICENSE | 22 + node_modules/encodeurl/README.md | 109 + node_modules/encodeurl/index.js | 60 + 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 + node_modules/es-define-property/CHANGELOG.md | 29 + node_modules/es-define-property/LICENSE | 21 + node_modules/es-define-property/README.md | 49 + node_modules/es-define-property/index.d.ts | 3 + node_modules/es-define-property/index.js | 14 + node_modules/es-define-property/package.json | 81 + node_modules/es-define-property/test/index.js | 56 + node_modules/es-define-property/tsconfig.json | 10 + node_modules/es-errors/.eslintrc | 5 + node_modules/es-errors/.github/FUNDING.yml | 12 + node_modules/es-errors/CHANGELOG.md | 40 + node_modules/es-errors/LICENSE | 21 + node_modules/es-errors/README.md | 55 + node_modules/es-errors/eval.d.ts | 3 + node_modules/es-errors/eval.js | 4 + node_modules/es-errors/index.d.ts | 3 + node_modules/es-errors/index.js | 4 + node_modules/es-errors/package.json | 80 + node_modules/es-errors/range.d.ts | 3 + node_modules/es-errors/range.js | 4 + node_modules/es-errors/ref.d.ts | 3 + node_modules/es-errors/ref.js | 4 + node_modules/es-errors/syntax.d.ts | 3 + node_modules/es-errors/syntax.js | 4 + node_modules/es-errors/test/index.js | 19 + node_modules/es-errors/tsconfig.json | 49 + node_modules/es-errors/type.d.ts | 3 + node_modules/es-errors/type.js | 4 + node_modules/es-errors/uri.d.ts | 3 + 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 + 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 + node_modules/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 + node_modules/es-object-atoms/isObject.d.ts | 3 + node_modules/es-object-atoms/isObject.js | 6 + node_modules/es-object-atoms/package.json | 80 + node_modules/es-object-atoms/test/index.js | 38 + node_modules/es-object-atoms/tsconfig.json | 6 + node_modules/escape-html/LICENSE | 24 + node_modules/escape-html/Readme.md | 43 + node_modules/escape-html/index.js | 78 + node_modules/escape-html/package.json | 24 + node_modules/etag/HISTORY.md | 83 + node_modules/etag/LICENSE | 22 + node_modules/etag/README.md | 159 + node_modules/etag/index.js | 131 + node_modules/etag/package.json | 47 + node_modules/express/History.md | 3676 ++ node_modules/express/LICENSE | 24 + node_modules/express/Readme.md | 260 + node_modules/express/index.js | 11 + node_modules/express/lib/application.js | 661 + node_modules/express/lib/express.js | 116 + node_modules/express/lib/middleware/init.js | 43 + node_modules/express/lib/middleware/query.js | 47 + node_modules/express/lib/request.js | 525 + 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 + node_modules/express/lib/utils.js | 304 + node_modules/express/lib/view.js | 182 + node_modules/express/package.json | 102 + node_modules/finalhandler/HISTORY.md | 216 + node_modules/finalhandler/LICENSE | 22 + node_modules/finalhandler/README.md | 147 + node_modules/finalhandler/SECURITY.md | 25 + node_modules/finalhandler/index.js | 341 + node_modules/finalhandler/package.json | 47 + node_modules/forwarded/HISTORY.md | 21 + node_modules/forwarded/LICENSE | 22 + node_modules/forwarded/README.md | 57 + node_modules/forwarded/index.js | 90 + node_modules/forwarded/package.json | 45 + node_modules/fresh/HISTORY.md | 70 + node_modules/fresh/LICENSE | 23 + node_modules/fresh/README.md | 119 + node_modules/fresh/index.js | 137 + node_modules/fresh/package.json | 46 + node_modules/function-bind/.eslintrc | 21 + .../function-bind/.github/FUNDING.yml | 12 + .../function-bind/.github/SECURITY.md | 3 + node_modules/function-bind/.nycrc | 13 + node_modules/function-bind/CHANGELOG.md | 136 + node_modules/function-bind/LICENSE | 20 + node_modules/function-bind/README.md | 46 + node_modules/function-bind/implementation.js | 84 + 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 + node_modules/get-intrinsic/.eslintrc | 42 + .../get-intrinsic/.github/FUNDING.yml | 12 + node_modules/get-intrinsic/.nycrc | 9 + node_modules/get-intrinsic/CHANGELOG.md | 186 + node_modules/get-intrinsic/LICENSE | 21 + node_modules/get-intrinsic/README.md | 71 + node_modules/get-intrinsic/index.js | 378 + node_modules/get-intrinsic/package.json | 97 + .../get-intrinsic/test/GetIntrinsic.js | 274 + node_modules/get-proto/.eslintrc | 10 + node_modules/get-proto/.github/FUNDING.yml | 12 + node_modules/get-proto/.nycrc | 9 + node_modules/get-proto/CHANGELOG.md | 21 + node_modules/get-proto/LICENSE | 21 + .../get-proto/Object.getPrototypeOf.d.ts | 5 + .../get-proto/Object.getPrototypeOf.js | 6 + node_modules/get-proto/README.md | 50 + .../get-proto/Reflect.getPrototypeOf.d.ts | 3 + .../get-proto/Reflect.getPrototypeOf.js | 4 + node_modules/get-proto/index.d.ts | 5 + node_modules/get-proto/index.js | 27 + node_modules/get-proto/package.json | 81 + node_modules/get-proto/test/index.js | 68 + node_modules/get-proto/tsconfig.json | 9 + node_modules/gopd/.eslintrc | 16 + node_modules/gopd/.github/FUNDING.yml | 12 + node_modules/gopd/CHANGELOG.md | 45 + node_modules/gopd/LICENSE | 21 + node_modules/gopd/README.md | 40 + node_modules/gopd/gOPD.d.ts | 1 + node_modules/gopd/gOPD.js | 4 + node_modules/gopd/index.d.ts | 5 + node_modules/gopd/index.js | 15 + node_modules/gopd/package.json | 77 + node_modules/gopd/test/index.js | 36 + node_modules/gopd/tsconfig.json | 9 + node_modules/has-symbols/.eslintrc | 11 + node_modules/has-symbols/.github/FUNDING.yml | 12 + node_modules/has-symbols/.nycrc | 9 + node_modules/has-symbols/CHANGELOG.md | 91 + node_modules/has-symbols/LICENSE | 21 + node_modules/has-symbols/README.md | 46 + node_modules/has-symbols/index.d.ts | 3 + node_modules/has-symbols/index.js | 14 + node_modules/has-symbols/package.json | 111 + node_modules/has-symbols/shams.d.ts | 3 + 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 + node_modules/hasown/.nycrc | 13 + node_modules/hasown/CHANGELOG.md | 51 + node_modules/hasown/LICENSE | 21 + node_modules/hasown/README.md | 40 + node_modules/hasown/eslint.config.mjs | 6 + node_modules/hasown/index.d.ts | 4 + node_modules/hasown/index.js | 8 + node_modules/hasown/package.json | 92 + node_modules/hasown/tsconfig.json | 6 + node_modules/http-errors/HISTORY.md | 186 + node_modules/http-errors/LICENSE | 23 + node_modules/http-errors/README.md | 169 + node_modules/http-errors/index.js | 290 + node_modules/http-errors/package.json | 54 + node_modules/iconv-lite/Changelog.md | 162 + node_modules/iconv-lite/LICENSE | 21 + node_modules/iconv-lite/README.md | 156 + .../iconv-lite/encodings/dbcs-codec.js | 555 + .../iconv-lite/encodings/dbcs-data.js | 176 + node_modules/iconv-lite/encodings/index.js | 22 + node_modules/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 + node_modules/iconv-lite/encodings/utf16.js | 177 + node_modules/iconv-lite/encodings/utf7.js | 290 + node_modules/iconv-lite/lib/bom-handling.js | 52 + node_modules/iconv-lite/lib/extend-node.js | 217 + node_modules/iconv-lite/lib/index.d.ts | 24 + node_modules/iconv-lite/lib/index.js | 153 + node_modules/iconv-lite/lib/streams.js | 121 + node_modules/iconv-lite/package.json | 46 + node_modules/inherits/LICENSE | 16 + node_modules/inherits/README.md | 42 + node_modules/inherits/inherits.js | 9 + node_modules/inherits/inherits_browser.js | 27 + node_modules/inherits/package.json | 29 + node_modules/ipaddr.js/LICENSE | 19 + node_modules/ipaddr.js/README.md | 233 + node_modules/ipaddr.js/ipaddr.min.js | 1 + node_modules/ipaddr.js/lib/ipaddr.js | 673 + node_modules/ipaddr.js/lib/ipaddr.js.d.ts | 68 + node_modules/ipaddr.js/package.json | 35 + node_modules/isarray/.npmignore | 1 + node_modules/isarray/.travis.yml | 4 + node_modules/isarray/Makefile | 6 + node_modules/isarray/README.md | 60 + node_modules/isarray/component.json | 19 + node_modules/isarray/index.js | 5 + node_modules/isarray/package.json | 45 + node_modules/isarray/test.js | 20 + node_modules/math-intrinsics/.eslintrc | 16 + .../math-intrinsics/.github/FUNDING.yml | 12 + node_modules/math-intrinsics/CHANGELOG.md | 24 + node_modules/math-intrinsics/LICENSE | 21 + node_modules/math-intrinsics/README.md | 50 + node_modules/math-intrinsics/abs.d.ts | 1 + 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 + node_modules/math-intrinsics/isFinite.d.ts | 3 + node_modules/math-intrinsics/isFinite.js | 12 + node_modules/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 + node_modules/math-intrinsics/max.js | 4 + node_modules/math-intrinsics/min.d.ts | 1 + node_modules/math-intrinsics/min.js | 4 + node_modules/math-intrinsics/mod.d.ts | 3 + node_modules/math-intrinsics/mod.js | 9 + node_modules/math-intrinsics/package.json | 86 + node_modules/math-intrinsics/pow.d.ts | 1 + 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 + node_modules/math-intrinsics/sign.js | 11 + node_modules/math-intrinsics/test/index.js | 192 + node_modules/math-intrinsics/tsconfig.json | 3 + node_modules/media-typer/HISTORY.md | 22 + node_modules/media-typer/LICENSE | 22 + node_modules/media-typer/README.md | 81 + node_modules/media-typer/index.js | 270 + node_modules/media-typer/package.json | 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 + node_modules/merge-descriptors/package.json | 39 + node_modules/methods/HISTORY.md | 29 + node_modules/methods/LICENSE | 24 + node_modules/methods/README.md | 51 + node_modules/methods/index.js | 69 + node_modules/methods/package.json | 36 + node_modules/mime-db/HISTORY.md | 507 + node_modules/mime-db/LICENSE | 23 + node_modules/mime-db/README.md | 100 + node_modules/mime-db/db.json | 8519 ++++ node_modules/mime-db/index.js | 12 + node_modules/mime-db/package.json | 60 + node_modules/mime-types/HISTORY.md | 397 + node_modules/mime-types/LICENSE | 23 + node_modules/mime-types/README.md | 113 + node_modules/mime-types/index.js | 188 + node_modules/mime-types/package.json | 44 + node_modules/mime/.npmignore | 0 node_modules/mime/CHANGELOG.md | 164 + node_modules/mime/LICENSE | 21 + node_modules/mime/README.md | 90 + node_modules/mime/cli.js | 8 + node_modules/mime/mime.js | 108 + node_modules/mime/package.json | 44 + node_modules/mime/src/build.js | 53 + node_modules/mime/src/test.js | 60 + node_modules/mime/types.json | 1 + node_modules/minimist/.eslintrc | 29 + node_modules/minimist/.github/FUNDING.yml | 12 + node_modules/minimist/.nycrc | 14 + node_modules/minimist/CHANGELOG.md | 298 + node_modules/minimist/LICENSE | 18 + node_modules/minimist/README.md | 121 + node_modules/minimist/example/parse.js | 4 + node_modules/minimist/index.js | 263 + node_modules/minimist/package.json | 75 + node_modules/minimist/test/all_bool.js | 34 + node_modules/minimist/test/bool.js | 177 + node_modules/minimist/test/dash.js | 43 + node_modules/minimist/test/default_bool.js | 37 + node_modules/minimist/test/dotted.js | 24 + node_modules/minimist/test/kv_short.js | 32 + node_modules/minimist/test/long.js | 33 + node_modules/minimist/test/num.js | 38 + node_modules/minimist/test/parse.js | 209 + node_modules/minimist/test/parse_modified.js | 11 + node_modules/minimist/test/proto.js | 64 + 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 + node_modules/mkdirp/LICENSE | 21 + node_modules/mkdirp/bin/cmd.js | 33 + node_modules/mkdirp/bin/usage.txt | 12 + node_modules/mkdirp/index.js | 102 + node_modules/mkdirp/package.json | 33 + node_modules/mkdirp/readme.markdown | 100 + node_modules/ms/index.js | 152 + node_modules/ms/license.md | 21 + node_modules/ms/package.json | 37 + node_modules/ms/readme.md | 51 + node_modules/multer/LICENSE | 17 + node_modules/multer/README.md | 333 + node_modules/multer/index.js | 104 + node_modules/multer/lib/counter.js | 28 + node_modules/multer/lib/file-appender.js | 67 + node_modules/multer/lib/make-middleware.js | 175 + node_modules/multer/lib/multer-error.js | 24 + .../multer/lib/remove-uploaded-files.js | 28 + node_modules/multer/package.json | 52 + node_modules/multer/storage/disk.js | 66 + node_modules/multer/storage/memory.js | 21 + node_modules/negotiator/HISTORY.md | 108 + node_modules/negotiator/LICENSE | 24 + node_modules/negotiator/README.md | 203 + node_modules/negotiator/index.js | 82 + node_modules/negotiator/lib/charset.js | 169 + node_modules/negotiator/lib/encoding.js | 184 + node_modules/negotiator/lib/language.js | 179 + node_modules/negotiator/lib/mediaType.js | 294 + node_modules/negotiator/package.json | 42 + node_modules/object-assign/index.js | 90 + node_modules/object-assign/license | 21 + node_modules/object-assign/package.json | 42 + node_modules/object-assign/readme.md | 61 + node_modules/object-inspect/.eslintrc | 53 + .../object-inspect/.github/FUNDING.yml | 12 + node_modules/object-inspect/.nycrc | 13 + node_modules/object-inspect/CHANGELOG.md | 424 + node_modules/object-inspect/LICENSE | 21 + node_modules/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 + node_modules/object-inspect/index.js | 544 + .../object-inspect/package-support.json | 20 + node_modules/object-inspect/package.json | 105 + node_modules/object-inspect/readme.markdown | 84 + node_modules/object-inspect/test-core-js.js | 26 + node_modules/object-inspect/test/bigint.js | 58 + .../object-inspect/test/browser/dom.js | 15 + node_modules/object-inspect/test/circular.js | 16 + node_modules/object-inspect/test/deep.js | 12 + node_modules/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 + node_modules/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 + node_modules/object-inspect/test/inspect.js | 139 + node_modules/object-inspect/test/lowbyte.js | 12 + node_modules/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 + node_modules/object-inspect/test/values.js | 261 + node_modules/object-inspect/util.inspect.js | 1 + node_modules/on-finished/HISTORY.md | 98 + node_modules/on-finished/LICENSE | 23 + node_modules/on-finished/README.md | 162 + node_modules/on-finished/index.js | 234 + node_modules/on-finished/package.json | 39 + node_modules/pako/CHANGELOG.md | 164 + node_modules/pako/LICENSE | 21 + node_modules/pako/README.md | 191 + node_modules/pako/dist/pako.js | 6818 +++ node_modules/pako/dist/pako.min.js | 1 + node_modules/pako/dist/pako_deflate.js | 3997 ++ node_modules/pako/dist/pako_deflate.min.js | 1 + node_modules/pako/dist/pako_inflate.js | 3300 ++ node_modules/pako/dist/pako_inflate.min.js | 1 + node_modules/pako/index.js | 14 + node_modules/pako/lib/deflate.js | 400 + node_modules/pako/lib/inflate.js | 423 + node_modules/pako/lib/utils/common.js | 105 + node_modules/pako/lib/utils/strings.js | 187 + node_modules/pako/lib/zlib/README | 59 + node_modules/pako/lib/zlib/adler32.js | 51 + node_modules/pako/lib/zlib/constants.js | 68 + node_modules/pako/lib/zlib/crc32.js | 59 + node_modules/pako/lib/zlib/deflate.js | 1874 + node_modules/pako/lib/zlib/gzheader.js | 58 + node_modules/pako/lib/zlib/inffast.js | 345 + node_modules/pako/lib/zlib/inflate.js | 1556 + node_modules/pako/lib/zlib/inftrees.js | 343 + node_modules/pako/lib/zlib/messages.js | 32 + node_modules/pako/lib/zlib/trees.js | 1222 + node_modules/pako/lib/zlib/zstream.js | 47 + node_modules/pako/package.json | 44 + node_modules/parseurl/HISTORY.md | 58 + node_modules/parseurl/LICENSE | 24 + node_modules/parseurl/README.md | 133 + node_modules/parseurl/index.js | 158 + node_modules/parseurl/package.json | 40 + node_modules/path-to-regexp/LICENSE | 21 + node_modules/path-to-regexp/Readme.md | 35 + node_modules/path-to-regexp/index.js | 158 + node_modules/path-to-regexp/package.json | 30 + node_modules/pdf-lib/LICENSE.md | 21 + node_modules/pdf-lib/README.md | 1504 + node_modules/pdf-lib/cjs/api/Embeddable.d.ts | 8 + .../pdf-lib/cjs/api/Embeddable.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/Embeddable.js | 3 + .../pdf-lib/cjs/api/Embeddable.js.map | 1 + node_modules/pdf-lib/cjs/api/PDFDocument.d.ts | 779 + .../pdf-lib/cjs/api/PDFDocument.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/PDFDocument.js | 1369 + .../pdf-lib/cjs/api/PDFDocument.js.map | 1 + .../pdf-lib/cjs/api/PDFDocumentOptions.d.ts | 38 + .../cjs/api/PDFDocumentOptions.d.ts.map | 1 + .../pdf-lib/cjs/api/PDFDocumentOptions.js | 11 + .../pdf-lib/cjs/api/PDFDocumentOptions.js.map | 1 + .../pdf-lib/cjs/api/PDFEmbeddedFile.d.ts | 39 + .../pdf-lib/cjs/api/PDFEmbeddedFile.d.ts.map | 1 + .../pdf-lib/cjs/api/PDFEmbeddedFile.js | 84 + .../pdf-lib/cjs/api/PDFEmbeddedFile.js.map | 1 + .../pdf-lib/cjs/api/PDFEmbeddedPage.d.ts | 74 + .../pdf-lib/cjs/api/PDFEmbeddedPage.d.ts.map | 1 + .../pdf-lib/cjs/api/PDFEmbeddedPage.js | 95 + .../pdf-lib/cjs/api/PDFEmbeddedPage.js.map | 1 + node_modules/pdf-lib/cjs/api/PDFFont.d.ts | 95 + node_modules/pdf-lib/cjs/api/PDFFont.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/PDFFont.js | 143 + node_modules/pdf-lib/cjs/api/PDFFont.js.map | 1 + node_modules/pdf-lib/cjs/api/PDFImage.d.ts | 96 + .../pdf-lib/cjs/api/PDFImage.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/PDFImage.js | 132 + node_modules/pdf-lib/cjs/api/PDFImage.js.map | 1 + .../pdf-lib/cjs/api/PDFJavaScript.d.ts | 39 + .../pdf-lib/cjs/api/PDFJavaScript.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/PDFJavaScript.js | 73 + .../pdf-lib/cjs/api/PDFJavaScript.js.map | 1 + node_modules/pdf-lib/cjs/api/PDFPage.d.ts | 898 + node_modules/pdf-lib/cjs/api/PDFPage.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/PDFPage.js | 1442 + node_modules/pdf-lib/cjs/api/PDFPage.js.map | 1 + .../pdf-lib/cjs/api/PDFPageOptions.d.ts | 155 + .../pdf-lib/cjs/api/PDFPageOptions.d.ts.map | 1 + .../pdf-lib/cjs/api/PDFPageOptions.js | 19 + .../pdf-lib/cjs/api/PDFPageOptions.js.map | 1 + .../pdf-lib/cjs/api/StandardFonts.d.ts | 17 + .../pdf-lib/cjs/api/StandardFonts.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/StandardFonts.js | 21 + .../pdf-lib/cjs/api/StandardFonts.js.map | 1 + node_modules/pdf-lib/cjs/api/colors.d.ts | 31 + node_modules/pdf-lib/cjs/api/colors.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/colors.js | 59 + node_modules/pdf-lib/cjs/api/colors.js.map | 1 + node_modules/pdf-lib/cjs/api/errors.d.ts | 43 + node_modules/pdf-lib/cjs/api/errors.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/errors.js | 168 + node_modules/pdf-lib/cjs/api/errors.js.map | 1 + .../pdf-lib/cjs/api/form/PDFButton.d.ts | 138 + .../pdf-lib/cjs/api/form/PDFButton.d.ts.map | 1 + .../pdf-lib/cjs/api/form/PDFButton.js | 220 + .../pdf-lib/cjs/api/form/PDFButton.js.map | 1 + .../pdf-lib/cjs/api/form/PDFCheckBox.d.ts | 143 + .../pdf-lib/cjs/api/form/PDFCheckBox.d.ts.map | 1 + .../pdf-lib/cjs/api/form/PDFCheckBox.js | 236 + .../pdf-lib/cjs/api/form/PDFCheckBox.js.map | 1 + .../pdf-lib/cjs/api/form/PDFDropdown.d.ts | 403 + .../pdf-lib/cjs/api/form/PDFDropdown.d.ts.map | 1 + .../pdf-lib/cjs/api/form/PDFDropdown.js | 580 + .../pdf-lib/cjs/api/form/PDFDropdown.js.map | 1 + .../pdf-lib/cjs/api/form/PDFField.d.ts | 204 + .../pdf-lib/cjs/api/form/PDFField.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/form/PDFField.js | 384 + .../pdf-lib/cjs/api/form/PDFField.js.map | 1 + .../pdf-lib/cjs/api/form/PDFForm.d.ts | 412 + .../pdf-lib/cjs/api/form/PDFForm.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/form/PDFForm.js | 726 + .../pdf-lib/cjs/api/form/PDFForm.js.map | 1 + .../pdf-lib/cjs/api/form/PDFOptionList.d.ts | 336 + .../cjs/api/form/PDFOptionList.d.ts.map | 1 + .../pdf-lib/cjs/api/form/PDFOptionList.js | 499 + .../pdf-lib/cjs/api/form/PDFOptionList.js.map | 1 + .../pdf-lib/cjs/api/form/PDFRadioGroup.d.ts | 253 + .../cjs/api/form/PDFRadioGroup.d.ts.map | 1 + .../pdf-lib/cjs/api/form/PDFRadioGroup.js | 415 + .../pdf-lib/cjs/api/form/PDFRadioGroup.js.map | 1 + .../pdf-lib/cjs/api/form/PDFSignature.d.ts | 30 + .../cjs/api/form/PDFSignature.d.ts.map | 1 + .../pdf-lib/cjs/api/form/PDFSignature.js | 43 + .../pdf-lib/cjs/api/form/PDFSignature.js.map | 1 + .../pdf-lib/cjs/api/form/PDFTextField.d.ts | 538 + .../cjs/api/form/PDFTextField.d.ts.map | 1 + .../pdf-lib/cjs/api/form/PDFTextField.js | 739 + .../pdf-lib/cjs/api/form/PDFTextField.js.map | 1 + .../pdf-lib/cjs/api/form/appearances.d.ts | 42 + .../pdf-lib/cjs/api/form/appearances.d.ts.map | 1 + .../pdf-lib/cjs/api/form/appearances.js | 421 + .../pdf-lib/cjs/api/form/appearances.js.map | 1 + node_modules/pdf-lib/cjs/api/form/index.d.ts | 11 + .../pdf-lib/cjs/api/form/index.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/form/index.js | 23 + .../pdf-lib/cjs/api/form/index.js.map | 1 + .../pdf-lib/cjs/api/image/alignment.d.ts | 6 + .../pdf-lib/cjs/api/image/alignment.d.ts.map | 1 + .../pdf-lib/cjs/api/image/alignment.js | 10 + .../pdf-lib/cjs/api/image/alignment.js.map | 1 + node_modules/pdf-lib/cjs/api/image/index.d.ts | 2 + .../pdf-lib/cjs/api/image/index.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/image/index.js | 5 + .../pdf-lib/cjs/api/image/index.js.map | 1 + node_modules/pdf-lib/cjs/api/index.d.ts | 21 + node_modules/pdf-lib/cjs/api/index.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/index.js | 29 + node_modules/pdf-lib/cjs/api/index.js.map | 1 + node_modules/pdf-lib/cjs/api/objects.d.ts | 5 + node_modules/pdf-lib/cjs/api/objects.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/objects.js | 14 + node_modules/pdf-lib/cjs/api/objects.js.map | 1 + node_modules/pdf-lib/cjs/api/operations.d.ts | 212 + .../pdf-lib/cjs/api/operations.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/operations.js | 488 + .../pdf-lib/cjs/api/operations.js.map | 1 + node_modules/pdf-lib/cjs/api/operators.d.ts | 86 + .../pdf-lib/cjs/api/operators.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/operators.js | 231 + node_modules/pdf-lib/cjs/api/operators.js.map | 1 + node_modules/pdf-lib/cjs/api/rotations.d.ts | 39 + .../pdf-lib/cjs/api/rotations.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/rotations.js | 71 + node_modules/pdf-lib/cjs/api/rotations.js.map | 1 + node_modules/pdf-lib/cjs/api/sizes.d.ts | 53 + node_modules/pdf-lib/cjs/api/sizes.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/sizes.js | 56 + node_modules/pdf-lib/cjs/api/sizes.js.map | 1 + node_modules/pdf-lib/cjs/api/svgPath.d.ts | 3 + node_modules/pdf-lib/cjs/api/svgPath.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/svgPath.js | 380 + node_modules/pdf-lib/cjs/api/svgPath.js.map | 1 + .../pdf-lib/cjs/api/text/alignment.d.ts | 6 + .../pdf-lib/cjs/api/text/alignment.d.ts.map | 1 + .../pdf-lib/cjs/api/text/alignment.js | 10 + .../pdf-lib/cjs/api/text/alignment.js.map | 1 + node_modules/pdf-lib/cjs/api/text/index.d.ts | 3 + .../pdf-lib/cjs/api/text/index.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/text/index.js | 6 + .../pdf-lib/cjs/api/text/index.js.map | 1 + node_modules/pdf-lib/cjs/api/text/layout.d.ts | 55 + .../pdf-lib/cjs/api/text/layout.d.ts.map | 1 + node_modules/pdf-lib/cjs/api/text/layout.js | 212 + .../pdf-lib/cjs/api/text/layout.js.map | 1 + node_modules/pdf-lib/cjs/core/PDFContext.d.ts | 84 + .../pdf-lib/cjs/core/PDFContext.d.ts.map | 1 + node_modules/pdf-lib/cjs/core/PDFContext.js | 201 + .../pdf-lib/cjs/core/PDFContext.js.map | 1 + .../pdf-lib/cjs/core/PDFObjectCopier.d.ts | 38 + .../pdf-lib/cjs/core/PDFObjectCopier.d.ts.map | 1 + .../pdf-lib/cjs/core/PDFObjectCopier.js | 119 + .../pdf-lib/cjs/core/PDFObjectCopier.js.map | 1 + .../cjs/core/acroform/PDFAcroButton.d.ts | 22 + .../cjs/core/acroform/PDFAcroButton.d.ts.map | 1 + .../cjs/core/acroform/PDFAcroButton.js | 96 + .../cjs/core/acroform/PDFAcroButton.js.map | 1 + .../cjs/core/acroform/PDFAcroCheckBox.d.ts | 14 + .../core/acroform/PDFAcroCheckBox.d.ts.map | 1 + .../cjs/core/acroform/PDFAcroCheckBox.js | 50 + .../cjs/core/acroform/PDFAcroCheckBox.js.map | 1 + .../cjs/core/acroform/PDFAcroChoice.d.ts | 21 + .../cjs/core/acroform/PDFAcroChoice.d.ts.map | 1 + .../cjs/core/acroform/PDFAcroChoice.js | 127 + .../cjs/core/acroform/PDFAcroChoice.js.map | 1 + .../cjs/core/acroform/PDFAcroComboBox.d.ts | 10 + .../core/acroform/PDFAcroComboBox.d.ts.map | 1 + .../cjs/core/acroform/PDFAcroComboBox.js | 26 + .../cjs/core/acroform/PDFAcroComboBox.js.map | 1 + .../cjs/core/acroform/PDFAcroField.d.ts | 37 + .../cjs/core/acroform/PDFAcroField.d.ts.map | 1 + .../pdf-lib/cjs/core/acroform/PDFAcroField.js | 149 + .../cjs/core/acroform/PDFAcroField.js.map | 1 + .../cjs/core/acroform/PDFAcroForm.d.ts | 21 + .../cjs/core/acroform/PDFAcroForm.d.ts.map | 1 + .../pdf-lib/cjs/core/acroform/PDFAcroForm.js | 78 + .../cjs/core/acroform/PDFAcroForm.js.map | 1 + .../cjs/core/acroform/PDFAcroListBox.d.ts | 10 + .../cjs/core/acroform/PDFAcroListBox.d.ts.map | 1 + .../cjs/core/acroform/PDFAcroListBox.js | 24 + .../cjs/core/acroform/PDFAcroListBox.js.map | 1 + .../cjs/core/acroform/PDFAcroNonTerminal.d.ts | 14 + .../core/acroform/PDFAcroNonTerminal.d.ts.map | 1 + .../cjs/core/acroform/PDFAcroNonTerminal.js | 34 + .../core/acroform/PDFAcroNonTerminal.js.map | 1 + .../cjs/core/acroform/PDFAcroPushButton.d.ts | 10 + .../core/acroform/PDFAcroPushButton.d.ts.map | 1 + .../cjs/core/acroform/PDFAcroPushButton.js | 26 + .../core/acroform/PDFAcroPushButton.js.map | 1 + .../cjs/core/acroform/PDFAcroRadioButton.d.ts | 14 + .../core/acroform/PDFAcroRadioButton.d.ts.map | 1 + .../cjs/core/acroform/PDFAcroRadioButton.js | 57 + .../core/acroform/PDFAcroRadioButton.js.map | 1 + .../cjs/core/acroform/PDFAcroSignature.d.ts | 8 + .../core/acroform/PDFAcroSignature.d.ts.map | 1 + .../cjs/core/acroform/PDFAcroSignature.js | 16 + .../cjs/core/acroform/PDFAcroSignature.js.map | 1 + .../cjs/core/acroform/PDFAcroTerminal.d.ts | 17 + .../core/acroform/PDFAcroTerminal.d.ts.map | 1 + .../cjs/core/acroform/PDFAcroTerminal.js | 70 + .../cjs/core/acroform/PDFAcroTerminal.js.map | 1 + .../cjs/core/acroform/PDFAcroText.d.ts | 23 + .../cjs/core/acroform/PDFAcroText.d.ts.map | 1 + .../pdf-lib/cjs/core/acroform/PDFAcroText.js | 73 + .../cjs/core/acroform/PDFAcroText.js.map | 1 + .../pdf-lib/cjs/core/acroform/flags.d.ts | 142 + .../pdf-lib/cjs/core/acroform/flags.d.ts.map | 1 + .../pdf-lib/cjs/core/acroform/flags.js | 150 + .../pdf-lib/cjs/core/acroform/flags.js.map | 1 + .../pdf-lib/cjs/core/acroform/index.d.ts | 16 + .../pdf-lib/cjs/core/acroform/index.d.ts.map | 1 + .../pdf-lib/cjs/core/acroform/index.js | 32 + .../pdf-lib/cjs/core/acroform/index.js.map | 1 + .../pdf-lib/cjs/core/acroform/utils.d.ts | 7 + .../pdf-lib/cjs/core/acroform/utils.d.ts.map | 1 + .../pdf-lib/cjs/core/acroform/utils.js | 127 + .../pdf-lib/cjs/core/acroform/utils.js.map | 1 + .../annotation/AppearanceCharacteristics.d.ts | 34 + .../AppearanceCharacteristics.d.ts.map | 1 + .../annotation/AppearanceCharacteristics.js | 123 + .../AppearanceCharacteristics.js.map | 1 + .../cjs/core/annotation/BorderStyle.d.ts | 12 + .../cjs/core/annotation/BorderStyle.d.ts.map | 1 + .../cjs/core/annotation/BorderStyle.js | 29 + .../cjs/core/annotation/BorderStyle.js.map | 1 + .../cjs/core/annotation/PDFAnnotation.d.ts | 52 + .../core/annotation/PDFAnnotation.d.ts.map | 1 + .../cjs/core/annotation/PDFAnnotation.js | 123 + .../cjs/core/annotation/PDFAnnotation.js.map | 1 + .../core/annotation/PDFWidgetAnnotation.d.ts | 27 + .../annotation/PDFWidgetAnnotation.d.ts.map | 1 + .../core/annotation/PDFWidgetAnnotation.js | 110 + .../annotation/PDFWidgetAnnotation.js.map | 1 + .../pdf-lib/cjs/core/annotation/flags.d.ts | 80 + .../cjs/core/annotation/flags.d.ts.map | 1 + .../pdf-lib/cjs/core/annotation/flags.js | 85 + .../pdf-lib/cjs/core/annotation/flags.js.map | 1 + .../pdf-lib/cjs/core/annotation/index.d.ts | 5 + .../cjs/core/annotation/index.d.ts.map | 1 + .../pdf-lib/cjs/core/annotation/index.js | 11 + .../pdf-lib/cjs/core/annotation/index.js.map | 1 + .../cjs/core/document/PDFCrossRefSection.d.ts | 28 + .../core/document/PDFCrossRefSection.d.ts.map | 1 + .../cjs/core/document/PDFCrossRefSection.js | 124 + .../core/document/PDFCrossRefSection.js.map | 1 + .../pdf-lib/cjs/core/document/PDFHeader.d.ts | 11 + .../cjs/core/document/PDFHeader.d.ts.map | 1 + .../pdf-lib/cjs/core/document/PDFHeader.js | 42 + .../cjs/core/document/PDFHeader.js.map | 1 + .../pdf-lib/cjs/core/document/PDFTrailer.d.ts | 10 + .../cjs/core/document/PDFTrailer.d.ts.map | 1 + .../pdf-lib/cjs/core/document/PDFTrailer.js | 43 + .../cjs/core/document/PDFTrailer.js.map | 1 + .../cjs/core/document/PDFTrailerDict.d.ts | 11 + .../cjs/core/document/PDFTrailerDict.d.ts.map | 1 + .../cjs/core/document/PDFTrailerDict.js | 32 + .../cjs/core/document/PDFTrailerDict.js.map | 1 + .../pdf-lib/cjs/core/embedders/CMap.d.ts | 4 + .../pdf-lib/cjs/core/embedders/CMap.d.ts.map | 1 + .../pdf-lib/cjs/core/embedders/CMap.js | 43 + .../pdf-lib/cjs/core/embedders/CMap.js.map | 1 + .../core/embedders/CustomFontEmbedder.d.ts | 45 + .../embedders/CustomFontEmbedder.d.ts.map | 1 + .../cjs/core/embedders/CustomFontEmbedder.js | 240 + .../core/embedders/CustomFontEmbedder.js.map | 1 + .../embedders/CustomFontSubsetEmbedder.d.ts | 21 + .../CustomFontSubsetEmbedder.d.ts.map | 1 + .../embedders/CustomFontSubsetEmbedder.js | 68 + .../embedders/CustomFontSubsetEmbedder.js.map | 1 + .../cjs/core/embedders/FileEmbedder.d.ts | 34 + .../cjs/core/embedders/FileEmbedder.d.ts.map | 1 + .../cjs/core/embedders/FileEmbedder.js | 75 + .../cjs/core/embedders/FileEmbedder.js.map | 1 + .../pdf-lib/cjs/core/embedders/FontFlags.d.ts | 14 + .../cjs/core/embedders/FontFlags.d.ts.map | 1 + .../pdf-lib/cjs/core/embedders/FontFlags.js | 40 + .../cjs/core/embedders/FontFlags.js.map | 1 + .../core/embedders/JavaScriptEmbedder.d.ts | 11 + .../embedders/JavaScriptEmbedder.d.ts.map | 1 + .../cjs/core/embedders/JavaScriptEmbedder.js | 36 + .../core/embedders/JavaScriptEmbedder.js.map | 1 + .../cjs/core/embedders/JpegEmbedder.d.ts | 24 + .../cjs/core/embedders/JpegEmbedder.d.ts.map | 1 + .../cjs/core/embedders/JpegEmbedder.js | 107 + .../cjs/core/embedders/JpegEmbedder.js.map | 1 + .../cjs/core/embedders/PDFPageEmbedder.d.ts | 38 + .../core/embedders/PDFPageEmbedder.d.ts.map | 1 + .../cjs/core/embedders/PDFPageEmbedder.js | 91 + .../cjs/core/embedders/PDFPageEmbedder.js.map | 1 + .../cjs/core/embedders/PngEmbedder.d.ts | 20 + .../cjs/core/embedders/PngEmbedder.d.ts.map | 1 + .../pdf-lib/cjs/core/embedders/PngEmbedder.js | 69 + .../cjs/core/embedders/PngEmbedder.js.map | 1 + .../core/embedders/StandardFontEmbedder.d.ts | 37 + .../embedders/StandardFontEmbedder.d.ts.map | 1 + .../core/embedders/StandardFontEmbedder.js | 98 + .../embedders/StandardFontEmbedder.js.map | 1 + node_modules/pdf-lib/cjs/core/errors.d.ts | 92 + node_modules/pdf-lib/cjs/core/errors.d.ts.map | 1 + node_modules/pdf-lib/cjs/core/errors.js | 323 + node_modules/pdf-lib/cjs/core/errors.js.map | 1 + node_modules/pdf-lib/cjs/core/index.d.ts | 48 + node_modules/pdf-lib/cjs/core/index.d.ts.map | 1 + node_modules/pdf-lib/cjs/core/index.js | 100 + node_modules/pdf-lib/cjs/core/index.js.map | 1 + .../core/interactive/ViewerPreferences.d.ts | 348 + .../interactive/ViewerPreferences.d.ts.map | 1 + .../cjs/core/interactive/ViewerPreferences.js | 511 + .../core/interactive/ViewerPreferences.js.map | 1 + .../pdf-lib/cjs/core/objects/PDFArray.d.ts | 64 + .../cjs/core/objects/PDFArray.d.ts.map | 1 + .../pdf-lib/cjs/core/objects/PDFArray.js | 117 + .../pdf-lib/cjs/core/objects/PDFArray.js.map | 1 + .../pdf-lib/cjs/core/objects/PDFBool.d.ts | 14 + .../pdf-lib/cjs/core/objects/PDFBool.d.ts.map | 1 + .../pdf-lib/cjs/core/objects/PDFBool.js | 52 + .../pdf-lib/cjs/core/objects/PDFBool.js.map | 1 + .../pdf-lib/cjs/core/objects/PDFDict.d.ts | 62 + .../pdf-lib/cjs/core/objects/PDFDict.d.ts.map | 1 + .../pdf-lib/cjs/core/objects/PDFDict.js | 138 + .../pdf-lib/cjs/core/objects/PDFDict.js.map | 1 + .../cjs/core/objects/PDFHexString.d.ts | 17 + .../cjs/core/objects/PDFHexString.d.ts.map | 1 + .../pdf-lib/cjs/core/objects/PDFHexString.js | 74 + .../cjs/core/objects/PDFHexString.js.map | 1 + .../cjs/core/objects/PDFInvalidObject.d.ts | 12 + .../core/objects/PDFInvalidObject.d.ts.map | 1 + .../cjs/core/objects/PDFInvalidObject.js | 32 + .../cjs/core/objects/PDFInvalidObject.js.map | 1 + .../pdf-lib/cjs/core/objects/PDFName.d.ts | 42 + .../pdf-lib/cjs/core/objects/PDFName.d.ts.map | 1 + .../pdf-lib/cjs/core/objects/PDFName.js | 138 + .../pdf-lib/cjs/core/objects/PDFName.js.map | 1 + .../pdf-lib/cjs/core/objects/PDFNull.d.ts | 11 + .../pdf-lib/cjs/core/objects/PDFNull.d.ts.map | 1 + .../pdf-lib/cjs/core/objects/PDFNull.js | 33 + .../pdf-lib/cjs/core/objects/PDFNull.js.map | 1 + .../pdf-lib/cjs/core/objects/PDFNumber.d.ts | 16 + .../cjs/core/objects/PDFNumber.d.ts.map | 1 + .../pdf-lib/cjs/core/objects/PDFNumber.js | 38 + .../pdf-lib/cjs/core/objects/PDFNumber.js.map | 1 + .../pdf-lib/cjs/core/objects/PDFObject.d.ts | 9 + .../cjs/core/objects/PDFObject.d.ts.map | 1 + .../pdf-lib/cjs/core/objects/PDFObject.js | 22 + .../pdf-lib/cjs/core/objects/PDFObject.js.map | 1 + .../cjs/core/objects/PDFRawStream.d.ts | 15 + .../cjs/core/objects/PDFRawStream.d.ts.map | 1 + .../pdf-lib/cjs/core/objects/PDFRawStream.js | 34 + .../cjs/core/objects/PDFRawStream.js.map | 1 + .../pdf-lib/cjs/core/objects/PDFRef.d.ts | 14 + .../pdf-lib/cjs/core/objects/PDFRef.d.ts.map | 1 + .../pdf-lib/cjs/core/objects/PDFRef.js | 47 + .../pdf-lib/cjs/core/objects/PDFRef.js.map | 1 + .../pdf-lib/cjs/core/objects/PDFStream.d.ts | 17 + .../cjs/core/objects/PDFStream.d.ts.map | 1 + .../pdf-lib/cjs/core/objects/PDFStream.js | 75 + .../pdf-lib/cjs/core/objects/PDFStream.js.map | 1 + .../pdf-lib/cjs/core/objects/PDFString.d.ts | 17 + .../cjs/core/objects/PDFString.d.ts.map | 1 + .../pdf-lib/cjs/core/objects/PDFString.js | 116 + .../pdf-lib/cjs/core/objects/PDFString.js.map | 1 + .../cjs/core/operators/PDFOperator.d.ts | 20 + .../cjs/core/operators/PDFOperator.d.ts.map | 1 + .../pdf-lib/cjs/core/operators/PDFOperator.js | 58 + .../cjs/core/operators/PDFOperator.js.map | 1 + .../cjs/core/operators/PDFOperatorNames.d.ts | 77 + .../core/operators/PDFOperatorNames.d.ts.map | 1 + .../cjs/core/operators/PDFOperatorNames.js | 88 + .../core/operators/PDFOperatorNames.js.map | 1 + .../pdf-lib/cjs/core/parser/BaseParser.d.ts | 15 + .../cjs/core/parser/BaseParser.d.ts.map | 1 + .../pdf-lib/cjs/core/parser/BaseParser.js | 110 + .../pdf-lib/cjs/core/parser/BaseParser.js.map | 1 + .../pdf-lib/cjs/core/parser/ByteStream.d.ts | 27 + .../cjs/core/parser/ByteStream.d.ts.map | 1 + .../pdf-lib/cjs/core/parser/ByteStream.js | 64 + .../pdf-lib/cjs/core/parser/ByteStream.js.map | 1 + .../cjs/core/parser/PDFObjectParser.d.ts | 30 + .../cjs/core/parser/PDFObjectParser.d.ts.map | 1 + .../cjs/core/parser/PDFObjectParser.js | 233 + .../cjs/core/parser/PDFObjectParser.js.map | 1 + .../core/parser/PDFObjectStreamParser.d.ts | 14 + .../parser/PDFObjectStreamParser.d.ts.map | 1 + .../cjs/core/parser/PDFObjectStreamParser.js | 70 + .../core/parser/PDFObjectStreamParser.js.map | 1 + .../pdf-lib/cjs/core/parser/PDFParser.d.ts | 46 + .../cjs/core/parser/PDFParser.d.ts.map | 1 + .../pdf-lib/cjs/core/parser/PDFParser.js | 356 + .../pdf-lib/cjs/core/parser/PDFParser.js.map | 1 + .../cjs/core/parser/PDFXRefStreamParser.d.ts | 22 + .../core/parser/PDFXRefStreamParser.d.ts.map | 1 + .../cjs/core/parser/PDFXRefStreamParser.js | 92 + .../core/parser/PDFXRefStreamParser.js.map | 1 + .../cjs/core/streams/Ascii85Stream.d.ts | 10 + .../cjs/core/streams/Ascii85Stream.d.ts.map | 1 + .../pdf-lib/cjs/core/streams/Ascii85Stream.js | 87 + .../cjs/core/streams/Ascii85Stream.js.map | 1 + .../cjs/core/streams/AsciiHexStream.d.ts | 10 + .../cjs/core/streams/AsciiHexStream.d.ts.map | 1 + .../cjs/core/streams/AsciiHexStream.js | 75 + .../cjs/core/streams/AsciiHexStream.js.map | 1 + .../cjs/core/streams/DecodeStream.d.ts | 27 + .../cjs/core/streams/DecodeStream.d.ts.map | 1 + .../pdf-lib/cjs/core/streams/DecodeStream.js | 149 + .../cjs/core/streams/DecodeStream.js.map | 1 + .../pdf-lib/cjs/core/streams/FlateStream.d.ts | 14 + .../cjs/core/streams/FlateStream.d.ts.map | 1 + .../pdf-lib/cjs/core/streams/FlateStream.js | 371 + .../cjs/core/streams/FlateStream.js.map | 1 + .../pdf-lib/cjs/core/streams/LZWStream.d.ts | 13 + .../cjs/core/streams/LZWStream.d.ts.map | 1 + .../pdf-lib/cjs/core/streams/LZWStream.js | 137 + .../pdf-lib/cjs/core/streams/LZWStream.js.map | 1 + .../cjs/core/streams/RunLengthStream.d.ts | 9 + .../cjs/core/streams/RunLengthStream.d.ts.map | 1 + .../cjs/core/streams/RunLengthStream.js | 55 + .../cjs/core/streams/RunLengthStream.js.map | 1 + .../pdf-lib/cjs/core/streams/Stream.d.ts | 35 + .../pdf-lib/cjs/core/streams/Stream.d.ts.map | 1 + .../pdf-lib/cjs/core/streams/Stream.js | 106 + .../pdf-lib/cjs/core/streams/Stream.js.map | 1 + .../pdf-lib/cjs/core/streams/decode.d.ts | 4 + .../pdf-lib/cjs/core/streams/decode.d.ts.map | 1 + .../pdf-lib/cjs/core/streams/decode.js | 59 + .../pdf-lib/cjs/core/streams/decode.js.map | 1 + .../cjs/core/structures/PDFCatalog.d.ts | 28 + .../cjs/core/structures/PDFCatalog.d.ts.map | 1 + .../pdf-lib/cjs/core/structures/PDFCatalog.js | 79 + .../cjs/core/structures/PDFCatalog.js.map | 1 + .../cjs/core/structures/PDFContentStream.d.ts | 16 + .../core/structures/PDFContentStream.d.ts.map | 1 + .../cjs/core/structures/PDFContentStream.js | 60 + .../core/structures/PDFContentStream.js.map | 1 + .../core/structures/PDFCrossRefStream.d.ts | 54 + .../structures/PDFCrossRefStream.d.ts.map | 1 + .../cjs/core/structures/PDFCrossRefStream.js | 187 + .../core/structures/PDFCrossRefStream.js.map | 1 + .../cjs/core/structures/PDFFlateStream.d.ts | 14 + .../core/structures/PDFFlateStream.d.ts.map | 1 + .../cjs/core/structures/PDFFlateStream.js | 35 + .../cjs/core/structures/PDFFlateStream.js.map | 1 + .../cjs/core/structures/PDFObjectStream.d.ts | 21 + .../core/structures/PDFObjectStream.d.ts.map | 1 + .../cjs/core/structures/PDFObjectStream.js | 77 + .../core/structures/PDFObjectStream.js.map | 1 + .../cjs/core/structures/PDFPageLeaf.d.ts | 55 + .../cjs/core/structures/PDFPageLeaf.d.ts.map | 1 + .../cjs/core/structures/PDFPageLeaf.js | 206 + .../cjs/core/structures/PDFPageLeaf.js.map | 1 + .../cjs/core/structures/PDFPageTree.d.ts | 42 + .../cjs/core/structures/PDFPageTree.d.ts.map | 1 + .../cjs/core/structures/PDFPageTree.js | 177 + .../cjs/core/structures/PDFPageTree.js.map | 1 + .../pdf-lib/cjs/core/syntax/CharCodes.d.ts | 62 + .../cjs/core/syntax/CharCodes.d.ts.map | 1 + .../pdf-lib/cjs/core/syntax/CharCodes.js | 65 + .../pdf-lib/cjs/core/syntax/CharCodes.js.map | 1 + .../pdf-lib/cjs/core/syntax/Delimiters.d.ts | 2 + .../cjs/core/syntax/Delimiters.d.ts.map | 1 + .../pdf-lib/cjs/core/syntax/Delimiters.js | 17 + .../pdf-lib/cjs/core/syntax/Delimiters.js.map | 1 + .../pdf-lib/cjs/core/syntax/Irregular.d.ts | 2 + .../cjs/core/syntax/Irregular.d.ts.map | 1 + .../pdf-lib/cjs/core/syntax/Irregular.js | 13 + .../pdf-lib/cjs/core/syntax/Irregular.js.map | 1 + .../pdf-lib/cjs/core/syntax/Keywords.d.ts | 23 + .../pdf-lib/cjs/core/syntax/Keywords.d.ts.map | 1 + .../pdf-lib/cjs/core/syntax/Keywords.js | 84 + .../pdf-lib/cjs/core/syntax/Keywords.js.map | 1 + .../pdf-lib/cjs/core/syntax/Numeric.d.ts | 4 + .../pdf-lib/cjs/core/syntax/Numeric.d.ts.map | 1 + .../pdf-lib/cjs/core/syntax/Numeric.js | 25 + .../pdf-lib/cjs/core/syntax/Numeric.js.map | 1 + .../pdf-lib/cjs/core/syntax/Whitespace.d.ts | 2 + .../cjs/core/syntax/Whitespace.d.ts.map | 1 + .../pdf-lib/cjs/core/syntax/Whitespace.js | 13 + .../pdf-lib/cjs/core/syntax/Whitespace.js.map | 1 + .../cjs/core/writers/PDFStreamWriter.d.ts | 20 + .../cjs/core/writers/PDFStreamWriter.d.ts.map | 1 + .../cjs/core/writers/PDFStreamWriter.js | 113 + .../cjs/core/writers/PDFStreamWriter.js.map | 1 + .../pdf-lib/cjs/core/writers/PDFWriter.d.ts | 30 + .../cjs/core/writers/PDFWriter.d.ts.map | 1 + .../pdf-lib/cjs/core/writers/PDFWriter.js | 144 + .../pdf-lib/cjs/core/writers/PDFWriter.js.map | 1 + node_modules/pdf-lib/cjs/index.d.ts | 5 + node_modules/pdf-lib/cjs/index.d.ts.map | 1 + node_modules/pdf-lib/cjs/index.js | 8 + node_modules/pdf-lib/cjs/index.js.map | 1 + node_modules/pdf-lib/cjs/types/fontkit.d.ts | 582 + .../pdf-lib/cjs/types/fontkit.d.ts.map | 1 + node_modules/pdf-lib/cjs/types/fontkit.js | 3 + node_modules/pdf-lib/cjs/types/fontkit.js.map | 1 + node_modules/pdf-lib/cjs/types/index.d.ts | 2 + node_modules/pdf-lib/cjs/types/index.d.ts.map | 1 + node_modules/pdf-lib/cjs/types/index.js | 3 + node_modules/pdf-lib/cjs/types/index.js.map | 1 + node_modules/pdf-lib/cjs/types/matrix.d.ts | 22 + .../pdf-lib/cjs/types/matrix.d.ts.map | 1 + node_modules/pdf-lib/cjs/types/matrix.js | 5 + node_modules/pdf-lib/cjs/types/matrix.js.map | 1 + node_modules/pdf-lib/cjs/utils/Cache.d.ts | 11 + node_modules/pdf-lib/cjs/utils/Cache.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/Cache.js | 23 + node_modules/pdf-lib/cjs/utils/Cache.js.map | 1 + node_modules/pdf-lib/cjs/utils/arrays.d.ts | 16 + .../pdf-lib/cjs/utils/arrays.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/arrays.js | 132 + node_modules/pdf-lib/cjs/utils/arrays.js.map | 1 + node_modules/pdf-lib/cjs/utils/async.d.ts | 6 + node_modules/pdf-lib/cjs/utils/async.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/async.js | 13 + node_modules/pdf-lib/cjs/utils/async.js.map | 1 + node_modules/pdf-lib/cjs/utils/base64.d.ts | 11 + .../pdf-lib/cjs/utils/base64.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/base64.js | 87 + node_modules/pdf-lib/cjs/utils/base64.js.map | 1 + node_modules/pdf-lib/cjs/utils/errors.d.ts | 2 + .../pdf-lib/cjs/utils/errors.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/errors.js | 7 + node_modules/pdf-lib/cjs/utils/errors.js.map | 1 + node_modules/pdf-lib/cjs/utils/index.d.ts | 12 + node_modules/pdf-lib/cjs/utils/index.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/index.js | 16 + node_modules/pdf-lib/cjs/utils/index.js.map | 1 + node_modules/pdf-lib/cjs/utils/numbers.d.ts | 24 + .../pdf-lib/cjs/utils/numbers.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/numbers.js | 57 + node_modules/pdf-lib/cjs/utils/numbers.js.map | 1 + node_modules/pdf-lib/cjs/utils/objects.d.ts | 16 + .../pdf-lib/cjs/utils/objects.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/objects.js | 11 + node_modules/pdf-lib/cjs/utils/objects.js.map | 1 + .../pdf-lib/cjs/utils/pdfDocEncoding.d.ts | 8 + .../pdf-lib/cjs/utils/pdfDocEncoding.d.ts.map | 1 + .../pdf-lib/cjs/utils/pdfDocEncoding.js | 69 + .../pdf-lib/cjs/utils/pdfDocEncoding.js.map | 1 + node_modules/pdf-lib/cjs/utils/png.d.ts | 18 + node_modules/pdf-lib/cjs/utils/png.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/png.js | 63 + node_modules/pdf-lib/cjs/utils/png.js.map | 1 + node_modules/pdf-lib/cjs/utils/rng.d.ts | 14 + node_modules/pdf-lib/cjs/utils/rng.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/rng.js | 23 + node_modules/pdf-lib/cjs/utils/rng.js.map | 1 + node_modules/pdf-lib/cjs/utils/strings.d.ts | 25 + .../pdf-lib/cjs/utils/strings.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/strings.js | 141 + node_modules/pdf-lib/cjs/utils/strings.js.map | 1 + node_modules/pdf-lib/cjs/utils/unicode.d.ts | 187 + .../pdf-lib/cjs/utils/unicode.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/unicode.js | 370 + node_modules/pdf-lib/cjs/utils/unicode.js.map | 1 + .../pdf-lib/cjs/utils/validators.d.ts | 27 + .../pdf-lib/cjs/utils/validators.d.ts.map | 1 + node_modules/pdf-lib/cjs/utils/validators.js | 183 + .../pdf-lib/cjs/utils/validators.js.map | 1 + node_modules/pdf-lib/dist/pdf-lib.esm.js | 39404 +++++++++++++++ node_modules/pdf-lib/dist/pdf-lib.esm.js.map | 1 + node_modules/pdf-lib/dist/pdf-lib.esm.min.js | 16 + .../pdf-lib/dist/pdf-lib.esm.min.js.map | 1 + node_modules/pdf-lib/dist/pdf-lib.js | 39674 ++++++++++++++++ node_modules/pdf-lib/dist/pdf-lib.js.map | 1 + node_modules/pdf-lib/dist/pdf-lib.min.js | 16 + node_modules/pdf-lib/dist/pdf-lib.min.js.map | 1 + node_modules/pdf-lib/es/api/Embeddable.d.ts | 8 + .../pdf-lib/es/api/Embeddable.d.ts.map | 1 + node_modules/pdf-lib/es/api/Embeddable.js | 1 + node_modules/pdf-lib/es/api/Embeddable.js.map | 1 + node_modules/pdf-lib/es/api/PDFDocument.d.ts | 779 + .../pdf-lib/es/api/PDFDocument.d.ts.map | 1 + node_modules/pdf-lib/es/api/PDFDocument.js | 1367 + .../pdf-lib/es/api/PDFDocument.js.map | 1 + .../pdf-lib/es/api/PDFDocumentOptions.d.ts | 38 + .../es/api/PDFDocumentOptions.d.ts.map | 1 + .../pdf-lib/es/api/PDFDocumentOptions.js | 8 + .../pdf-lib/es/api/PDFDocumentOptions.js.map | 1 + .../pdf-lib/es/api/PDFEmbeddedFile.d.ts | 39 + .../pdf-lib/es/api/PDFEmbeddedFile.d.ts.map | 1 + .../pdf-lib/es/api/PDFEmbeddedFile.js | 82 + .../pdf-lib/es/api/PDFEmbeddedFile.js.map | 1 + .../pdf-lib/es/api/PDFEmbeddedPage.d.ts | 74 + .../pdf-lib/es/api/PDFEmbeddedPage.d.ts.map | 1 + .../pdf-lib/es/api/PDFEmbeddedPage.js | 93 + .../pdf-lib/es/api/PDFEmbeddedPage.js.map | 1 + node_modules/pdf-lib/es/api/PDFFont.d.ts | 95 + node_modules/pdf-lib/es/api/PDFFont.d.ts.map | 1 + node_modules/pdf-lib/es/api/PDFFont.js | 141 + node_modules/pdf-lib/es/api/PDFFont.js.map | 1 + node_modules/pdf-lib/es/api/PDFImage.d.ts | 96 + node_modules/pdf-lib/es/api/PDFImage.d.ts.map | 1 + node_modules/pdf-lib/es/api/PDFImage.js | 130 + node_modules/pdf-lib/es/api/PDFImage.js.map | 1 + .../pdf-lib/es/api/PDFJavaScript.d.ts | 39 + .../pdf-lib/es/api/PDFJavaScript.d.ts.map | 1 + node_modules/pdf-lib/es/api/PDFJavaScript.js | 71 + .../pdf-lib/es/api/PDFJavaScript.js.map | 1 + node_modules/pdf-lib/es/api/PDFPage.d.ts | 898 + node_modules/pdf-lib/es/api/PDFPage.d.ts.map | 1 + node_modules/pdf-lib/es/api/PDFPage.js | 1440 + node_modules/pdf-lib/es/api/PDFPage.js.map | 1 + .../pdf-lib/es/api/PDFPageOptions.d.ts | 155 + .../pdf-lib/es/api/PDFPageOptions.d.ts.map | 1 + node_modules/pdf-lib/es/api/PDFPageOptions.js | 16 + .../pdf-lib/es/api/PDFPageOptions.js.map | 1 + .../pdf-lib/es/api/StandardFonts.d.ts | 17 + .../pdf-lib/es/api/StandardFonts.d.ts.map | 1 + node_modules/pdf-lib/es/api/StandardFonts.js | 18 + .../pdf-lib/es/api/StandardFonts.js.map | 1 + node_modules/pdf-lib/es/api/colors.d.ts | 31 + node_modules/pdf-lib/es/api/colors.d.ts.map | 1 + node_modules/pdf-lib/es/api/colors.js | 56 + node_modules/pdf-lib/es/api/colors.js.map | 1 + node_modules/pdf-lib/es/api/errors.d.ts | 43 + node_modules/pdf-lib/es/api/errors.d.ts.map | 1 + node_modules/pdf-lib/es/api/errors.js | 165 + node_modules/pdf-lib/es/api/errors.js.map | 1 + .../pdf-lib/es/api/form/PDFButton.d.ts | 138 + .../pdf-lib/es/api/form/PDFButton.d.ts.map | 1 + node_modules/pdf-lib/es/api/form/PDFButton.js | 218 + .../pdf-lib/es/api/form/PDFButton.js.map | 1 + .../pdf-lib/es/api/form/PDFCheckBox.d.ts | 143 + .../pdf-lib/es/api/form/PDFCheckBox.d.ts.map | 1 + .../pdf-lib/es/api/form/PDFCheckBox.js | 234 + .../pdf-lib/es/api/form/PDFCheckBox.js.map | 1 + .../pdf-lib/es/api/form/PDFDropdown.d.ts | 403 + .../pdf-lib/es/api/form/PDFDropdown.d.ts.map | 1 + .../pdf-lib/es/api/form/PDFDropdown.js | 578 + .../pdf-lib/es/api/form/PDFDropdown.js.map | 1 + .../pdf-lib/es/api/form/PDFField.d.ts | 204 + .../pdf-lib/es/api/form/PDFField.d.ts.map | 1 + node_modules/pdf-lib/es/api/form/PDFField.js | 381 + .../pdf-lib/es/api/form/PDFField.js.map | 1 + node_modules/pdf-lib/es/api/form/PDFForm.d.ts | 412 + .../pdf-lib/es/api/form/PDFForm.d.ts.map | 1 + node_modules/pdf-lib/es/api/form/PDFForm.js | 724 + .../pdf-lib/es/api/form/PDFForm.js.map | 1 + .../pdf-lib/es/api/form/PDFOptionList.d.ts | 336 + .../es/api/form/PDFOptionList.d.ts.map | 1 + .../pdf-lib/es/api/form/PDFOptionList.js | 497 + .../pdf-lib/es/api/form/PDFOptionList.js.map | 1 + .../pdf-lib/es/api/form/PDFRadioGroup.d.ts | 253 + .../es/api/form/PDFRadioGroup.d.ts.map | 1 + .../pdf-lib/es/api/form/PDFRadioGroup.js | 413 + .../pdf-lib/es/api/form/PDFRadioGroup.js.map | 1 + .../pdf-lib/es/api/form/PDFSignature.d.ts | 30 + .../pdf-lib/es/api/form/PDFSignature.d.ts.map | 1 + .../pdf-lib/es/api/form/PDFSignature.js | 41 + .../pdf-lib/es/api/form/PDFSignature.js.map | 1 + .../pdf-lib/es/api/form/PDFTextField.d.ts | 538 + .../pdf-lib/es/api/form/PDFTextField.d.ts.map | 1 + .../pdf-lib/es/api/form/PDFTextField.js | 737 + .../pdf-lib/es/api/form/PDFTextField.js.map | 1 + .../pdf-lib/es/api/form/appearances.d.ts | 42 + .../pdf-lib/es/api/form/appearances.d.ts.map | 1 + .../pdf-lib/es/api/form/appearances.js | 418 + .../pdf-lib/es/api/form/appearances.js.map | 1 + node_modules/pdf-lib/es/api/form/index.d.ts | 11 + .../pdf-lib/es/api/form/index.d.ts.map | 1 + node_modules/pdf-lib/es/api/form/index.js | 11 + node_modules/pdf-lib/es/api/form/index.js.map | 1 + .../pdf-lib/es/api/image/alignment.d.ts | 6 + .../pdf-lib/es/api/image/alignment.d.ts.map | 1 + .../pdf-lib/es/api/image/alignment.js | 7 + .../pdf-lib/es/api/image/alignment.js.map | 1 + node_modules/pdf-lib/es/api/image/index.d.ts | 2 + .../pdf-lib/es/api/image/index.d.ts.map | 1 + node_modules/pdf-lib/es/api/image/index.js | 2 + .../pdf-lib/es/api/image/index.js.map | 1 + node_modules/pdf-lib/es/api/index.d.ts | 21 + node_modules/pdf-lib/es/api/index.d.ts.map | 1 + node_modules/pdf-lib/es/api/index.js | 20 + node_modules/pdf-lib/es/api/index.js.map | 1 + node_modules/pdf-lib/es/api/objects.d.ts | 5 + node_modules/pdf-lib/es/api/objects.d.ts.map | 1 + node_modules/pdf-lib/es/api/objects.js | 11 + node_modules/pdf-lib/es/api/objects.js.map | 1 + node_modules/pdf-lib/es/api/operations.d.ts | 212 + .../pdf-lib/es/api/operations.d.ts.map | 1 + node_modules/pdf-lib/es/api/operations.js | 485 + node_modules/pdf-lib/es/api/operations.js.map | 1 + node_modules/pdf-lib/es/api/operators.d.ts | 86 + .../pdf-lib/es/api/operators.d.ts.map | 1 + node_modules/pdf-lib/es/api/operators.js | 228 + node_modules/pdf-lib/es/api/operators.js.map | 1 + node_modules/pdf-lib/es/api/rotations.d.ts | 39 + .../pdf-lib/es/api/rotations.d.ts.map | 1 + node_modules/pdf-lib/es/api/rotations.js | 68 + node_modules/pdf-lib/es/api/rotations.js.map | 1 + node_modules/pdf-lib/es/api/sizes.d.ts | 53 + node_modules/pdf-lib/es/api/sizes.d.ts.map | 1 + node_modules/pdf-lib/es/api/sizes.js | 53 + node_modules/pdf-lib/es/api/sizes.js.map | 1 + node_modules/pdf-lib/es/api/svgPath.d.ts | 3 + node_modules/pdf-lib/es/api/svgPath.d.ts.map | 1 + node_modules/pdf-lib/es/api/svgPath.js | 377 + node_modules/pdf-lib/es/api/svgPath.js.map | 1 + .../pdf-lib/es/api/text/alignment.d.ts | 6 + .../pdf-lib/es/api/text/alignment.d.ts.map | 1 + node_modules/pdf-lib/es/api/text/alignment.js | 7 + .../pdf-lib/es/api/text/alignment.js.map | 1 + node_modules/pdf-lib/es/api/text/index.d.ts | 3 + .../pdf-lib/es/api/text/index.d.ts.map | 1 + node_modules/pdf-lib/es/api/text/index.js | 3 + node_modules/pdf-lib/es/api/text/index.js.map | 1 + node_modules/pdf-lib/es/api/text/layout.d.ts | 55 + .../pdf-lib/es/api/text/layout.d.ts.map | 1 + node_modules/pdf-lib/es/api/text/layout.js | 209 + .../pdf-lib/es/api/text/layout.js.map | 1 + node_modules/pdf-lib/es/core/PDFContext.d.ts | 84 + .../pdf-lib/es/core/PDFContext.d.ts.map | 1 + node_modules/pdf-lib/es/core/PDFContext.js | 199 + .../pdf-lib/es/core/PDFContext.js.map | 1 + .../pdf-lib/es/core/PDFObjectCopier.d.ts | 38 + .../pdf-lib/es/core/PDFObjectCopier.d.ts.map | 1 + .../pdf-lib/es/core/PDFObjectCopier.js | 116 + .../pdf-lib/es/core/PDFObjectCopier.js.map | 1 + .../es/core/acroform/PDFAcroButton.d.ts | 22 + .../es/core/acroform/PDFAcroButton.d.ts.map | 1 + .../pdf-lib/es/core/acroform/PDFAcroButton.js | 94 + .../es/core/acroform/PDFAcroButton.js.map | 1 + .../es/core/acroform/PDFAcroCheckBox.d.ts | 14 + .../es/core/acroform/PDFAcroCheckBox.d.ts.map | 1 + .../es/core/acroform/PDFAcroCheckBox.js | 48 + .../es/core/acroform/PDFAcroCheckBox.js.map | 1 + .../es/core/acroform/PDFAcroChoice.d.ts | 21 + .../es/core/acroform/PDFAcroChoice.d.ts.map | 1 + .../pdf-lib/es/core/acroform/PDFAcroChoice.js | 125 + .../es/core/acroform/PDFAcroChoice.js.map | 1 + .../es/core/acroform/PDFAcroComboBox.d.ts | 10 + .../es/core/acroform/PDFAcroComboBox.d.ts.map | 1 + .../es/core/acroform/PDFAcroComboBox.js | 24 + .../es/core/acroform/PDFAcroComboBox.js.map | 1 + .../es/core/acroform/PDFAcroField.d.ts | 37 + .../es/core/acroform/PDFAcroField.d.ts.map | 1 + .../pdf-lib/es/core/acroform/PDFAcroField.js | 146 + .../es/core/acroform/PDFAcroField.js.map | 1 + .../pdf-lib/es/core/acroform/PDFAcroForm.d.ts | 21 + .../es/core/acroform/PDFAcroForm.d.ts.map | 1 + .../pdf-lib/es/core/acroform/PDFAcroForm.js | 75 + .../es/core/acroform/PDFAcroForm.js.map | 1 + .../es/core/acroform/PDFAcroListBox.d.ts | 10 + .../es/core/acroform/PDFAcroListBox.d.ts.map | 1 + .../es/core/acroform/PDFAcroListBox.js | 22 + .../es/core/acroform/PDFAcroListBox.js.map | 1 + .../es/core/acroform/PDFAcroNonTerminal.d.ts | 14 + .../core/acroform/PDFAcroNonTerminal.d.ts.map | 1 + .../es/core/acroform/PDFAcroNonTerminal.js | 32 + .../core/acroform/PDFAcroNonTerminal.js.map | 1 + .../es/core/acroform/PDFAcroPushButton.d.ts | 10 + .../core/acroform/PDFAcroPushButton.d.ts.map | 1 + .../es/core/acroform/PDFAcroPushButton.js | 24 + .../es/core/acroform/PDFAcroPushButton.js.map | 1 + .../es/core/acroform/PDFAcroRadioButton.d.ts | 14 + .../core/acroform/PDFAcroRadioButton.d.ts.map | 1 + .../es/core/acroform/PDFAcroRadioButton.js | 55 + .../core/acroform/PDFAcroRadioButton.js.map | 1 + .../es/core/acroform/PDFAcroSignature.d.ts | 8 + .../core/acroform/PDFAcroSignature.d.ts.map | 1 + .../es/core/acroform/PDFAcroSignature.js | 14 + .../es/core/acroform/PDFAcroSignature.js.map | 1 + .../es/core/acroform/PDFAcroTerminal.d.ts | 17 + .../es/core/acroform/PDFAcroTerminal.d.ts.map | 1 + .../es/core/acroform/PDFAcroTerminal.js | 68 + .../es/core/acroform/PDFAcroTerminal.js.map | 1 + .../pdf-lib/es/core/acroform/PDFAcroText.d.ts | 23 + .../es/core/acroform/PDFAcroText.d.ts.map | 1 + .../pdf-lib/es/core/acroform/PDFAcroText.js | 71 + .../es/core/acroform/PDFAcroText.js.map | 1 + .../pdf-lib/es/core/acroform/flags.d.ts | 142 + .../pdf-lib/es/core/acroform/flags.d.ts.map | 1 + .../pdf-lib/es/core/acroform/flags.js | 147 + .../pdf-lib/es/core/acroform/flags.js.map | 1 + .../pdf-lib/es/core/acroform/index.d.ts | 16 + .../pdf-lib/es/core/acroform/index.d.ts.map | 1 + .../pdf-lib/es/core/acroform/index.js | 16 + .../pdf-lib/es/core/acroform/index.js.map | 1 + .../pdf-lib/es/core/acroform/utils.d.ts | 7 + .../pdf-lib/es/core/acroform/utils.d.ts.map | 1 + .../pdf-lib/es/core/acroform/utils.js | 123 + .../pdf-lib/es/core/acroform/utils.js.map | 1 + .../annotation/AppearanceCharacteristics.d.ts | 34 + .../AppearanceCharacteristics.d.ts.map | 1 + .../annotation/AppearanceCharacteristics.js | 120 + .../AppearanceCharacteristics.js.map | 1 + .../es/core/annotation/BorderStyle.d.ts | 12 + .../es/core/annotation/BorderStyle.d.ts.map | 1 + .../pdf-lib/es/core/annotation/BorderStyle.js | 26 + .../es/core/annotation/BorderStyle.js.map | 1 + .../es/core/annotation/PDFAnnotation.d.ts | 52 + .../es/core/annotation/PDFAnnotation.d.ts.map | 1 + .../es/core/annotation/PDFAnnotation.js | 120 + .../es/core/annotation/PDFAnnotation.js.map | 1 + .../core/annotation/PDFWidgetAnnotation.d.ts | 27 + .../annotation/PDFWidgetAnnotation.d.ts.map | 1 + .../es/core/annotation/PDFWidgetAnnotation.js | 108 + .../annotation/PDFWidgetAnnotation.js.map | 1 + .../pdf-lib/es/core/annotation/flags.d.ts | 80 + .../pdf-lib/es/core/annotation/flags.d.ts.map | 1 + .../pdf-lib/es/core/annotation/flags.js | 82 + .../pdf-lib/es/core/annotation/flags.js.map | 1 + .../pdf-lib/es/core/annotation/index.d.ts | 5 + .../pdf-lib/es/core/annotation/index.d.ts.map | 1 + .../pdf-lib/es/core/annotation/index.js | 5 + .../pdf-lib/es/core/annotation/index.js.map | 1 + .../es/core/document/PDFCrossRefSection.d.ts | 28 + .../core/document/PDFCrossRefSection.d.ts.map | 1 + .../es/core/document/PDFCrossRefSection.js | 121 + .../core/document/PDFCrossRefSection.js.map | 1 + .../pdf-lib/es/core/document/PDFHeader.d.ts | 11 + .../es/core/document/PDFHeader.d.ts.map | 1 + .../pdf-lib/es/core/document/PDFHeader.js | 39 + .../pdf-lib/es/core/document/PDFHeader.js.map | 1 + .../pdf-lib/es/core/document/PDFTrailer.d.ts | 10 + .../es/core/document/PDFTrailer.d.ts.map | 1 + .../pdf-lib/es/core/document/PDFTrailer.js | 40 + .../es/core/document/PDFTrailer.js.map | 1 + .../es/core/document/PDFTrailerDict.d.ts | 11 + .../es/core/document/PDFTrailerDict.d.ts.map | 1 + .../es/core/document/PDFTrailerDict.js | 29 + .../es/core/document/PDFTrailerDict.js.map | 1 + .../pdf-lib/es/core/embedders/CMap.d.ts | 4 + .../pdf-lib/es/core/embedders/CMap.d.ts.map | 1 + .../pdf-lib/es/core/embedders/CMap.js | 40 + .../pdf-lib/es/core/embedders/CMap.js.map | 1 + .../es/core/embedders/CustomFontEmbedder.d.ts | 45 + .../embedders/CustomFontEmbedder.d.ts.map | 1 + .../es/core/embedders/CustomFontEmbedder.js | 238 + .../core/embedders/CustomFontEmbedder.js.map | 1 + .../embedders/CustomFontSubsetEmbedder.d.ts | 21 + .../CustomFontSubsetEmbedder.d.ts.map | 1 + .../embedders/CustomFontSubsetEmbedder.js | 66 + .../embedders/CustomFontSubsetEmbedder.js.map | 1 + .../es/core/embedders/FileEmbedder.d.ts | 34 + .../es/core/embedders/FileEmbedder.d.ts.map | 1 + .../pdf-lib/es/core/embedders/FileEmbedder.js | 72 + .../es/core/embedders/FileEmbedder.js.map | 1 + .../pdf-lib/es/core/embedders/FontFlags.d.ts | 14 + .../es/core/embedders/FontFlags.d.ts.map | 1 + .../pdf-lib/es/core/embedders/FontFlags.js | 37 + .../es/core/embedders/FontFlags.js.map | 1 + .../es/core/embedders/JavaScriptEmbedder.d.ts | 11 + .../embedders/JavaScriptEmbedder.d.ts.map | 1 + .../es/core/embedders/JavaScriptEmbedder.js | 34 + .../core/embedders/JavaScriptEmbedder.js.map | 1 + .../es/core/embedders/JpegEmbedder.d.ts | 24 + .../es/core/embedders/JpegEmbedder.d.ts.map | 1 + .../pdf-lib/es/core/embedders/JpegEmbedder.js | 105 + .../es/core/embedders/JpegEmbedder.js.map | 1 + .../es/core/embedders/PDFPageEmbedder.d.ts | 38 + .../core/embedders/PDFPageEmbedder.d.ts.map | 1 + .../es/core/embedders/PDFPageEmbedder.js | 89 + .../es/core/embedders/PDFPageEmbedder.js.map | 1 + .../es/core/embedders/PngEmbedder.d.ts | 20 + .../es/core/embedders/PngEmbedder.d.ts.map | 1 + .../pdf-lib/es/core/embedders/PngEmbedder.js | 67 + .../es/core/embedders/PngEmbedder.js.map | 1 + .../core/embedders/StandardFontEmbedder.d.ts | 37 + .../embedders/StandardFontEmbedder.d.ts.map | 1 + .../es/core/embedders/StandardFontEmbedder.js | 95 + .../embedders/StandardFontEmbedder.js.map | 1 + node_modules/pdf-lib/es/core/errors.d.ts | 92 + node_modules/pdf-lib/es/core/errors.d.ts.map | 1 + node_modules/pdf-lib/es/core/errors.js | 320 + node_modules/pdf-lib/es/core/errors.js.map | 1 + node_modules/pdf-lib/es/core/index.d.ts | 48 + node_modules/pdf-lib/es/core/index.d.ts.map | 1 + node_modules/pdf-lib/es/core/index.js | 48 + node_modules/pdf-lib/es/core/index.js.map | 1 + .../core/interactive/ViewerPreferences.d.ts | 348 + .../interactive/ViewerPreferences.d.ts.map | 1 + .../es/core/interactive/ViewerPreferences.js | 507 + .../core/interactive/ViewerPreferences.js.map | 1 + .../pdf-lib/es/core/objects/PDFArray.d.ts | 64 + .../pdf-lib/es/core/objects/PDFArray.d.ts.map | 1 + .../pdf-lib/es/core/objects/PDFArray.js | 115 + .../pdf-lib/es/core/objects/PDFArray.js.map | 1 + .../pdf-lib/es/core/objects/PDFBool.d.ts | 14 + .../pdf-lib/es/core/objects/PDFBool.d.ts.map | 1 + .../pdf-lib/es/core/objects/PDFBool.js | 50 + .../pdf-lib/es/core/objects/PDFBool.js.map | 1 + .../pdf-lib/es/core/objects/PDFDict.d.ts | 62 + .../pdf-lib/es/core/objects/PDFDict.d.ts.map | 1 + .../pdf-lib/es/core/objects/PDFDict.js | 136 + .../pdf-lib/es/core/objects/PDFDict.js.map | 1 + .../pdf-lib/es/core/objects/PDFHexString.d.ts | 17 + .../es/core/objects/PDFHexString.d.ts.map | 1 + .../pdf-lib/es/core/objects/PDFHexString.js | 72 + .../es/core/objects/PDFHexString.js.map | 1 + .../es/core/objects/PDFInvalidObject.d.ts | 12 + .../es/core/objects/PDFInvalidObject.d.ts.map | 1 + .../es/core/objects/PDFInvalidObject.js | 30 + .../es/core/objects/PDFInvalidObject.js.map | 1 + .../pdf-lib/es/core/objects/PDFName.d.ts | 42 + .../pdf-lib/es/core/objects/PDFName.d.ts.map | 1 + .../pdf-lib/es/core/objects/PDFName.js | 136 + .../pdf-lib/es/core/objects/PDFName.js.map | 1 + .../pdf-lib/es/core/objects/PDFNull.d.ts | 11 + .../pdf-lib/es/core/objects/PDFNull.d.ts.map | 1 + .../pdf-lib/es/core/objects/PDFNull.js | 31 + .../pdf-lib/es/core/objects/PDFNull.js.map | 1 + .../pdf-lib/es/core/objects/PDFNumber.d.ts | 16 + .../es/core/objects/PDFNumber.d.ts.map | 1 + .../pdf-lib/es/core/objects/PDFNumber.js | 36 + .../pdf-lib/es/core/objects/PDFNumber.js.map | 1 + .../pdf-lib/es/core/objects/PDFObject.d.ts | 9 + .../es/core/objects/PDFObject.d.ts.map | 1 + .../pdf-lib/es/core/objects/PDFObject.js | 20 + .../pdf-lib/es/core/objects/PDFObject.js.map | 1 + .../pdf-lib/es/core/objects/PDFRawStream.d.ts | 15 + .../es/core/objects/PDFRawStream.d.ts.map | 1 + .../pdf-lib/es/core/objects/PDFRawStream.js | 32 + .../es/core/objects/PDFRawStream.js.map | 1 + .../pdf-lib/es/core/objects/PDFRef.d.ts | 14 + .../pdf-lib/es/core/objects/PDFRef.d.ts.map | 1 + .../pdf-lib/es/core/objects/PDFRef.js | 45 + .../pdf-lib/es/core/objects/PDFRef.js.map | 1 + .../pdf-lib/es/core/objects/PDFStream.d.ts | 17 + .../es/core/objects/PDFStream.d.ts.map | 1 + .../pdf-lib/es/core/objects/PDFStream.js | 73 + .../pdf-lib/es/core/objects/PDFStream.js.map | 1 + .../pdf-lib/es/core/objects/PDFString.d.ts | 17 + .../es/core/objects/PDFString.d.ts.map | 1 + .../pdf-lib/es/core/objects/PDFString.js | 114 + .../pdf-lib/es/core/objects/PDFString.js.map | 1 + .../es/core/operators/PDFOperator.d.ts | 20 + .../es/core/operators/PDFOperator.d.ts.map | 1 + .../pdf-lib/es/core/operators/PDFOperator.js | 55 + .../es/core/operators/PDFOperator.js.map | 1 + .../es/core/operators/PDFOperatorNames.d.ts | 77 + .../core/operators/PDFOperatorNames.d.ts.map | 1 + .../es/core/operators/PDFOperatorNames.js | 86 + .../es/core/operators/PDFOperatorNames.js.map | 1 + .../pdf-lib/es/core/parser/BaseParser.d.ts | 15 + .../es/core/parser/BaseParser.d.ts.map | 1 + .../pdf-lib/es/core/parser/BaseParser.js | 107 + .../pdf-lib/es/core/parser/BaseParser.js.map | 1 + .../pdf-lib/es/core/parser/ByteStream.d.ts | 27 + .../es/core/parser/ByteStream.d.ts.map | 1 + .../pdf-lib/es/core/parser/ByteStream.js | 61 + .../pdf-lib/es/core/parser/ByteStream.js.map | 1 + .../es/core/parser/PDFObjectParser.d.ts | 30 + .../es/core/parser/PDFObjectParser.d.ts.map | 1 + .../pdf-lib/es/core/parser/PDFObjectParser.js | 231 + .../es/core/parser/PDFObjectParser.js.map | 1 + .../es/core/parser/PDFObjectStreamParser.d.ts | 14 + .../parser/PDFObjectStreamParser.d.ts.map | 1 + .../es/core/parser/PDFObjectStreamParser.js | 68 + .../core/parser/PDFObjectStreamParser.js.map | 1 + .../pdf-lib/es/core/parser/PDFParser.d.ts | 46 + .../pdf-lib/es/core/parser/PDFParser.d.ts.map | 1 + .../pdf-lib/es/core/parser/PDFParser.js | 354 + .../pdf-lib/es/core/parser/PDFParser.js.map | 1 + .../es/core/parser/PDFXRefStreamParser.d.ts | 22 + .../core/parser/PDFXRefStreamParser.d.ts.map | 1 + .../es/core/parser/PDFXRefStreamParser.js | 89 + .../es/core/parser/PDFXRefStreamParser.js.map | 1 + .../es/core/streams/Ascii85Stream.d.ts | 10 + .../es/core/streams/Ascii85Stream.d.ts.map | 1 + .../pdf-lib/es/core/streams/Ascii85Stream.js | 85 + .../es/core/streams/Ascii85Stream.js.map | 1 + .../es/core/streams/AsciiHexStream.d.ts | 10 + .../es/core/streams/AsciiHexStream.d.ts.map | 1 + .../pdf-lib/es/core/streams/AsciiHexStream.js | 73 + .../es/core/streams/AsciiHexStream.js.map | 1 + .../pdf-lib/es/core/streams/DecodeStream.d.ts | 27 + .../es/core/streams/DecodeStream.d.ts.map | 1 + .../pdf-lib/es/core/streams/DecodeStream.js | 146 + .../es/core/streams/DecodeStream.js.map | 1 + .../pdf-lib/es/core/streams/FlateStream.d.ts | 14 + .../es/core/streams/FlateStream.d.ts.map | 1 + .../pdf-lib/es/core/streams/FlateStream.js | 369 + .../es/core/streams/FlateStream.js.map | 1 + .../pdf-lib/es/core/streams/LZWStream.d.ts | 13 + .../es/core/streams/LZWStream.d.ts.map | 1 + .../pdf-lib/es/core/streams/LZWStream.js | 135 + .../pdf-lib/es/core/streams/LZWStream.js.map | 1 + .../es/core/streams/RunLengthStream.d.ts | 9 + .../es/core/streams/RunLengthStream.d.ts.map | 1 + .../es/core/streams/RunLengthStream.js | 53 + .../es/core/streams/RunLengthStream.js.map | 1 + .../pdf-lib/es/core/streams/Stream.d.ts | 35 + .../pdf-lib/es/core/streams/Stream.d.ts.map | 1 + .../pdf-lib/es/core/streams/Stream.js | 104 + .../pdf-lib/es/core/streams/Stream.js.map | 1 + .../pdf-lib/es/core/streams/decode.d.ts | 4 + .../pdf-lib/es/core/streams/decode.d.ts.map | 1 + .../pdf-lib/es/core/streams/decode.js | 55 + .../pdf-lib/es/core/streams/decode.js.map | 1 + .../es/core/structures/PDFCatalog.d.ts | 28 + .../es/core/structures/PDFCatalog.d.ts.map | 1 + .../pdf-lib/es/core/structures/PDFCatalog.js | 77 + .../es/core/structures/PDFCatalog.js.map | 1 + .../es/core/structures/PDFContentStream.d.ts | 16 + .../core/structures/PDFContentStream.d.ts.map | 1 + .../es/core/structures/PDFContentStream.js | 58 + .../core/structures/PDFContentStream.js.map | 1 + .../es/core/structures/PDFCrossRefStream.d.ts | 54 + .../structures/PDFCrossRefStream.d.ts.map | 1 + .../es/core/structures/PDFCrossRefStream.js | 184 + .../core/structures/PDFCrossRefStream.js.map | 1 + .../es/core/structures/PDFFlateStream.d.ts | 14 + .../core/structures/PDFFlateStream.d.ts.map | 1 + .../es/core/structures/PDFFlateStream.js | 33 + .../es/core/structures/PDFFlateStream.js.map | 1 + .../es/core/structures/PDFObjectStream.d.ts | 21 + .../core/structures/PDFObjectStream.d.ts.map | 1 + .../es/core/structures/PDFObjectStream.js | 75 + .../es/core/structures/PDFObjectStream.js.map | 1 + .../es/core/structures/PDFPageLeaf.d.ts | 55 + .../es/core/structures/PDFPageLeaf.d.ts.map | 1 + .../pdf-lib/es/core/structures/PDFPageLeaf.js | 204 + .../es/core/structures/PDFPageLeaf.js.map | 1 + .../es/core/structures/PDFPageTree.d.ts | 42 + .../es/core/structures/PDFPageTree.d.ts.map | 1 + .../pdf-lib/es/core/structures/PDFPageTree.js | 175 + .../es/core/structures/PDFPageTree.js.map | 1 + .../pdf-lib/es/core/syntax/CharCodes.d.ts | 62 + .../pdf-lib/es/core/syntax/CharCodes.d.ts.map | 1 + .../pdf-lib/es/core/syntax/CharCodes.js | 63 + .../pdf-lib/es/core/syntax/CharCodes.js.map | 1 + .../pdf-lib/es/core/syntax/Delimiters.d.ts | 2 + .../es/core/syntax/Delimiters.d.ts.map | 1 + .../pdf-lib/es/core/syntax/Delimiters.js | 13 + .../pdf-lib/es/core/syntax/Delimiters.js.map | 1 + .../pdf-lib/es/core/syntax/Irregular.d.ts | 2 + .../pdf-lib/es/core/syntax/Irregular.d.ts.map | 1 + .../pdf-lib/es/core/syntax/Irregular.js | 9 + .../pdf-lib/es/core/syntax/Irregular.js.map | 1 + .../pdf-lib/es/core/syntax/Keywords.d.ts | 23 + .../pdf-lib/es/core/syntax/Keywords.d.ts.map | 1 + .../pdf-lib/es/core/syntax/Keywords.js | 81 + .../pdf-lib/es/core/syntax/Keywords.js.map | 1 + .../pdf-lib/es/core/syntax/Numeric.d.ts | 4 + .../pdf-lib/es/core/syntax/Numeric.d.ts.map | 1 + .../pdf-lib/es/core/syntax/Numeric.js | 21 + .../pdf-lib/es/core/syntax/Numeric.js.map | 1 + .../pdf-lib/es/core/syntax/Whitespace.d.ts | 2 + .../es/core/syntax/Whitespace.d.ts.map | 1 + .../pdf-lib/es/core/syntax/Whitespace.js | 9 + .../pdf-lib/es/core/syntax/Whitespace.js.map | 1 + .../es/core/writers/PDFStreamWriter.d.ts | 20 + .../es/core/writers/PDFStreamWriter.d.ts.map | 1 + .../es/core/writers/PDFStreamWriter.js | 111 + .../es/core/writers/PDFStreamWriter.js.map | 1 + .../pdf-lib/es/core/writers/PDFWriter.d.ts | 30 + .../es/core/writers/PDFWriter.d.ts.map | 1 + .../pdf-lib/es/core/writers/PDFWriter.js | 142 + .../pdf-lib/es/core/writers/PDFWriter.js.map | 1 + node_modules/pdf-lib/es/index.d.ts | 5 + node_modules/pdf-lib/es/index.d.ts.map | 1 + node_modules/pdf-lib/es/index.js | 5 + node_modules/pdf-lib/es/index.js.map | 1 + node_modules/pdf-lib/es/types/fontkit.d.ts | 582 + .../pdf-lib/es/types/fontkit.d.ts.map | 1 + node_modules/pdf-lib/es/types/fontkit.js | 1 + node_modules/pdf-lib/es/types/fontkit.js.map | 1 + node_modules/pdf-lib/es/types/index.d.ts | 2 + node_modules/pdf-lib/es/types/index.d.ts.map | 1 + node_modules/pdf-lib/es/types/index.js | 1 + node_modules/pdf-lib/es/types/index.js.map | 1 + node_modules/pdf-lib/es/types/matrix.d.ts | 22 + node_modules/pdf-lib/es/types/matrix.d.ts.map | 1 + node_modules/pdf-lib/es/types/matrix.js | 2 + node_modules/pdf-lib/es/types/matrix.js.map | 1 + node_modules/pdf-lib/es/utils/Cache.d.ts | 11 + node_modules/pdf-lib/es/utils/Cache.d.ts.map | 1 + node_modules/pdf-lib/es/utils/Cache.js | 21 + node_modules/pdf-lib/es/utils/Cache.js.map | 1 + node_modules/pdf-lib/es/utils/arrays.d.ts | 16 + node_modules/pdf-lib/es/utils/arrays.d.ts.map | 1 + node_modules/pdf-lib/es/utils/arrays.js | 129 + node_modules/pdf-lib/es/utils/arrays.js.map | 1 + node_modules/pdf-lib/es/utils/async.d.ts | 6 + node_modules/pdf-lib/es/utils/async.d.ts.map | 1 + node_modules/pdf-lib/es/utils/async.js | 10 + node_modules/pdf-lib/es/utils/async.js.map | 1 + node_modules/pdf-lib/es/utils/base64.d.ts | 11 + node_modules/pdf-lib/es/utils/base64.d.ts.map | 1 + node_modules/pdf-lib/es/utils/base64.js | 84 + node_modules/pdf-lib/es/utils/base64.js.map | 1 + node_modules/pdf-lib/es/utils/errors.d.ts | 2 + node_modules/pdf-lib/es/utils/errors.d.ts.map | 1 + node_modules/pdf-lib/es/utils/errors.js | 4 + node_modules/pdf-lib/es/utils/errors.js.map | 1 + node_modules/pdf-lib/es/utils/index.d.ts | 12 + node_modules/pdf-lib/es/utils/index.d.ts.map | 1 + node_modules/pdf-lib/es/utils/index.js | 12 + node_modules/pdf-lib/es/utils/index.js.map | 1 + node_modules/pdf-lib/es/utils/numbers.d.ts | 24 + .../pdf-lib/es/utils/numbers.d.ts.map | 1 + node_modules/pdf-lib/es/utils/numbers.js | 54 + node_modules/pdf-lib/es/utils/numbers.js.map | 1 + node_modules/pdf-lib/es/utils/objects.d.ts | 16 + .../pdf-lib/es/utils/objects.d.ts.map | 1 + node_modules/pdf-lib/es/utils/objects.js | 8 + node_modules/pdf-lib/es/utils/objects.js.map | 1 + .../pdf-lib/es/utils/pdfDocEncoding.d.ts | 8 + .../pdf-lib/es/utils/pdfDocEncoding.d.ts.map | 1 + .../pdf-lib/es/utils/pdfDocEncoding.js | 66 + .../pdf-lib/es/utils/pdfDocEncoding.js.map | 1 + node_modules/pdf-lib/es/utils/png.d.ts | 18 + node_modules/pdf-lib/es/utils/png.d.ts.map | 1 + node_modules/pdf-lib/es/utils/png.js | 59 + node_modules/pdf-lib/es/utils/png.js.map | 1 + node_modules/pdf-lib/es/utils/rng.d.ts | 14 + node_modules/pdf-lib/es/utils/rng.d.ts.map | 1 + node_modules/pdf-lib/es/utils/rng.js | 20 + node_modules/pdf-lib/es/utils/rng.js.map | 1 + node_modules/pdf-lib/es/utils/strings.d.ts | 25 + .../pdf-lib/es/utils/strings.d.ts.map | 1 + node_modules/pdf-lib/es/utils/strings.js | 138 + node_modules/pdf-lib/es/utils/strings.js.map | 1 + node_modules/pdf-lib/es/utils/unicode.d.ts | 187 + .../pdf-lib/es/utils/unicode.d.ts.map | 1 + node_modules/pdf-lib/es/utils/unicode.js | 367 + node_modules/pdf-lib/es/utils/unicode.js.map | 1 + node_modules/pdf-lib/es/utils/validators.d.ts | 27 + .../pdf-lib/es/utils/validators.d.ts.map | 1 + node_modules/pdf-lib/es/utils/validators.js | 180 + .../pdf-lib/es/utils/validators.js.map | 1 + node_modules/pdf-lib/package.json | 141 + node_modules/pdf-lib/src/api/Embeddable.ts | 7 + node_modules/pdf-lib/src/api/PDFDocument.ts | 1395 + .../pdf-lib/src/api/PDFDocumentOptions.ts | 44 + .../pdf-lib/src/api/PDFEmbeddedFile.ts | 90 + .../pdf-lib/src/api/PDFEmbeddedPage.ts | 104 + node_modules/pdf-lib/src/api/PDFFont.ts | 154 + node_modules/pdf-lib/src/api/PDFImage.ts | 143 + node_modules/pdf-lib/src/api/PDFJavaScript.ts | 82 + node_modules/pdf-lib/src/api/PDFPage.ts | 1621 + .../pdf-lib/src/api/PDFPageOptions.ts | 158 + node_modules/pdf-lib/src/api/StandardFonts.ts | 16 + node_modules/pdf-lib/src/api/colors.ts | 104 + node_modules/pdf-lib/src/api/errors.ts | 111 + .../pdf-lib/src/api/form/PDFButton.ts | 267 + .../pdf-lib/src/api/form/PDFCheckBox.ts | 262 + .../pdf-lib/src/api/form/PDFDropdown.ts | 652 + node_modules/pdf-lib/src/api/form/PDFField.ts | 521 + node_modules/pdf-lib/src/api/form/PDFForm.ts | 852 + .../pdf-lib/src/api/form/PDFOptionList.ts | 571 + .../pdf-lib/src/api/form/PDFRadioGroup.ts | 471 + .../pdf-lib/src/api/form/PDFSignature.ts | 53 + .../pdf-lib/src/api/form/PDFTextField.ts | 826 + .../pdf-lib/src/api/form/appearances.ts | 665 + node_modules/pdf-lib/src/api/form/index.ts | 10 + .../pdf-lib/src/api/image/alignment.ts | 5 + node_modules/pdf-lib/src/api/image/index.ts | 1 + node_modules/pdf-lib/src/api/index.ts | 20 + node_modules/pdf-lib/src/api/objects.ts | 10 + node_modules/pdf-lib/src/api/operations.ts | 800 + node_modules/pdf-lib/src/api/operators.ts | 360 + node_modules/pdf-lib/src/api/rotations.ts | 87 + node_modules/pdf-lib/src/api/sizes.ts | 52 + node_modules/pdf-lib/src/api/svgPath.ts | 489 + .../pdf-lib/src/api/text/alignment.ts | 5 + node_modules/pdf-lib/src/api/text/index.ts | 2 + node_modules/pdf-lib/src/api/text/layout.ts | 343 + node_modules/pdf-lib/src/core/PDFContext.ts | 299 + .../pdf-lib/src/core/PDFObjectCopier.ts | 143 + .../src/core/acroform/PDFAcroButton.ts | 114 + .../src/core/acroform/PDFAcroCheckBox.ts | 49 + .../src/core/acroform/PDFAcroChoice.ts | 153 + .../src/core/acroform/PDFAcroComboBox.ts | 22 + .../pdf-lib/src/core/acroform/PDFAcroField.ts | 167 + .../pdf-lib/src/core/acroform/PDFAcroForm.ts | 102 + .../src/core/acroform/PDFAcroListBox.ts | 20 + .../src/core/acroform/PDFAcroNonTerminal.ts | 34 + .../src/core/acroform/PDFAcroPushButton.ts | 22 + .../src/core/acroform/PDFAcroRadioButton.ts | 58 + .../src/core/acroform/PDFAcroSignature.ts | 10 + .../src/core/acroform/PDFAcroTerminal.ts | 71 + .../pdf-lib/src/core/acroform/PDFAcroText.ts | 76 + .../pdf-lib/src/core/acroform/flags.ts | 162 + .../pdf-lib/src/core/acroform/index.ts | 15 + .../pdf-lib/src/core/acroform/utils.ts | 135 + .../annotation/AppearanceCharacteristics.ts | 133 + .../src/core/annotation/BorderStyle.ts | 31 + .../src/core/annotation/PDFAnnotation.ts | 148 + .../core/annotation/PDFWidgetAnnotation.ts | 112 + .../pdf-lib/src/core/annotation/flags.ts | 90 + .../pdf-lib/src/core/annotation/index.ts | 4 + .../src/core/document/PDFCrossRefSection.ts | 173 + .../pdf-lib/src/core/document/PDFHeader.ts | 49 + .../pdf-lib/src/core/document/PDFTrailer.ts | 49 + .../src/core/document/PDFTrailerDict.ts | 39 + .../pdf-lib/src/core/embedders/CMap.ts | 70 + .../src/core/embedders/CustomFontEmbedder.ts | 249 + .../embedders/CustomFontSubsetEmbedder.ts | 84 + .../src/core/embedders/FileEmbedder.ts | 95 + .../pdf-lib/src/core/embedders/FontFlags.ts | 45 + .../src/core/embedders/JavaScriptEmbedder.ts | 34 + .../src/core/embedders/JpegEmbedder.ts | 127 + .../src/core/embedders/PDFPageEmbedder.ts | 141 + .../pdf-lib/src/core/embedders/PngEmbedder.ts | 69 + .../core/embedders/StandardFontEmbedder.ts | 130 + node_modules/pdf-lib/src/core/errors.ts | 221 + node_modules/pdf-lib/src/core/index.ts | 69 + .../src/core/interactive/ViewerPreferences.ts | 579 + .../pdf-lib/src/core/objects/PDFArray.ts | 185 + .../pdf-lib/src/core/objects/PDFBool.ts | 53 + .../pdf-lib/src/core/objects/PDFDict.ts | 226 + .../pdf-lib/src/core/objects/PDFHexString.ts | 94 + .../src/core/objects/PDFInvalidObject.ts | 34 + .../pdf-lib/src/core/objects/PDFName.ts | 159 + .../pdf-lib/src/core/objects/PDFNull.ts | 30 + .../pdf-lib/src/core/objects/PDFNumber.ts | 44 + .../pdf-lib/src/core/objects/PDFObject.ts | 22 + .../pdf-lib/src/core/objects/PDFRawStream.ts | 38 + .../pdf-lib/src/core/objects/PDFRef.ts | 55 + .../pdf-lib/src/core/objects/PDFStream.ts | 93 + .../pdf-lib/src/core/objects/PDFString.ts | 118 + .../pdf-lib/src/core/operators/PDFOperator.ts | 79 + .../src/core/operators/PDFOperatorNames.ts | 92 + .../pdf-lib/src/core/parser/BaseParser.ts | 119 + .../pdf-lib/src/core/parser/ByteStream.ts | 76 + .../src/core/parser/PDFObjectParser.ts | 274 + .../src/core/parser/PDFObjectStreamParser.ts | 67 + .../pdf-lib/src/core/parser/PDFParser.ts | 364 + .../src/core/parser/PDFXRefStreamParser.ts | 130 + .../pdf-lib/src/core/streams/Ascii85Stream.ts | 98 + .../src/core/streams/AsciiHexStream.ts | 77 + .../pdf-lib/src/core/streams/DecodeStream.ts | 170 + .../pdf-lib/src/core/streams/FlateStream.ts | 407 + .../pdf-lib/src/core/streams/LZWStream.ts | 164 + .../src/core/streams/RunLengthStream.ts | 55 + .../pdf-lib/src/core/streams/Stream.ts | 132 + .../pdf-lib/src/core/streams/decode.ts | 73 + .../pdf-lib/src/core/structures/PDFCatalog.ts | 85 + .../src/core/structures/PDFContentStream.ts | 58 + .../src/core/structures/PDFCrossRefStream.ts | 246 + .../src/core/structures/PDFFlateStream.ts | 43 + .../src/core/structures/PDFObjectStream.ts | 101 + .../src/core/structures/PDFPageLeaf.ts | 263 + .../src/core/structures/PDFPageTree.ts | 195 + .../pdf-lib/src/core/syntax/CharCodes.ts | 62 + .../pdf-lib/src/core/syntax/Delimiters.ts | 14 + .../pdf-lib/src/core/syntax/Irregular.ts | 10 + .../pdf-lib/src/core/syntax/Keywords.ts | 83 + .../pdf-lib/src/core/syntax/Numeric.ts | 26 + .../pdf-lib/src/core/syntax/Whitespace.ts | 10 + .../src/core/writers/PDFStreamWriter.ts | 123 + .../pdf-lib/src/core/writers/PDFWriter.ts | 156 + node_modules/pdf-lib/src/index.ts | 4 + node_modules/pdf-lib/src/types/fontkit.ts | 640 + node_modules/pdf-lib/src/types/index.ts | 1 + node_modules/pdf-lib/src/types/matrix.ts | 29 + node_modules/pdf-lib/src/utils/Cache.ts | 26 + node_modules/pdf-lib/src/utils/arrays.ts | 146 + node_modules/pdf-lib/src/utils/async.ts | 8 + node_modules/pdf-lib/src/utils/base64.ts | 99 + node_modules/pdf-lib/src/utils/errors.ts | 3 + node_modules/pdf-lib/src/utils/index.ts | 11 + node_modules/pdf-lib/src/utils/numbers.ts | 55 + node_modules/pdf-lib/src/utils/objects.ts | 13 + .../pdf-lib/src/utils/pdfDocEncoding.ts | 69 + node_modules/pdf-lib/src/utils/png.ts | 70 + node_modules/pdf-lib/src/utils/rng.ts | 21 + node_modules/pdf-lib/src/utils/strings.ts | 182 + node_modules/pdf-lib/src/utils/unicode.ts | 386 + node_modules/pdf-lib/src/utils/validators.ts | 228 + .../pdf-lib/ts3.4/apps/deno/dummy.d.ts | 20 + .../pdf-lib/ts3.4/cjs/api/Embeddable.d.ts | 8 + .../pdf-lib/ts3.4/cjs/api/PDFDocument.d.ts | 779 + .../ts3.4/cjs/api/PDFDocumentOptions.d.ts | 38 + .../ts3.4/cjs/api/PDFEmbeddedFile.d.ts | 39 + .../ts3.4/cjs/api/PDFEmbeddedPage.d.ts | 74 + .../pdf-lib/ts3.4/cjs/api/PDFFont.d.ts | 95 + .../pdf-lib/ts3.4/cjs/api/PDFImage.d.ts | 96 + .../pdf-lib/ts3.4/cjs/api/PDFJavaScript.d.ts | 39 + .../pdf-lib/ts3.4/cjs/api/PDFPage.d.ts | 898 + .../pdf-lib/ts3.4/cjs/api/PDFPageOptions.d.ts | 155 + .../pdf-lib/ts3.4/cjs/api/StandardFonts.d.ts | 17 + .../pdf-lib/ts3.4/cjs/api/colors.d.ts | 31 + .../pdf-lib/ts3.4/cjs/api/errors.d.ts | 43 + .../pdf-lib/ts3.4/cjs/api/form/PDFButton.d.ts | 138 + .../ts3.4/cjs/api/form/PDFCheckBox.d.ts | 143 + .../ts3.4/cjs/api/form/PDFDropdown.d.ts | 403 + .../pdf-lib/ts3.4/cjs/api/form/PDFField.d.ts | 204 + .../pdf-lib/ts3.4/cjs/api/form/PDFForm.d.ts | 412 + .../ts3.4/cjs/api/form/PDFOptionList.d.ts | 336 + .../ts3.4/cjs/api/form/PDFRadioGroup.d.ts | 253 + .../ts3.4/cjs/api/form/PDFSignature.d.ts | 30 + .../ts3.4/cjs/api/form/PDFTextField.d.ts | 538 + .../ts3.4/cjs/api/form/appearances.d.ts | 42 + .../pdf-lib/ts3.4/cjs/api/form/index.d.ts | 11 + .../ts3.4/cjs/api/image/alignment.d.ts | 6 + .../pdf-lib/ts3.4/cjs/api/image/index.d.ts | 2 + node_modules/pdf-lib/ts3.4/cjs/api/index.d.ts | 21 + .../pdf-lib/ts3.4/cjs/api/objects.d.ts | 5 + .../pdf-lib/ts3.4/cjs/api/operations.d.ts | 212 + .../pdf-lib/ts3.4/cjs/api/operators.d.ts | 86 + .../pdf-lib/ts3.4/cjs/api/rotations.d.ts | 39 + node_modules/pdf-lib/ts3.4/cjs/api/sizes.d.ts | 53 + .../pdf-lib/ts3.4/cjs/api/svgPath.d.ts | 3 + .../pdf-lib/ts3.4/cjs/api/text/alignment.d.ts | 6 + .../pdf-lib/ts3.4/cjs/api/text/index.d.ts | 3 + .../pdf-lib/ts3.4/cjs/api/text/layout.d.ts | 55 + .../pdf-lib/ts3.4/cjs/core/PDFContext.d.ts | 84 + .../ts3.4/cjs/core/PDFObjectCopier.d.ts | 38 + .../cjs/core/acroform/PDFAcroButton.d.ts | 22 + .../cjs/core/acroform/PDFAcroCheckBox.d.ts | 14 + .../cjs/core/acroform/PDFAcroChoice.d.ts | 21 + .../cjs/core/acroform/PDFAcroComboBox.d.ts | 10 + .../ts3.4/cjs/core/acroform/PDFAcroField.d.ts | 37 + .../ts3.4/cjs/core/acroform/PDFAcroForm.d.ts | 21 + .../cjs/core/acroform/PDFAcroListBox.d.ts | 10 + .../cjs/core/acroform/PDFAcroNonTerminal.d.ts | 14 + .../cjs/core/acroform/PDFAcroPushButton.d.ts | 10 + .../cjs/core/acroform/PDFAcroRadioButton.d.ts | 14 + .../cjs/core/acroform/PDFAcroSignature.d.ts | 8 + .../cjs/core/acroform/PDFAcroTerminal.d.ts | 17 + .../ts3.4/cjs/core/acroform/PDFAcroText.d.ts | 23 + .../ts3.4/cjs/core/acroform/flags.d.ts | 142 + .../ts3.4/cjs/core/acroform/index.d.ts | 16 + .../ts3.4/cjs/core/acroform/utils.d.ts | 7 + .../annotation/AppearanceCharacteristics.d.ts | 34 + .../cjs/core/annotation/BorderStyle.d.ts | 12 + .../cjs/core/annotation/PDFAnnotation.d.ts | 52 + .../core/annotation/PDFWidgetAnnotation.d.ts | 27 + .../ts3.4/cjs/core/annotation/flags.d.ts | 80 + .../ts3.4/cjs/core/annotation/index.d.ts | 5 + .../cjs/core/document/PDFCrossRefSection.d.ts | 28 + .../ts3.4/cjs/core/document/PDFHeader.d.ts | 11 + .../ts3.4/cjs/core/document/PDFTrailer.d.ts | 10 + .../cjs/core/document/PDFTrailerDict.d.ts | 11 + .../ts3.4/cjs/core/embedders/CMap.d.ts | 4 + .../core/embedders/CustomFontEmbedder.d.ts | 45 + .../embedders/CustomFontSubsetEmbedder.d.ts | 21 + .../cjs/core/embedders/FileEmbedder.d.ts | 34 + .../ts3.4/cjs/core/embedders/FontFlags.d.ts | 14 + .../core/embedders/JavaScriptEmbedder.d.ts | 11 + .../cjs/core/embedders/JpegEmbedder.d.ts | 24 + .../cjs/core/embedders/PDFPageEmbedder.d.ts | 38 + .../ts3.4/cjs/core/embedders/PngEmbedder.d.ts | 20 + .../core/embedders/StandardFontEmbedder.d.ts | 37 + .../pdf-lib/ts3.4/cjs/core/errors.d.ts | 92 + .../pdf-lib/ts3.4/cjs/core/index.d.ts | 48 + .../core/interactive/ViewerPreferences.d.ts | 348 + .../ts3.4/cjs/core/objects/PDFArray.d.ts | 64 + .../ts3.4/cjs/core/objects/PDFBool.d.ts | 14 + .../ts3.4/cjs/core/objects/PDFDict.d.ts | 62 + .../ts3.4/cjs/core/objects/PDFHexString.d.ts | 17 + .../cjs/core/objects/PDFInvalidObject.d.ts | 12 + .../ts3.4/cjs/core/objects/PDFName.d.ts | 42 + .../ts3.4/cjs/core/objects/PDFNull.d.ts | 11 + .../ts3.4/cjs/core/objects/PDFNumber.d.ts | 16 + .../ts3.4/cjs/core/objects/PDFObject.d.ts | 9 + .../ts3.4/cjs/core/objects/PDFRawStream.d.ts | 15 + .../ts3.4/cjs/core/objects/PDFRef.d.ts | 14 + .../ts3.4/cjs/core/objects/PDFStream.d.ts | 17 + .../ts3.4/cjs/core/objects/PDFString.d.ts | 17 + .../ts3.4/cjs/core/operators/PDFOperator.d.ts | 20 + .../cjs/core/operators/PDFOperatorNames.d.ts | 77 + .../ts3.4/cjs/core/parser/BaseParser.d.ts | 15 + .../ts3.4/cjs/core/parser/ByteStream.d.ts | 27 + .../cjs/core/parser/PDFObjectParser.d.ts | 30 + .../core/parser/PDFObjectStreamParser.d.ts | 14 + .../ts3.4/cjs/core/parser/PDFParser.d.ts | 46 + .../cjs/core/parser/PDFXRefStreamParser.d.ts | 22 + .../ts3.4/cjs/core/streams/Ascii85Stream.d.ts | 10 + .../cjs/core/streams/AsciiHexStream.d.ts | 10 + .../ts3.4/cjs/core/streams/DecodeStream.d.ts | 27 + .../ts3.4/cjs/core/streams/FlateStream.d.ts | 14 + .../ts3.4/cjs/core/streams/LZWStream.d.ts | 13 + .../cjs/core/streams/RunLengthStream.d.ts | 9 + .../ts3.4/cjs/core/streams/Stream.d.ts | 35 + .../ts3.4/cjs/core/streams/decode.d.ts | 4 + .../ts3.4/cjs/core/structures/PDFCatalog.d.ts | 28 + .../cjs/core/structures/PDFContentStream.d.ts | 16 + .../core/structures/PDFCrossRefStream.d.ts | 54 + .../cjs/core/structures/PDFFlateStream.d.ts | 14 + .../cjs/core/structures/PDFObjectStream.d.ts | 21 + .../cjs/core/structures/PDFPageLeaf.d.ts | 55 + .../cjs/core/structures/PDFPageTree.d.ts | 42 + .../ts3.4/cjs/core/syntax/CharCodes.d.ts | 62 + .../ts3.4/cjs/core/syntax/Delimiters.d.ts | 2 + .../ts3.4/cjs/core/syntax/Irregular.d.ts | 2 + .../ts3.4/cjs/core/syntax/Keywords.d.ts | 23 + .../ts3.4/cjs/core/syntax/Numeric.d.ts | 4 + .../ts3.4/cjs/core/syntax/Whitespace.d.ts | 2 + .../cjs/core/writers/PDFStreamWriter.d.ts | 20 + .../ts3.4/cjs/core/writers/PDFWriter.d.ts | 30 + node_modules/pdf-lib/ts3.4/cjs/index.d.ts | 5 + .../pdf-lib/ts3.4/cjs/types/fontkit.d.ts | 582 + .../pdf-lib/ts3.4/cjs/types/index.d.ts | 2 + .../pdf-lib/ts3.4/cjs/types/matrix.d.ts | 22 + .../pdf-lib/ts3.4/cjs/utils/Cache.d.ts | 11 + .../pdf-lib/ts3.4/cjs/utils/arrays.d.ts | 16 + .../pdf-lib/ts3.4/cjs/utils/async.d.ts | 6 + .../pdf-lib/ts3.4/cjs/utils/base64.d.ts | 11 + .../pdf-lib/ts3.4/cjs/utils/errors.d.ts | 2 + .../pdf-lib/ts3.4/cjs/utils/index.d.ts | 12 + .../pdf-lib/ts3.4/cjs/utils/numbers.d.ts | 24 + .../pdf-lib/ts3.4/cjs/utils/objects.d.ts | 16 + .../ts3.4/cjs/utils/pdfDocEncoding.d.ts | 8 + node_modules/pdf-lib/ts3.4/cjs/utils/png.d.ts | 18 + node_modules/pdf-lib/ts3.4/cjs/utils/rng.d.ts | 14 + .../pdf-lib/ts3.4/cjs/utils/strings.d.ts | 25 + .../pdf-lib/ts3.4/cjs/utils/unicode.d.ts | 187 + .../pdf-lib/ts3.4/cjs/utils/validators.d.ts | 27 + .../pdf-lib/ts3.4/es/api/Embeddable.d.ts | 8 + .../pdf-lib/ts3.4/es/api/PDFDocument.d.ts | 779 + .../ts3.4/es/api/PDFDocumentOptions.d.ts | 38 + .../pdf-lib/ts3.4/es/api/PDFEmbeddedFile.d.ts | 39 + .../pdf-lib/ts3.4/es/api/PDFEmbeddedPage.d.ts | 74 + .../pdf-lib/ts3.4/es/api/PDFFont.d.ts | 95 + .../pdf-lib/ts3.4/es/api/PDFImage.d.ts | 96 + .../pdf-lib/ts3.4/es/api/PDFJavaScript.d.ts | 39 + .../pdf-lib/ts3.4/es/api/PDFPage.d.ts | 898 + .../pdf-lib/ts3.4/es/api/PDFPageOptions.d.ts | 155 + .../pdf-lib/ts3.4/es/api/StandardFonts.d.ts | 17 + node_modules/pdf-lib/ts3.4/es/api/colors.d.ts | 31 + node_modules/pdf-lib/ts3.4/es/api/errors.d.ts | 43 + .../pdf-lib/ts3.4/es/api/form/PDFButton.d.ts | 138 + .../ts3.4/es/api/form/PDFCheckBox.d.ts | 143 + .../ts3.4/es/api/form/PDFDropdown.d.ts | 403 + .../pdf-lib/ts3.4/es/api/form/PDFField.d.ts | 204 + .../pdf-lib/ts3.4/es/api/form/PDFForm.d.ts | 412 + .../ts3.4/es/api/form/PDFOptionList.d.ts | 336 + .../ts3.4/es/api/form/PDFRadioGroup.d.ts | 253 + .../ts3.4/es/api/form/PDFSignature.d.ts | 30 + .../ts3.4/es/api/form/PDFTextField.d.ts | 538 + .../ts3.4/es/api/form/appearances.d.ts | 42 + .../pdf-lib/ts3.4/es/api/form/index.d.ts | 11 + .../pdf-lib/ts3.4/es/api/image/alignment.d.ts | 6 + .../pdf-lib/ts3.4/es/api/image/index.d.ts | 2 + node_modules/pdf-lib/ts3.4/es/api/index.d.ts | 21 + .../pdf-lib/ts3.4/es/api/objects.d.ts | 5 + .../pdf-lib/ts3.4/es/api/operations.d.ts | 212 + .../pdf-lib/ts3.4/es/api/operators.d.ts | 86 + .../pdf-lib/ts3.4/es/api/rotations.d.ts | 39 + node_modules/pdf-lib/ts3.4/es/api/sizes.d.ts | 53 + .../pdf-lib/ts3.4/es/api/svgPath.d.ts | 3 + .../pdf-lib/ts3.4/es/api/text/alignment.d.ts | 6 + .../pdf-lib/ts3.4/es/api/text/index.d.ts | 3 + .../pdf-lib/ts3.4/es/api/text/layout.d.ts | 55 + .../pdf-lib/ts3.4/es/core/PDFContext.d.ts | 84 + .../ts3.4/es/core/PDFObjectCopier.d.ts | 38 + .../ts3.4/es/core/acroform/PDFAcroButton.d.ts | 22 + .../es/core/acroform/PDFAcroCheckBox.d.ts | 14 + .../ts3.4/es/core/acroform/PDFAcroChoice.d.ts | 21 + .../es/core/acroform/PDFAcroComboBox.d.ts | 10 + .../ts3.4/es/core/acroform/PDFAcroField.d.ts | 37 + .../ts3.4/es/core/acroform/PDFAcroForm.d.ts | 21 + .../es/core/acroform/PDFAcroListBox.d.ts | 10 + .../es/core/acroform/PDFAcroNonTerminal.d.ts | 14 + .../es/core/acroform/PDFAcroPushButton.d.ts | 10 + .../es/core/acroform/PDFAcroRadioButton.d.ts | 14 + .../es/core/acroform/PDFAcroSignature.d.ts | 8 + .../es/core/acroform/PDFAcroTerminal.d.ts | 17 + .../ts3.4/es/core/acroform/PDFAcroText.d.ts | 23 + .../pdf-lib/ts3.4/es/core/acroform/flags.d.ts | 142 + .../pdf-lib/ts3.4/es/core/acroform/index.d.ts | 16 + .../pdf-lib/ts3.4/es/core/acroform/utils.d.ts | 7 + .../annotation/AppearanceCharacteristics.d.ts | 34 + .../ts3.4/es/core/annotation/BorderStyle.d.ts | 12 + .../es/core/annotation/PDFAnnotation.d.ts | 52 + .../core/annotation/PDFWidgetAnnotation.d.ts | 27 + .../ts3.4/es/core/annotation/flags.d.ts | 80 + .../ts3.4/es/core/annotation/index.d.ts | 5 + .../es/core/document/PDFCrossRefSection.d.ts | 28 + .../ts3.4/es/core/document/PDFHeader.d.ts | 11 + .../ts3.4/es/core/document/PDFTrailer.d.ts | 10 + .../es/core/document/PDFTrailerDict.d.ts | 11 + .../pdf-lib/ts3.4/es/core/embedders/CMap.d.ts | 4 + .../es/core/embedders/CustomFontEmbedder.d.ts | 45 + .../embedders/CustomFontSubsetEmbedder.d.ts | 21 + .../ts3.4/es/core/embedders/FileEmbedder.d.ts | 34 + .../ts3.4/es/core/embedders/FontFlags.d.ts | 14 + .../es/core/embedders/JavaScriptEmbedder.d.ts | 11 + .../ts3.4/es/core/embedders/JpegEmbedder.d.ts | 24 + .../es/core/embedders/PDFPageEmbedder.d.ts | 38 + .../ts3.4/es/core/embedders/PngEmbedder.d.ts | 20 + .../core/embedders/StandardFontEmbedder.d.ts | 37 + .../pdf-lib/ts3.4/es/core/errors.d.ts | 92 + node_modules/pdf-lib/ts3.4/es/core/index.d.ts | 48 + .../core/interactive/ViewerPreferences.d.ts | 348 + .../ts3.4/es/core/objects/PDFArray.d.ts | 64 + .../ts3.4/es/core/objects/PDFBool.d.ts | 14 + .../ts3.4/es/core/objects/PDFDict.d.ts | 62 + .../ts3.4/es/core/objects/PDFHexString.d.ts | 17 + .../es/core/objects/PDFInvalidObject.d.ts | 12 + .../ts3.4/es/core/objects/PDFName.d.ts | 42 + .../ts3.4/es/core/objects/PDFNull.d.ts | 11 + .../ts3.4/es/core/objects/PDFNumber.d.ts | 16 + .../ts3.4/es/core/objects/PDFObject.d.ts | 9 + .../ts3.4/es/core/objects/PDFRawStream.d.ts | 15 + .../pdf-lib/ts3.4/es/core/objects/PDFRef.d.ts | 14 + .../ts3.4/es/core/objects/PDFStream.d.ts | 17 + .../ts3.4/es/core/objects/PDFString.d.ts | 17 + .../ts3.4/es/core/operators/PDFOperator.d.ts | 20 + .../es/core/operators/PDFOperatorNames.d.ts | 77 + .../ts3.4/es/core/parser/BaseParser.d.ts | 15 + .../ts3.4/es/core/parser/ByteStream.d.ts | 27 + .../ts3.4/es/core/parser/PDFObjectParser.d.ts | 30 + .../es/core/parser/PDFObjectStreamParser.d.ts | 14 + .../ts3.4/es/core/parser/PDFParser.d.ts | 46 + .../es/core/parser/PDFXRefStreamParser.d.ts | 22 + .../ts3.4/es/core/streams/Ascii85Stream.d.ts | 10 + .../ts3.4/es/core/streams/AsciiHexStream.d.ts | 10 + .../ts3.4/es/core/streams/DecodeStream.d.ts | 27 + .../ts3.4/es/core/streams/FlateStream.d.ts | 14 + .../ts3.4/es/core/streams/LZWStream.d.ts | 13 + .../es/core/streams/RunLengthStream.d.ts | 9 + .../pdf-lib/ts3.4/es/core/streams/Stream.d.ts | 35 + .../pdf-lib/ts3.4/es/core/streams/decode.d.ts | 4 + .../ts3.4/es/core/structures/PDFCatalog.d.ts | 28 + .../es/core/structures/PDFContentStream.d.ts | 16 + .../es/core/structures/PDFCrossRefStream.d.ts | 54 + .../es/core/structures/PDFFlateStream.d.ts | 14 + .../es/core/structures/PDFObjectStream.d.ts | 21 + .../ts3.4/es/core/structures/PDFPageLeaf.d.ts | 55 + .../ts3.4/es/core/structures/PDFPageTree.d.ts | 42 + .../ts3.4/es/core/syntax/CharCodes.d.ts | 62 + .../ts3.4/es/core/syntax/Delimiters.d.ts | 2 + .../ts3.4/es/core/syntax/Irregular.d.ts | 2 + .../ts3.4/es/core/syntax/Keywords.d.ts | 23 + .../pdf-lib/ts3.4/es/core/syntax/Numeric.d.ts | 4 + .../ts3.4/es/core/syntax/Whitespace.d.ts | 2 + .../es/core/writers/PDFStreamWriter.d.ts | 20 + .../ts3.4/es/core/writers/PDFWriter.d.ts | 30 + node_modules/pdf-lib/ts3.4/es/index.d.ts | 5 + .../pdf-lib/ts3.4/es/types/fontkit.d.ts | 582 + .../pdf-lib/ts3.4/es/types/index.d.ts | 2 + .../pdf-lib/ts3.4/es/types/matrix.d.ts | 22 + .../pdf-lib/ts3.4/es/utils/Cache.d.ts | 11 + .../pdf-lib/ts3.4/es/utils/arrays.d.ts | 16 + .../pdf-lib/ts3.4/es/utils/async.d.ts | 6 + .../pdf-lib/ts3.4/es/utils/base64.d.ts | 11 + .../pdf-lib/ts3.4/es/utils/errors.d.ts | 2 + .../pdf-lib/ts3.4/es/utils/index.d.ts | 12 + .../pdf-lib/ts3.4/es/utils/numbers.d.ts | 24 + .../pdf-lib/ts3.4/es/utils/objects.d.ts | 16 + .../ts3.4/es/utils/pdfDocEncoding.d.ts | 8 + node_modules/pdf-lib/ts3.4/es/utils/png.d.ts | 18 + node_modules/pdf-lib/ts3.4/es/utils/rng.d.ts | 14 + .../pdf-lib/ts3.4/es/utils/strings.d.ts | 25 + .../pdf-lib/ts3.4/es/utils/unicode.d.ts | 187 + .../pdf-lib/ts3.4/es/utils/validators.d.ts | 27 + node_modules/pdf-lib/yarn.lock | 4408 ++ node_modules/process-nextick-args/index.js | 45 + node_modules/process-nextick-args/license.md | 19 + .../process-nextick-args/package.json | 25 + node_modules/process-nextick-args/readme.md | 18 + node_modules/proxy-addr/HISTORY.md | 161 + node_modules/proxy-addr/LICENSE | 22 + node_modules/proxy-addr/README.md | 139 + node_modules/proxy-addr/index.js | 327 + node_modules/proxy-addr/package.json | 47 + node_modules/qs/.editorconfig | 46 + node_modules/qs/.github/FUNDING.yml | 12 + node_modules/qs/.github/SECURITY.md | 11 + node_modules/qs/.github/THREAT_MODEL.md | 78 + node_modules/qs/.nycrc | 13 + node_modules/qs/CHANGELOG.md | 822 + node_modules/qs/LICENSE.md | 29 + node_modules/qs/README.md | 758 + node_modules/qs/dist/qs.js | 141 + node_modules/qs/eslint.config.mjs | 57 + node_modules/qs/lib/formats.js | 23 + node_modules/qs/lib/index.js | 11 + node_modules/qs/lib/parse.js | 403 + node_modules/qs/lib/stringify.js | 363 + node_modules/qs/lib/utils.js | 342 + node_modules/qs/package.json | 94 + node_modules/qs/test/empty-keys-cases.js | 267 + node_modules/qs/test/parse.js | 1703 + node_modules/qs/test/stringify.js | 1448 + node_modules/qs/test/utils.js | 432 + node_modules/range-parser/HISTORY.md | 56 + node_modules/range-parser/LICENSE | 23 + node_modules/range-parser/README.md | 84 + node_modules/range-parser/index.js | 162 + node_modules/range-parser/package.json | 44 + node_modules/raw-body/LICENSE | 22 + node_modules/raw-body/README.md | 223 + node_modules/raw-body/index.d.ts | 87 + node_modules/raw-body/index.js | 336 + node_modules/raw-body/package.json | 47 + node_modules/readable-stream/.travis.yml | 34 + node_modules/readable-stream/CONTRIBUTING.md | 38 + node_modules/readable-stream/GOVERNANCE.md | 136 + node_modules/readable-stream/LICENSE | 47 + node_modules/readable-stream/README.md | 58 + .../doc/wg-meetings/2015-01-30.md | 60 + .../readable-stream/duplex-browser.js | 1 + node_modules/readable-stream/duplex.js | 1 + .../readable-stream/lib/_stream_duplex.js | 131 + .../lib/_stream_passthrough.js | 47 + .../readable-stream/lib/_stream_readable.js | 1019 + .../readable-stream/lib/_stream_transform.js | 214 + .../readable-stream/lib/_stream_writable.js | 685 + .../lib/internal/streams/BufferList.js | 78 + .../lib/internal/streams/destroy.js | 84 + .../lib/internal/streams/stream-browser.js | 1 + .../lib/internal/streams/stream.js | 1 + .../node_modules/safe-buffer/LICENSE | 21 + .../node_modules/safe-buffer/README.md | 584 + .../node_modules/safe-buffer/index.d.ts | 187 + .../node_modules/safe-buffer/index.js | 62 + .../node_modules/safe-buffer/package.json | 37 + node_modules/readable-stream/package.json | 52 + node_modules/readable-stream/passthrough.js | 1 + .../readable-stream/readable-browser.js | 7 + node_modules/readable-stream/readable.js | 19 + node_modules/readable-stream/transform.js | 1 + .../readable-stream/writable-browser.js | 1 + node_modules/readable-stream/writable.js | 8 + node_modules/safe-buffer/LICENSE | 21 + node_modules/safe-buffer/README.md | 584 + node_modules/safe-buffer/index.d.ts | 187 + node_modules/safe-buffer/index.js | 65 + node_modules/safe-buffer/package.json | 51 + node_modules/safer-buffer/LICENSE | 21 + node_modules/safer-buffer/Porting-Buffer.md | 268 + node_modules/safer-buffer/Readme.md | 156 + node_modules/safer-buffer/dangerous.js | 58 + node_modules/safer-buffer/package.json | 34 + node_modules/safer-buffer/safer.js | 77 + node_modules/safer-buffer/tests.js | 406 + node_modules/send/HISTORY.md | 538 + node_modules/send/LICENSE | 23 + node_modules/send/README.md | 327 + node_modules/send/SECURITY.md | 24 + node_modules/send/index.js | 1142 + node_modules/send/node_modules/ms/index.js | 162 + node_modules/send/node_modules/ms/license.md | 21 + .../send/node_modules/ms/package.json | 38 + node_modules/send/node_modules/ms/readme.md | 59 + node_modules/send/package.json | 62 + node_modules/serve-static/HISTORY.md | 493 + node_modules/serve-static/LICENSE | 25 + node_modules/serve-static/README.md | 257 + node_modules/serve-static/index.js | 209 + node_modules/serve-static/package.json | 42 + node_modules/setprototypeof/LICENSE | 13 + node_modules/setprototypeof/README.md | 31 + node_modules/setprototypeof/index.d.ts | 2 + node_modules/setprototypeof/index.js | 17 + node_modules/setprototypeof/package.json | 38 + node_modules/setprototypeof/test/index.js | 24 + node_modules/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 + node_modules/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 + node_modules/side-channel-list/package.json | 77 + node_modules/side-channel-list/test/index.js | 154 + node_modules/side-channel-list/tsconfig.json | 9 + node_modules/side-channel-map/.editorconfig | 9 + node_modules/side-channel-map/.eslintrc | 11 + .../side-channel-map/.github/FUNDING.yml | 12 + node_modules/side-channel-map/.nycrc | 13 + node_modules/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 + node_modules/side-channel-map/package.json | 80 + node_modules/side-channel-map/test/index.js | 114 + node_modules/side-channel-map/tsconfig.json | 9 + .../side-channel-weakmap/.editorconfig | 9 + node_modules/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 + node_modules/side-channel-weakmap/README.md | 62 + node_modules/side-channel-weakmap/index.d.ts | 15 + node_modules/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 + node_modules/side-channel/.eslintrc | 12 + node_modules/side-channel/.github/FUNDING.yml | 12 + node_modules/side-channel/.nycrc | 13 + node_modules/side-channel/CHANGELOG.md | 110 + node_modules/side-channel/LICENSE | 21 + node_modules/side-channel/README.md | 61 + node_modules/side-channel/index.d.ts | 14 + 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 + node_modules/statuses/HISTORY.md | 87 + node_modules/statuses/LICENSE | 23 + node_modules/statuses/README.md | 139 + node_modules/statuses/codes.json | 65 + node_modules/statuses/index.js | 146 + node_modules/statuses/package.json | 49 + node_modules/streamsearch/.eslintrc.js | 5 + .../streamsearch/.github/workflows/ci.yml | 24 + .../streamsearch/.github/workflows/lint.yml | 23 + node_modules/streamsearch/LICENSE | 19 + node_modules/streamsearch/README.md | 95 + node_modules/streamsearch/lib/sbmh.js | 267 + node_modules/streamsearch/package.json | 34 + node_modules/streamsearch/test/test.js | 70 + node_modules/string_decoder/.travis.yml | 50 + node_modules/string_decoder/LICENSE | 48 + node_modules/string_decoder/README.md | 47 + .../string_decoder/lib/string_decoder.js | 296 + .../node_modules/safe-buffer/LICENSE | 21 + .../node_modules/safe-buffer/README.md | 584 + .../node_modules/safe-buffer/index.d.ts | 187 + .../node_modules/safe-buffer/index.js | 62 + .../node_modules/safe-buffer/package.json | 37 + node_modules/string_decoder/package.json | 31 + node_modules/toidentifier/HISTORY.md | 9 + node_modules/toidentifier/LICENSE | 21 + node_modules/toidentifier/README.md | 61 + node_modules/toidentifier/index.js | 32 + node_modules/toidentifier/package.json | 38 + node_modules/tslib/CopyrightNotice.txt | 15 + node_modules/tslib/LICENSE.txt | 12 + node_modules/tslib/README.md | 142 + node_modules/tslib/modules/index.js | 51 + node_modules/tslib/modules/package.json | 3 + node_modules/tslib/package.json | 37 + .../index.js | 23 + .../package.json | 6 + node_modules/tslib/tslib.d.ts | 37 + node_modules/tslib/tslib.es6.html | 1 + node_modules/tslib/tslib.es6.js | 218 + node_modules/tslib/tslib.html | 1 + node_modules/tslib/tslib.js | 284 + node_modules/type-is/HISTORY.md | 259 + node_modules/type-is/LICENSE | 23 + node_modules/type-is/README.md | 170 + node_modules/type-is/index.js | 266 + node_modules/type-is/package.json | 45 + node_modules/typedarray/.travis.yml | 4 + node_modules/typedarray/LICENSE | 35 + node_modules/typedarray/example/tarray.js | 4 + node_modules/typedarray/index.js | 630 + node_modules/typedarray/package.json | 55 + node_modules/typedarray/readme.markdown | 61 + .../typedarray/test/server/undef_globals.js | 19 + node_modules/typedarray/test/tarray.js | 10 + node_modules/unpipe/HISTORY.md | 4 + node_modules/unpipe/LICENSE | 22 + node_modules/unpipe/README.md | 43 + node_modules/unpipe/index.js | 69 + node_modules/unpipe/package.json | 27 + node_modules/util-deprecate/History.md | 16 + node_modules/util-deprecate/LICENSE | 24 + node_modules/util-deprecate/README.md | 53 + node_modules/util-deprecate/browser.js | 67 + node_modules/util-deprecate/node.js | 6 + node_modules/util-deprecate/package.json | 27 + node_modules/utils-merge/.npmignore | 9 + node_modules/utils-merge/LICENSE | 20 + node_modules/utils-merge/README.md | 34 + node_modules/utils-merge/index.js | 23 + node_modules/utils-merge/package.json | 40 + node_modules/uuid/CHANGELOG.md | 274 + node_modules/uuid/CONTRIBUTING.md | 18 + node_modules/uuid/LICENSE.md | 9 + node_modules/uuid/README.md | 466 + node_modules/uuid/dist/bin/uuid | 2 + .../uuid/dist/commonjs-browser/index.js | 79 + .../uuid/dist/commonjs-browser/md5.js | 223 + .../uuid/dist/commonjs-browser/native.js | 11 + .../uuid/dist/commonjs-browser/nil.js | 8 + .../uuid/dist/commonjs-browser/parse.js | 45 + .../uuid/dist/commonjs-browser/regex.js | 8 + .../uuid/dist/commonjs-browser/rng.js | 25 + .../uuid/dist/commonjs-browser/sha1.js | 104 + .../uuid/dist/commonjs-browser/stringify.js | 44 + node_modules/uuid/dist/commonjs-browser/v1.js | 107 + node_modules/uuid/dist/commonjs-browser/v3.js | 16 + .../uuid/dist/commonjs-browser/v35.js | 80 + node_modules/uuid/dist/commonjs-browser/v4.js | 43 + node_modules/uuid/dist/commonjs-browser/v5.js | 16 + .../uuid/dist/commonjs-browser/validate.js | 17 + .../uuid/dist/commonjs-browser/version.js | 21 + node_modules/uuid/dist/esm-browser/index.js | 9 + node_modules/uuid/dist/esm-browser/md5.js | 215 + node_modules/uuid/dist/esm-browser/native.js | 4 + node_modules/uuid/dist/esm-browser/nil.js | 1 + node_modules/uuid/dist/esm-browser/parse.js | 35 + node_modules/uuid/dist/esm-browser/regex.js | 1 + node_modules/uuid/dist/esm-browser/rng.js | 18 + node_modules/uuid/dist/esm-browser/sha1.js | 96 + .../uuid/dist/esm-browser/stringify.js | 33 + node_modules/uuid/dist/esm-browser/v1.js | 95 + node_modules/uuid/dist/esm-browser/v3.js | 4 + node_modules/uuid/dist/esm-browser/v35.js | 66 + node_modules/uuid/dist/esm-browser/v4.js | 29 + node_modules/uuid/dist/esm-browser/v5.js | 4 + .../uuid/dist/esm-browser/validate.js | 7 + node_modules/uuid/dist/esm-browser/version.js | 11 + node_modules/uuid/dist/esm-node/index.js | 9 + node_modules/uuid/dist/esm-node/md5.js | 13 + node_modules/uuid/dist/esm-node/native.js | 4 + node_modules/uuid/dist/esm-node/nil.js | 1 + node_modules/uuid/dist/esm-node/parse.js | 35 + node_modules/uuid/dist/esm-node/regex.js | 1 + node_modules/uuid/dist/esm-node/rng.js | 12 + node_modules/uuid/dist/esm-node/sha1.js | 13 + node_modules/uuid/dist/esm-node/stringify.js | 33 + node_modules/uuid/dist/esm-node/v1.js | 95 + node_modules/uuid/dist/esm-node/v3.js | 4 + node_modules/uuid/dist/esm-node/v35.js | 66 + node_modules/uuid/dist/esm-node/v4.js | 29 + node_modules/uuid/dist/esm-node/v5.js | 4 + node_modules/uuid/dist/esm-node/validate.js | 7 + node_modules/uuid/dist/esm-node/version.js | 11 + node_modules/uuid/dist/index.js | 79 + node_modules/uuid/dist/md5-browser.js | 223 + node_modules/uuid/dist/md5.js | 23 + node_modules/uuid/dist/native-browser.js | 11 + node_modules/uuid/dist/native.js | 15 + node_modules/uuid/dist/nil.js | 8 + node_modules/uuid/dist/parse.js | 45 + node_modules/uuid/dist/regex.js | 8 + node_modules/uuid/dist/rng-browser.js | 25 + node_modules/uuid/dist/rng.js | 24 + node_modules/uuid/dist/sha1-browser.js | 104 + node_modules/uuid/dist/sha1.js | 23 + node_modules/uuid/dist/stringify.js | 44 + node_modules/uuid/dist/uuid-bin.js | 85 + node_modules/uuid/dist/v1.js | 107 + node_modules/uuid/dist/v3.js | 16 + node_modules/uuid/dist/v35.js | 80 + node_modules/uuid/dist/v4.js | 43 + node_modules/uuid/dist/v5.js | 16 + node_modules/uuid/dist/validate.js | 17 + node_modules/uuid/dist/version.js | 21 + node_modules/uuid/package.json | 135 + node_modules/uuid/wrapper.mjs | 10 + node_modules/vary/HISTORY.md | 39 + node_modules/vary/LICENSE | 22 + node_modules/vary/README.md | 101 + node_modules/vary/index.js | 149 + node_modules/vary/package.json | 43 + node_modules/ws/LICENSE | 20 + node_modules/ws/README.md | 548 + node_modules/ws/browser.js | 8 + node_modules/ws/index.js | 22 + node_modules/ws/lib/buffer-util.js | 131 + node_modules/ws/lib/constants.js | 19 + node_modules/ws/lib/event-target.js | 292 + node_modules/ws/lib/extension.js | 203 + node_modules/ws/lib/limiter.js | 55 + node_modules/ws/lib/permessage-deflate.js | 528 + node_modules/ws/lib/receiver.js | 706 + node_modules/ws/lib/sender.js | 607 + node_modules/ws/lib/stream.js | 161 + node_modules/ws/lib/subprotocol.js | 62 + node_modules/ws/lib/validation.js | 152 + node_modules/ws/lib/websocket-server.js | 554 + node_modules/ws/lib/websocket.js | 1393 + node_modules/ws/package.json | 70 + node_modules/ws/wrapper.mjs | 21 + node_modules/xtend/.jshintrc | 30 + node_modules/xtend/LICENSE | 20 + node_modules/xtend/README.md | 32 + node_modules/xtend/immutable.js | 19 + node_modules/xtend/mutable.js | 17 + node_modules/xtend/package.json | 55 + node_modules/xtend/test.js | 103 + package-lock.json | 1078 + package.json | 16 + public/app.js | 878 + public/index.html | 198 + public/style.css | 918 + server.js | 352 + 2537 files changed, 328078 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 node_modules/.bin/mime create mode 100644 node_modules/.bin/mime.cmd create mode 100644 node_modules/.bin/mime.ps1 create mode 100644 node_modules/.bin/mkdirp create mode 100644 node_modules/.bin/mkdirp.cmd create mode 100644 node_modules/.bin/mkdirp.ps1 create mode 100644 node_modules/.bin/uuid create mode 100644 node_modules/.bin/uuid.cmd create mode 100644 node_modules/.bin/uuid.ps1 create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/@pdf-lib/standard-fonts/LICENSE.md create mode 100644 node_modules/@pdf-lib/standard-fonts/README.md create mode 100644 node_modules/@pdf-lib/standard-fonts/dist/standard-fonts.js create mode 100644 node_modules/@pdf-lib/standard-fonts/dist/standard-fonts.min.js create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Courier-Bold.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Courier-BoldOblique.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Courier-Oblique.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Courier.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Encoding.d.ts create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Encoding.js create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Font.d.ts create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Font.js create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Helvetica-Bold.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Helvetica-BoldOblique.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Helvetica-Oblique.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Helvetica.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Symbol.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Times-Bold.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Times-BoldItalic.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Times-Italic.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/Times-Roman.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/ZapfDingbats.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/all-encodings.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/es/index.d.ts create mode 100644 node_modules/@pdf-lib/standard-fonts/es/index.js create mode 100644 node_modules/@pdf-lib/standard-fonts/es/utils.d.ts create mode 100644 node_modules/@pdf-lib/standard-fonts/es/utils.js create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Courier-Bold.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Courier-BoldOblique.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Courier-Oblique.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Courier.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Encoding.d.ts create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Encoding.js create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Font.d.ts create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Font.js create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Helvetica-Bold.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Helvetica-BoldOblique.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Helvetica-Oblique.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Helvetica.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Symbol.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Times-Bold.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Times-BoldItalic.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Times-Italic.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/Times-Roman.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/ZapfDingbats.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/all-encodings.compressed.json create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/index.d.ts create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/index.js create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/utils.d.ts create mode 100644 node_modules/@pdf-lib/standard-fonts/lib/utils.js create mode 100644 node_modules/@pdf-lib/standard-fonts/package.json create mode 100644 node_modules/@pdf-lib/upng/LICENSE create mode 100644 node_modules/@pdf-lib/upng/README.md create mode 100644 node_modules/@pdf-lib/upng/UPNG.js create mode 100644 node_modules/@pdf-lib/upng/cjs/UPNG.js create mode 100644 node_modules/@pdf-lib/upng/dist/UPNG.js create mode 100644 node_modules/@pdf-lib/upng/dist/UPNG.min.js create mode 100644 node_modules/@pdf-lib/upng/index.d.ts create mode 100644 node_modules/@pdf-lib/upng/package.json create mode 100644 node_modules/@pdf-lib/upng/yarn.lock create mode 100644 node_modules/accepts/HISTORY.md create mode 100644 node_modules/accepts/LICENSE create mode 100644 node_modules/accepts/README.md create mode 100644 node_modules/accepts/index.js create mode 100644 node_modules/accepts/package.json create mode 100644 node_modules/append-field/.npmignore create mode 100644 node_modules/append-field/LICENSE create mode 100644 node_modules/append-field/README.md create mode 100644 node_modules/append-field/index.js create mode 100644 node_modules/append-field/lib/parse-path.js create mode 100644 node_modules/append-field/lib/set-value.js create mode 100644 node_modules/append-field/package.json create mode 100644 node_modules/append-field/test/forms.js create mode 100644 node_modules/array-flatten/LICENSE create mode 100644 node_modules/array-flatten/README.md create mode 100644 node_modules/array-flatten/array-flatten.js create mode 100644 node_modules/array-flatten/package.json create mode 100644 node_modules/body-parser/HISTORY.md create mode 100644 node_modules/body-parser/LICENSE create mode 100644 node_modules/body-parser/README.md create mode 100644 node_modules/body-parser/index.js create mode 100644 node_modules/body-parser/lib/read.js create mode 100644 node_modules/body-parser/lib/types/json.js create mode 100644 node_modules/body-parser/lib/types/raw.js create mode 100644 node_modules/body-parser/lib/types/text.js create mode 100644 node_modules/body-parser/lib/types/urlencoded.js create mode 100644 node_modules/body-parser/package.json create mode 100644 node_modules/buffer-from/LICENSE create mode 100644 node_modules/buffer-from/index.js create mode 100644 node_modules/buffer-from/package.json create mode 100644 node_modules/buffer-from/readme.md create mode 100644 node_modules/busboy/.eslintrc.js create mode 100644 node_modules/busboy/.github/workflows/ci.yml create mode 100644 node_modules/busboy/.github/workflows/lint.yml create mode 100644 node_modules/busboy/LICENSE create mode 100644 node_modules/busboy/README.md create mode 100644 node_modules/busboy/bench/bench-multipart-fields-100mb-big.js create mode 100644 node_modules/busboy/bench/bench-multipart-fields-100mb-small.js create mode 100644 node_modules/busboy/bench/bench-multipart-files-100mb-big.js create mode 100644 node_modules/busboy/bench/bench-multipart-files-100mb-small.js create mode 100644 node_modules/busboy/bench/bench-urlencoded-fields-100pairs-small.js create mode 100644 node_modules/busboy/bench/bench-urlencoded-fields-900pairs-small-alt.js create mode 100644 node_modules/busboy/lib/index.js create mode 100644 node_modules/busboy/lib/types/multipart.js create mode 100644 node_modules/busboy/lib/types/urlencoded.js create mode 100644 node_modules/busboy/lib/utils.js create mode 100644 node_modules/busboy/package.json create mode 100644 node_modules/busboy/test/common.js create mode 100644 node_modules/busboy/test/test-types-multipart-charsets.js create mode 100644 node_modules/busboy/test/test-types-multipart-stream-pause.js create mode 100644 node_modules/busboy/test/test-types-multipart.js create mode 100644 node_modules/busboy/test/test-types-urlencoded.js create mode 100644 node_modules/busboy/test/test.js create mode 100644 node_modules/bytes/History.md create mode 100644 node_modules/bytes/LICENSE create mode 100644 node_modules/bytes/Readme.md create mode 100644 node_modules/bytes/index.js create mode 100644 node_modules/bytes/package.json create mode 100644 node_modules/call-bind-apply-helpers/.eslintrc create mode 100644 node_modules/call-bind-apply-helpers/.github/FUNDING.yml create mode 100644 node_modules/call-bind-apply-helpers/.nycrc create mode 100644 node_modules/call-bind-apply-helpers/CHANGELOG.md create mode 100644 node_modules/call-bind-apply-helpers/LICENSE create mode 100644 node_modules/call-bind-apply-helpers/README.md create mode 100644 node_modules/call-bind-apply-helpers/actualApply.d.ts create mode 100644 node_modules/call-bind-apply-helpers/actualApply.js create mode 100644 node_modules/call-bind-apply-helpers/applyBind.d.ts create mode 100644 node_modules/call-bind-apply-helpers/applyBind.js create mode 100644 node_modules/call-bind-apply-helpers/functionApply.d.ts create mode 100644 node_modules/call-bind-apply-helpers/functionApply.js create mode 100644 node_modules/call-bind-apply-helpers/functionCall.d.ts create mode 100644 node_modules/call-bind-apply-helpers/functionCall.js create mode 100644 node_modules/call-bind-apply-helpers/index.d.ts create mode 100644 node_modules/call-bind-apply-helpers/index.js create mode 100644 node_modules/call-bind-apply-helpers/package.json create mode 100644 node_modules/call-bind-apply-helpers/reflectApply.d.ts create mode 100644 node_modules/call-bind-apply-helpers/reflectApply.js create mode 100644 node_modules/call-bind-apply-helpers/test/index.js create mode 100644 node_modules/call-bind-apply-helpers/tsconfig.json create mode 100644 node_modules/call-bound/.eslintrc create mode 100644 node_modules/call-bound/.github/FUNDING.yml create mode 100644 node_modules/call-bound/.nycrc create mode 100644 node_modules/call-bound/CHANGELOG.md create mode 100644 node_modules/call-bound/LICENSE create mode 100644 node_modules/call-bound/README.md create mode 100644 node_modules/call-bound/index.d.ts create mode 100644 node_modules/call-bound/index.js create mode 100644 node_modules/call-bound/package.json create mode 100644 node_modules/call-bound/test/index.js create mode 100644 node_modules/call-bound/tsconfig.json create mode 100644 node_modules/concat-stream/LICENSE create mode 100644 node_modules/concat-stream/index.js create mode 100644 node_modules/concat-stream/package.json create mode 100644 node_modules/concat-stream/readme.md create mode 100644 node_modules/content-disposition/HISTORY.md create mode 100644 node_modules/content-disposition/LICENSE create mode 100644 node_modules/content-disposition/README.md create mode 100644 node_modules/content-disposition/index.js create mode 100644 node_modules/content-disposition/package.json create mode 100644 node_modules/content-type/HISTORY.md create mode 100644 node_modules/content-type/LICENSE create mode 100644 node_modules/content-type/README.md create mode 100644 node_modules/content-type/index.js create mode 100644 node_modules/content-type/package.json create mode 100644 node_modules/cookie-signature/History.md create mode 100644 node_modules/cookie-signature/Readme.md create mode 100644 node_modules/cookie-signature/index.js create mode 100644 node_modules/cookie-signature/package.json create mode 100644 node_modules/cookie/LICENSE create mode 100644 node_modules/cookie/README.md create mode 100644 node_modules/cookie/SECURITY.md create mode 100644 node_modules/cookie/index.js create mode 100644 node_modules/cookie/package.json create mode 100644 node_modules/core-util-is/LICENSE create mode 100644 node_modules/core-util-is/README.md create mode 100644 node_modules/core-util-is/lib/util.js create mode 100644 node_modules/core-util-is/package.json create mode 100644 node_modules/debug/.coveralls.yml create mode 100644 node_modules/debug/.eslintrc create mode 100644 node_modules/debug/.npmignore create mode 100644 node_modules/debug/.travis.yml create mode 100644 node_modules/debug/CHANGELOG.md create mode 100644 node_modules/debug/LICENSE create mode 100644 node_modules/debug/Makefile create mode 100644 node_modules/debug/README.md create mode 100644 node_modules/debug/component.json create mode 100644 node_modules/debug/karma.conf.js create mode 100644 node_modules/debug/node.js create mode 100644 node_modules/debug/package.json create mode 100644 node_modules/debug/src/browser.js create mode 100644 node_modules/debug/src/debug.js create mode 100644 node_modules/debug/src/index.js create mode 100644 node_modules/debug/src/inspector-log.js create mode 100644 node_modules/debug/src/node.js create mode 100644 node_modules/depd/History.md create mode 100644 node_modules/depd/LICENSE create mode 100644 node_modules/depd/Readme.md create mode 100644 node_modules/depd/index.js create mode 100644 node_modules/depd/lib/browser/index.js create mode 100644 node_modules/depd/package.json create mode 100644 node_modules/destroy/LICENSE create mode 100644 node_modules/destroy/README.md create mode 100644 node_modules/destroy/index.js create mode 100644 node_modules/destroy/package.json create mode 100644 node_modules/dunder-proto/.eslintrc create mode 100644 node_modules/dunder-proto/.github/FUNDING.yml create mode 100644 node_modules/dunder-proto/.nycrc create mode 100644 node_modules/dunder-proto/CHANGELOG.md create mode 100644 node_modules/dunder-proto/LICENSE create mode 100644 node_modules/dunder-proto/README.md create mode 100644 node_modules/dunder-proto/get.d.ts create mode 100644 node_modules/dunder-proto/get.js create mode 100644 node_modules/dunder-proto/package.json create mode 100644 node_modules/dunder-proto/set.d.ts create mode 100644 node_modules/dunder-proto/set.js create mode 100644 node_modules/dunder-proto/test/get.js create mode 100644 node_modules/dunder-proto/test/index.js create mode 100644 node_modules/dunder-proto/test/set.js create mode 100644 node_modules/dunder-proto/tsconfig.json create mode 100644 node_modules/ee-first/LICENSE create mode 100644 node_modules/ee-first/README.md create mode 100644 node_modules/ee-first/index.js create mode 100644 node_modules/ee-first/package.json create mode 100644 node_modules/encodeurl/LICENSE create mode 100644 node_modules/encodeurl/README.md create mode 100644 node_modules/encodeurl/index.js create mode 100644 node_modules/encodeurl/package.json create mode 100644 node_modules/es-define-property/.eslintrc create mode 100644 node_modules/es-define-property/.github/FUNDING.yml create mode 100644 node_modules/es-define-property/.nycrc create mode 100644 node_modules/es-define-property/CHANGELOG.md create mode 100644 node_modules/es-define-property/LICENSE create mode 100644 node_modules/es-define-property/README.md create mode 100644 node_modules/es-define-property/index.d.ts create mode 100644 node_modules/es-define-property/index.js create mode 100644 node_modules/es-define-property/package.json create mode 100644 node_modules/es-define-property/test/index.js create mode 100644 node_modules/es-define-property/tsconfig.json create mode 100644 node_modules/es-errors/.eslintrc create mode 100644 node_modules/es-errors/.github/FUNDING.yml create mode 100644 node_modules/es-errors/CHANGELOG.md create mode 100644 node_modules/es-errors/LICENSE create mode 100644 node_modules/es-errors/README.md create mode 100644 node_modules/es-errors/eval.d.ts create mode 100644 node_modules/es-errors/eval.js create mode 100644 node_modules/es-errors/index.d.ts create mode 100644 node_modules/es-errors/index.js create mode 100644 node_modules/es-errors/package.json create mode 100644 node_modules/es-errors/range.d.ts create mode 100644 node_modules/es-errors/range.js create mode 100644 node_modules/es-errors/ref.d.ts create mode 100644 node_modules/es-errors/ref.js create mode 100644 node_modules/es-errors/syntax.d.ts create mode 100644 node_modules/es-errors/syntax.js create mode 100644 node_modules/es-errors/test/index.js create mode 100644 node_modules/es-errors/tsconfig.json create mode 100644 node_modules/es-errors/type.d.ts create mode 100644 node_modules/es-errors/type.js create mode 100644 node_modules/es-errors/uri.d.ts create mode 100644 node_modules/es-errors/uri.js create mode 100644 node_modules/es-object-atoms/.eslintrc create mode 100644 node_modules/es-object-atoms/.github/FUNDING.yml create mode 100644 node_modules/es-object-atoms/CHANGELOG.md create mode 100644 node_modules/es-object-atoms/LICENSE create mode 100644 node_modules/es-object-atoms/README.md create mode 100644 node_modules/es-object-atoms/RequireObjectCoercible.d.ts create mode 100644 node_modules/es-object-atoms/RequireObjectCoercible.js create mode 100644 node_modules/es-object-atoms/ToObject.d.ts create mode 100644 node_modules/es-object-atoms/ToObject.js create mode 100644 node_modules/es-object-atoms/index.d.ts create mode 100644 node_modules/es-object-atoms/index.js create mode 100644 node_modules/es-object-atoms/isObject.d.ts create mode 100644 node_modules/es-object-atoms/isObject.js create mode 100644 node_modules/es-object-atoms/package.json create mode 100644 node_modules/es-object-atoms/test/index.js create mode 100644 node_modules/es-object-atoms/tsconfig.json create mode 100644 node_modules/escape-html/LICENSE create mode 100644 node_modules/escape-html/Readme.md create mode 100644 node_modules/escape-html/index.js create mode 100644 node_modules/escape-html/package.json create mode 100644 node_modules/etag/HISTORY.md create mode 100644 node_modules/etag/LICENSE create mode 100644 node_modules/etag/README.md create mode 100644 node_modules/etag/index.js create mode 100644 node_modules/etag/package.json create mode 100644 node_modules/express/History.md create mode 100644 node_modules/express/LICENSE create mode 100644 node_modules/express/Readme.md create mode 100644 node_modules/express/index.js create mode 100644 node_modules/express/lib/application.js create mode 100644 node_modules/express/lib/express.js create mode 100644 node_modules/express/lib/middleware/init.js create mode 100644 node_modules/express/lib/middleware/query.js create mode 100644 node_modules/express/lib/request.js create mode 100644 node_modules/express/lib/response.js create mode 100644 node_modules/express/lib/router/index.js create mode 100644 node_modules/express/lib/router/layer.js create mode 100644 node_modules/express/lib/router/route.js create mode 100644 node_modules/express/lib/utils.js create mode 100644 node_modules/express/lib/view.js create mode 100644 node_modules/express/package.json create mode 100644 node_modules/finalhandler/HISTORY.md create mode 100644 node_modules/finalhandler/LICENSE create mode 100644 node_modules/finalhandler/README.md create mode 100644 node_modules/finalhandler/SECURITY.md create mode 100644 node_modules/finalhandler/index.js create mode 100644 node_modules/finalhandler/package.json create mode 100644 node_modules/forwarded/HISTORY.md create mode 100644 node_modules/forwarded/LICENSE create mode 100644 node_modules/forwarded/README.md create mode 100644 node_modules/forwarded/index.js create mode 100644 node_modules/forwarded/package.json create mode 100644 node_modules/fresh/HISTORY.md create mode 100644 node_modules/fresh/LICENSE create mode 100644 node_modules/fresh/README.md create mode 100644 node_modules/fresh/index.js create mode 100644 node_modules/fresh/package.json create mode 100644 node_modules/function-bind/.eslintrc create mode 100644 node_modules/function-bind/.github/FUNDING.yml create mode 100644 node_modules/function-bind/.github/SECURITY.md create mode 100644 node_modules/function-bind/.nycrc create mode 100644 node_modules/function-bind/CHANGELOG.md create mode 100644 node_modules/function-bind/LICENSE create mode 100644 node_modules/function-bind/README.md create mode 100644 node_modules/function-bind/implementation.js create mode 100644 node_modules/function-bind/index.js create mode 100644 node_modules/function-bind/package.json create mode 100644 node_modules/function-bind/test/.eslintrc create mode 100644 node_modules/function-bind/test/index.js create mode 100644 node_modules/get-intrinsic/.eslintrc create mode 100644 node_modules/get-intrinsic/.github/FUNDING.yml create mode 100644 node_modules/get-intrinsic/.nycrc create mode 100644 node_modules/get-intrinsic/CHANGELOG.md create mode 100644 node_modules/get-intrinsic/LICENSE create mode 100644 node_modules/get-intrinsic/README.md create mode 100644 node_modules/get-intrinsic/index.js create mode 100644 node_modules/get-intrinsic/package.json create mode 100644 node_modules/get-intrinsic/test/GetIntrinsic.js create mode 100644 node_modules/get-proto/.eslintrc create mode 100644 node_modules/get-proto/.github/FUNDING.yml create mode 100644 node_modules/get-proto/.nycrc create mode 100644 node_modules/get-proto/CHANGELOG.md create mode 100644 node_modules/get-proto/LICENSE create mode 100644 node_modules/get-proto/Object.getPrototypeOf.d.ts create mode 100644 node_modules/get-proto/Object.getPrototypeOf.js create mode 100644 node_modules/get-proto/README.md create mode 100644 node_modules/get-proto/Reflect.getPrototypeOf.d.ts create mode 100644 node_modules/get-proto/Reflect.getPrototypeOf.js create mode 100644 node_modules/get-proto/index.d.ts create mode 100644 node_modules/get-proto/index.js create mode 100644 node_modules/get-proto/package.json create mode 100644 node_modules/get-proto/test/index.js create mode 100644 node_modules/get-proto/tsconfig.json create mode 100644 node_modules/gopd/.eslintrc create mode 100644 node_modules/gopd/.github/FUNDING.yml create mode 100644 node_modules/gopd/CHANGELOG.md create mode 100644 node_modules/gopd/LICENSE create mode 100644 node_modules/gopd/README.md create mode 100644 node_modules/gopd/gOPD.d.ts create mode 100644 node_modules/gopd/gOPD.js create mode 100644 node_modules/gopd/index.d.ts create mode 100644 node_modules/gopd/index.js create mode 100644 node_modules/gopd/package.json create mode 100644 node_modules/gopd/test/index.js create mode 100644 node_modules/gopd/tsconfig.json create mode 100644 node_modules/has-symbols/.eslintrc create mode 100644 node_modules/has-symbols/.github/FUNDING.yml create mode 100644 node_modules/has-symbols/.nycrc create mode 100644 node_modules/has-symbols/CHANGELOG.md create mode 100644 node_modules/has-symbols/LICENSE create mode 100644 node_modules/has-symbols/README.md create mode 100644 node_modules/has-symbols/index.d.ts create mode 100644 node_modules/has-symbols/index.js create mode 100644 node_modules/has-symbols/package.json create mode 100644 node_modules/has-symbols/shams.d.ts create mode 100644 node_modules/has-symbols/shams.js create mode 100644 node_modules/has-symbols/test/index.js create mode 100644 node_modules/has-symbols/test/shams/core-js.js create mode 100644 node_modules/has-symbols/test/shams/get-own-property-symbols.js create mode 100644 node_modules/has-symbols/test/tests.js create mode 100644 node_modules/has-symbols/tsconfig.json create mode 100644 node_modules/hasown/.github/FUNDING.yml create mode 100644 node_modules/hasown/.nycrc create mode 100644 node_modules/hasown/CHANGELOG.md create mode 100644 node_modules/hasown/LICENSE create mode 100644 node_modules/hasown/README.md create mode 100644 node_modules/hasown/eslint.config.mjs create mode 100644 node_modules/hasown/index.d.ts create mode 100644 node_modules/hasown/index.js create mode 100644 node_modules/hasown/package.json create mode 100644 node_modules/hasown/tsconfig.json create mode 100644 node_modules/http-errors/HISTORY.md create mode 100644 node_modules/http-errors/LICENSE create mode 100644 node_modules/http-errors/README.md create mode 100644 node_modules/http-errors/index.js create mode 100644 node_modules/http-errors/package.json create mode 100644 node_modules/iconv-lite/Changelog.md create mode 100644 node_modules/iconv-lite/LICENSE create mode 100644 node_modules/iconv-lite/README.md create mode 100644 node_modules/iconv-lite/encodings/dbcs-codec.js create mode 100644 node_modules/iconv-lite/encodings/dbcs-data.js create mode 100644 node_modules/iconv-lite/encodings/index.js create mode 100644 node_modules/iconv-lite/encodings/internal.js create mode 100644 node_modules/iconv-lite/encodings/sbcs-codec.js create mode 100644 node_modules/iconv-lite/encodings/sbcs-data-generated.js create mode 100644 node_modules/iconv-lite/encodings/sbcs-data.js create mode 100644 node_modules/iconv-lite/encodings/tables/big5-added.json create mode 100644 node_modules/iconv-lite/encodings/tables/cp936.json create mode 100644 node_modules/iconv-lite/encodings/tables/cp949.json create mode 100644 node_modules/iconv-lite/encodings/tables/cp950.json create mode 100644 node_modules/iconv-lite/encodings/tables/eucjp.json create mode 100644 node_modules/iconv-lite/encodings/tables/gb18030-ranges.json create mode 100644 node_modules/iconv-lite/encodings/tables/gbk-added.json create mode 100644 node_modules/iconv-lite/encodings/tables/shiftjis.json create mode 100644 node_modules/iconv-lite/encodings/utf16.js create mode 100644 node_modules/iconv-lite/encodings/utf7.js create mode 100644 node_modules/iconv-lite/lib/bom-handling.js create mode 100644 node_modules/iconv-lite/lib/extend-node.js create mode 100644 node_modules/iconv-lite/lib/index.d.ts create mode 100644 node_modules/iconv-lite/lib/index.js create mode 100644 node_modules/iconv-lite/lib/streams.js create mode 100644 node_modules/iconv-lite/package.json create mode 100644 node_modules/inherits/LICENSE create mode 100644 node_modules/inherits/README.md create mode 100644 node_modules/inherits/inherits.js create mode 100644 node_modules/inherits/inherits_browser.js create mode 100644 node_modules/inherits/package.json create mode 100644 node_modules/ipaddr.js/LICENSE create mode 100644 node_modules/ipaddr.js/README.md create mode 100644 node_modules/ipaddr.js/ipaddr.min.js create mode 100644 node_modules/ipaddr.js/lib/ipaddr.js create mode 100644 node_modules/ipaddr.js/lib/ipaddr.js.d.ts create mode 100644 node_modules/ipaddr.js/package.json create mode 100644 node_modules/isarray/.npmignore create mode 100644 node_modules/isarray/.travis.yml create mode 100644 node_modules/isarray/Makefile create mode 100644 node_modules/isarray/README.md create mode 100644 node_modules/isarray/component.json create mode 100644 node_modules/isarray/index.js create mode 100644 node_modules/isarray/package.json create mode 100644 node_modules/isarray/test.js create mode 100644 node_modules/math-intrinsics/.eslintrc create mode 100644 node_modules/math-intrinsics/.github/FUNDING.yml create mode 100644 node_modules/math-intrinsics/CHANGELOG.md create mode 100644 node_modules/math-intrinsics/LICENSE create mode 100644 node_modules/math-intrinsics/README.md create mode 100644 node_modules/math-intrinsics/abs.d.ts create mode 100644 node_modules/math-intrinsics/abs.js create mode 100644 node_modules/math-intrinsics/constants/maxArrayLength.d.ts create mode 100644 node_modules/math-intrinsics/constants/maxArrayLength.js create mode 100644 node_modules/math-intrinsics/constants/maxSafeInteger.d.ts create mode 100644 node_modules/math-intrinsics/constants/maxSafeInteger.js create mode 100644 node_modules/math-intrinsics/constants/maxValue.d.ts create mode 100644 node_modules/math-intrinsics/constants/maxValue.js create mode 100644 node_modules/math-intrinsics/floor.d.ts create mode 100644 node_modules/math-intrinsics/floor.js create mode 100644 node_modules/math-intrinsics/isFinite.d.ts create mode 100644 node_modules/math-intrinsics/isFinite.js create mode 100644 node_modules/math-intrinsics/isInteger.d.ts create mode 100644 node_modules/math-intrinsics/isInteger.js create mode 100644 node_modules/math-intrinsics/isNaN.d.ts create mode 100644 node_modules/math-intrinsics/isNaN.js create mode 100644 node_modules/math-intrinsics/isNegativeZero.d.ts create mode 100644 node_modules/math-intrinsics/isNegativeZero.js create mode 100644 node_modules/math-intrinsics/max.d.ts create mode 100644 node_modules/math-intrinsics/max.js create mode 100644 node_modules/math-intrinsics/min.d.ts create mode 100644 node_modules/math-intrinsics/min.js create mode 100644 node_modules/math-intrinsics/mod.d.ts create mode 100644 node_modules/math-intrinsics/mod.js create mode 100644 node_modules/math-intrinsics/package.json create mode 100644 node_modules/math-intrinsics/pow.d.ts create mode 100644 node_modules/math-intrinsics/pow.js create mode 100644 node_modules/math-intrinsics/round.d.ts create mode 100644 node_modules/math-intrinsics/round.js create mode 100644 node_modules/math-intrinsics/sign.d.ts create mode 100644 node_modules/math-intrinsics/sign.js create mode 100644 node_modules/math-intrinsics/test/index.js create mode 100644 node_modules/math-intrinsics/tsconfig.json create mode 100644 node_modules/media-typer/HISTORY.md create mode 100644 node_modules/media-typer/LICENSE create mode 100644 node_modules/media-typer/README.md create mode 100644 node_modules/media-typer/index.js create mode 100644 node_modules/media-typer/package.json create mode 100644 node_modules/merge-descriptors/HISTORY.md create mode 100644 node_modules/merge-descriptors/LICENSE create mode 100644 node_modules/merge-descriptors/README.md create mode 100644 node_modules/merge-descriptors/index.js create mode 100644 node_modules/merge-descriptors/package.json create mode 100644 node_modules/methods/HISTORY.md create mode 100644 node_modules/methods/LICENSE create mode 100644 node_modules/methods/README.md create mode 100644 node_modules/methods/index.js create mode 100644 node_modules/methods/package.json create mode 100644 node_modules/mime-db/HISTORY.md create mode 100644 node_modules/mime-db/LICENSE create mode 100644 node_modules/mime-db/README.md create mode 100644 node_modules/mime-db/db.json create mode 100644 node_modules/mime-db/index.js create mode 100644 node_modules/mime-db/package.json create mode 100644 node_modules/mime-types/HISTORY.md create mode 100644 node_modules/mime-types/LICENSE create mode 100644 node_modules/mime-types/README.md create mode 100644 node_modules/mime-types/index.js create mode 100644 node_modules/mime-types/package.json create mode 100644 node_modules/mime/.npmignore create mode 100644 node_modules/mime/CHANGELOG.md create mode 100644 node_modules/mime/LICENSE create mode 100644 node_modules/mime/README.md create mode 100644 node_modules/mime/cli.js create mode 100644 node_modules/mime/mime.js create mode 100644 node_modules/mime/package.json create mode 100644 node_modules/mime/src/build.js create mode 100644 node_modules/mime/src/test.js create mode 100644 node_modules/mime/types.json create mode 100644 node_modules/minimist/.eslintrc create mode 100644 node_modules/minimist/.github/FUNDING.yml create mode 100644 node_modules/minimist/.nycrc create mode 100644 node_modules/minimist/CHANGELOG.md create mode 100644 node_modules/minimist/LICENSE create mode 100644 node_modules/minimist/README.md create mode 100644 node_modules/minimist/example/parse.js create mode 100644 node_modules/minimist/index.js create mode 100644 node_modules/minimist/package.json create mode 100644 node_modules/minimist/test/all_bool.js create mode 100644 node_modules/minimist/test/bool.js create mode 100644 node_modules/minimist/test/dash.js create mode 100644 node_modules/minimist/test/default_bool.js create mode 100644 node_modules/minimist/test/dotted.js create mode 100644 node_modules/minimist/test/kv_short.js create mode 100644 node_modules/minimist/test/long.js create mode 100644 node_modules/minimist/test/num.js create mode 100644 node_modules/minimist/test/parse.js create mode 100644 node_modules/minimist/test/parse_modified.js create mode 100644 node_modules/minimist/test/proto.js create mode 100644 node_modules/minimist/test/short.js create mode 100644 node_modules/minimist/test/stop_early.js create mode 100644 node_modules/minimist/test/unknown.js create mode 100644 node_modules/minimist/test/whitespace.js create mode 100644 node_modules/mkdirp/LICENSE create mode 100644 node_modules/mkdirp/bin/cmd.js create mode 100644 node_modules/mkdirp/bin/usage.txt create mode 100644 node_modules/mkdirp/index.js create mode 100644 node_modules/mkdirp/package.json create mode 100644 node_modules/mkdirp/readme.markdown create mode 100644 node_modules/ms/index.js create mode 100644 node_modules/ms/license.md create mode 100644 node_modules/ms/package.json create mode 100644 node_modules/ms/readme.md create mode 100644 node_modules/multer/LICENSE create mode 100644 node_modules/multer/README.md create mode 100644 node_modules/multer/index.js create mode 100644 node_modules/multer/lib/counter.js create mode 100644 node_modules/multer/lib/file-appender.js create mode 100644 node_modules/multer/lib/make-middleware.js create mode 100644 node_modules/multer/lib/multer-error.js create mode 100644 node_modules/multer/lib/remove-uploaded-files.js create mode 100644 node_modules/multer/package.json create mode 100644 node_modules/multer/storage/disk.js create mode 100644 node_modules/multer/storage/memory.js create mode 100644 node_modules/negotiator/HISTORY.md create mode 100644 node_modules/negotiator/LICENSE create mode 100644 node_modules/negotiator/README.md create mode 100644 node_modules/negotiator/index.js create mode 100644 node_modules/negotiator/lib/charset.js create mode 100644 node_modules/negotiator/lib/encoding.js create mode 100644 node_modules/negotiator/lib/language.js create mode 100644 node_modules/negotiator/lib/mediaType.js create mode 100644 node_modules/negotiator/package.json create mode 100644 node_modules/object-assign/index.js create mode 100644 node_modules/object-assign/license create mode 100644 node_modules/object-assign/package.json create mode 100644 node_modules/object-assign/readme.md create mode 100644 node_modules/object-inspect/.eslintrc create mode 100644 node_modules/object-inspect/.github/FUNDING.yml create mode 100644 node_modules/object-inspect/.nycrc create mode 100644 node_modules/object-inspect/CHANGELOG.md create mode 100644 node_modules/object-inspect/LICENSE create mode 100644 node_modules/object-inspect/example/all.js create mode 100644 node_modules/object-inspect/example/circular.js create mode 100644 node_modules/object-inspect/example/fn.js create mode 100644 node_modules/object-inspect/example/inspect.js create mode 100644 node_modules/object-inspect/index.js create mode 100644 node_modules/object-inspect/package-support.json create mode 100644 node_modules/object-inspect/package.json create mode 100644 node_modules/object-inspect/readme.markdown create mode 100644 node_modules/object-inspect/test-core-js.js create mode 100644 node_modules/object-inspect/test/bigint.js create mode 100644 node_modules/object-inspect/test/browser/dom.js create mode 100644 node_modules/object-inspect/test/circular.js create mode 100644 node_modules/object-inspect/test/deep.js create mode 100644 node_modules/object-inspect/test/element.js create mode 100644 node_modules/object-inspect/test/err.js create mode 100644 node_modules/object-inspect/test/fakes.js create mode 100644 node_modules/object-inspect/test/fn.js create mode 100644 node_modules/object-inspect/test/global.js create mode 100644 node_modules/object-inspect/test/has.js create mode 100644 node_modules/object-inspect/test/holes.js create mode 100644 node_modules/object-inspect/test/indent-option.js create mode 100644 node_modules/object-inspect/test/inspect.js create mode 100644 node_modules/object-inspect/test/lowbyte.js create mode 100644 node_modules/object-inspect/test/number.js create mode 100644 node_modules/object-inspect/test/quoteStyle.js create mode 100644 node_modules/object-inspect/test/toStringTag.js create mode 100644 node_modules/object-inspect/test/undef.js create mode 100644 node_modules/object-inspect/test/values.js create mode 100644 node_modules/object-inspect/util.inspect.js create mode 100644 node_modules/on-finished/HISTORY.md create mode 100644 node_modules/on-finished/LICENSE create mode 100644 node_modules/on-finished/README.md create mode 100644 node_modules/on-finished/index.js create mode 100644 node_modules/on-finished/package.json create mode 100644 node_modules/pako/CHANGELOG.md create mode 100644 node_modules/pako/LICENSE create mode 100644 node_modules/pako/README.md create mode 100644 node_modules/pako/dist/pako.js create mode 100644 node_modules/pako/dist/pako.min.js create mode 100644 node_modules/pako/dist/pako_deflate.js create mode 100644 node_modules/pako/dist/pako_deflate.min.js create mode 100644 node_modules/pako/dist/pako_inflate.js create mode 100644 node_modules/pako/dist/pako_inflate.min.js create mode 100644 node_modules/pako/index.js create mode 100644 node_modules/pako/lib/deflate.js create mode 100644 node_modules/pako/lib/inflate.js create mode 100644 node_modules/pako/lib/utils/common.js create mode 100644 node_modules/pako/lib/utils/strings.js create mode 100644 node_modules/pako/lib/zlib/README create mode 100644 node_modules/pako/lib/zlib/adler32.js create mode 100644 node_modules/pako/lib/zlib/constants.js create mode 100644 node_modules/pako/lib/zlib/crc32.js create mode 100644 node_modules/pako/lib/zlib/deflate.js create mode 100644 node_modules/pako/lib/zlib/gzheader.js create mode 100644 node_modules/pako/lib/zlib/inffast.js create mode 100644 node_modules/pako/lib/zlib/inflate.js create mode 100644 node_modules/pako/lib/zlib/inftrees.js create mode 100644 node_modules/pako/lib/zlib/messages.js create mode 100644 node_modules/pako/lib/zlib/trees.js create mode 100644 node_modules/pako/lib/zlib/zstream.js create mode 100644 node_modules/pako/package.json create mode 100644 node_modules/parseurl/HISTORY.md create mode 100644 node_modules/parseurl/LICENSE create mode 100644 node_modules/parseurl/README.md create mode 100644 node_modules/parseurl/index.js create mode 100644 node_modules/parseurl/package.json create mode 100644 node_modules/path-to-regexp/LICENSE create mode 100644 node_modules/path-to-regexp/Readme.md create mode 100644 node_modules/path-to-regexp/index.js create mode 100644 node_modules/path-to-regexp/package.json create mode 100644 node_modules/pdf-lib/LICENSE.md create mode 100644 node_modules/pdf-lib/README.md create mode 100644 node_modules/pdf-lib/cjs/api/Embeddable.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/Embeddable.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/Embeddable.js create mode 100644 node_modules/pdf-lib/cjs/api/Embeddable.js.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFDocument.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/PDFDocument.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFDocument.js create mode 100644 node_modules/pdf-lib/cjs/api/PDFDocument.js.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFDocumentOptions.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/PDFDocumentOptions.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFDocumentOptions.js create mode 100644 node_modules/pdf-lib/cjs/api/PDFDocumentOptions.js.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFEmbeddedFile.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/PDFEmbeddedFile.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFEmbeddedFile.js create mode 100644 node_modules/pdf-lib/cjs/api/PDFEmbeddedFile.js.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFEmbeddedPage.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/PDFEmbeddedPage.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFEmbeddedPage.js create mode 100644 node_modules/pdf-lib/cjs/api/PDFEmbeddedPage.js.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFFont.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/PDFFont.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFFont.js create mode 100644 node_modules/pdf-lib/cjs/api/PDFFont.js.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFImage.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/PDFImage.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFImage.js create mode 100644 node_modules/pdf-lib/cjs/api/PDFImage.js.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFJavaScript.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/PDFJavaScript.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFJavaScript.js create mode 100644 node_modules/pdf-lib/cjs/api/PDFJavaScript.js.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFPage.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/PDFPage.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFPage.js create mode 100644 node_modules/pdf-lib/cjs/api/PDFPage.js.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFPageOptions.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/PDFPageOptions.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/PDFPageOptions.js create mode 100644 node_modules/pdf-lib/cjs/api/PDFPageOptions.js.map create mode 100644 node_modules/pdf-lib/cjs/api/StandardFonts.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/StandardFonts.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/StandardFonts.js create mode 100644 node_modules/pdf-lib/cjs/api/StandardFonts.js.map create mode 100644 node_modules/pdf-lib/cjs/api/colors.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/colors.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/colors.js create mode 100644 node_modules/pdf-lib/cjs/api/colors.js.map create mode 100644 node_modules/pdf-lib/cjs/api/errors.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/errors.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/errors.js create mode 100644 node_modules/pdf-lib/cjs/api/errors.js.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFButton.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFButton.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFButton.js create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFButton.js.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFCheckBox.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFCheckBox.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFCheckBox.js create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFCheckBox.js.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFDropdown.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFDropdown.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFDropdown.js create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFDropdown.js.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFField.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFField.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFField.js create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFField.js.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFForm.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFForm.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFForm.js create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFForm.js.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFOptionList.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFOptionList.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFOptionList.js create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFOptionList.js.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFRadioGroup.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFRadioGroup.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFRadioGroup.js create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFRadioGroup.js.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFSignature.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFSignature.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFSignature.js create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFSignature.js.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFTextField.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFTextField.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFTextField.js create mode 100644 node_modules/pdf-lib/cjs/api/form/PDFTextField.js.map create mode 100644 node_modules/pdf-lib/cjs/api/form/appearances.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/form/appearances.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/form/appearances.js create mode 100644 node_modules/pdf-lib/cjs/api/form/appearances.js.map create mode 100644 node_modules/pdf-lib/cjs/api/form/index.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/form/index.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/form/index.js create mode 100644 node_modules/pdf-lib/cjs/api/form/index.js.map create mode 100644 node_modules/pdf-lib/cjs/api/image/alignment.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/image/alignment.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/image/alignment.js create mode 100644 node_modules/pdf-lib/cjs/api/image/alignment.js.map create mode 100644 node_modules/pdf-lib/cjs/api/image/index.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/image/index.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/image/index.js create mode 100644 node_modules/pdf-lib/cjs/api/image/index.js.map create mode 100644 node_modules/pdf-lib/cjs/api/index.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/index.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/index.js create mode 100644 node_modules/pdf-lib/cjs/api/index.js.map create mode 100644 node_modules/pdf-lib/cjs/api/objects.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/objects.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/objects.js create mode 100644 node_modules/pdf-lib/cjs/api/objects.js.map create mode 100644 node_modules/pdf-lib/cjs/api/operations.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/operations.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/operations.js create mode 100644 node_modules/pdf-lib/cjs/api/operations.js.map create mode 100644 node_modules/pdf-lib/cjs/api/operators.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/operators.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/operators.js create mode 100644 node_modules/pdf-lib/cjs/api/operators.js.map create mode 100644 node_modules/pdf-lib/cjs/api/rotations.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/rotations.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/rotations.js create mode 100644 node_modules/pdf-lib/cjs/api/rotations.js.map create mode 100644 node_modules/pdf-lib/cjs/api/sizes.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/sizes.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/sizes.js create mode 100644 node_modules/pdf-lib/cjs/api/sizes.js.map create mode 100644 node_modules/pdf-lib/cjs/api/svgPath.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/svgPath.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/svgPath.js create mode 100644 node_modules/pdf-lib/cjs/api/svgPath.js.map create mode 100644 node_modules/pdf-lib/cjs/api/text/alignment.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/text/alignment.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/text/alignment.js create mode 100644 node_modules/pdf-lib/cjs/api/text/alignment.js.map create mode 100644 node_modules/pdf-lib/cjs/api/text/index.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/text/index.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/text/index.js create mode 100644 node_modules/pdf-lib/cjs/api/text/index.js.map create mode 100644 node_modules/pdf-lib/cjs/api/text/layout.d.ts create mode 100644 node_modules/pdf-lib/cjs/api/text/layout.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/api/text/layout.js create mode 100644 node_modules/pdf-lib/cjs/api/text/layout.js.map create mode 100644 node_modules/pdf-lib/cjs/core/PDFContext.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/PDFContext.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/PDFContext.js create mode 100644 node_modules/pdf-lib/cjs/core/PDFContext.js.map create mode 100644 node_modules/pdf-lib/cjs/core/PDFObjectCopier.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/PDFObjectCopier.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/PDFObjectCopier.js create mode 100644 node_modules/pdf-lib/cjs/core/PDFObjectCopier.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroButton.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroButton.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroButton.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroButton.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroCheckBox.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroCheckBox.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroCheckBox.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroCheckBox.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroChoice.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroChoice.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroChoice.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroChoice.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroComboBox.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroComboBox.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroComboBox.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroComboBox.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroField.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroField.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroField.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroField.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroForm.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroForm.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroForm.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroForm.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroListBox.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroListBox.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroListBox.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroListBox.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroNonTerminal.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroNonTerminal.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroNonTerminal.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroNonTerminal.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroPushButton.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroPushButton.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroPushButton.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroPushButton.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroRadioButton.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroRadioButton.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroRadioButton.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroRadioButton.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroSignature.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroSignature.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroSignature.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroSignature.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroTerminal.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroTerminal.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroTerminal.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroTerminal.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroText.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroText.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroText.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/PDFAcroText.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/flags.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/flags.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/flags.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/flags.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/index.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/index.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/index.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/index.js.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/utils.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/acroform/utils.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/acroform/utils.js create mode 100644 node_modules/pdf-lib/cjs/core/acroform/utils.js.map create mode 100644 node_modules/pdf-lib/cjs/core/annotation/AppearanceCharacteristics.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/annotation/AppearanceCharacteristics.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/annotation/AppearanceCharacteristics.js create mode 100644 node_modules/pdf-lib/cjs/core/annotation/AppearanceCharacteristics.js.map create mode 100644 node_modules/pdf-lib/cjs/core/annotation/BorderStyle.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/annotation/BorderStyle.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/annotation/BorderStyle.js create mode 100644 node_modules/pdf-lib/cjs/core/annotation/BorderStyle.js.map create mode 100644 node_modules/pdf-lib/cjs/core/annotation/PDFAnnotation.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/annotation/PDFAnnotation.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/annotation/PDFAnnotation.js create mode 100644 node_modules/pdf-lib/cjs/core/annotation/PDFAnnotation.js.map create mode 100644 node_modules/pdf-lib/cjs/core/annotation/PDFWidgetAnnotation.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/annotation/PDFWidgetAnnotation.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/annotation/PDFWidgetAnnotation.js create mode 100644 node_modules/pdf-lib/cjs/core/annotation/PDFWidgetAnnotation.js.map create mode 100644 node_modules/pdf-lib/cjs/core/annotation/flags.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/annotation/flags.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/annotation/flags.js create mode 100644 node_modules/pdf-lib/cjs/core/annotation/flags.js.map create mode 100644 node_modules/pdf-lib/cjs/core/annotation/index.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/annotation/index.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/annotation/index.js create mode 100644 node_modules/pdf-lib/cjs/core/annotation/index.js.map create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFCrossRefSection.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFCrossRefSection.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFCrossRefSection.js create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFCrossRefSection.js.map create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFHeader.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFHeader.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFHeader.js create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFHeader.js.map create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFTrailer.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFTrailer.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFTrailer.js create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFTrailer.js.map create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFTrailerDict.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFTrailerDict.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFTrailerDict.js create mode 100644 node_modules/pdf-lib/cjs/core/document/PDFTrailerDict.js.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/CMap.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/embedders/CMap.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/CMap.js create mode 100644 node_modules/pdf-lib/cjs/core/embedders/CMap.js.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/CustomFontEmbedder.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/embedders/CustomFontEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/CustomFontEmbedder.js create mode 100644 node_modules/pdf-lib/cjs/core/embedders/CustomFontEmbedder.js.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/CustomFontSubsetEmbedder.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/embedders/CustomFontSubsetEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/CustomFontSubsetEmbedder.js create mode 100644 node_modules/pdf-lib/cjs/core/embedders/CustomFontSubsetEmbedder.js.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/FileEmbedder.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/embedders/FileEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/FileEmbedder.js create mode 100644 node_modules/pdf-lib/cjs/core/embedders/FileEmbedder.js.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/FontFlags.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/embedders/FontFlags.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/FontFlags.js create mode 100644 node_modules/pdf-lib/cjs/core/embedders/FontFlags.js.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/JavaScriptEmbedder.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/embedders/JavaScriptEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/JavaScriptEmbedder.js create mode 100644 node_modules/pdf-lib/cjs/core/embedders/JavaScriptEmbedder.js.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/JpegEmbedder.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/embedders/JpegEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/JpegEmbedder.js create mode 100644 node_modules/pdf-lib/cjs/core/embedders/JpegEmbedder.js.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/PDFPageEmbedder.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/embedders/PDFPageEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/PDFPageEmbedder.js create mode 100644 node_modules/pdf-lib/cjs/core/embedders/PDFPageEmbedder.js.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/PngEmbedder.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/embedders/PngEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/PngEmbedder.js create mode 100644 node_modules/pdf-lib/cjs/core/embedders/PngEmbedder.js.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/StandardFontEmbedder.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/embedders/StandardFontEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/embedders/StandardFontEmbedder.js create mode 100644 node_modules/pdf-lib/cjs/core/embedders/StandardFontEmbedder.js.map create mode 100644 node_modules/pdf-lib/cjs/core/errors.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/errors.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/errors.js create mode 100644 node_modules/pdf-lib/cjs/core/errors.js.map create mode 100644 node_modules/pdf-lib/cjs/core/index.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/index.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/index.js create mode 100644 node_modules/pdf-lib/cjs/core/index.js.map create mode 100644 node_modules/pdf-lib/cjs/core/interactive/ViewerPreferences.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/interactive/ViewerPreferences.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/interactive/ViewerPreferences.js create mode 100644 node_modules/pdf-lib/cjs/core/interactive/ViewerPreferences.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFArray.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFArray.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFArray.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFArray.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFBool.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFBool.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFBool.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFBool.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFDict.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFDict.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFDict.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFDict.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFHexString.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFHexString.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFHexString.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFHexString.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFInvalidObject.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFInvalidObject.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFInvalidObject.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFInvalidObject.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFName.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFName.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFName.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFName.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFNull.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFNull.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFNull.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFNull.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFNumber.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFNumber.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFNumber.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFNumber.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFObject.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFObject.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFObject.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFObject.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFRawStream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFRawStream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFRawStream.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFRawStream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFRef.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFRef.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFRef.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFRef.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFStream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFStream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFStream.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFStream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFString.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFString.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFString.js create mode 100644 node_modules/pdf-lib/cjs/core/objects/PDFString.js.map create mode 100644 node_modules/pdf-lib/cjs/core/operators/PDFOperator.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/operators/PDFOperator.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/operators/PDFOperator.js create mode 100644 node_modules/pdf-lib/cjs/core/operators/PDFOperator.js.map create mode 100644 node_modules/pdf-lib/cjs/core/operators/PDFOperatorNames.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/operators/PDFOperatorNames.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/operators/PDFOperatorNames.js create mode 100644 node_modules/pdf-lib/cjs/core/operators/PDFOperatorNames.js.map create mode 100644 node_modules/pdf-lib/cjs/core/parser/BaseParser.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/parser/BaseParser.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/parser/BaseParser.js create mode 100644 node_modules/pdf-lib/cjs/core/parser/BaseParser.js.map create mode 100644 node_modules/pdf-lib/cjs/core/parser/ByteStream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/parser/ByteStream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/parser/ByteStream.js create mode 100644 node_modules/pdf-lib/cjs/core/parser/ByteStream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFObjectParser.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFObjectParser.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFObjectParser.js create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFObjectParser.js.map create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFObjectStreamParser.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFObjectStreamParser.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFObjectStreamParser.js create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFObjectStreamParser.js.map create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFParser.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFParser.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFParser.js create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFParser.js.map create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFXRefStreamParser.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFXRefStreamParser.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFXRefStreamParser.js create mode 100644 node_modules/pdf-lib/cjs/core/parser/PDFXRefStreamParser.js.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/Ascii85Stream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/streams/Ascii85Stream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/Ascii85Stream.js create mode 100644 node_modules/pdf-lib/cjs/core/streams/Ascii85Stream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/AsciiHexStream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/streams/AsciiHexStream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/AsciiHexStream.js create mode 100644 node_modules/pdf-lib/cjs/core/streams/AsciiHexStream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/DecodeStream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/streams/DecodeStream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/DecodeStream.js create mode 100644 node_modules/pdf-lib/cjs/core/streams/DecodeStream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/FlateStream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/streams/FlateStream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/FlateStream.js create mode 100644 node_modules/pdf-lib/cjs/core/streams/FlateStream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/LZWStream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/streams/LZWStream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/LZWStream.js create mode 100644 node_modules/pdf-lib/cjs/core/streams/LZWStream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/RunLengthStream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/streams/RunLengthStream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/RunLengthStream.js create mode 100644 node_modules/pdf-lib/cjs/core/streams/RunLengthStream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/Stream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/streams/Stream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/Stream.js create mode 100644 node_modules/pdf-lib/cjs/core/streams/Stream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/decode.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/streams/decode.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/streams/decode.js create mode 100644 node_modules/pdf-lib/cjs/core/streams/decode.js.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFCatalog.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFCatalog.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFCatalog.js create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFCatalog.js.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFContentStream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFContentStream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFContentStream.js create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFContentStream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFCrossRefStream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFCrossRefStream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFCrossRefStream.js create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFCrossRefStream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFFlateStream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFFlateStream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFFlateStream.js create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFFlateStream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFObjectStream.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFObjectStream.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFObjectStream.js create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFObjectStream.js.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFPageLeaf.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFPageLeaf.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFPageLeaf.js create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFPageLeaf.js.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFPageTree.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFPageTree.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFPageTree.js create mode 100644 node_modules/pdf-lib/cjs/core/structures/PDFPageTree.js.map create mode 100644 node_modules/pdf-lib/cjs/core/syntax/CharCodes.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/syntax/CharCodes.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/syntax/CharCodes.js create mode 100644 node_modules/pdf-lib/cjs/core/syntax/CharCodes.js.map create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Delimiters.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Delimiters.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Delimiters.js create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Delimiters.js.map create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Irregular.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Irregular.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Irregular.js create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Irregular.js.map create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Keywords.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Keywords.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Keywords.js create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Keywords.js.map create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Numeric.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Numeric.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Numeric.js create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Numeric.js.map create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Whitespace.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Whitespace.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Whitespace.js create mode 100644 node_modules/pdf-lib/cjs/core/syntax/Whitespace.js.map create mode 100644 node_modules/pdf-lib/cjs/core/writers/PDFStreamWriter.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/writers/PDFStreamWriter.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/writers/PDFStreamWriter.js create mode 100644 node_modules/pdf-lib/cjs/core/writers/PDFStreamWriter.js.map create mode 100644 node_modules/pdf-lib/cjs/core/writers/PDFWriter.d.ts create mode 100644 node_modules/pdf-lib/cjs/core/writers/PDFWriter.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/core/writers/PDFWriter.js create mode 100644 node_modules/pdf-lib/cjs/core/writers/PDFWriter.js.map create mode 100644 node_modules/pdf-lib/cjs/index.d.ts create mode 100644 node_modules/pdf-lib/cjs/index.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/index.js create mode 100644 node_modules/pdf-lib/cjs/index.js.map create mode 100644 node_modules/pdf-lib/cjs/types/fontkit.d.ts create mode 100644 node_modules/pdf-lib/cjs/types/fontkit.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/types/fontkit.js create mode 100644 node_modules/pdf-lib/cjs/types/fontkit.js.map create mode 100644 node_modules/pdf-lib/cjs/types/index.d.ts create mode 100644 node_modules/pdf-lib/cjs/types/index.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/types/index.js create mode 100644 node_modules/pdf-lib/cjs/types/index.js.map create mode 100644 node_modules/pdf-lib/cjs/types/matrix.d.ts create mode 100644 node_modules/pdf-lib/cjs/types/matrix.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/types/matrix.js create mode 100644 node_modules/pdf-lib/cjs/types/matrix.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/Cache.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/Cache.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/Cache.js create mode 100644 node_modules/pdf-lib/cjs/utils/Cache.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/arrays.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/arrays.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/arrays.js create mode 100644 node_modules/pdf-lib/cjs/utils/arrays.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/async.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/async.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/async.js create mode 100644 node_modules/pdf-lib/cjs/utils/async.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/base64.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/base64.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/base64.js create mode 100644 node_modules/pdf-lib/cjs/utils/base64.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/errors.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/errors.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/errors.js create mode 100644 node_modules/pdf-lib/cjs/utils/errors.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/index.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/index.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/index.js create mode 100644 node_modules/pdf-lib/cjs/utils/index.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/numbers.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/numbers.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/numbers.js create mode 100644 node_modules/pdf-lib/cjs/utils/numbers.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/objects.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/objects.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/objects.js create mode 100644 node_modules/pdf-lib/cjs/utils/objects.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/pdfDocEncoding.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/pdfDocEncoding.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/pdfDocEncoding.js create mode 100644 node_modules/pdf-lib/cjs/utils/pdfDocEncoding.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/png.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/png.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/png.js create mode 100644 node_modules/pdf-lib/cjs/utils/png.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/rng.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/rng.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/rng.js create mode 100644 node_modules/pdf-lib/cjs/utils/rng.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/strings.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/strings.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/strings.js create mode 100644 node_modules/pdf-lib/cjs/utils/strings.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/unicode.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/unicode.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/unicode.js create mode 100644 node_modules/pdf-lib/cjs/utils/unicode.js.map create mode 100644 node_modules/pdf-lib/cjs/utils/validators.d.ts create mode 100644 node_modules/pdf-lib/cjs/utils/validators.d.ts.map create mode 100644 node_modules/pdf-lib/cjs/utils/validators.js create mode 100644 node_modules/pdf-lib/cjs/utils/validators.js.map create mode 100644 node_modules/pdf-lib/dist/pdf-lib.esm.js create mode 100644 node_modules/pdf-lib/dist/pdf-lib.esm.js.map create mode 100644 node_modules/pdf-lib/dist/pdf-lib.esm.min.js create mode 100644 node_modules/pdf-lib/dist/pdf-lib.esm.min.js.map create mode 100644 node_modules/pdf-lib/dist/pdf-lib.js create mode 100644 node_modules/pdf-lib/dist/pdf-lib.js.map create mode 100644 node_modules/pdf-lib/dist/pdf-lib.min.js create mode 100644 node_modules/pdf-lib/dist/pdf-lib.min.js.map create mode 100644 node_modules/pdf-lib/es/api/Embeddable.d.ts create mode 100644 node_modules/pdf-lib/es/api/Embeddable.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/Embeddable.js create mode 100644 node_modules/pdf-lib/es/api/Embeddable.js.map create mode 100644 node_modules/pdf-lib/es/api/PDFDocument.d.ts create mode 100644 node_modules/pdf-lib/es/api/PDFDocument.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/PDFDocument.js create mode 100644 node_modules/pdf-lib/es/api/PDFDocument.js.map create mode 100644 node_modules/pdf-lib/es/api/PDFDocumentOptions.d.ts create mode 100644 node_modules/pdf-lib/es/api/PDFDocumentOptions.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/PDFDocumentOptions.js create mode 100644 node_modules/pdf-lib/es/api/PDFDocumentOptions.js.map create mode 100644 node_modules/pdf-lib/es/api/PDFEmbeddedFile.d.ts create mode 100644 node_modules/pdf-lib/es/api/PDFEmbeddedFile.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/PDFEmbeddedFile.js create mode 100644 node_modules/pdf-lib/es/api/PDFEmbeddedFile.js.map create mode 100644 node_modules/pdf-lib/es/api/PDFEmbeddedPage.d.ts create mode 100644 node_modules/pdf-lib/es/api/PDFEmbeddedPage.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/PDFEmbeddedPage.js create mode 100644 node_modules/pdf-lib/es/api/PDFEmbeddedPage.js.map create mode 100644 node_modules/pdf-lib/es/api/PDFFont.d.ts create mode 100644 node_modules/pdf-lib/es/api/PDFFont.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/PDFFont.js create mode 100644 node_modules/pdf-lib/es/api/PDFFont.js.map create mode 100644 node_modules/pdf-lib/es/api/PDFImage.d.ts create mode 100644 node_modules/pdf-lib/es/api/PDFImage.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/PDFImage.js create mode 100644 node_modules/pdf-lib/es/api/PDFImage.js.map create mode 100644 node_modules/pdf-lib/es/api/PDFJavaScript.d.ts create mode 100644 node_modules/pdf-lib/es/api/PDFJavaScript.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/PDFJavaScript.js create mode 100644 node_modules/pdf-lib/es/api/PDFJavaScript.js.map create mode 100644 node_modules/pdf-lib/es/api/PDFPage.d.ts create mode 100644 node_modules/pdf-lib/es/api/PDFPage.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/PDFPage.js create mode 100644 node_modules/pdf-lib/es/api/PDFPage.js.map create mode 100644 node_modules/pdf-lib/es/api/PDFPageOptions.d.ts create mode 100644 node_modules/pdf-lib/es/api/PDFPageOptions.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/PDFPageOptions.js create mode 100644 node_modules/pdf-lib/es/api/PDFPageOptions.js.map create mode 100644 node_modules/pdf-lib/es/api/StandardFonts.d.ts create mode 100644 node_modules/pdf-lib/es/api/StandardFonts.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/StandardFonts.js create mode 100644 node_modules/pdf-lib/es/api/StandardFonts.js.map create mode 100644 node_modules/pdf-lib/es/api/colors.d.ts create mode 100644 node_modules/pdf-lib/es/api/colors.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/colors.js create mode 100644 node_modules/pdf-lib/es/api/colors.js.map create mode 100644 node_modules/pdf-lib/es/api/errors.d.ts create mode 100644 node_modules/pdf-lib/es/api/errors.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/errors.js create mode 100644 node_modules/pdf-lib/es/api/errors.js.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFButton.d.ts create mode 100644 node_modules/pdf-lib/es/api/form/PDFButton.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFButton.js create mode 100644 node_modules/pdf-lib/es/api/form/PDFButton.js.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFCheckBox.d.ts create mode 100644 node_modules/pdf-lib/es/api/form/PDFCheckBox.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFCheckBox.js create mode 100644 node_modules/pdf-lib/es/api/form/PDFCheckBox.js.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFDropdown.d.ts create mode 100644 node_modules/pdf-lib/es/api/form/PDFDropdown.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFDropdown.js create mode 100644 node_modules/pdf-lib/es/api/form/PDFDropdown.js.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFField.d.ts create mode 100644 node_modules/pdf-lib/es/api/form/PDFField.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFField.js create mode 100644 node_modules/pdf-lib/es/api/form/PDFField.js.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFForm.d.ts create mode 100644 node_modules/pdf-lib/es/api/form/PDFForm.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFForm.js create mode 100644 node_modules/pdf-lib/es/api/form/PDFForm.js.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFOptionList.d.ts create mode 100644 node_modules/pdf-lib/es/api/form/PDFOptionList.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFOptionList.js create mode 100644 node_modules/pdf-lib/es/api/form/PDFOptionList.js.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFRadioGroup.d.ts create mode 100644 node_modules/pdf-lib/es/api/form/PDFRadioGroup.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFRadioGroup.js create mode 100644 node_modules/pdf-lib/es/api/form/PDFRadioGroup.js.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFSignature.d.ts create mode 100644 node_modules/pdf-lib/es/api/form/PDFSignature.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFSignature.js create mode 100644 node_modules/pdf-lib/es/api/form/PDFSignature.js.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFTextField.d.ts create mode 100644 node_modules/pdf-lib/es/api/form/PDFTextField.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/form/PDFTextField.js create mode 100644 node_modules/pdf-lib/es/api/form/PDFTextField.js.map create mode 100644 node_modules/pdf-lib/es/api/form/appearances.d.ts create mode 100644 node_modules/pdf-lib/es/api/form/appearances.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/form/appearances.js create mode 100644 node_modules/pdf-lib/es/api/form/appearances.js.map create mode 100644 node_modules/pdf-lib/es/api/form/index.d.ts create mode 100644 node_modules/pdf-lib/es/api/form/index.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/form/index.js create mode 100644 node_modules/pdf-lib/es/api/form/index.js.map create mode 100644 node_modules/pdf-lib/es/api/image/alignment.d.ts create mode 100644 node_modules/pdf-lib/es/api/image/alignment.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/image/alignment.js create mode 100644 node_modules/pdf-lib/es/api/image/alignment.js.map create mode 100644 node_modules/pdf-lib/es/api/image/index.d.ts create mode 100644 node_modules/pdf-lib/es/api/image/index.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/image/index.js create mode 100644 node_modules/pdf-lib/es/api/image/index.js.map create mode 100644 node_modules/pdf-lib/es/api/index.d.ts create mode 100644 node_modules/pdf-lib/es/api/index.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/index.js create mode 100644 node_modules/pdf-lib/es/api/index.js.map create mode 100644 node_modules/pdf-lib/es/api/objects.d.ts create mode 100644 node_modules/pdf-lib/es/api/objects.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/objects.js create mode 100644 node_modules/pdf-lib/es/api/objects.js.map create mode 100644 node_modules/pdf-lib/es/api/operations.d.ts create mode 100644 node_modules/pdf-lib/es/api/operations.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/operations.js create mode 100644 node_modules/pdf-lib/es/api/operations.js.map create mode 100644 node_modules/pdf-lib/es/api/operators.d.ts create mode 100644 node_modules/pdf-lib/es/api/operators.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/operators.js create mode 100644 node_modules/pdf-lib/es/api/operators.js.map create mode 100644 node_modules/pdf-lib/es/api/rotations.d.ts create mode 100644 node_modules/pdf-lib/es/api/rotations.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/rotations.js create mode 100644 node_modules/pdf-lib/es/api/rotations.js.map create mode 100644 node_modules/pdf-lib/es/api/sizes.d.ts create mode 100644 node_modules/pdf-lib/es/api/sizes.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/sizes.js create mode 100644 node_modules/pdf-lib/es/api/sizes.js.map create mode 100644 node_modules/pdf-lib/es/api/svgPath.d.ts create mode 100644 node_modules/pdf-lib/es/api/svgPath.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/svgPath.js create mode 100644 node_modules/pdf-lib/es/api/svgPath.js.map create mode 100644 node_modules/pdf-lib/es/api/text/alignment.d.ts create mode 100644 node_modules/pdf-lib/es/api/text/alignment.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/text/alignment.js create mode 100644 node_modules/pdf-lib/es/api/text/alignment.js.map create mode 100644 node_modules/pdf-lib/es/api/text/index.d.ts create mode 100644 node_modules/pdf-lib/es/api/text/index.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/text/index.js create mode 100644 node_modules/pdf-lib/es/api/text/index.js.map create mode 100644 node_modules/pdf-lib/es/api/text/layout.d.ts create mode 100644 node_modules/pdf-lib/es/api/text/layout.d.ts.map create mode 100644 node_modules/pdf-lib/es/api/text/layout.js create mode 100644 node_modules/pdf-lib/es/api/text/layout.js.map create mode 100644 node_modules/pdf-lib/es/core/PDFContext.d.ts create mode 100644 node_modules/pdf-lib/es/core/PDFContext.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/PDFContext.js create mode 100644 node_modules/pdf-lib/es/core/PDFContext.js.map create mode 100644 node_modules/pdf-lib/es/core/PDFObjectCopier.d.ts create mode 100644 node_modules/pdf-lib/es/core/PDFObjectCopier.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/PDFObjectCopier.js create mode 100644 node_modules/pdf-lib/es/core/PDFObjectCopier.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroButton.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroButton.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroButton.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroButton.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroCheckBox.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroCheckBox.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroCheckBox.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroCheckBox.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroChoice.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroChoice.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroChoice.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroChoice.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroComboBox.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroComboBox.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroComboBox.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroComboBox.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroField.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroField.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroField.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroField.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroForm.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroForm.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroForm.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroForm.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroListBox.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroListBox.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroListBox.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroListBox.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroNonTerminal.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroNonTerminal.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroNonTerminal.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroNonTerminal.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroPushButton.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroPushButton.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroPushButton.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroPushButton.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroRadioButton.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroRadioButton.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroRadioButton.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroRadioButton.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroSignature.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroSignature.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroSignature.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroSignature.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroTerminal.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroTerminal.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroTerminal.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroTerminal.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroText.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroText.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroText.js create mode 100644 node_modules/pdf-lib/es/core/acroform/PDFAcroText.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/flags.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/flags.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/flags.js create mode 100644 node_modules/pdf-lib/es/core/acroform/flags.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/index.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/index.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/index.js create mode 100644 node_modules/pdf-lib/es/core/acroform/index.js.map create mode 100644 node_modules/pdf-lib/es/core/acroform/utils.d.ts create mode 100644 node_modules/pdf-lib/es/core/acroform/utils.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/acroform/utils.js create mode 100644 node_modules/pdf-lib/es/core/acroform/utils.js.map create mode 100644 node_modules/pdf-lib/es/core/annotation/AppearanceCharacteristics.d.ts create mode 100644 node_modules/pdf-lib/es/core/annotation/AppearanceCharacteristics.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/annotation/AppearanceCharacteristics.js create mode 100644 node_modules/pdf-lib/es/core/annotation/AppearanceCharacteristics.js.map create mode 100644 node_modules/pdf-lib/es/core/annotation/BorderStyle.d.ts create mode 100644 node_modules/pdf-lib/es/core/annotation/BorderStyle.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/annotation/BorderStyle.js create mode 100644 node_modules/pdf-lib/es/core/annotation/BorderStyle.js.map create mode 100644 node_modules/pdf-lib/es/core/annotation/PDFAnnotation.d.ts create mode 100644 node_modules/pdf-lib/es/core/annotation/PDFAnnotation.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/annotation/PDFAnnotation.js create mode 100644 node_modules/pdf-lib/es/core/annotation/PDFAnnotation.js.map create mode 100644 node_modules/pdf-lib/es/core/annotation/PDFWidgetAnnotation.d.ts create mode 100644 node_modules/pdf-lib/es/core/annotation/PDFWidgetAnnotation.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/annotation/PDFWidgetAnnotation.js create mode 100644 node_modules/pdf-lib/es/core/annotation/PDFWidgetAnnotation.js.map create mode 100644 node_modules/pdf-lib/es/core/annotation/flags.d.ts create mode 100644 node_modules/pdf-lib/es/core/annotation/flags.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/annotation/flags.js create mode 100644 node_modules/pdf-lib/es/core/annotation/flags.js.map create mode 100644 node_modules/pdf-lib/es/core/annotation/index.d.ts create mode 100644 node_modules/pdf-lib/es/core/annotation/index.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/annotation/index.js create mode 100644 node_modules/pdf-lib/es/core/annotation/index.js.map create mode 100644 node_modules/pdf-lib/es/core/document/PDFCrossRefSection.d.ts create mode 100644 node_modules/pdf-lib/es/core/document/PDFCrossRefSection.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/document/PDFCrossRefSection.js create mode 100644 node_modules/pdf-lib/es/core/document/PDFCrossRefSection.js.map create mode 100644 node_modules/pdf-lib/es/core/document/PDFHeader.d.ts create mode 100644 node_modules/pdf-lib/es/core/document/PDFHeader.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/document/PDFHeader.js create mode 100644 node_modules/pdf-lib/es/core/document/PDFHeader.js.map create mode 100644 node_modules/pdf-lib/es/core/document/PDFTrailer.d.ts create mode 100644 node_modules/pdf-lib/es/core/document/PDFTrailer.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/document/PDFTrailer.js create mode 100644 node_modules/pdf-lib/es/core/document/PDFTrailer.js.map create mode 100644 node_modules/pdf-lib/es/core/document/PDFTrailerDict.d.ts create mode 100644 node_modules/pdf-lib/es/core/document/PDFTrailerDict.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/document/PDFTrailerDict.js create mode 100644 node_modules/pdf-lib/es/core/document/PDFTrailerDict.js.map create mode 100644 node_modules/pdf-lib/es/core/embedders/CMap.d.ts create mode 100644 node_modules/pdf-lib/es/core/embedders/CMap.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/embedders/CMap.js create mode 100644 node_modules/pdf-lib/es/core/embedders/CMap.js.map create mode 100644 node_modules/pdf-lib/es/core/embedders/CustomFontEmbedder.d.ts create mode 100644 node_modules/pdf-lib/es/core/embedders/CustomFontEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/embedders/CustomFontEmbedder.js create mode 100644 node_modules/pdf-lib/es/core/embedders/CustomFontEmbedder.js.map create mode 100644 node_modules/pdf-lib/es/core/embedders/CustomFontSubsetEmbedder.d.ts create mode 100644 node_modules/pdf-lib/es/core/embedders/CustomFontSubsetEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/embedders/CustomFontSubsetEmbedder.js create mode 100644 node_modules/pdf-lib/es/core/embedders/CustomFontSubsetEmbedder.js.map create mode 100644 node_modules/pdf-lib/es/core/embedders/FileEmbedder.d.ts create mode 100644 node_modules/pdf-lib/es/core/embedders/FileEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/embedders/FileEmbedder.js create mode 100644 node_modules/pdf-lib/es/core/embedders/FileEmbedder.js.map create mode 100644 node_modules/pdf-lib/es/core/embedders/FontFlags.d.ts create mode 100644 node_modules/pdf-lib/es/core/embedders/FontFlags.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/embedders/FontFlags.js create mode 100644 node_modules/pdf-lib/es/core/embedders/FontFlags.js.map create mode 100644 node_modules/pdf-lib/es/core/embedders/JavaScriptEmbedder.d.ts create mode 100644 node_modules/pdf-lib/es/core/embedders/JavaScriptEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/embedders/JavaScriptEmbedder.js create mode 100644 node_modules/pdf-lib/es/core/embedders/JavaScriptEmbedder.js.map create mode 100644 node_modules/pdf-lib/es/core/embedders/JpegEmbedder.d.ts create mode 100644 node_modules/pdf-lib/es/core/embedders/JpegEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/embedders/JpegEmbedder.js create mode 100644 node_modules/pdf-lib/es/core/embedders/JpegEmbedder.js.map create mode 100644 node_modules/pdf-lib/es/core/embedders/PDFPageEmbedder.d.ts create mode 100644 node_modules/pdf-lib/es/core/embedders/PDFPageEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/embedders/PDFPageEmbedder.js create mode 100644 node_modules/pdf-lib/es/core/embedders/PDFPageEmbedder.js.map create mode 100644 node_modules/pdf-lib/es/core/embedders/PngEmbedder.d.ts create mode 100644 node_modules/pdf-lib/es/core/embedders/PngEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/embedders/PngEmbedder.js create mode 100644 node_modules/pdf-lib/es/core/embedders/PngEmbedder.js.map create mode 100644 node_modules/pdf-lib/es/core/embedders/StandardFontEmbedder.d.ts create mode 100644 node_modules/pdf-lib/es/core/embedders/StandardFontEmbedder.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/embedders/StandardFontEmbedder.js create mode 100644 node_modules/pdf-lib/es/core/embedders/StandardFontEmbedder.js.map create mode 100644 node_modules/pdf-lib/es/core/errors.d.ts create mode 100644 node_modules/pdf-lib/es/core/errors.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/errors.js create mode 100644 node_modules/pdf-lib/es/core/errors.js.map create mode 100644 node_modules/pdf-lib/es/core/index.d.ts create mode 100644 node_modules/pdf-lib/es/core/index.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/index.js create mode 100644 node_modules/pdf-lib/es/core/index.js.map create mode 100644 node_modules/pdf-lib/es/core/interactive/ViewerPreferences.d.ts create mode 100644 node_modules/pdf-lib/es/core/interactive/ViewerPreferences.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/interactive/ViewerPreferences.js create mode 100644 node_modules/pdf-lib/es/core/interactive/ViewerPreferences.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFArray.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFArray.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFArray.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFArray.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFBool.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFBool.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFBool.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFBool.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFDict.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFDict.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFDict.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFDict.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFHexString.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFHexString.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFHexString.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFHexString.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFInvalidObject.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFInvalidObject.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFInvalidObject.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFInvalidObject.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFName.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFName.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFName.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFName.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFNull.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFNull.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFNull.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFNull.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFNumber.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFNumber.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFNumber.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFNumber.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFObject.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFObject.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFObject.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFObject.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFRawStream.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFRawStream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFRawStream.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFRawStream.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFRef.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFRef.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFRef.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFRef.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFStream.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFStream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFStream.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFStream.js.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFString.d.ts create mode 100644 node_modules/pdf-lib/es/core/objects/PDFString.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/objects/PDFString.js create mode 100644 node_modules/pdf-lib/es/core/objects/PDFString.js.map create mode 100644 node_modules/pdf-lib/es/core/operators/PDFOperator.d.ts create mode 100644 node_modules/pdf-lib/es/core/operators/PDFOperator.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/operators/PDFOperator.js create mode 100644 node_modules/pdf-lib/es/core/operators/PDFOperator.js.map create mode 100644 node_modules/pdf-lib/es/core/operators/PDFOperatorNames.d.ts create mode 100644 node_modules/pdf-lib/es/core/operators/PDFOperatorNames.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/operators/PDFOperatorNames.js create mode 100644 node_modules/pdf-lib/es/core/operators/PDFOperatorNames.js.map create mode 100644 node_modules/pdf-lib/es/core/parser/BaseParser.d.ts create mode 100644 node_modules/pdf-lib/es/core/parser/BaseParser.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/parser/BaseParser.js create mode 100644 node_modules/pdf-lib/es/core/parser/BaseParser.js.map create mode 100644 node_modules/pdf-lib/es/core/parser/ByteStream.d.ts create mode 100644 node_modules/pdf-lib/es/core/parser/ByteStream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/parser/ByteStream.js create mode 100644 node_modules/pdf-lib/es/core/parser/ByteStream.js.map create mode 100644 node_modules/pdf-lib/es/core/parser/PDFObjectParser.d.ts create mode 100644 node_modules/pdf-lib/es/core/parser/PDFObjectParser.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/parser/PDFObjectParser.js create mode 100644 node_modules/pdf-lib/es/core/parser/PDFObjectParser.js.map create mode 100644 node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.d.ts create mode 100644 node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.js create mode 100644 node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.js.map create mode 100644 node_modules/pdf-lib/es/core/parser/PDFParser.d.ts create mode 100644 node_modules/pdf-lib/es/core/parser/PDFParser.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/parser/PDFParser.js create mode 100644 node_modules/pdf-lib/es/core/parser/PDFParser.js.map create mode 100644 node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.d.ts create mode 100644 node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.js create mode 100644 node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.js.map create mode 100644 node_modules/pdf-lib/es/core/streams/Ascii85Stream.d.ts create mode 100644 node_modules/pdf-lib/es/core/streams/Ascii85Stream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/streams/Ascii85Stream.js create mode 100644 node_modules/pdf-lib/es/core/streams/Ascii85Stream.js.map create mode 100644 node_modules/pdf-lib/es/core/streams/AsciiHexStream.d.ts create mode 100644 node_modules/pdf-lib/es/core/streams/AsciiHexStream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/streams/AsciiHexStream.js create mode 100644 node_modules/pdf-lib/es/core/streams/AsciiHexStream.js.map create mode 100644 node_modules/pdf-lib/es/core/streams/DecodeStream.d.ts create mode 100644 node_modules/pdf-lib/es/core/streams/DecodeStream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/streams/DecodeStream.js create mode 100644 node_modules/pdf-lib/es/core/streams/DecodeStream.js.map create mode 100644 node_modules/pdf-lib/es/core/streams/FlateStream.d.ts create mode 100644 node_modules/pdf-lib/es/core/streams/FlateStream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/streams/FlateStream.js create mode 100644 node_modules/pdf-lib/es/core/streams/FlateStream.js.map create mode 100644 node_modules/pdf-lib/es/core/streams/LZWStream.d.ts create mode 100644 node_modules/pdf-lib/es/core/streams/LZWStream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/streams/LZWStream.js create mode 100644 node_modules/pdf-lib/es/core/streams/LZWStream.js.map create mode 100644 node_modules/pdf-lib/es/core/streams/RunLengthStream.d.ts create mode 100644 node_modules/pdf-lib/es/core/streams/RunLengthStream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/streams/RunLengthStream.js create mode 100644 node_modules/pdf-lib/es/core/streams/RunLengthStream.js.map create mode 100644 node_modules/pdf-lib/es/core/streams/Stream.d.ts create mode 100644 node_modules/pdf-lib/es/core/streams/Stream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/streams/Stream.js create mode 100644 node_modules/pdf-lib/es/core/streams/Stream.js.map create mode 100644 node_modules/pdf-lib/es/core/streams/decode.d.ts create mode 100644 node_modules/pdf-lib/es/core/streams/decode.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/streams/decode.js create mode 100644 node_modules/pdf-lib/es/core/streams/decode.js.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFCatalog.d.ts create mode 100644 node_modules/pdf-lib/es/core/structures/PDFCatalog.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFCatalog.js create mode 100644 node_modules/pdf-lib/es/core/structures/PDFCatalog.js.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFContentStream.d.ts create mode 100644 node_modules/pdf-lib/es/core/structures/PDFContentStream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFContentStream.js create mode 100644 node_modules/pdf-lib/es/core/structures/PDFContentStream.js.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFCrossRefStream.d.ts create mode 100644 node_modules/pdf-lib/es/core/structures/PDFCrossRefStream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFCrossRefStream.js create mode 100644 node_modules/pdf-lib/es/core/structures/PDFCrossRefStream.js.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFFlateStream.d.ts create mode 100644 node_modules/pdf-lib/es/core/structures/PDFFlateStream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFFlateStream.js create mode 100644 node_modules/pdf-lib/es/core/structures/PDFFlateStream.js.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFObjectStream.d.ts create mode 100644 node_modules/pdf-lib/es/core/structures/PDFObjectStream.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFObjectStream.js create mode 100644 node_modules/pdf-lib/es/core/structures/PDFObjectStream.js.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFPageLeaf.d.ts create mode 100644 node_modules/pdf-lib/es/core/structures/PDFPageLeaf.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFPageLeaf.js create mode 100644 node_modules/pdf-lib/es/core/structures/PDFPageLeaf.js.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFPageTree.d.ts create mode 100644 node_modules/pdf-lib/es/core/structures/PDFPageTree.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/structures/PDFPageTree.js create mode 100644 node_modules/pdf-lib/es/core/structures/PDFPageTree.js.map create mode 100644 node_modules/pdf-lib/es/core/syntax/CharCodes.d.ts create mode 100644 node_modules/pdf-lib/es/core/syntax/CharCodes.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/syntax/CharCodes.js create mode 100644 node_modules/pdf-lib/es/core/syntax/CharCodes.js.map create mode 100644 node_modules/pdf-lib/es/core/syntax/Delimiters.d.ts create mode 100644 node_modules/pdf-lib/es/core/syntax/Delimiters.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/syntax/Delimiters.js create mode 100644 node_modules/pdf-lib/es/core/syntax/Delimiters.js.map create mode 100644 node_modules/pdf-lib/es/core/syntax/Irregular.d.ts create mode 100644 node_modules/pdf-lib/es/core/syntax/Irregular.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/syntax/Irregular.js create mode 100644 node_modules/pdf-lib/es/core/syntax/Irregular.js.map create mode 100644 node_modules/pdf-lib/es/core/syntax/Keywords.d.ts create mode 100644 node_modules/pdf-lib/es/core/syntax/Keywords.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/syntax/Keywords.js create mode 100644 node_modules/pdf-lib/es/core/syntax/Keywords.js.map create mode 100644 node_modules/pdf-lib/es/core/syntax/Numeric.d.ts create mode 100644 node_modules/pdf-lib/es/core/syntax/Numeric.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/syntax/Numeric.js create mode 100644 node_modules/pdf-lib/es/core/syntax/Numeric.js.map create mode 100644 node_modules/pdf-lib/es/core/syntax/Whitespace.d.ts create mode 100644 node_modules/pdf-lib/es/core/syntax/Whitespace.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/syntax/Whitespace.js create mode 100644 node_modules/pdf-lib/es/core/syntax/Whitespace.js.map create mode 100644 node_modules/pdf-lib/es/core/writers/PDFStreamWriter.d.ts create mode 100644 node_modules/pdf-lib/es/core/writers/PDFStreamWriter.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/writers/PDFStreamWriter.js create mode 100644 node_modules/pdf-lib/es/core/writers/PDFStreamWriter.js.map create mode 100644 node_modules/pdf-lib/es/core/writers/PDFWriter.d.ts create mode 100644 node_modules/pdf-lib/es/core/writers/PDFWriter.d.ts.map create mode 100644 node_modules/pdf-lib/es/core/writers/PDFWriter.js create mode 100644 node_modules/pdf-lib/es/core/writers/PDFWriter.js.map create mode 100644 node_modules/pdf-lib/es/index.d.ts create mode 100644 node_modules/pdf-lib/es/index.d.ts.map create mode 100644 node_modules/pdf-lib/es/index.js create mode 100644 node_modules/pdf-lib/es/index.js.map create mode 100644 node_modules/pdf-lib/es/types/fontkit.d.ts create mode 100644 node_modules/pdf-lib/es/types/fontkit.d.ts.map create mode 100644 node_modules/pdf-lib/es/types/fontkit.js create mode 100644 node_modules/pdf-lib/es/types/fontkit.js.map create mode 100644 node_modules/pdf-lib/es/types/index.d.ts create mode 100644 node_modules/pdf-lib/es/types/index.d.ts.map create mode 100644 node_modules/pdf-lib/es/types/index.js create mode 100644 node_modules/pdf-lib/es/types/index.js.map create mode 100644 node_modules/pdf-lib/es/types/matrix.d.ts create mode 100644 node_modules/pdf-lib/es/types/matrix.d.ts.map create mode 100644 node_modules/pdf-lib/es/types/matrix.js create mode 100644 node_modules/pdf-lib/es/types/matrix.js.map create mode 100644 node_modules/pdf-lib/es/utils/Cache.d.ts create mode 100644 node_modules/pdf-lib/es/utils/Cache.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/Cache.js create mode 100644 node_modules/pdf-lib/es/utils/Cache.js.map create mode 100644 node_modules/pdf-lib/es/utils/arrays.d.ts create mode 100644 node_modules/pdf-lib/es/utils/arrays.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/arrays.js create mode 100644 node_modules/pdf-lib/es/utils/arrays.js.map create mode 100644 node_modules/pdf-lib/es/utils/async.d.ts create mode 100644 node_modules/pdf-lib/es/utils/async.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/async.js create mode 100644 node_modules/pdf-lib/es/utils/async.js.map create mode 100644 node_modules/pdf-lib/es/utils/base64.d.ts create mode 100644 node_modules/pdf-lib/es/utils/base64.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/base64.js create mode 100644 node_modules/pdf-lib/es/utils/base64.js.map create mode 100644 node_modules/pdf-lib/es/utils/errors.d.ts create mode 100644 node_modules/pdf-lib/es/utils/errors.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/errors.js create mode 100644 node_modules/pdf-lib/es/utils/errors.js.map create mode 100644 node_modules/pdf-lib/es/utils/index.d.ts create mode 100644 node_modules/pdf-lib/es/utils/index.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/index.js create mode 100644 node_modules/pdf-lib/es/utils/index.js.map create mode 100644 node_modules/pdf-lib/es/utils/numbers.d.ts create mode 100644 node_modules/pdf-lib/es/utils/numbers.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/numbers.js create mode 100644 node_modules/pdf-lib/es/utils/numbers.js.map create mode 100644 node_modules/pdf-lib/es/utils/objects.d.ts create mode 100644 node_modules/pdf-lib/es/utils/objects.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/objects.js create mode 100644 node_modules/pdf-lib/es/utils/objects.js.map create mode 100644 node_modules/pdf-lib/es/utils/pdfDocEncoding.d.ts create mode 100644 node_modules/pdf-lib/es/utils/pdfDocEncoding.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/pdfDocEncoding.js create mode 100644 node_modules/pdf-lib/es/utils/pdfDocEncoding.js.map create mode 100644 node_modules/pdf-lib/es/utils/png.d.ts create mode 100644 node_modules/pdf-lib/es/utils/png.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/png.js create mode 100644 node_modules/pdf-lib/es/utils/png.js.map create mode 100644 node_modules/pdf-lib/es/utils/rng.d.ts create mode 100644 node_modules/pdf-lib/es/utils/rng.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/rng.js create mode 100644 node_modules/pdf-lib/es/utils/rng.js.map create mode 100644 node_modules/pdf-lib/es/utils/strings.d.ts create mode 100644 node_modules/pdf-lib/es/utils/strings.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/strings.js create mode 100644 node_modules/pdf-lib/es/utils/strings.js.map create mode 100644 node_modules/pdf-lib/es/utils/unicode.d.ts create mode 100644 node_modules/pdf-lib/es/utils/unicode.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/unicode.js create mode 100644 node_modules/pdf-lib/es/utils/unicode.js.map create mode 100644 node_modules/pdf-lib/es/utils/validators.d.ts create mode 100644 node_modules/pdf-lib/es/utils/validators.d.ts.map create mode 100644 node_modules/pdf-lib/es/utils/validators.js create mode 100644 node_modules/pdf-lib/es/utils/validators.js.map create mode 100644 node_modules/pdf-lib/package.json create mode 100644 node_modules/pdf-lib/src/api/Embeddable.ts create mode 100644 node_modules/pdf-lib/src/api/PDFDocument.ts create mode 100644 node_modules/pdf-lib/src/api/PDFDocumentOptions.ts create mode 100644 node_modules/pdf-lib/src/api/PDFEmbeddedFile.ts create mode 100644 node_modules/pdf-lib/src/api/PDFEmbeddedPage.ts create mode 100644 node_modules/pdf-lib/src/api/PDFFont.ts create mode 100644 node_modules/pdf-lib/src/api/PDFImage.ts create mode 100644 node_modules/pdf-lib/src/api/PDFJavaScript.ts create mode 100644 node_modules/pdf-lib/src/api/PDFPage.ts create mode 100644 node_modules/pdf-lib/src/api/PDFPageOptions.ts create mode 100644 node_modules/pdf-lib/src/api/StandardFonts.ts create mode 100644 node_modules/pdf-lib/src/api/colors.ts create mode 100644 node_modules/pdf-lib/src/api/errors.ts create mode 100644 node_modules/pdf-lib/src/api/form/PDFButton.ts create mode 100644 node_modules/pdf-lib/src/api/form/PDFCheckBox.ts create mode 100644 node_modules/pdf-lib/src/api/form/PDFDropdown.ts create mode 100644 node_modules/pdf-lib/src/api/form/PDFField.ts create mode 100644 node_modules/pdf-lib/src/api/form/PDFForm.ts create mode 100644 node_modules/pdf-lib/src/api/form/PDFOptionList.ts create mode 100644 node_modules/pdf-lib/src/api/form/PDFRadioGroup.ts create mode 100644 node_modules/pdf-lib/src/api/form/PDFSignature.ts create mode 100644 node_modules/pdf-lib/src/api/form/PDFTextField.ts create mode 100644 node_modules/pdf-lib/src/api/form/appearances.ts create mode 100644 node_modules/pdf-lib/src/api/form/index.ts create mode 100644 node_modules/pdf-lib/src/api/image/alignment.ts create mode 100644 node_modules/pdf-lib/src/api/image/index.ts create mode 100644 node_modules/pdf-lib/src/api/index.ts create mode 100644 node_modules/pdf-lib/src/api/objects.ts create mode 100644 node_modules/pdf-lib/src/api/operations.ts create mode 100644 node_modules/pdf-lib/src/api/operators.ts create mode 100644 node_modules/pdf-lib/src/api/rotations.ts create mode 100644 node_modules/pdf-lib/src/api/sizes.ts create mode 100644 node_modules/pdf-lib/src/api/svgPath.ts create mode 100644 node_modules/pdf-lib/src/api/text/alignment.ts create mode 100644 node_modules/pdf-lib/src/api/text/index.ts create mode 100644 node_modules/pdf-lib/src/api/text/layout.ts create mode 100644 node_modules/pdf-lib/src/core/PDFContext.ts create mode 100644 node_modules/pdf-lib/src/core/PDFObjectCopier.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroButton.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroCheckBox.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroChoice.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroComboBox.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroField.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroForm.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroListBox.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroNonTerminal.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroPushButton.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroRadioButton.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroSignature.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroTerminal.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/PDFAcroText.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/flags.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/index.ts create mode 100644 node_modules/pdf-lib/src/core/acroform/utils.ts create mode 100644 node_modules/pdf-lib/src/core/annotation/AppearanceCharacteristics.ts create mode 100644 node_modules/pdf-lib/src/core/annotation/BorderStyle.ts create mode 100644 node_modules/pdf-lib/src/core/annotation/PDFAnnotation.ts create mode 100644 node_modules/pdf-lib/src/core/annotation/PDFWidgetAnnotation.ts create mode 100644 node_modules/pdf-lib/src/core/annotation/flags.ts create mode 100644 node_modules/pdf-lib/src/core/annotation/index.ts create mode 100644 node_modules/pdf-lib/src/core/document/PDFCrossRefSection.ts create mode 100644 node_modules/pdf-lib/src/core/document/PDFHeader.ts create mode 100644 node_modules/pdf-lib/src/core/document/PDFTrailer.ts create mode 100644 node_modules/pdf-lib/src/core/document/PDFTrailerDict.ts create mode 100644 node_modules/pdf-lib/src/core/embedders/CMap.ts create mode 100644 node_modules/pdf-lib/src/core/embedders/CustomFontEmbedder.ts create mode 100644 node_modules/pdf-lib/src/core/embedders/CustomFontSubsetEmbedder.ts create mode 100644 node_modules/pdf-lib/src/core/embedders/FileEmbedder.ts create mode 100644 node_modules/pdf-lib/src/core/embedders/FontFlags.ts create mode 100644 node_modules/pdf-lib/src/core/embedders/JavaScriptEmbedder.ts create mode 100644 node_modules/pdf-lib/src/core/embedders/JpegEmbedder.ts create mode 100644 node_modules/pdf-lib/src/core/embedders/PDFPageEmbedder.ts create mode 100644 node_modules/pdf-lib/src/core/embedders/PngEmbedder.ts create mode 100644 node_modules/pdf-lib/src/core/embedders/StandardFontEmbedder.ts create mode 100644 node_modules/pdf-lib/src/core/errors.ts create mode 100644 node_modules/pdf-lib/src/core/index.ts create mode 100644 node_modules/pdf-lib/src/core/interactive/ViewerPreferences.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFArray.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFBool.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFDict.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFHexString.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFInvalidObject.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFName.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFNull.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFNumber.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFObject.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFRawStream.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFRef.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFStream.ts create mode 100644 node_modules/pdf-lib/src/core/objects/PDFString.ts create mode 100644 node_modules/pdf-lib/src/core/operators/PDFOperator.ts create mode 100644 node_modules/pdf-lib/src/core/operators/PDFOperatorNames.ts create mode 100644 node_modules/pdf-lib/src/core/parser/BaseParser.ts create mode 100644 node_modules/pdf-lib/src/core/parser/ByteStream.ts create mode 100644 node_modules/pdf-lib/src/core/parser/PDFObjectParser.ts create mode 100644 node_modules/pdf-lib/src/core/parser/PDFObjectStreamParser.ts create mode 100644 node_modules/pdf-lib/src/core/parser/PDFParser.ts create mode 100644 node_modules/pdf-lib/src/core/parser/PDFXRefStreamParser.ts create mode 100644 node_modules/pdf-lib/src/core/streams/Ascii85Stream.ts create mode 100644 node_modules/pdf-lib/src/core/streams/AsciiHexStream.ts create mode 100644 node_modules/pdf-lib/src/core/streams/DecodeStream.ts create mode 100644 node_modules/pdf-lib/src/core/streams/FlateStream.ts create mode 100644 node_modules/pdf-lib/src/core/streams/LZWStream.ts create mode 100644 node_modules/pdf-lib/src/core/streams/RunLengthStream.ts create mode 100644 node_modules/pdf-lib/src/core/streams/Stream.ts create mode 100644 node_modules/pdf-lib/src/core/streams/decode.ts create mode 100644 node_modules/pdf-lib/src/core/structures/PDFCatalog.ts create mode 100644 node_modules/pdf-lib/src/core/structures/PDFContentStream.ts create mode 100644 node_modules/pdf-lib/src/core/structures/PDFCrossRefStream.ts create mode 100644 node_modules/pdf-lib/src/core/structures/PDFFlateStream.ts create mode 100644 node_modules/pdf-lib/src/core/structures/PDFObjectStream.ts create mode 100644 node_modules/pdf-lib/src/core/structures/PDFPageLeaf.ts create mode 100644 node_modules/pdf-lib/src/core/structures/PDFPageTree.ts create mode 100644 node_modules/pdf-lib/src/core/syntax/CharCodes.ts create mode 100644 node_modules/pdf-lib/src/core/syntax/Delimiters.ts create mode 100644 node_modules/pdf-lib/src/core/syntax/Irregular.ts create mode 100644 node_modules/pdf-lib/src/core/syntax/Keywords.ts create mode 100644 node_modules/pdf-lib/src/core/syntax/Numeric.ts create mode 100644 node_modules/pdf-lib/src/core/syntax/Whitespace.ts create mode 100644 node_modules/pdf-lib/src/core/writers/PDFStreamWriter.ts create mode 100644 node_modules/pdf-lib/src/core/writers/PDFWriter.ts create mode 100644 node_modules/pdf-lib/src/index.ts create mode 100644 node_modules/pdf-lib/src/types/fontkit.ts create mode 100644 node_modules/pdf-lib/src/types/index.ts create mode 100644 node_modules/pdf-lib/src/types/matrix.ts create mode 100644 node_modules/pdf-lib/src/utils/Cache.ts create mode 100644 node_modules/pdf-lib/src/utils/arrays.ts create mode 100644 node_modules/pdf-lib/src/utils/async.ts create mode 100644 node_modules/pdf-lib/src/utils/base64.ts create mode 100644 node_modules/pdf-lib/src/utils/errors.ts create mode 100644 node_modules/pdf-lib/src/utils/index.ts create mode 100644 node_modules/pdf-lib/src/utils/numbers.ts create mode 100644 node_modules/pdf-lib/src/utils/objects.ts create mode 100644 node_modules/pdf-lib/src/utils/pdfDocEncoding.ts create mode 100644 node_modules/pdf-lib/src/utils/png.ts create mode 100644 node_modules/pdf-lib/src/utils/rng.ts create mode 100644 node_modules/pdf-lib/src/utils/strings.ts create mode 100644 node_modules/pdf-lib/src/utils/unicode.ts create mode 100644 node_modules/pdf-lib/src/utils/validators.ts create mode 100644 node_modules/pdf-lib/ts3.4/apps/deno/dummy.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/Embeddable.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/PDFDocument.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/PDFDocumentOptions.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/PDFEmbeddedFile.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/PDFEmbeddedPage.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/PDFFont.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/PDFImage.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/PDFJavaScript.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/PDFPage.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/PDFPageOptions.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/StandardFonts.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/colors.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/errors.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/form/PDFButton.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/form/PDFCheckBox.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/form/PDFDropdown.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/form/PDFField.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/form/PDFForm.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/form/PDFOptionList.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/form/PDFRadioGroup.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/form/PDFSignature.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/form/PDFTextField.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/form/appearances.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/form/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/image/alignment.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/image/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/objects.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/operations.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/operators.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/rotations.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/sizes.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/svgPath.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/text/alignment.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/text/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/api/text/layout.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/PDFContext.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/PDFObjectCopier.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroButton.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroCheckBox.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroChoice.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroComboBox.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroField.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroForm.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroListBox.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroNonTerminal.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroPushButton.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroRadioButton.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroSignature.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroTerminal.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/PDFAcroText.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/flags.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/acroform/utils.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/annotation/AppearanceCharacteristics.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/annotation/BorderStyle.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/annotation/PDFAnnotation.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/annotation/PDFWidgetAnnotation.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/annotation/flags.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/annotation/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/document/PDFCrossRefSection.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/document/PDFHeader.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/document/PDFTrailer.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/document/PDFTrailerDict.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/embedders/CMap.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/embedders/CustomFontEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/embedders/CustomFontSubsetEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/embedders/FileEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/embedders/FontFlags.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/embedders/JavaScriptEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/embedders/JpegEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/embedders/PDFPageEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/embedders/PngEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/embedders/StandardFontEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/errors.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/interactive/ViewerPreferences.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFArray.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFBool.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFDict.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFHexString.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFInvalidObject.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFName.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFNull.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFNumber.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFObject.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFRawStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFRef.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/objects/PDFString.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/operators/PDFOperator.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/operators/PDFOperatorNames.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/parser/BaseParser.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/parser/ByteStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/parser/PDFObjectParser.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/parser/PDFObjectStreamParser.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/parser/PDFParser.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/parser/PDFXRefStreamParser.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/streams/Ascii85Stream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/streams/AsciiHexStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/streams/DecodeStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/streams/FlateStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/streams/LZWStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/streams/RunLengthStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/streams/Stream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/streams/decode.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/structures/PDFCatalog.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/structures/PDFContentStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/structures/PDFCrossRefStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/structures/PDFFlateStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/structures/PDFObjectStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/structures/PDFPageLeaf.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/structures/PDFPageTree.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/syntax/CharCodes.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/syntax/Delimiters.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/syntax/Irregular.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/syntax/Keywords.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/syntax/Numeric.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/syntax/Whitespace.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/writers/PDFStreamWriter.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/core/writers/PDFWriter.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/types/fontkit.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/types/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/types/matrix.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/Cache.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/arrays.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/async.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/base64.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/errors.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/numbers.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/objects.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/pdfDocEncoding.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/png.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/rng.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/strings.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/unicode.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/cjs/utils/validators.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/Embeddable.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/PDFDocument.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/PDFDocumentOptions.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/PDFEmbeddedFile.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/PDFEmbeddedPage.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/PDFFont.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/PDFImage.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/PDFJavaScript.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/PDFPage.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/PDFPageOptions.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/StandardFonts.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/colors.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/errors.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/form/PDFButton.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/form/PDFCheckBox.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/form/PDFDropdown.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/form/PDFField.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/form/PDFForm.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/form/PDFOptionList.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/form/PDFRadioGroup.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/form/PDFSignature.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/form/PDFTextField.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/form/appearances.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/form/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/image/alignment.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/image/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/objects.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/operations.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/operators.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/rotations.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/sizes.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/svgPath.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/text/alignment.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/text/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/api/text/layout.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/PDFContext.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/PDFObjectCopier.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroButton.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroCheckBox.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroChoice.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroComboBox.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroField.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroForm.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroListBox.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroNonTerminal.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroPushButton.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroRadioButton.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroSignature.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroTerminal.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/PDFAcroText.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/flags.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/acroform/utils.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/annotation/AppearanceCharacteristics.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/annotation/BorderStyle.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/annotation/PDFAnnotation.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/annotation/PDFWidgetAnnotation.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/annotation/flags.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/annotation/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/document/PDFCrossRefSection.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/document/PDFHeader.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/document/PDFTrailer.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/document/PDFTrailerDict.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/embedders/CMap.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/embedders/CustomFontEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/embedders/CustomFontSubsetEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/embedders/FileEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/embedders/FontFlags.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/embedders/JavaScriptEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/embedders/JpegEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/embedders/PDFPageEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/embedders/PngEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/embedders/StandardFontEmbedder.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/errors.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/interactive/ViewerPreferences.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFArray.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFBool.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFDict.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFHexString.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFInvalidObject.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFName.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFNull.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFNumber.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFObject.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFRawStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFRef.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/objects/PDFString.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/operators/PDFOperator.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/operators/PDFOperatorNames.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/parser/BaseParser.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/parser/ByteStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/parser/PDFObjectParser.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/parser/PDFObjectStreamParser.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/parser/PDFParser.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/parser/PDFXRefStreamParser.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/streams/Ascii85Stream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/streams/AsciiHexStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/streams/DecodeStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/streams/FlateStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/streams/LZWStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/streams/RunLengthStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/streams/Stream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/streams/decode.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/structures/PDFCatalog.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/structures/PDFContentStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/structures/PDFCrossRefStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/structures/PDFFlateStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/structures/PDFObjectStream.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/structures/PDFPageLeaf.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/structures/PDFPageTree.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/syntax/CharCodes.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/syntax/Delimiters.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/syntax/Irregular.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/syntax/Keywords.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/syntax/Numeric.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/syntax/Whitespace.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/writers/PDFStreamWriter.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/core/writers/PDFWriter.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/types/fontkit.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/types/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/types/matrix.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/Cache.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/arrays.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/async.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/base64.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/errors.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/index.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/numbers.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/objects.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/pdfDocEncoding.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/png.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/rng.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/strings.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/unicode.d.ts create mode 100644 node_modules/pdf-lib/ts3.4/es/utils/validators.d.ts create mode 100644 node_modules/pdf-lib/yarn.lock create mode 100644 node_modules/process-nextick-args/index.js create mode 100644 node_modules/process-nextick-args/license.md create mode 100644 node_modules/process-nextick-args/package.json create mode 100644 node_modules/process-nextick-args/readme.md create mode 100644 node_modules/proxy-addr/HISTORY.md create mode 100644 node_modules/proxy-addr/LICENSE create mode 100644 node_modules/proxy-addr/README.md create mode 100644 node_modules/proxy-addr/index.js create mode 100644 node_modules/proxy-addr/package.json create mode 100644 node_modules/qs/.editorconfig create mode 100644 node_modules/qs/.github/FUNDING.yml create mode 100644 node_modules/qs/.github/SECURITY.md create mode 100644 node_modules/qs/.github/THREAT_MODEL.md create mode 100644 node_modules/qs/.nycrc create mode 100644 node_modules/qs/CHANGELOG.md create mode 100644 node_modules/qs/LICENSE.md create mode 100644 node_modules/qs/README.md create mode 100644 node_modules/qs/dist/qs.js create mode 100644 node_modules/qs/eslint.config.mjs create mode 100644 node_modules/qs/lib/formats.js create mode 100644 node_modules/qs/lib/index.js create mode 100644 node_modules/qs/lib/parse.js create mode 100644 node_modules/qs/lib/stringify.js create mode 100644 node_modules/qs/lib/utils.js create mode 100644 node_modules/qs/package.json create mode 100644 node_modules/qs/test/empty-keys-cases.js create mode 100644 node_modules/qs/test/parse.js create mode 100644 node_modules/qs/test/stringify.js create mode 100644 node_modules/qs/test/utils.js create mode 100644 node_modules/range-parser/HISTORY.md create mode 100644 node_modules/range-parser/LICENSE create mode 100644 node_modules/range-parser/README.md create mode 100644 node_modules/range-parser/index.js create mode 100644 node_modules/range-parser/package.json create mode 100644 node_modules/raw-body/LICENSE create mode 100644 node_modules/raw-body/README.md create mode 100644 node_modules/raw-body/index.d.ts create mode 100644 node_modules/raw-body/index.js create mode 100644 node_modules/raw-body/package.json create mode 100644 node_modules/readable-stream/.travis.yml create mode 100644 node_modules/readable-stream/CONTRIBUTING.md create mode 100644 node_modules/readable-stream/GOVERNANCE.md create mode 100644 node_modules/readable-stream/LICENSE create mode 100644 node_modules/readable-stream/README.md create mode 100644 node_modules/readable-stream/doc/wg-meetings/2015-01-30.md create mode 100644 node_modules/readable-stream/duplex-browser.js create mode 100644 node_modules/readable-stream/duplex.js create mode 100644 node_modules/readable-stream/lib/_stream_duplex.js create mode 100644 node_modules/readable-stream/lib/_stream_passthrough.js create mode 100644 node_modules/readable-stream/lib/_stream_readable.js create mode 100644 node_modules/readable-stream/lib/_stream_transform.js create mode 100644 node_modules/readable-stream/lib/_stream_writable.js create mode 100644 node_modules/readable-stream/lib/internal/streams/BufferList.js create mode 100644 node_modules/readable-stream/lib/internal/streams/destroy.js create mode 100644 node_modules/readable-stream/lib/internal/streams/stream-browser.js create mode 100644 node_modules/readable-stream/lib/internal/streams/stream.js create mode 100644 node_modules/readable-stream/node_modules/safe-buffer/LICENSE create mode 100644 node_modules/readable-stream/node_modules/safe-buffer/README.md create mode 100644 node_modules/readable-stream/node_modules/safe-buffer/index.d.ts create mode 100644 node_modules/readable-stream/node_modules/safe-buffer/index.js create mode 100644 node_modules/readable-stream/node_modules/safe-buffer/package.json create mode 100644 node_modules/readable-stream/package.json create mode 100644 node_modules/readable-stream/passthrough.js create mode 100644 node_modules/readable-stream/readable-browser.js create mode 100644 node_modules/readable-stream/readable.js create mode 100644 node_modules/readable-stream/transform.js create mode 100644 node_modules/readable-stream/writable-browser.js create mode 100644 node_modules/readable-stream/writable.js create mode 100644 node_modules/safe-buffer/LICENSE create mode 100644 node_modules/safe-buffer/README.md create mode 100644 node_modules/safe-buffer/index.d.ts create mode 100644 node_modules/safe-buffer/index.js create mode 100644 node_modules/safe-buffer/package.json create mode 100644 node_modules/safer-buffer/LICENSE create mode 100644 node_modules/safer-buffer/Porting-Buffer.md create mode 100644 node_modules/safer-buffer/Readme.md create mode 100644 node_modules/safer-buffer/dangerous.js create mode 100644 node_modules/safer-buffer/package.json create mode 100644 node_modules/safer-buffer/safer.js create mode 100644 node_modules/safer-buffer/tests.js create mode 100644 node_modules/send/HISTORY.md create mode 100644 node_modules/send/LICENSE create mode 100644 node_modules/send/README.md create mode 100644 node_modules/send/SECURITY.md create mode 100644 node_modules/send/index.js create mode 100644 node_modules/send/node_modules/ms/index.js create mode 100644 node_modules/send/node_modules/ms/license.md create mode 100644 node_modules/send/node_modules/ms/package.json create mode 100644 node_modules/send/node_modules/ms/readme.md create mode 100644 node_modules/send/package.json create mode 100644 node_modules/serve-static/HISTORY.md create mode 100644 node_modules/serve-static/LICENSE create mode 100644 node_modules/serve-static/README.md create mode 100644 node_modules/serve-static/index.js create mode 100644 node_modules/serve-static/package.json create mode 100644 node_modules/setprototypeof/LICENSE create mode 100644 node_modules/setprototypeof/README.md create mode 100644 node_modules/setprototypeof/index.d.ts create mode 100644 node_modules/setprototypeof/index.js create mode 100644 node_modules/setprototypeof/package.json create mode 100644 node_modules/setprototypeof/test/index.js create mode 100644 node_modules/side-channel-list/.editorconfig create mode 100644 node_modules/side-channel-list/.eslintrc create mode 100644 node_modules/side-channel-list/.github/FUNDING.yml create mode 100644 node_modules/side-channel-list/.nycrc create mode 100644 node_modules/side-channel-list/CHANGELOG.md create mode 100644 node_modules/side-channel-list/LICENSE create mode 100644 node_modules/side-channel-list/README.md create mode 100644 node_modules/side-channel-list/index.d.ts create mode 100644 node_modules/side-channel-list/index.js create mode 100644 node_modules/side-channel-list/list.d.ts create mode 100644 node_modules/side-channel-list/package.json create mode 100644 node_modules/side-channel-list/test/index.js create mode 100644 node_modules/side-channel-list/tsconfig.json create mode 100644 node_modules/side-channel-map/.editorconfig create mode 100644 node_modules/side-channel-map/.eslintrc create mode 100644 node_modules/side-channel-map/.github/FUNDING.yml create mode 100644 node_modules/side-channel-map/.nycrc create mode 100644 node_modules/side-channel-map/CHANGELOG.md create mode 100644 node_modules/side-channel-map/LICENSE create mode 100644 node_modules/side-channel-map/README.md create mode 100644 node_modules/side-channel-map/index.d.ts create mode 100644 node_modules/side-channel-map/index.js create mode 100644 node_modules/side-channel-map/package.json create mode 100644 node_modules/side-channel-map/test/index.js create mode 100644 node_modules/side-channel-map/tsconfig.json create mode 100644 node_modules/side-channel-weakmap/.editorconfig create mode 100644 node_modules/side-channel-weakmap/.eslintrc create mode 100644 node_modules/side-channel-weakmap/.github/FUNDING.yml create mode 100644 node_modules/side-channel-weakmap/.nycrc create mode 100644 node_modules/side-channel-weakmap/CHANGELOG.md create mode 100644 node_modules/side-channel-weakmap/LICENSE create mode 100644 node_modules/side-channel-weakmap/README.md create mode 100644 node_modules/side-channel-weakmap/index.d.ts create mode 100644 node_modules/side-channel-weakmap/index.js create mode 100644 node_modules/side-channel-weakmap/package.json create mode 100644 node_modules/side-channel-weakmap/test/index.js create mode 100644 node_modules/side-channel-weakmap/tsconfig.json create mode 100644 node_modules/side-channel/.editorconfig create mode 100644 node_modules/side-channel/.eslintrc create mode 100644 node_modules/side-channel/.github/FUNDING.yml create mode 100644 node_modules/side-channel/.nycrc create mode 100644 node_modules/side-channel/CHANGELOG.md create mode 100644 node_modules/side-channel/LICENSE create mode 100644 node_modules/side-channel/README.md create mode 100644 node_modules/side-channel/index.d.ts create mode 100644 node_modules/side-channel/index.js create mode 100644 node_modules/side-channel/package.json create mode 100644 node_modules/side-channel/test/index.js create mode 100644 node_modules/side-channel/tsconfig.json create mode 100644 node_modules/statuses/HISTORY.md create mode 100644 node_modules/statuses/LICENSE create mode 100644 node_modules/statuses/README.md create mode 100644 node_modules/statuses/codes.json create mode 100644 node_modules/statuses/index.js create mode 100644 node_modules/statuses/package.json create mode 100644 node_modules/streamsearch/.eslintrc.js create mode 100644 node_modules/streamsearch/.github/workflows/ci.yml create mode 100644 node_modules/streamsearch/.github/workflows/lint.yml create mode 100644 node_modules/streamsearch/LICENSE create mode 100644 node_modules/streamsearch/README.md create mode 100644 node_modules/streamsearch/lib/sbmh.js create mode 100644 node_modules/streamsearch/package.json create mode 100644 node_modules/streamsearch/test/test.js create mode 100644 node_modules/string_decoder/.travis.yml create mode 100644 node_modules/string_decoder/LICENSE create mode 100644 node_modules/string_decoder/README.md create mode 100644 node_modules/string_decoder/lib/string_decoder.js create mode 100644 node_modules/string_decoder/node_modules/safe-buffer/LICENSE create mode 100644 node_modules/string_decoder/node_modules/safe-buffer/README.md create mode 100644 node_modules/string_decoder/node_modules/safe-buffer/index.d.ts create mode 100644 node_modules/string_decoder/node_modules/safe-buffer/index.js create mode 100644 node_modules/string_decoder/node_modules/safe-buffer/package.json create mode 100644 node_modules/string_decoder/package.json create mode 100644 node_modules/toidentifier/HISTORY.md create mode 100644 node_modules/toidentifier/LICENSE create mode 100644 node_modules/toidentifier/README.md create mode 100644 node_modules/toidentifier/index.js create mode 100644 node_modules/toidentifier/package.json create mode 100644 node_modules/tslib/CopyrightNotice.txt create mode 100644 node_modules/tslib/LICENSE.txt create mode 100644 node_modules/tslib/README.md create mode 100644 node_modules/tslib/modules/index.js create mode 100644 node_modules/tslib/modules/package.json create mode 100644 node_modules/tslib/package.json create mode 100644 node_modules/tslib/test/validateModuleExportsMatchCommonJS/index.js create mode 100644 node_modules/tslib/test/validateModuleExportsMatchCommonJS/package.json create mode 100644 node_modules/tslib/tslib.d.ts create mode 100644 node_modules/tslib/tslib.es6.html create mode 100644 node_modules/tslib/tslib.es6.js create mode 100644 node_modules/tslib/tslib.html create mode 100644 node_modules/tslib/tslib.js create mode 100644 node_modules/type-is/HISTORY.md create mode 100644 node_modules/type-is/LICENSE create mode 100644 node_modules/type-is/README.md create mode 100644 node_modules/type-is/index.js create mode 100644 node_modules/type-is/package.json create mode 100644 node_modules/typedarray/.travis.yml create mode 100644 node_modules/typedarray/LICENSE create mode 100644 node_modules/typedarray/example/tarray.js create mode 100644 node_modules/typedarray/index.js create mode 100644 node_modules/typedarray/package.json create mode 100644 node_modules/typedarray/readme.markdown create mode 100644 node_modules/typedarray/test/server/undef_globals.js create mode 100644 node_modules/typedarray/test/tarray.js create mode 100644 node_modules/unpipe/HISTORY.md create mode 100644 node_modules/unpipe/LICENSE create mode 100644 node_modules/unpipe/README.md create mode 100644 node_modules/unpipe/index.js create mode 100644 node_modules/unpipe/package.json create mode 100644 node_modules/util-deprecate/History.md create mode 100644 node_modules/util-deprecate/LICENSE create mode 100644 node_modules/util-deprecate/README.md create mode 100644 node_modules/util-deprecate/browser.js create mode 100644 node_modules/util-deprecate/node.js create mode 100644 node_modules/util-deprecate/package.json create mode 100644 node_modules/utils-merge/.npmignore create mode 100644 node_modules/utils-merge/LICENSE create mode 100644 node_modules/utils-merge/README.md create mode 100644 node_modules/utils-merge/index.js create mode 100644 node_modules/utils-merge/package.json create mode 100644 node_modules/uuid/CHANGELOG.md create mode 100644 node_modules/uuid/CONTRIBUTING.md create mode 100644 node_modules/uuid/LICENSE.md create mode 100644 node_modules/uuid/README.md create mode 100644 node_modules/uuid/dist/bin/uuid create mode 100644 node_modules/uuid/dist/commonjs-browser/index.js create mode 100644 node_modules/uuid/dist/commonjs-browser/md5.js create mode 100644 node_modules/uuid/dist/commonjs-browser/native.js create mode 100644 node_modules/uuid/dist/commonjs-browser/nil.js create mode 100644 node_modules/uuid/dist/commonjs-browser/parse.js create mode 100644 node_modules/uuid/dist/commonjs-browser/regex.js create mode 100644 node_modules/uuid/dist/commonjs-browser/rng.js create mode 100644 node_modules/uuid/dist/commonjs-browser/sha1.js create mode 100644 node_modules/uuid/dist/commonjs-browser/stringify.js create mode 100644 node_modules/uuid/dist/commonjs-browser/v1.js create mode 100644 node_modules/uuid/dist/commonjs-browser/v3.js create mode 100644 node_modules/uuid/dist/commonjs-browser/v35.js create mode 100644 node_modules/uuid/dist/commonjs-browser/v4.js create mode 100644 node_modules/uuid/dist/commonjs-browser/v5.js create mode 100644 node_modules/uuid/dist/commonjs-browser/validate.js create mode 100644 node_modules/uuid/dist/commonjs-browser/version.js create mode 100644 node_modules/uuid/dist/esm-browser/index.js create mode 100644 node_modules/uuid/dist/esm-browser/md5.js create mode 100644 node_modules/uuid/dist/esm-browser/native.js create mode 100644 node_modules/uuid/dist/esm-browser/nil.js create mode 100644 node_modules/uuid/dist/esm-browser/parse.js create mode 100644 node_modules/uuid/dist/esm-browser/regex.js create mode 100644 node_modules/uuid/dist/esm-browser/rng.js create mode 100644 node_modules/uuid/dist/esm-browser/sha1.js create mode 100644 node_modules/uuid/dist/esm-browser/stringify.js create mode 100644 node_modules/uuid/dist/esm-browser/v1.js create mode 100644 node_modules/uuid/dist/esm-browser/v3.js create mode 100644 node_modules/uuid/dist/esm-browser/v35.js create mode 100644 node_modules/uuid/dist/esm-browser/v4.js create mode 100644 node_modules/uuid/dist/esm-browser/v5.js create mode 100644 node_modules/uuid/dist/esm-browser/validate.js create mode 100644 node_modules/uuid/dist/esm-browser/version.js create mode 100644 node_modules/uuid/dist/esm-node/index.js create mode 100644 node_modules/uuid/dist/esm-node/md5.js create mode 100644 node_modules/uuid/dist/esm-node/native.js create mode 100644 node_modules/uuid/dist/esm-node/nil.js create mode 100644 node_modules/uuid/dist/esm-node/parse.js create mode 100644 node_modules/uuid/dist/esm-node/regex.js create mode 100644 node_modules/uuid/dist/esm-node/rng.js create mode 100644 node_modules/uuid/dist/esm-node/sha1.js create mode 100644 node_modules/uuid/dist/esm-node/stringify.js create mode 100644 node_modules/uuid/dist/esm-node/v1.js create mode 100644 node_modules/uuid/dist/esm-node/v3.js create mode 100644 node_modules/uuid/dist/esm-node/v35.js create mode 100644 node_modules/uuid/dist/esm-node/v4.js create mode 100644 node_modules/uuid/dist/esm-node/v5.js create mode 100644 node_modules/uuid/dist/esm-node/validate.js create mode 100644 node_modules/uuid/dist/esm-node/version.js create mode 100644 node_modules/uuid/dist/index.js create mode 100644 node_modules/uuid/dist/md5-browser.js create mode 100644 node_modules/uuid/dist/md5.js create mode 100644 node_modules/uuid/dist/native-browser.js create mode 100644 node_modules/uuid/dist/native.js create mode 100644 node_modules/uuid/dist/nil.js create mode 100644 node_modules/uuid/dist/parse.js create mode 100644 node_modules/uuid/dist/regex.js create mode 100644 node_modules/uuid/dist/rng-browser.js create mode 100644 node_modules/uuid/dist/rng.js create mode 100644 node_modules/uuid/dist/sha1-browser.js create mode 100644 node_modules/uuid/dist/sha1.js create mode 100644 node_modules/uuid/dist/stringify.js create mode 100644 node_modules/uuid/dist/uuid-bin.js create mode 100644 node_modules/uuid/dist/v1.js create mode 100644 node_modules/uuid/dist/v3.js create mode 100644 node_modules/uuid/dist/v35.js create mode 100644 node_modules/uuid/dist/v4.js create mode 100644 node_modules/uuid/dist/v5.js create mode 100644 node_modules/uuid/dist/validate.js create mode 100644 node_modules/uuid/dist/version.js create mode 100644 node_modules/uuid/package.json create mode 100644 node_modules/uuid/wrapper.mjs create mode 100644 node_modules/vary/HISTORY.md create mode 100644 node_modules/vary/LICENSE create mode 100644 node_modules/vary/README.md create mode 100644 node_modules/vary/index.js create mode 100644 node_modules/vary/package.json create mode 100644 node_modules/ws/LICENSE create mode 100644 node_modules/ws/README.md create mode 100644 node_modules/ws/browser.js create mode 100644 node_modules/ws/index.js create mode 100644 node_modules/ws/lib/buffer-util.js create mode 100644 node_modules/ws/lib/constants.js create mode 100644 node_modules/ws/lib/event-target.js create mode 100644 node_modules/ws/lib/extension.js create mode 100644 node_modules/ws/lib/limiter.js create mode 100644 node_modules/ws/lib/permessage-deflate.js create mode 100644 node_modules/ws/lib/receiver.js create mode 100644 node_modules/ws/lib/sender.js create mode 100644 node_modules/ws/lib/stream.js create mode 100644 node_modules/ws/lib/subprotocol.js create mode 100644 node_modules/ws/lib/validation.js create mode 100644 node_modules/ws/lib/websocket-server.js create mode 100644 node_modules/ws/lib/websocket.js create mode 100644 node_modules/ws/package.json create mode 100644 node_modules/ws/wrapper.mjs create mode 100644 node_modules/xtend/.jshintrc create mode 100644 node_modules/xtend/LICENSE create mode 100644 node_modules/xtend/README.md create mode 100644 node_modules/xtend/immutable.js create mode 100644 node_modules/xtend/mutable.js create mode 100644 node_modules/xtend/package.json create mode 100644 node_modules/xtend/test.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/app.js create mode 100644 public/index.html create mode 100644 public/style.css create mode 100644 server.js diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ae8ecd3 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +node_modules +uploads +dist +*.pdf +.git +.gitignore diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..593757d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,30 @@ +FROM node:20-alpine + +WORKDIR /app + +# Copy package files and install dependencies +COPY package.json package-lock.json* ./ +RUN npm install --omit=dev + +# Copy application files +COPY server.js ./ +COPY public/ ./public/ + +# Create uploads directory +RUN mkdir -p uploads + +# Expose port +EXPOSE 3000 + +# Health check +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3000/ || exit 1 + +# Run as non-root user +RUN addgroup -g 1001 -S appgroup && \ + adduser -S appuser -u 1001 -G appgroup && \ + chown -R appuser:appgroup /app + +USER appuser + +CMD ["node", "server.js"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..402872c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,26 @@ +version: '3.8' + +services: + pdf-splitter: + build: . + container_name: pdf-splitter + restart: unless-stopped + ports: + - "3000:3000" + environment: + - PORT=3000 + # Change this to enable password protection. Leave empty or remove to disable. + - APP_PASSWORD=your_secure_password_here + # Optional: Add a second admin password for higher access level + - ADMIN_PASSWORD=your_admin_password_here + volumes: + # Optional: persist uploads across container restarts + # (files will still be auto-cleaned when users disconnect) + - pdf-uploads:/app/uploads + tmpfs: + # Use tmpfs for faster I/O on temporary uploads + - /tmp:size=512M + +volumes: + pdf-uploads: + driver: local diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime new file mode 100644 index 0000000..7751de3 --- /dev/null +++ b/node_modules/.bin/mime @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../mime/cli.js" "$@" +else + exec node "$basedir/../mime/cli.js" "$@" +fi diff --git a/node_modules/.bin/mime.cmd b/node_modules/.bin/mime.cmd new file mode 100644 index 0000000..54491f1 --- /dev/null +++ b/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/node_modules/.bin/mime.ps1 b/node_modules/.bin/mime.ps1 new file mode 100644 index 0000000..2222f40 --- /dev/null +++ b/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/node_modules/.bin/mkdirp b/node_modules/.bin/mkdirp new file mode 100644 index 0000000..1ab9c81 --- /dev/null +++ b/node_modules/.bin/mkdirp @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../mkdirp/bin/cmd.js" "$@" +else + exec node "$basedir/../mkdirp/bin/cmd.js" "$@" +fi diff --git a/node_modules/.bin/mkdirp.cmd b/node_modules/.bin/mkdirp.cmd new file mode 100644 index 0000000..a865dd9 --- /dev/null +++ b/node_modules/.bin/mkdirp.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%\..\mkdirp\bin\cmd.js" %* diff --git a/node_modules/.bin/mkdirp.ps1 b/node_modules/.bin/mkdirp.ps1 new file mode 100644 index 0000000..911e854 --- /dev/null +++ b/node_modules/.bin/mkdirp.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/../mkdirp/bin/cmd.js" $args + } else { + & "$basedir/node$exe" "$basedir/../mkdirp/bin/cmd.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../mkdirp/bin/cmd.js" $args + } else { + & "node$exe" "$basedir/../mkdirp/bin/cmd.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid new file mode 100644 index 0000000..0c2d469 --- /dev/null +++ b/node_modules/.bin/uuid @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../uuid/dist/bin/uuid" "$@" +else + exec node "$basedir/../uuid/dist/bin/uuid" "$@" +fi diff --git a/node_modules/.bin/uuid.cmd b/node_modules/.bin/uuid.cmd new file mode 100644 index 0000000..0f2376e --- /dev/null +++ b/node_modules/.bin/uuid.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%\..\uuid\dist\bin\uuid" %* diff --git a/node_modules/.bin/uuid.ps1 b/node_modules/.bin/uuid.ps1 new file mode 100644 index 0000000..7804628 --- /dev/null +++ b/node_modules/.bin/uuid.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/../uuid/dist/bin/uuid" $args + } else { + & "$basedir/node$exe" "$basedir/../uuid/dist/bin/uuid" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../uuid/dist/bin/uuid" $args + } else { + & "node$exe" "$basedir/../uuid/dist/bin/uuid" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000..24a29e5 --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,1067 @@ +{ + "name": "pdf-splitter-web", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@pdf-lib/standard-fonts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@pdf-lib/standard-fonts/-/standard-fonts-1.0.0.tgz", + "integrity": "sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.6" + } + }, + "node_modules/@pdf-lib/upng": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pdf-lib/upng/-/upng-1.0.1.tgz", + "integrity": "sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.10" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz", + "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", + "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.15.1", + "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/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "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/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "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==", + "license": "MIT", + "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.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "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.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", + "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.5", + "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.15.1", + "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/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/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "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/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/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/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/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==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "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/multer": { + "version": "1.4.5-lts.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.2.tgz", + "integrity": "sha512-VzGiVigcG9zUAoCNU+xShztrlr1auZOlurXynNvO9GiWD1/mTBbUljOKY+qMeazBqXgRnjzeEgJI/wyjJUHg9A==", + "deprecated": "Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version.", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "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/pdf-lib": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-1.17.1.tgz", + "integrity": "sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==", + "license": "MIT", + "dependencies": { + "@pdf-lib/standard-fonts": "^1.0.0", + "@pdf-lib/upng": "^1.0.1", + "pako": "^1.0.11", + "tslib": "^1.11.1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", + "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/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "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" + } + ], + "license": "MIT" + }, + "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/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/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/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "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/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "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/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "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/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ws": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + } + } +} diff --git a/node_modules/@pdf-lib/standard-fonts/LICENSE.md b/node_modules/@pdf-lib/standard-fonts/LICENSE.md new file mode 100644 index 0000000..08fbc43 --- /dev/null +++ b/node_modules/@pdf-lib/standard-fonts/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Andrew Dillon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@pdf-lib/standard-fonts/README.md b/node_modules/@pdf-lib/standard-fonts/README.md new file mode 100644 index 0000000..6249f73 --- /dev/null +++ b/node_modules/@pdf-lib/standard-fonts/README.md @@ -0,0 +1,83 @@ +

+ standard-fonts + +
+ + + + NPM Version + + + + + Prettier Badge + +

+ +> Collection of metrics and encodings for the standard 14 PDF fonts + +This project is a fork of [`afm`](https://github.com/chbrown/afm) and was created for use in [`pdf-lib`](https://github.com/Hopding/pdf-lib). This forks exists for two primary reasons: + +1. The original project did not include mappings from Unicode to WinAnsi/ZapfDingbats/Symbol encodings. +2. The font metrics included in the original project were uncompressed (not ideal for usage in `pdf-lib`). + +## Usage +```js +import { Font, FontNames, Encodings } from '@pdf-lib/standard-fonts'; + +const codePoint = '∑'.charCodeAt(0); + +const glyph = Encodings.Symbol.encodeUnicodeCodePoint(codePoint); +glyph // => { code: 229, name: 'summation' } + +const font = Font.load(FontNames.Symbol); +const width = font.getWidthOfGlyph(glyph.name); +width // => 713 +``` + +## Installation +### NPM Module +To install the latest stable version: +```bash +# With npm +npm install --save @pdf-lib/standard-fonts + +# With yarn +yarn add @pdf-lib/standard-fonts +``` +This assumes you're using [npm](https://www.npmjs.com/) or [yarn](https://yarnpkg.com/lang/en/) as your package manager. + +### UMD Module +You can also download `@pdf-lib/standard-fonts` as a UMD module from [unpkg](https://unpkg.com/#/). The UMD builds have been compiled to ES5, so they should work [in any modern browser](https://caniuse.com/#feat=es5). UMD builds are useful if you aren't using a package manager or module bundler. For example, you can use them directly in the ` \ No newline at end of file diff --git a/node_modules/tslib/tslib.es6.js b/node_modules/tslib/tslib.es6.js new file mode 100644 index 0000000..7fdec02 --- /dev/null +++ b/node_modules/tslib/tslib.es6.js @@ -0,0 +1,218 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +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. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +export function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +export var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + } + return __assign.apply(this, arguments); +} + +export function __rest(s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +} + +export function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +} + +export function __param(paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +} + +export function __metadata(metadataKey, metadataValue) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); +} + +export function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +export function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +export function __createBinding(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +} + +export function __exportStar(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p]; +} + +export function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +} + +export function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +} + +export function __spread() { + for (var ar = [], i = 0; i < arguments.length; i++) + ar = ar.concat(__read(arguments[i])); + return ar; +} + +export function __spreadArrays() { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +}; + +export function __await(v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); +} + +export function __asyncGenerator(thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } +} + +export function __asyncDelegator(o) { + var i, p; + return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } +} + +export function __asyncValues(o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +} + +export function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; +}; + +export function __importStar(mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result.default = mod; + return result; +} + +export function __importDefault(mod) { + return (mod && mod.__esModule) ? mod : { default: mod }; +} + +export function __classPrivateFieldGet(receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +} + +export function __classPrivateFieldSet(receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; +} diff --git a/node_modules/tslib/tslib.html b/node_modules/tslib/tslib.html new file mode 100644 index 0000000..44c9ba5 --- /dev/null +++ b/node_modules/tslib/tslib.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/node_modules/tslib/tslib.js b/node_modules/tslib/tslib.js new file mode 100644 index 0000000..fbce018 --- /dev/null +++ b/node_modules/tslib/tslib.js @@ -0,0 +1,284 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +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. +***************************************************************************** */ + +/* global global, define, System, Reflect, Promise */ +var __extends; +var __assign; +var __rest; +var __decorate; +var __param; +var __metadata; +var __awaiter; +var __generator; +var __exportStar; +var __values; +var __read; +var __spread; +var __spreadArrays; +var __await; +var __asyncGenerator; +var __asyncDelegator; +var __asyncValues; +var __makeTemplateObject; +var __importStar; +var __importDefault; +var __classPrivateFieldGet; +var __classPrivateFieldSet; +var __createBinding; +(function (factory) { + var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; + if (typeof define === "function" && define.amd) { + define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); }); + } + else if (typeof module === "object" && typeof module.exports === "object") { + factory(createExporter(root, createExporter(module.exports))); + } + else { + factory(createExporter(root)); + } + function createExporter(exports, previous) { + if (exports !== root) { + if (typeof Object.create === "function") { + Object.defineProperty(exports, "__esModule", { value: true }); + } + else { + exports.__esModule = true; + } + } + return function (id, v) { return exports[id] = previous ? previous(id, v) : v; }; + } +}) +(function (exporter) { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + + __extends = function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + + __rest = function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; + }; + + __decorate = function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + + __param = function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } + }; + + __metadata = function (metadataKey, metadataValue) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); + }; + + __awaiter = function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + + __generator = function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + + __createBinding = function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; + }; + + __exportStar = function (m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p]; + }; + + __values = function (o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); + }; + + __read = function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; + }; + + __spread = function () { + for (var ar = [], i = 0; i < arguments.length; i++) + ar = ar.concat(__read(arguments[i])); + return ar; + }; + + __spreadArrays = function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; + }; + + __await = function (v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); + }; + + __asyncGenerator = function (thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } + }; + + __asyncDelegator = function (o) { + var i, p; + return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } + }; + + __asyncValues = function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } + }; + + __makeTemplateObject = function (cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; + }; + + __importStar = function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; + }; + + __importDefault = function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + + __classPrivateFieldGet = function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); + }; + + __classPrivateFieldSet = function (receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; + }; + + exporter("__extends", __extends); + exporter("__assign", __assign); + exporter("__rest", __rest); + exporter("__decorate", __decorate); + exporter("__param", __param); + exporter("__metadata", __metadata); + exporter("__awaiter", __awaiter); + exporter("__generator", __generator); + exporter("__exportStar", __exportStar); + exporter("__createBinding", __createBinding); + exporter("__values", __values); + exporter("__read", __read); + exporter("__spread", __spread); + exporter("__spreadArrays", __spreadArrays); + exporter("__await", __await); + exporter("__asyncGenerator", __asyncGenerator); + exporter("__asyncDelegator", __asyncDelegator); + exporter("__asyncValues", __asyncValues); + exporter("__makeTemplateObject", __makeTemplateObject); + exporter("__importStar", __importStar); + exporter("__importDefault", __importDefault); + exporter("__classPrivateFieldGet", __classPrivateFieldGet); + exporter("__classPrivateFieldSet", __classPrivateFieldSet); +}); diff --git a/node_modules/type-is/HISTORY.md b/node_modules/type-is/HISTORY.md new file mode 100644 index 0000000..8de21f7 --- /dev/null +++ b/node_modules/type-is/HISTORY.md @@ -0,0 +1,259 @@ +1.6.18 / 2019-04-26 +=================== + + * Fix regression passing request object to `typeis.is` + +1.6.17 / 2019-04-25 +=================== + + * deps: mime-types@~2.1.24 + - Add Apple file extensions from IANA + - Add extension `.csl` to `application/vnd.citationstyles.style+xml` + - Add extension `.es` to `application/ecmascript` + - Add extension `.nq` to `application/n-quads` + - Add extension `.nt` to `application/n-triples` + - Add extension `.owl` to `application/rdf+xml` + - Add extensions `.siv` and `.sieve` to `application/sieve` + - Add extensions from IANA for `image/*` types + - Add extensions from IANA for `model/*` types + - Add extensions to HEIC image types + - Add new mime types + - Add `text/mdx` with extension `.mdx` + * perf: prevent internal `throw` on invalid type + +1.6.16 / 2018-02-16 +=================== + + * deps: mime-types@~2.1.18 + - Add `application/raml+yaml` with extension `.raml` + - Add `application/wasm` with extension `.wasm` + - Add `text/shex` with extension `.shex` + - Add extensions for JPEG-2000 images + - Add extensions from IANA for `message/*` types + - Add extension `.mjs` to `application/javascript` + - Add extension `.wadl` to `application/vnd.sun.wadl+xml` + - Add extension `.gz` to `application/gzip` + - Add glTF types and extensions + - Add new mime types + - Update extensions `.md` and `.markdown` to be `text/markdown` + - Update font MIME types + - Update `text/hjson` to registered `application/hjson` + +1.6.15 / 2017-03-31 +=================== + + * deps: mime-types@~2.1.15 + - Add new mime types + +1.6.14 / 2016-11-18 +=================== + + * deps: mime-types@~2.1.13 + - Add new mime types + +1.6.13 / 2016-05-18 +=================== + + * deps: mime-types@~2.1.11 + - Add new mime types + +1.6.12 / 2016-02-28 +=================== + + * deps: mime-types@~2.1.10 + - Add new mime types + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + +1.6.11 / 2016-01-29 +=================== + + * deps: mime-types@~2.1.9 + - Add new mime types + +1.6.10 / 2015-12-01 +=================== + + * deps: mime-types@~2.1.8 + - Add new mime types + +1.6.9 / 2015-09-27 +================== + + * deps: mime-types@~2.1.7 + - Add new mime types + +1.6.8 / 2015-09-04 +================== + + * deps: mime-types@~2.1.6 + - Add new mime types + +1.6.7 / 2015-08-20 +================== + + * Fix type error when given invalid type to match against + * deps: mime-types@~2.1.5 + - Add new mime types + +1.6.6 / 2015-07-31 +================== + + * deps: mime-types@~2.1.4 + - Add new mime types + +1.6.5 / 2015-07-16 +================== + + * deps: mime-types@~2.1.3 + - Add new mime types + +1.6.4 / 2015-07-01 +================== + + * deps: mime-types@~2.1.2 + - Add new mime types + * perf: enable strict mode + * perf: remove argument reassignment + +1.6.3 / 2015-06-08 +================== + + * deps: mime-types@~2.1.1 + - Add new mime types + * perf: reduce try block size + * perf: remove bitwise operations + +1.6.2 / 2015-05-10 +================== + + * deps: mime-types@~2.0.11 + - Add new mime types + +1.6.1 / 2015-03-13 +================== + + * deps: mime-types@~2.0.10 + - Add new mime types + +1.6.0 / 2015-02-12 +================== + + * fix false-positives in `hasBody` `Transfer-Encoding` check + * support wildcard for both type and subtype (`*/*`) + +1.5.7 / 2015-02-09 +================== + + * fix argument reassignment + * deps: mime-types@~2.0.9 + - Add new mime types + +1.5.6 / 2015-01-29 +================== + + * deps: mime-types@~2.0.8 + - Add new mime types + +1.5.5 / 2014-12-30 +================== + + * deps: mime-types@~2.0.7 + - Add new mime types + - Fix missing extensions + - Fix various invalid MIME type entries + - Remove example template MIME types + - deps: mime-db@~1.5.0 + +1.5.4 / 2014-12-10 +================== + + * deps: mime-types@~2.0.4 + - Add new mime types + - deps: mime-db@~1.3.0 + +1.5.3 / 2014-11-09 +================== + + * deps: mime-types@~2.0.3 + - Add new mime types + - deps: mime-db@~1.2.0 + +1.5.2 / 2014-09-28 +================== + + * deps: mime-types@~2.0.2 + - Add new mime types + - deps: mime-db@~1.1.0 + +1.5.1 / 2014-09-07 +================== + + * Support Node.js 0.6 + * deps: media-typer@0.3.0 + * deps: mime-types@~2.0.1 + - Support Node.js 0.6 + +1.5.0 / 2014-09-05 +================== + + * fix `hasbody` to be true for `content-length: 0` + +1.4.0 / 2014-09-02 +================== + + * update mime-types + +1.3.2 / 2014-06-24 +================== + + * use `~` range on mime-types + +1.3.1 / 2014-06-19 +================== + + * fix global variable leak + +1.3.0 / 2014-06-19 +================== + + * improve type parsing + + - invalid media type never matches + - media type not case-sensitive + - extra LWS does not affect results + +1.2.2 / 2014-06-19 +================== + + * fix behavior on unknown type argument + +1.2.1 / 2014-06-03 +================== + + * switch dependency from `mime` to `mime-types@1.0.0` + +1.2.0 / 2014-05-11 +================== + + * support suffix matching: + + - `+json` matches `application/vnd+json` + - `*/vnd+json` matches `application/vnd+json` + - `application/*+json` matches `application/vnd+json` + +1.1.0 / 2014-04-12 +================== + + * add non-array values support + * expose internal utilities: + + - `.is()` + - `.hasBody()` + - `.normalize()` + - `.match()` + +1.0.1 / 2014-03-30 +================== + + * add `multipart` as a shorthand diff --git a/node_modules/type-is/LICENSE b/node_modules/type-is/LICENSE new file mode 100644 index 0000000..386b7b6 --- /dev/null +++ b/node_modules/type-is/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/node_modules/type-is/README.md b/node_modules/type-is/README.md new file mode 100644 index 0000000..b85ef8f --- /dev/null +++ b/node_modules/type-is/README.md @@ -0,0 +1,170 @@ +# type-is + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Infer the content-type of a request. + +### Install + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install type-is +``` + +## API + +```js +var http = require('http') +var typeis = require('type-is') + +http.createServer(function (req, res) { + var istext = typeis(req, ['text/*']) + res.end('you ' + (istext ? 'sent' : 'did not send') + ' me text') +}) +``` + +### typeis(request, types) + +Checks if the `request` is one of the `types`. If the request has no body, +even if there is a `Content-Type` header, then `null` is returned. If the +`Content-Type` header is invalid or does not matches any of the `types`, then +`false` is returned. Otherwise, a string of the type that matched is returned. + +The `request` argument is expected to be a Node.js HTTP request. The `types` +argument is an array of type strings. + +Each type in the `types` array can be one of the following: + +- A file extension name such as `json`. This name will be returned if matched. +- A mime type such as `application/json`. +- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`. + The full mime type will be returned if matched. +- A suffix such as `+json`. This can be combined with a wildcard such as + `*/vnd+json` or `application/*+json`. The full mime type will be returned + if matched. + +Some examples to illustrate the inputs and returned value: + + + +```js +// req.headers.content-type = 'application/json' + +typeis(req, ['json']) // => 'json' +typeis(req, ['html', 'json']) // => 'json' +typeis(req, ['application/*']) // => 'application/json' +typeis(req, ['application/json']) // => 'application/json' + +typeis(req, ['html']) // => false +``` + +### typeis.hasBody(request) + +Returns a Boolean if the given `request` has a body, regardless of the +`Content-Type` header. + +Having a body has no relation to how large the body is (it may be 0 bytes). +This is similar to how file existence works. If a body does exist, then this +indicates that there is data to read from the Node.js request stream. + + + +```js +if (typeis.hasBody(req)) { + // read the body, since there is one + + req.on('data', function (chunk) { + // ... + }) +} +``` + +### typeis.is(mediaType, types) + +Checks if the `mediaType` is one of the `types`. If the `mediaType` is invalid +or does not matches any of the `types`, then `false` is returned. Otherwise, a +string of the type that matched is returned. + +The `mediaType` argument is expected to be a +[media type](https://tools.ietf.org/html/rfc6838) string. The `types` argument +is an array of type strings. + +Each type in the `types` array can be one of the following: + +- A file extension name such as `json`. This name will be returned if matched. +- A mime type such as `application/json`. +- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`. + The full mime type will be returned if matched. +- A suffix such as `+json`. This can be combined with a wildcard such as + `*/vnd+json` or `application/*+json`. The full mime type will be returned + if matched. + +Some examples to illustrate the inputs and returned value: + + + +```js +var mediaType = 'application/json' + +typeis.is(mediaType, ['json']) // => 'json' +typeis.is(mediaType, ['html', 'json']) // => 'json' +typeis.is(mediaType, ['application/*']) // => 'application/json' +typeis.is(mediaType, ['application/json']) // => 'application/json' + +typeis.is(mediaType, ['html']) // => false +``` + +## Examples + +### Example body parser + +```js +var express = require('express') +var typeis = require('type-is') + +var app = express() + +app.use(function bodyParser (req, res, next) { + if (!typeis.hasBody(req)) { + return next() + } + + switch (typeis(req, ['urlencoded', 'json', 'multipart'])) { + case 'urlencoded': + // parse urlencoded body + throw new Error('implement urlencoded body parsing') + case 'json': + // parse json body + throw new Error('implement json body parsing') + case 'multipart': + // parse multipart body + throw new Error('implement multipart body parsing') + default: + // 415 error code + res.statusCode = 415 + res.end() + break + } +}) +``` + +## License + +[MIT](LICENSE) + +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/type-is/master +[coveralls-url]: https://coveralls.io/r/jshttp/type-is?branch=master +[node-version-image]: https://badgen.net/npm/node/type-is +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/type-is +[npm-url]: https://npmjs.org/package/type-is +[npm-version-image]: https://badgen.net/npm/v/type-is +[travis-image]: https://badgen.net/travis/jshttp/type-is/master +[travis-url]: https://travis-ci.org/jshttp/type-is diff --git a/node_modules/type-is/index.js b/node_modules/type-is/index.js new file mode 100644 index 0000000..890ad76 --- /dev/null +++ b/node_modules/type-is/index.js @@ -0,0 +1,266 @@ +/*! + * type-is + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var typer = require('media-typer') +var mime = require('mime-types') + +/** + * Module exports. + * @public + */ + +module.exports = typeofrequest +module.exports.is = typeis +module.exports.hasBody = hasbody +module.exports.normalize = normalize +module.exports.match = mimeMatch + +/** + * Compare a `value` content-type with `types`. + * Each `type` can be an extension like `html`, + * a special shortcut like `multipart` or `urlencoded`, + * or a mime type. + * + * If no types match, `false` is returned. + * Otherwise, the first `type` that matches is returned. + * + * @param {String} value + * @param {Array} types + * @public + */ + +function typeis (value, types_) { + var i + var types = types_ + + // remove parameters and normalize + var val = tryNormalizeType(value) + + // no type or invalid + if (!val) { + return false + } + + // support flattened arguments + if (types && !Array.isArray(types)) { + types = new Array(arguments.length - 1) + for (i = 0; i < types.length; i++) { + types[i] = arguments[i + 1] + } + } + + // no types, return the content type + if (!types || !types.length) { + return val + } + + var type + for (i = 0; i < types.length; i++) { + if (mimeMatch(normalize(type = types[i]), val)) { + return type[0] === '+' || type.indexOf('*') !== -1 + ? val + : type + } + } + + // no matches + return false +} + +/** + * Check if a request has a request body. + * A request with a body __must__ either have `transfer-encoding` + * or `content-length` headers set. + * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3 + * + * @param {Object} request + * @return {Boolean} + * @public + */ + +function hasbody (req) { + return req.headers['transfer-encoding'] !== undefined || + !isNaN(req.headers['content-length']) +} + +/** + * Check if the incoming request contains the "Content-Type" + * header field, and it contains any of the give mime `type`s. + * If there is no request body, `null` is returned. + * If there is no content type, `false` is returned. + * Otherwise, it returns the first `type` that matches. + * + * Examples: + * + * // With Content-Type: text/html; charset=utf-8 + * this.is('html'); // => 'html' + * this.is('text/html'); // => 'text/html' + * this.is('text/*', 'application/json'); // => 'text/html' + * + * // When Content-Type is application/json + * this.is('json', 'urlencoded'); // => 'json' + * this.is('application/json'); // => 'application/json' + * this.is('html', 'application/*'); // => 'application/json' + * + * this.is('html'); // => false + * + * @param {String|Array} types... + * @return {String|false|null} + * @public + */ + +function typeofrequest (req, types_) { + var types = types_ + + // no body + if (!hasbody(req)) { + return null + } + + // support flattened arguments + if (arguments.length > 2) { + types = new Array(arguments.length - 1) + for (var i = 0; i < types.length; i++) { + types[i] = arguments[i + 1] + } + } + + // request content type + var value = req.headers['content-type'] + + return typeis(value, types) +} + +/** + * Normalize a mime type. + * If it's a shorthand, expand it to a valid mime type. + * + * In general, you probably want: + * + * var type = is(req, ['urlencoded', 'json', 'multipart']); + * + * Then use the appropriate body parsers. + * These three are the most common request body types + * and are thus ensured to work. + * + * @param {String} type + * @private + */ + +function normalize (type) { + if (typeof type !== 'string') { + // invalid type + return false + } + + switch (type) { + case 'urlencoded': + return 'application/x-www-form-urlencoded' + case 'multipart': + return 'multipart/*' + } + + if (type[0] === '+') { + // "+json" -> "*/*+json" expando + return '*/*' + type + } + + return type.indexOf('/') === -1 + ? mime.lookup(type) + : type +} + +/** + * Check if `expected` mime type + * matches `actual` mime type with + * wildcard and +suffix support. + * + * @param {String} expected + * @param {String} actual + * @return {Boolean} + * @private + */ + +function mimeMatch (expected, actual) { + // invalid type + if (expected === false) { + return false + } + + // split types + var actualParts = actual.split('/') + var expectedParts = expected.split('/') + + // invalid format + if (actualParts.length !== 2 || expectedParts.length !== 2) { + return false + } + + // validate type + if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) { + return false + } + + // validate suffix wildcard + if (expectedParts[1].substr(0, 2) === '*+') { + return expectedParts[1].length <= actualParts[1].length + 1 && + expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length) + } + + // validate subtype + if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) { + return false + } + + return true +} + +/** + * Normalize a type and remove parameters. + * + * @param {string} value + * @return {string} + * @private + */ + +function normalizeType (value) { + // parse the type + var type = typer.parse(value) + + // remove the parameters + type.parameters = undefined + + // reformat it + return typer.format(type) +} + +/** + * Try to normalize a type and remove parameters. + * + * @param {string} value + * @return {string} + * @private + */ + +function tryNormalizeType (value) { + if (!value) { + return null + } + + try { + return normalizeType(value) + } catch (err) { + return null + } +} diff --git a/node_modules/type-is/package.json b/node_modules/type-is/package.json new file mode 100644 index 0000000..97ba5f1 --- /dev/null +++ b/node_modules/type-is/package.json @@ -0,0 +1,45 @@ +{ + "name": "type-is", + "description": "Infer the content-type of a request.", + "version": "1.6.18", + "contributors": [ + "Douglas Christopher Wilson ", + "Jonathan Ong (http://jongleberry.com)" + ], + "license": "MIT", + "repository": "jshttp/type-is", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "devDependencies": { + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", + "mocha": "6.1.4", + "nyc": "14.0.0" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "index.js" + ], + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "test-travis": "nyc --reporter=text npm test" + }, + "keywords": [ + "content", + "type", + "checking" + ] +} diff --git a/node_modules/typedarray/.travis.yml b/node_modules/typedarray/.travis.yml new file mode 100644 index 0000000..cc4dba2 --- /dev/null +++ b/node_modules/typedarray/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.8" + - "0.10" diff --git a/node_modules/typedarray/LICENSE b/node_modules/typedarray/LICENSE new file mode 100644 index 0000000..11adfae --- /dev/null +++ b/node_modules/typedarray/LICENSE @@ -0,0 +1,35 @@ +/* + Copyright (c) 2010, Linden Research, Inc. + Copyright (c) 2012, Joshua Bell + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + $/LicenseInfo$ + */ + +// Original can be found at: +// https://bitbucket.org/lindenlab/llsd +// Modifications by Joshua Bell inexorabletash@gmail.com +// https://github.com/inexorabletash/polyfill + +// ES3/ES5 implementation of the Krhonos Typed Array Specification +// Ref: http://www.khronos.org/registry/typedarray/specs/latest/ +// Date: 2011-02-01 +// +// Variations: +// * Allows typed_array.get/set() as alias for subscripts (typed_array[]) diff --git a/node_modules/typedarray/example/tarray.js b/node_modules/typedarray/example/tarray.js new file mode 100644 index 0000000..8423d7c --- /dev/null +++ b/node_modules/typedarray/example/tarray.js @@ -0,0 +1,4 @@ +var Uint8Array = require('../').Uint8Array; +var ua = new Uint8Array(5); +ua[1] = 256 + 55; +console.log(ua[1]); diff --git a/node_modules/typedarray/index.js b/node_modules/typedarray/index.js new file mode 100644 index 0000000..5e54084 --- /dev/null +++ b/node_modules/typedarray/index.js @@ -0,0 +1,630 @@ +var undefined = (void 0); // Paranoia + +// Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to +// create, and consume so much memory, that the browser appears frozen. +var MAX_ARRAY_LENGTH = 1e5; + +// Approximations of internal ECMAScript conversion functions +var ECMAScript = (function() { + // Stash a copy in case other scripts modify these + var opts = Object.prototype.toString, + ophop = Object.prototype.hasOwnProperty; + + return { + // Class returns internal [[Class]] property, used to avoid cross-frame instanceof issues: + Class: function(v) { return opts.call(v).replace(/^\[object *|\]$/g, ''); }, + HasProperty: function(o, p) { return p in o; }, + HasOwnProperty: function(o, p) { return ophop.call(o, p); }, + IsCallable: function(o) { return typeof o === 'function'; }, + ToInt32: function(v) { return v >> 0; }, + ToUint32: function(v) { return v >>> 0; } + }; +}()); + +// Snapshot intrinsics +var LN2 = Math.LN2, + abs = Math.abs, + floor = Math.floor, + log = Math.log, + min = Math.min, + pow = Math.pow, + round = Math.round; + +// ES5: lock down object properties +function configureProperties(obj) { + if (getOwnPropNames && defineProp) { + var props = getOwnPropNames(obj), i; + for (i = 0; i < props.length; i += 1) { + defineProp(obj, props[i], { + value: obj[props[i]], + writable: false, + enumerable: false, + configurable: false + }); + } + } +} + +// emulate ES5 getter/setter API using legacy APIs +// http://blogs.msdn.com/b/ie/archive/2010/09/07/transitioning-existing-code-to-the-es5-getter-setter-apis.aspx +// (second clause tests for Object.defineProperty() in IE<9 that only supports extending DOM prototypes, but +// note that IE<9 does not support __defineGetter__ or __defineSetter__ so it just renders the method harmless) +var defineProp +if (Object.defineProperty && (function() { + try { + Object.defineProperty({}, 'x', {}); + return true; + } catch (e) { + return false; + } + })()) { + defineProp = Object.defineProperty; +} else { + defineProp = function(o, p, desc) { + if (!o === Object(o)) throw new TypeError("Object.defineProperty called on non-object"); + if (ECMAScript.HasProperty(desc, 'get') && Object.prototype.__defineGetter__) { Object.prototype.__defineGetter__.call(o, p, desc.get); } + if (ECMAScript.HasProperty(desc, 'set') && Object.prototype.__defineSetter__) { Object.prototype.__defineSetter__.call(o, p, desc.set); } + if (ECMAScript.HasProperty(desc, 'value')) { o[p] = desc.value; } + return o; + }; +} + +var getOwnPropNames = Object.getOwnPropertyNames || function (o) { + if (o !== Object(o)) throw new TypeError("Object.getOwnPropertyNames called on non-object"); + var props = [], p; + for (p in o) { + if (ECMAScript.HasOwnProperty(o, p)) { + props.push(p); + } + } + return props; +}; + +// ES5: Make obj[index] an alias for obj._getter(index)/obj._setter(index, value) +// for index in 0 ... obj.length +function makeArrayAccessors(obj) { + if (!defineProp) { return; } + + if (obj.length > MAX_ARRAY_LENGTH) throw new RangeError("Array too large for polyfill"); + + function makeArrayAccessor(index) { + defineProp(obj, index, { + 'get': function() { return obj._getter(index); }, + 'set': function(v) { obj._setter(index, v); }, + enumerable: true, + configurable: false + }); + } + + var i; + for (i = 0; i < obj.length; i += 1) { + makeArrayAccessor(i); + } +} + +// Internal conversion functions: +// pack() - take a number (interpreted as Type), output a byte array +// unpack() - take a byte array, output a Type-like number + +function as_signed(value, bits) { var s = 32 - bits; return (value << s) >> s; } +function as_unsigned(value, bits) { var s = 32 - bits; return (value << s) >>> s; } + +function packI8(n) { return [n & 0xff]; } +function unpackI8(bytes) { return as_signed(bytes[0], 8); } + +function packU8(n) { return [n & 0xff]; } +function unpackU8(bytes) { return as_unsigned(bytes[0], 8); } + +function packU8Clamped(n) { n = round(Number(n)); return [n < 0 ? 0 : n > 0xff ? 0xff : n & 0xff]; } + +function packI16(n) { return [(n >> 8) & 0xff, n & 0xff]; } +function unpackI16(bytes) { return as_signed(bytes[0] << 8 | bytes[1], 16); } + +function packU16(n) { return [(n >> 8) & 0xff, n & 0xff]; } +function unpackU16(bytes) { return as_unsigned(bytes[0] << 8 | bytes[1], 16); } + +function packI32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; } +function unpackI32(bytes) { return as_signed(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); } + +function packU32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; } +function unpackU32(bytes) { return as_unsigned(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); } + +function packIEEE754(v, ebits, fbits) { + + var bias = (1 << (ebits - 1)) - 1, + s, e, f, ln, + i, bits, str, bytes; + + function roundToEven(n) { + var w = floor(n), f = n - w; + if (f < 0.5) + return w; + if (f > 0.5) + return w + 1; + return w % 2 ? w + 1 : w; + } + + // Compute sign, exponent, fraction + if (v !== v) { + // NaN + // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping + e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0; + } else if (v === Infinity || v === -Infinity) { + e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0; + } else if (v === 0) { + e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0; + } else { + s = v < 0; + v = abs(v); + + if (v >= pow(2, 1 - bias)) { + e = min(floor(log(v) / LN2), 1023); + f = roundToEven(v / pow(2, e) * pow(2, fbits)); + if (f / pow(2, fbits) >= 2) { + e = e + 1; + f = 1; + } + if (e > bias) { + // Overflow + e = (1 << ebits) - 1; + f = 0; + } else { + // Normalized + e = e + bias; + f = f - pow(2, fbits); + } + } else { + // Denormalized + e = 0; + f = roundToEven(v / pow(2, 1 - bias - fbits)); + } + } + + // Pack sign, exponent, fraction + bits = []; + for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); } + for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); } + bits.push(s ? 1 : 0); + bits.reverse(); + str = bits.join(''); + + // Bits to bytes + bytes = []; + while (str.length) { + bytes.push(parseInt(str.substring(0, 8), 2)); + str = str.substring(8); + } + return bytes; +} + +function unpackIEEE754(bytes, ebits, fbits) { + + // Bytes to bits + var bits = [], i, j, b, str, + bias, s, e, f; + + for (i = bytes.length; i; i -= 1) { + b = bytes[i - 1]; + for (j = 8; j; j -= 1) { + bits.push(b % 2 ? 1 : 0); b = b >> 1; + } + } + bits.reverse(); + str = bits.join(''); + + // Unpack sign, exponent, fraction + bias = (1 << (ebits - 1)) - 1; + s = parseInt(str.substring(0, 1), 2) ? -1 : 1; + e = parseInt(str.substring(1, 1 + ebits), 2); + f = parseInt(str.substring(1 + ebits), 2); + + // Produce number + if (e === (1 << ebits) - 1) { + return f !== 0 ? NaN : s * Infinity; + } else if (e > 0) { + // Normalized + return s * pow(2, e - bias) * (1 + f / pow(2, fbits)); + } else if (f !== 0) { + // Denormalized + return s * pow(2, -(bias - 1)) * (f / pow(2, fbits)); + } else { + return s < 0 ? -0 : 0; + } +} + +function unpackF64(b) { return unpackIEEE754(b, 11, 52); } +function packF64(v) { return packIEEE754(v, 11, 52); } +function unpackF32(b) { return unpackIEEE754(b, 8, 23); } +function packF32(v) { return packIEEE754(v, 8, 23); } + + +// +// 3 The ArrayBuffer Type +// + +(function() { + + /** @constructor */ + var ArrayBuffer = function ArrayBuffer(length) { + length = ECMAScript.ToInt32(length); + if (length < 0) throw new RangeError('ArrayBuffer size is not a small enough positive integer'); + + this.byteLength = length; + this._bytes = []; + this._bytes.length = length; + + var i; + for (i = 0; i < this.byteLength; i += 1) { + this._bytes[i] = 0; + } + + configureProperties(this); + }; + + exports.ArrayBuffer = exports.ArrayBuffer || ArrayBuffer; + + // + // 4 The ArrayBufferView Type + // + + // NOTE: this constructor is not exported + /** @constructor */ + var ArrayBufferView = function ArrayBufferView() { + //this.buffer = null; + //this.byteOffset = 0; + //this.byteLength = 0; + }; + + // + // 5 The Typed Array View Types + // + + function makeConstructor(bytesPerElement, pack, unpack) { + // Each TypedArray type requires a distinct constructor instance with + // identical logic, which this produces. + + var ctor; + ctor = function(buffer, byteOffset, length) { + var array, sequence, i, s; + + if (!arguments.length || typeof arguments[0] === 'number') { + // Constructor(unsigned long length) + this.length = ECMAScript.ToInt32(arguments[0]); + if (length < 0) throw new RangeError('ArrayBufferView size is not a small enough positive integer'); + + this.byteLength = this.length * this.BYTES_PER_ELEMENT; + this.buffer = new ArrayBuffer(this.byteLength); + this.byteOffset = 0; + } else if (typeof arguments[0] === 'object' && arguments[0].constructor === ctor) { + // Constructor(TypedArray array) + array = arguments[0]; + + this.length = array.length; + this.byteLength = this.length * this.BYTES_PER_ELEMENT; + this.buffer = new ArrayBuffer(this.byteLength); + this.byteOffset = 0; + + for (i = 0; i < this.length; i += 1) { + this._setter(i, array._getter(i)); + } + } else if (typeof arguments[0] === 'object' && + !(arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) { + // Constructor(sequence array) + sequence = arguments[0]; + + this.length = ECMAScript.ToUint32(sequence.length); + this.byteLength = this.length * this.BYTES_PER_ELEMENT; + this.buffer = new ArrayBuffer(this.byteLength); + this.byteOffset = 0; + + for (i = 0; i < this.length; i += 1) { + s = sequence[i]; + this._setter(i, Number(s)); + } + } else if (typeof arguments[0] === 'object' && + (arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) { + // Constructor(ArrayBuffer buffer, + // optional unsigned long byteOffset, optional unsigned long length) + this.buffer = buffer; + + this.byteOffset = ECMAScript.ToUint32(byteOffset); + if (this.byteOffset > this.buffer.byteLength) { + throw new RangeError("byteOffset out of range"); + } + + if (this.byteOffset % this.BYTES_PER_ELEMENT) { + // The given byteOffset must be a multiple of the element + // size of the specific type, otherwise an exception is raised. + throw new RangeError("ArrayBuffer length minus the byteOffset is not a multiple of the element size."); + } + + if (arguments.length < 3) { + this.byteLength = this.buffer.byteLength - this.byteOffset; + + if (this.byteLength % this.BYTES_PER_ELEMENT) { + throw new RangeError("length of buffer minus byteOffset not a multiple of the element size"); + } + this.length = this.byteLength / this.BYTES_PER_ELEMENT; + } else { + this.length = ECMAScript.ToUint32(length); + this.byteLength = this.length * this.BYTES_PER_ELEMENT; + } + + if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) { + throw new RangeError("byteOffset and length reference an area beyond the end of the buffer"); + } + } else { + throw new TypeError("Unexpected argument type(s)"); + } + + this.constructor = ctor; + + configureProperties(this); + makeArrayAccessors(this); + }; + + ctor.prototype = new ArrayBufferView(); + ctor.prototype.BYTES_PER_ELEMENT = bytesPerElement; + ctor.prototype._pack = pack; + ctor.prototype._unpack = unpack; + ctor.BYTES_PER_ELEMENT = bytesPerElement; + + // getter type (unsigned long index); + ctor.prototype._getter = function(index) { + if (arguments.length < 1) throw new SyntaxError("Not enough arguments"); + + index = ECMAScript.ToUint32(index); + if (index >= this.length) { + return undefined; + } + + var bytes = [], i, o; + for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT; + i < this.BYTES_PER_ELEMENT; + i += 1, o += 1) { + bytes.push(this.buffer._bytes[o]); + } + return this._unpack(bytes); + }; + + // NONSTANDARD: convenience alias for getter: type get(unsigned long index); + ctor.prototype.get = ctor.prototype._getter; + + // setter void (unsigned long index, type value); + ctor.prototype._setter = function(index, value) { + if (arguments.length < 2) throw new SyntaxError("Not enough arguments"); + + index = ECMAScript.ToUint32(index); + if (index >= this.length) { + return undefined; + } + + var bytes = this._pack(value), i, o; + for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT; + i < this.BYTES_PER_ELEMENT; + i += 1, o += 1) { + this.buffer._bytes[o] = bytes[i]; + } + }; + + // void set(TypedArray array, optional unsigned long offset); + // void set(sequence array, optional unsigned long offset); + ctor.prototype.set = function(index, value) { + if (arguments.length < 1) throw new SyntaxError("Not enough arguments"); + var array, sequence, offset, len, + i, s, d, + byteOffset, byteLength, tmp; + + if (typeof arguments[0] === 'object' && arguments[0].constructor === this.constructor) { + // void set(TypedArray array, optional unsigned long offset); + array = arguments[0]; + offset = ECMAScript.ToUint32(arguments[1]); + + if (offset + array.length > this.length) { + throw new RangeError("Offset plus length of array is out of range"); + } + + byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT; + byteLength = array.length * this.BYTES_PER_ELEMENT; + + if (array.buffer === this.buffer) { + tmp = []; + for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) { + tmp[i] = array.buffer._bytes[s]; + } + for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) { + this.buffer._bytes[d] = tmp[i]; + } + } else { + for (i = 0, s = array.byteOffset, d = byteOffset; + i < byteLength; i += 1, s += 1, d += 1) { + this.buffer._bytes[d] = array.buffer._bytes[s]; + } + } + } else if (typeof arguments[0] === 'object' && typeof arguments[0].length !== 'undefined') { + // void set(sequence array, optional unsigned long offset); + sequence = arguments[0]; + len = ECMAScript.ToUint32(sequence.length); + offset = ECMAScript.ToUint32(arguments[1]); + + if (offset + len > this.length) { + throw new RangeError("Offset plus length of array is out of range"); + } + + for (i = 0; i < len; i += 1) { + s = sequence[i]; + this._setter(offset + i, Number(s)); + } + } else { + throw new TypeError("Unexpected argument type(s)"); + } + }; + + // TypedArray subarray(long begin, optional long end); + ctor.prototype.subarray = function(start, end) { + function clamp(v, min, max) { return v < min ? min : v > max ? max : v; } + + start = ECMAScript.ToInt32(start); + end = ECMAScript.ToInt32(end); + + if (arguments.length < 1) { start = 0; } + if (arguments.length < 2) { end = this.length; } + + if (start < 0) { start = this.length + start; } + if (end < 0) { end = this.length + end; } + + start = clamp(start, 0, this.length); + end = clamp(end, 0, this.length); + + var len = end - start; + if (len < 0) { + len = 0; + } + + return new this.constructor( + this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len); + }; + + return ctor; + } + + var Int8Array = makeConstructor(1, packI8, unpackI8); + var Uint8Array = makeConstructor(1, packU8, unpackU8); + var Uint8ClampedArray = makeConstructor(1, packU8Clamped, unpackU8); + var Int16Array = makeConstructor(2, packI16, unpackI16); + var Uint16Array = makeConstructor(2, packU16, unpackU16); + var Int32Array = makeConstructor(4, packI32, unpackI32); + var Uint32Array = makeConstructor(4, packU32, unpackU32); + var Float32Array = makeConstructor(4, packF32, unpackF32); + var Float64Array = makeConstructor(8, packF64, unpackF64); + + exports.Int8Array = exports.Int8Array || Int8Array; + exports.Uint8Array = exports.Uint8Array || Uint8Array; + exports.Uint8ClampedArray = exports.Uint8ClampedArray || Uint8ClampedArray; + exports.Int16Array = exports.Int16Array || Int16Array; + exports.Uint16Array = exports.Uint16Array || Uint16Array; + exports.Int32Array = exports.Int32Array || Int32Array; + exports.Uint32Array = exports.Uint32Array || Uint32Array; + exports.Float32Array = exports.Float32Array || Float32Array; + exports.Float64Array = exports.Float64Array || Float64Array; +}()); + +// +// 6 The DataView View Type +// + +(function() { + function r(array, index) { + return ECMAScript.IsCallable(array.get) ? array.get(index) : array[index]; + } + + var IS_BIG_ENDIAN = (function() { + var u16array = new(exports.Uint16Array)([0x1234]), + u8array = new(exports.Uint8Array)(u16array.buffer); + return r(u8array, 0) === 0x12; + }()); + + // Constructor(ArrayBuffer buffer, + // optional unsigned long byteOffset, + // optional unsigned long byteLength) + /** @constructor */ + var DataView = function DataView(buffer, byteOffset, byteLength) { + if (arguments.length === 0) { + buffer = new exports.ArrayBuffer(0); + } else if (!(buffer instanceof exports.ArrayBuffer || ECMAScript.Class(buffer) === 'ArrayBuffer')) { + throw new TypeError("TypeError"); + } + + this.buffer = buffer || new exports.ArrayBuffer(0); + + this.byteOffset = ECMAScript.ToUint32(byteOffset); + if (this.byteOffset > this.buffer.byteLength) { + throw new RangeError("byteOffset out of range"); + } + + if (arguments.length < 3) { + this.byteLength = this.buffer.byteLength - this.byteOffset; + } else { + this.byteLength = ECMAScript.ToUint32(byteLength); + } + + if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) { + throw new RangeError("byteOffset and length reference an area beyond the end of the buffer"); + } + + configureProperties(this); + }; + + function makeGetter(arrayType) { + return function(byteOffset, littleEndian) { + + byteOffset = ECMAScript.ToUint32(byteOffset); + + if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) { + throw new RangeError("Array index out of range"); + } + byteOffset += this.byteOffset; + + var uint8Array = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT), + bytes = [], i; + for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) { + bytes.push(r(uint8Array, i)); + } + + if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) { + bytes.reverse(); + } + + return r(new arrayType(new exports.Uint8Array(bytes).buffer), 0); + }; + } + + DataView.prototype.getUint8 = makeGetter(exports.Uint8Array); + DataView.prototype.getInt8 = makeGetter(exports.Int8Array); + DataView.prototype.getUint16 = makeGetter(exports.Uint16Array); + DataView.prototype.getInt16 = makeGetter(exports.Int16Array); + DataView.prototype.getUint32 = makeGetter(exports.Uint32Array); + DataView.prototype.getInt32 = makeGetter(exports.Int32Array); + DataView.prototype.getFloat32 = makeGetter(exports.Float32Array); + DataView.prototype.getFloat64 = makeGetter(exports.Float64Array); + + function makeSetter(arrayType) { + return function(byteOffset, value, littleEndian) { + + byteOffset = ECMAScript.ToUint32(byteOffset); + if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) { + throw new RangeError("Array index out of range"); + } + + // Get bytes + var typeArray = new arrayType([value]), + byteArray = new exports.Uint8Array(typeArray.buffer), + bytes = [], i, byteView; + + for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) { + bytes.push(r(byteArray, i)); + } + + // Flip if necessary + if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) { + bytes.reverse(); + } + + // Write them + byteView = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT); + byteView.set(bytes); + }; + } + + DataView.prototype.setUint8 = makeSetter(exports.Uint8Array); + DataView.prototype.setInt8 = makeSetter(exports.Int8Array); + DataView.prototype.setUint16 = makeSetter(exports.Uint16Array); + DataView.prototype.setInt16 = makeSetter(exports.Int16Array); + DataView.prototype.setUint32 = makeSetter(exports.Uint32Array); + DataView.prototype.setInt32 = makeSetter(exports.Int32Array); + DataView.prototype.setFloat32 = makeSetter(exports.Float32Array); + DataView.prototype.setFloat64 = makeSetter(exports.Float64Array); + + exports.DataView = exports.DataView || DataView; + +}()); diff --git a/node_modules/typedarray/package.json b/node_modules/typedarray/package.json new file mode 100644 index 0000000..a7854a0 --- /dev/null +++ b/node_modules/typedarray/package.json @@ -0,0 +1,55 @@ +{ + "name": "typedarray", + "version": "0.0.6", + "description": "TypedArray polyfill for old browsers", + "main": "index.js", + "devDependencies": { + "tape": "~2.3.2" + }, + "scripts": { + "test": "tape test/*.js test/server/*.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/substack/typedarray.git" + }, + "homepage": "https://github.com/substack/typedarray", + "keywords": [ + "ArrayBuffer", + "DataView", + "Float32Array", + "Float64Array", + "Int8Array", + "Int16Array", + "Int32Array", + "Uint8Array", + "Uint8ClampedArray", + "Uint16Array", + "Uint32Array", + "typed", + "array", + "polyfill" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "license": "MIT", + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "firefox/16..latest", + "firefox/nightly", + "chrome/22..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + } +} diff --git a/node_modules/typedarray/readme.markdown b/node_modules/typedarray/readme.markdown new file mode 100644 index 0000000..d18f6f7 --- /dev/null +++ b/node_modules/typedarray/readme.markdown @@ -0,0 +1,61 @@ +# typedarray + +TypedArray polyfill ripped from [this +module](https://raw.github.com/inexorabletash/polyfill). + +[![build status](https://secure.travis-ci.org/substack/typedarray.png)](http://travis-ci.org/substack/typedarray) + +[![testling badge](https://ci.testling.com/substack/typedarray.png)](https://ci.testling.com/substack/typedarray) + +# example + +``` js +var Uint8Array = require('typedarray').Uint8Array; +var ua = new Uint8Array(5); +ua[1] = 256 + 55; +console.log(ua[1]); +``` + +output: + +``` +55 +``` + +# methods + +``` js +var TA = require('typedarray') +``` + +The `TA` object has the following constructors: + +* TA.ArrayBuffer +* TA.DataView +* TA.Float32Array +* TA.Float64Array +* TA.Int8Array +* TA.Int16Array +* TA.Int32Array +* TA.Uint8Array +* TA.Uint8ClampedArray +* TA.Uint16Array +* TA.Uint32Array + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install typedarray +``` + +To use this module in the browser, compile with +[browserify](http://browserify.org) +or download a UMD build from browserify CDN: + +http://wzrd.in/standalone/typedarray@latest + +# license + +MIT diff --git a/node_modules/typedarray/test/server/undef_globals.js b/node_modules/typedarray/test/server/undef_globals.js new file mode 100644 index 0000000..425950f --- /dev/null +++ b/node_modules/typedarray/test/server/undef_globals.js @@ -0,0 +1,19 @@ +var test = require('tape'); +var vm = require('vm'); +var fs = require('fs'); +var src = fs.readFileSync(__dirname + '/../../index.js', 'utf8'); + +test('u8a without globals', function (t) { + var c = { + module: { exports: {} }, + }; + c.exports = c.module.exports; + vm.runInNewContext(src, c); + var TA = c.module.exports; + var ua = new(TA.Uint8Array)(5); + + t.equal(ua.length, 5); + ua[1] = 256 + 55; + t.equal(ua[1], 55); + t.end(); +}); diff --git a/node_modules/typedarray/test/tarray.js b/node_modules/typedarray/test/tarray.js new file mode 100644 index 0000000..df596a3 --- /dev/null +++ b/node_modules/typedarray/test/tarray.js @@ -0,0 +1,10 @@ +var TA = require('../'); +var test = require('tape'); + +test('tiny u8a test', function (t) { + var ua = new(TA.Uint8Array)(5); + t.equal(ua.length, 5); + ua[1] = 256 + 55; + t.equal(ua[1], 55); + t.end(); +}); diff --git a/node_modules/unpipe/HISTORY.md b/node_modules/unpipe/HISTORY.md new file mode 100644 index 0000000..85e0f8d --- /dev/null +++ b/node_modules/unpipe/HISTORY.md @@ -0,0 +1,4 @@ +1.0.0 / 2015-06-14 +================== + + * Initial release diff --git a/node_modules/unpipe/LICENSE b/node_modules/unpipe/LICENSE new file mode 100644 index 0000000..aed0138 --- /dev/null +++ b/node_modules/unpipe/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/node_modules/unpipe/README.md b/node_modules/unpipe/README.md new file mode 100644 index 0000000..e536ad2 --- /dev/null +++ b/node_modules/unpipe/README.md @@ -0,0 +1,43 @@ +# unpipe + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Unpipe a stream from all destinations. + +## Installation + +```sh +$ npm install unpipe +``` + +## API + +```js +var unpipe = require('unpipe') +``` + +### unpipe(stream) + +Unpipes all destinations from a given stream. With stream 2+, this is +equivalent to `stream.unpipe()`. When used with streams 1 style streams +(typically Node.js 0.8 and below), this module attempts to undo the +actions done in `stream.pipe(dest)`. + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/unpipe.svg +[npm-url]: https://npmjs.org/package/unpipe +[node-image]: https://img.shields.io/node/v/unpipe.svg +[node-url]: http://nodejs.org/download/ +[travis-image]: https://img.shields.io/travis/stream-utils/unpipe.svg +[travis-url]: https://travis-ci.org/stream-utils/unpipe +[coveralls-image]: https://img.shields.io/coveralls/stream-utils/unpipe.svg +[coveralls-url]: https://coveralls.io/r/stream-utils/unpipe?branch=master +[downloads-image]: https://img.shields.io/npm/dm/unpipe.svg +[downloads-url]: https://npmjs.org/package/unpipe diff --git a/node_modules/unpipe/index.js b/node_modules/unpipe/index.js new file mode 100644 index 0000000..15c3d97 --- /dev/null +++ b/node_modules/unpipe/index.js @@ -0,0 +1,69 @@ +/*! + * unpipe + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + * @public + */ + +module.exports = unpipe + +/** + * Determine if there are Node.js pipe-like data listeners. + * @private + */ + +function hasPipeDataListeners(stream) { + var listeners = stream.listeners('data') + + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].name === 'ondata') { + return true + } + } + + return false +} + +/** + * Unpipe a stream from all destinations. + * + * @param {object} stream + * @public + */ + +function unpipe(stream) { + if (!stream) { + throw new TypeError('argument stream is required') + } + + if (typeof stream.unpipe === 'function') { + // new-style + stream.unpipe() + return + } + + // Node.js 0.8 hack + if (!hasPipeDataListeners(stream)) { + return + } + + var listener + var listeners = stream.listeners('close') + + for (var i = 0; i < listeners.length; i++) { + listener = listeners[i] + + if (listener.name !== 'cleanup' && listener.name !== 'onclose') { + continue + } + + // invoke the listener + listener.call(stream) + } +} diff --git a/node_modules/unpipe/package.json b/node_modules/unpipe/package.json new file mode 100644 index 0000000..a2b7358 --- /dev/null +++ b/node_modules/unpipe/package.json @@ -0,0 +1,27 @@ +{ + "name": "unpipe", + "description": "Unpipe a stream from all destinations", + "version": "1.0.0", + "author": "Douglas Christopher Wilson ", + "license": "MIT", + "repository": "stream-utils/unpipe", + "devDependencies": { + "istanbul": "0.3.15", + "mocha": "2.2.5", + "readable-stream": "1.1.13" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js" + ], + "engines": { + "node": ">= 0.8" + }, + "scripts": { + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + } +} diff --git a/node_modules/util-deprecate/History.md b/node_modules/util-deprecate/History.md new file mode 100644 index 0000000..acc8675 --- /dev/null +++ b/node_modules/util-deprecate/History.md @@ -0,0 +1,16 @@ + +1.0.2 / 2015-10-07 +================== + + * use try/catch when checking `localStorage` (#3, @kumavis) + +1.0.1 / 2014-11-25 +================== + + * browser: use `console.warn()` for deprecation calls + * browser: more jsdocs + +1.0.0 / 2014-04-30 +================== + + * initial commit diff --git a/node_modules/util-deprecate/LICENSE b/node_modules/util-deprecate/LICENSE new file mode 100644 index 0000000..6a60e8c --- /dev/null +++ b/node_modules/util-deprecate/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/util-deprecate/README.md b/node_modules/util-deprecate/README.md new file mode 100644 index 0000000..75622fa --- /dev/null +++ b/node_modules/util-deprecate/README.md @@ -0,0 +1,53 @@ +util-deprecate +============== +### The Node.js `util.deprecate()` function with browser support + +In Node.js, this module simply re-exports the `util.deprecate()` function. + +In the web browser (i.e. via browserify), a browser-specific implementation +of the `util.deprecate()` function is used. + + +## API + +A `deprecate()` function is the only thing exposed by this module. + +``` javascript +// setup: +exports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead'); + + +// users see: +foo(); +// foo() is deprecated, use bar() instead +foo(); +foo(); +``` + + +## License + +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/util-deprecate/browser.js b/node_modules/util-deprecate/browser.js new file mode 100644 index 0000000..549ae2f --- /dev/null +++ b/node_modules/util-deprecate/browser.js @@ -0,0 +1,67 @@ + +/** + * Module exports. + */ + +module.exports = deprecate; + +/** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + +function deprecate (fn, msg) { + if (config('noDeprecation')) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +} + +/** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + +function config (name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!global.localStorage) return false; + } catch (_) { + return false; + } + var val = global.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; +} diff --git a/node_modules/util-deprecate/node.js b/node_modules/util-deprecate/node.js new file mode 100644 index 0000000..5e6fcff --- /dev/null +++ b/node_modules/util-deprecate/node.js @@ -0,0 +1,6 @@ + +/** + * For Node.js, simply re-export the core `util.deprecate` function. + */ + +module.exports = require('util').deprecate; diff --git a/node_modules/util-deprecate/package.json b/node_modules/util-deprecate/package.json new file mode 100644 index 0000000..2e79f89 --- /dev/null +++ b/node_modules/util-deprecate/package.json @@ -0,0 +1,27 @@ +{ + "name": "util-deprecate", + "version": "1.0.2", + "description": "The Node.js `util.deprecate()` function with browser support", + "main": "node.js", + "browser": "browser.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git://github.com/TooTallNate/util-deprecate.git" + }, + "keywords": [ + "util", + "deprecate", + "browserify", + "browser", + "node" + ], + "author": "Nathan Rajlich (http://n8.io/)", + "license": "MIT", + "bugs": { + "url": "https://github.com/TooTallNate/util-deprecate/issues" + }, + "homepage": "https://github.com/TooTallNate/util-deprecate" +} diff --git a/node_modules/utils-merge/.npmignore b/node_modules/utils-merge/.npmignore new file mode 100644 index 0000000..3e53844 --- /dev/null +++ b/node_modules/utils-merge/.npmignore @@ -0,0 +1,9 @@ +CONTRIBUTING.md +Makefile +docs/ +examples/ +reports/ +test/ + +.jshintrc +.travis.yml diff --git a/node_modules/utils-merge/LICENSE b/node_modules/utils-merge/LICENSE new file mode 100644 index 0000000..76f6d08 --- /dev/null +++ b/node_modules/utils-merge/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-2017 Jared Hanson + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/utils-merge/README.md b/node_modules/utils-merge/README.md new file mode 100644 index 0000000..0cb7117 --- /dev/null +++ b/node_modules/utils-merge/README.md @@ -0,0 +1,34 @@ +# utils-merge + +[![Version](https://img.shields.io/npm/v/utils-merge.svg?label=version)](https://www.npmjs.com/package/utils-merge) +[![Build](https://img.shields.io/travis/jaredhanson/utils-merge.svg)](https://travis-ci.org/jaredhanson/utils-merge) +[![Quality](https://img.shields.io/codeclimate/github/jaredhanson/utils-merge.svg?label=quality)](https://codeclimate.com/github/jaredhanson/utils-merge) +[![Coverage](https://img.shields.io/coveralls/jaredhanson/utils-merge.svg)](https://coveralls.io/r/jaredhanson/utils-merge) +[![Dependencies](https://img.shields.io/david/jaredhanson/utils-merge.svg)](https://david-dm.org/jaredhanson/utils-merge) + + +Merges the properties from a source object into a destination object. + +## Install + +```bash +$ npm install utils-merge +``` + +## Usage + +```javascript +var a = { foo: 'bar' } + , b = { bar: 'baz' }; + +merge(a, b); +// => { foo: 'bar', bar: 'baz' } +``` + +## License + +[The MIT License](http://opensource.org/licenses/MIT) + +Copyright (c) 2013-2017 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)> + + Sponsor diff --git a/node_modules/utils-merge/index.js b/node_modules/utils-merge/index.js new file mode 100644 index 0000000..4265c69 --- /dev/null +++ b/node_modules/utils-merge/index.js @@ -0,0 +1,23 @@ +/** + * Merge object b with object a. + * + * var a = { foo: 'bar' } + * , b = { bar: 'baz' }; + * + * merge(a, b); + * // => { foo: 'bar', bar: 'baz' } + * + * @param {Object} a + * @param {Object} b + * @return {Object} + * @api public + */ + +exports = module.exports = function(a, b){ + if (a && b) { + for (var key in b) { + a[key] = b[key]; + } + } + return a; +}; diff --git a/node_modules/utils-merge/package.json b/node_modules/utils-merge/package.json new file mode 100644 index 0000000..e36b078 --- /dev/null +++ b/node_modules/utils-merge/package.json @@ -0,0 +1,40 @@ +{ + "name": "utils-merge", + "version": "1.0.1", + "description": "merge() utility function", + "keywords": [ + "util" + ], + "author": { + "name": "Jared Hanson", + "email": "jaredhanson@gmail.com", + "url": "http://www.jaredhanson.net/" + }, + "repository": { + "type": "git", + "url": "git://github.com/jaredhanson/utils-merge.git" + }, + "bugs": { + "url": "http://github.com/jaredhanson/utils-merge/issues" + }, + "license": "MIT", + "licenses": [ + { + "type": "MIT", + "url": "http://opensource.org/licenses/MIT" + } + ], + "main": "./index", + "dependencies": {}, + "devDependencies": { + "make-node": "0.3.x", + "mocha": "1.x.x", + "chai": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + }, + "scripts": { + "test": "node_modules/.bin/mocha --reporter spec --require test/bootstrap/node test/*.test.js" + } +} diff --git a/node_modules/uuid/CHANGELOG.md b/node_modules/uuid/CHANGELOG.md new file mode 100644 index 0000000..0412ad8 --- /dev/null +++ b/node_modules/uuid/CHANGELOG.md @@ -0,0 +1,274 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [9.0.1](https://github.com/uuidjs/uuid/compare/v9.0.0...v9.0.1) (2023-09-12) + +### build + +- Fix CI to work with Node.js 20.x + +## [9.0.0](https://github.com/uuidjs/uuid/compare/v8.3.2...v9.0.0) (2022-09-05) + +### ⚠ BREAKING CHANGES + +- Drop Node.js 10.x support. This library always aims at supporting one EOLed LTS release which by this time now is 12.x which has reached EOL 30 Apr 2022. + +- Remove the minified UMD build from the package. + + Minified code is hard to audit and since this is a widely used library it seems more appropriate nowadays to optimize for auditability than to ship a legacy module format that, at best, serves educational purposes nowadays. + + For production browser use cases, users should be using a bundler. For educational purposes, today's online sandboxes like replit.com offer convenient ways to load npm modules, so the use case for UMD through repos like UNPKG or jsDelivr has largely vanished. + +- Drop IE 11 and Safari 10 support. Drop support for browsers that don't correctly implement const/let and default arguments, and no longer transpile the browser build to ES2015. + + This also removes the fallback on msCrypto instead of the crypto API. + + Browser tests are run in the first supported version of each supported browser and in the latest (as of this commit) version available on Browserstack. + +### Features + +- optimize uuid.v1 by 1.3x uuid.v4 by 4.3x (430%) ([#597](https://github.com/uuidjs/uuid/issues/597)) ([3a033f6](https://github.com/uuidjs/uuid/commit/3a033f6bab6bb3780ece6d645b902548043280bc)) +- remove UMD build ([#645](https://github.com/uuidjs/uuid/issues/645)) ([e948a0f](https://github.com/uuidjs/uuid/commit/e948a0f22bf22f4619b27bd913885e478e20fe6f)), closes [#620](https://github.com/uuidjs/uuid/issues/620) +- use native crypto.randomUUID when available ([#600](https://github.com/uuidjs/uuid/issues/600)) ([c9e076c](https://github.com/uuidjs/uuid/commit/c9e076c852edad7e9a06baaa1d148cf4eda6c6c4)) + +### Bug Fixes + +- add Jest/jsdom compatibility ([#642](https://github.com/uuidjs/uuid/issues/642)) ([16f9c46](https://github.com/uuidjs/uuid/commit/16f9c469edf46f0786164cdf4dc980743984a6fd)) +- change default export to named function ([#545](https://github.com/uuidjs/uuid/issues/545)) ([c57bc5a](https://github.com/uuidjs/uuid/commit/c57bc5a9a0653273aa639cda9177ce52efabe42a)) +- handle error when parameter is not set in v3 and v5 ([#622](https://github.com/uuidjs/uuid/issues/622)) ([fcd7388](https://github.com/uuidjs/uuid/commit/fcd73881692d9fabb63872576ba28e30ff852091)) +- run npm audit fix ([#644](https://github.com/uuidjs/uuid/issues/644)) ([04686f5](https://github.com/uuidjs/uuid/commit/04686f54c5fed2cfffc1b619f4970c4bb8532353)) +- upgrading from uuid3 broken link ([#568](https://github.com/uuidjs/uuid/issues/568)) ([1c849da](https://github.com/uuidjs/uuid/commit/1c849da6e164259e72e18636726345b13a7eddd6)) + +### build + +- drop Node.js 8.x from babel transpile target ([#603](https://github.com/uuidjs/uuid/issues/603)) ([aa11485](https://github.com/uuidjs/uuid/commit/aa114858260402107ec8a1e1a825dea0a259bcb5)) +- drop support for legacy browsers (IE11, Safari 10) ([#604](https://github.com/uuidjs/uuid/issues/604)) ([0f433e5](https://github.com/uuidjs/uuid/commit/0f433e5ec444edacd53016de67db021102f36148)) + +- drop node 10.x to upgrade dev dependencies ([#653](https://github.com/uuidjs/uuid/issues/653)) ([28a5712](https://github.com/uuidjs/uuid/commit/28a571283f8abda6b9d85e689f95b7d3ee9e282e)), closes [#643](https://github.com/uuidjs/uuid/issues/643) + +### [8.3.2](https://github.com/uuidjs/uuid/compare/v8.3.1...v8.3.2) (2020-12-08) + +### Bug Fixes + +- lazy load getRandomValues ([#537](https://github.com/uuidjs/uuid/issues/537)) ([16c8f6d](https://github.com/uuidjs/uuid/commit/16c8f6df2f6b09b4d6235602d6a591188320a82e)), closes [#536](https://github.com/uuidjs/uuid/issues/536) + +### [8.3.1](https://github.com/uuidjs/uuid/compare/v8.3.0...v8.3.1) (2020-10-04) + +### Bug Fixes + +- support expo>=39.0.0 ([#515](https://github.com/uuidjs/uuid/issues/515)) ([c65a0f3](https://github.com/uuidjs/uuid/commit/c65a0f3fa73b901959d638d1e3591dfacdbed867)), closes [#375](https://github.com/uuidjs/uuid/issues/375) + +## [8.3.0](https://github.com/uuidjs/uuid/compare/v8.2.0...v8.3.0) (2020-07-27) + +### Features + +- add parse/stringify/validate/version/NIL APIs ([#479](https://github.com/uuidjs/uuid/issues/479)) ([0e6c10b](https://github.com/uuidjs/uuid/commit/0e6c10ba1bf9517796ff23c052fc0468eedfd5f4)), closes [#475](https://github.com/uuidjs/uuid/issues/475) [#478](https://github.com/uuidjs/uuid/issues/478) [#480](https://github.com/uuidjs/uuid/issues/480) [#481](https://github.com/uuidjs/uuid/issues/481) [#180](https://github.com/uuidjs/uuid/issues/180) + +## [8.2.0](https://github.com/uuidjs/uuid/compare/v8.1.0...v8.2.0) (2020-06-23) + +### Features + +- improve performance of v1 string representation ([#453](https://github.com/uuidjs/uuid/issues/453)) ([0ee0b67](https://github.com/uuidjs/uuid/commit/0ee0b67c37846529c66089880414d29f3ae132d5)) +- remove deprecated v4 string parameter ([#454](https://github.com/uuidjs/uuid/issues/454)) ([88ce3ca](https://github.com/uuidjs/uuid/commit/88ce3ca0ba046f60856de62c7ce03f7ba98ba46c)), closes [#437](https://github.com/uuidjs/uuid/issues/437) +- support jspm ([#473](https://github.com/uuidjs/uuid/issues/473)) ([e9f2587](https://github.com/uuidjs/uuid/commit/e9f2587a92575cac31bc1d4ae944e17c09756659)) + +### Bug Fixes + +- prepare package exports for webpack 5 ([#468](https://github.com/uuidjs/uuid/issues/468)) ([8d6e6a5](https://github.com/uuidjs/uuid/commit/8d6e6a5f8965ca9575eb4d92e99a43435f4a58a8)) + +## [8.1.0](https://github.com/uuidjs/uuid/compare/v8.0.0...v8.1.0) (2020-05-20) + +### Features + +- improve v4 performance by reusing random number array ([#435](https://github.com/uuidjs/uuid/issues/435)) ([bf4af0d](https://github.com/uuidjs/uuid/commit/bf4af0d711b4d2ed03d1f74fd12ad0baa87dc79d)) +- optimize V8 performance of bytesToUuid ([#434](https://github.com/uuidjs/uuid/issues/434)) ([e156415](https://github.com/uuidjs/uuid/commit/e156415448ec1af2351fa0b6660cfb22581971f2)) + +### Bug Fixes + +- export package.json required by react-native and bundlers ([#449](https://github.com/uuidjs/uuid/issues/449)) ([be1c8fe](https://github.com/uuidjs/uuid/commit/be1c8fe9a3206c358e0059b52fafd7213aa48a52)), closes [ai/nanoevents#44](https://github.com/ai/nanoevents/issues/44#issuecomment-602010343) [#444](https://github.com/uuidjs/uuid/issues/444) + +## [8.0.0](https://github.com/uuidjs/uuid/compare/v7.0.3...v8.0.0) (2020-04-29) + +### ⚠ BREAKING CHANGES + +- For native ECMAScript Module (ESM) usage in Node.js only named exports are exposed, there is no more default export. + + ```diff + -import uuid from 'uuid'; + -console.log(uuid.v4()); // -> 'cd6c3b08-0adc-4f4b-a6ef-36087a1c9869' + +import { v4 as uuidv4 } from 'uuid'; + +uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d' + ``` + +- Deep requiring specific algorithms of this library like `require('uuid/v4')`, which has been deprecated in `uuid@7`, is no longer supported. + + Instead use the named exports that this module exports. + + For ECMAScript Modules (ESM): + + ```diff + -import uuidv4 from 'uuid/v4'; + +import { v4 as uuidv4 } from 'uuid'; + uuidv4(); + ``` + + For CommonJS: + + ```diff + -const uuidv4 = require('uuid/v4'); + +const { v4: uuidv4 } = require('uuid'); + uuidv4(); + ``` + +### Features + +- native Node.js ES Modules (wrapper approach) ([#423](https://github.com/uuidjs/uuid/issues/423)) ([2d9f590](https://github.com/uuidjs/uuid/commit/2d9f590ad9701d692625c07ed62f0a0f91227991)), closes [#245](https://github.com/uuidjs/uuid/issues/245) [#419](https://github.com/uuidjs/uuid/issues/419) [#342](https://github.com/uuidjs/uuid/issues/342) +- remove deep requires ([#426](https://github.com/uuidjs/uuid/issues/426)) ([daf72b8](https://github.com/uuidjs/uuid/commit/daf72b84ceb20272a81bb5fbddb05dd95922cbba)) + +### Bug Fixes + +- add CommonJS syntax example to README quickstart section ([#417](https://github.com/uuidjs/uuid/issues/417)) ([e0ec840](https://github.com/uuidjs/uuid/commit/e0ec8402c7ad44b7ef0453036c612f5db513fda0)) + +### [7.0.3](https://github.com/uuidjs/uuid/compare/v7.0.2...v7.0.3) (2020-03-31) + +### Bug Fixes + +- make deep require deprecation warning work in browsers ([#409](https://github.com/uuidjs/uuid/issues/409)) ([4b71107](https://github.com/uuidjs/uuid/commit/4b71107d8c0d2ef56861ede6403fc9dc35a1e6bf)), closes [#408](https://github.com/uuidjs/uuid/issues/408) + +### [7.0.2](https://github.com/uuidjs/uuid/compare/v7.0.1...v7.0.2) (2020-03-04) + +### Bug Fixes + +- make access to msCrypto consistent ([#393](https://github.com/uuidjs/uuid/issues/393)) ([8bf2a20](https://github.com/uuidjs/uuid/commit/8bf2a20f3565df743da7215eebdbada9d2df118c)) +- simplify link in deprecation warning ([#391](https://github.com/uuidjs/uuid/issues/391)) ([bb2c8e4](https://github.com/uuidjs/uuid/commit/bb2c8e4e9f4c5f9c1eaaf3ea59710c633cd90cb7)) +- update links to match content in readme ([#386](https://github.com/uuidjs/uuid/issues/386)) ([44f2f86](https://github.com/uuidjs/uuid/commit/44f2f86e9d2bbf14ee5f0f00f72a3db1292666d4)) + +### [7.0.1](https://github.com/uuidjs/uuid/compare/v7.0.0...v7.0.1) (2020-02-25) + +### Bug Fixes + +- clean up esm builds for node and browser ([#383](https://github.com/uuidjs/uuid/issues/383)) ([59e6a49](https://github.com/uuidjs/uuid/commit/59e6a49e7ce7b3e8fb0f3ee52b9daae72af467dc)) +- provide browser versions independent from module system ([#380](https://github.com/uuidjs/uuid/issues/380)) ([4344a22](https://github.com/uuidjs/uuid/commit/4344a22e7aed33be8627eeaaf05360f256a21753)), closes [#378](https://github.com/uuidjs/uuid/issues/378) + +## [7.0.0](https://github.com/uuidjs/uuid/compare/v3.4.0...v7.0.0) (2020-02-24) + +### ⚠ BREAKING CHANGES + +- The default export, which used to be the v4() method but which was already discouraged in v3.x of this library, has been removed. +- Explicitly note that deep imports of the different uuid version functions are deprecated and no longer encouraged and that ECMAScript module named imports should be used instead. Emit a deprecation warning for people who deep-require the different algorithm variants. +- Remove builtin support for insecure random number generators in the browser. Users who want that will have to supply their own random number generator function. +- Remove support for generating v3 and v5 UUIDs in Node.js<4.x +- Convert code base to ECMAScript Modules (ESM) and release CommonJS build for node and ESM build for browser bundlers. + +### Features + +- add UMD build to npm package ([#357](https://github.com/uuidjs/uuid/issues/357)) ([4e75adf](https://github.com/uuidjs/uuid/commit/4e75adf435196f28e3fbbe0185d654b5ded7ca2c)), closes [#345](https://github.com/uuidjs/uuid/issues/345) +- add various es module and CommonJS examples ([b238510](https://github.com/uuidjs/uuid/commit/b238510bf352463521f74bab175a3af9b7a42555)) +- ensure that docs are up-to-date in CI ([ee5e77d](https://github.com/uuidjs/uuid/commit/ee5e77db547474f5a8f23d6c857a6d399209986b)) +- hybrid CommonJS & ECMAScript modules build ([a3f078f](https://github.com/uuidjs/uuid/commit/a3f078faa0baff69ab41aed08e041f8f9c8993d0)) +- remove insecure fallback random number generator ([3a5842b](https://github.com/uuidjs/uuid/commit/3a5842b141a6e5de0ae338f391661e6b84b167c9)), closes [#173](https://github.com/uuidjs/uuid/issues/173) +- remove support for pre Node.js v4 Buffer API ([#356](https://github.com/uuidjs/uuid/issues/356)) ([b59b5c5](https://github.com/uuidjs/uuid/commit/b59b5c5ecad271c5453f1a156f011671f6d35627)) +- rename repository to github:uuidjs/uuid ([#351](https://github.com/uuidjs/uuid/issues/351)) ([c37a518](https://github.com/uuidjs/uuid/commit/c37a518e367ac4b6d0aa62dba1bc6ce9e85020f7)), closes [#338](https://github.com/uuidjs/uuid/issues/338) + +### Bug Fixes + +- add deep-require proxies for local testing and adjust tests ([#365](https://github.com/uuidjs/uuid/issues/365)) ([7fedc79](https://github.com/uuidjs/uuid/commit/7fedc79ac8fda4bfd1c566c7f05ef4ac13b2db48)) +- add note about removal of default export ([#372](https://github.com/uuidjs/uuid/issues/372)) ([12749b7](https://github.com/uuidjs/uuid/commit/12749b700eb49db8a9759fd306d8be05dbfbd58c)), closes [#370](https://github.com/uuidjs/uuid/issues/370) +- deprecated deep requiring of the different algorithm versions ([#361](https://github.com/uuidjs/uuid/issues/361)) ([c0bdf15](https://github.com/uuidjs/uuid/commit/c0bdf15e417639b1aeb0b247b2fb11f7a0a26b23)) + +## [3.4.0](https://github.com/uuidjs/uuid/compare/v3.3.3...v3.4.0) (2020-01-16) + +### Features + +- rename repository to github:uuidjs/uuid ([#351](https://github.com/uuidjs/uuid/issues/351)) ([e2d7314](https://github.com/uuidjs/uuid/commit/e2d7314)), closes [#338](https://github.com/uuidjs/uuid/issues/338) + +## [3.3.3](https://github.com/uuidjs/uuid/compare/v3.3.2...v3.3.3) (2019-08-19) + +### Bug Fixes + +- no longer run ci tests on node v4 +- upgrade dependencies + +## [3.3.2](https://github.com/uuidjs/uuid/compare/v3.3.1...v3.3.2) (2018-06-28) + +### Bug Fixes + +- typo ([305d877](https://github.com/uuidjs/uuid/commit/305d877)) + +## [3.3.1](https://github.com/uuidjs/uuid/compare/v3.3.0...v3.3.1) (2018-06-28) + +### Bug Fixes + +- fix [#284](https://github.com/uuidjs/uuid/issues/284) by setting function name in try-catch ([f2a60f2](https://github.com/uuidjs/uuid/commit/f2a60f2)) + +# [3.3.0](https://github.com/uuidjs/uuid/compare/v3.2.1...v3.3.0) (2018-06-22) + +### Bug Fixes + +- assignment to readonly property to allow running in strict mode ([#270](https://github.com/uuidjs/uuid/issues/270)) ([d062fdc](https://github.com/uuidjs/uuid/commit/d062fdc)) +- fix [#229](https://github.com/uuidjs/uuid/issues/229) ([c9684d4](https://github.com/uuidjs/uuid/commit/c9684d4)) +- Get correct version of IE11 crypto ([#274](https://github.com/uuidjs/uuid/issues/274)) ([153d331](https://github.com/uuidjs/uuid/commit/153d331)) +- mem issue when generating uuid ([#267](https://github.com/uuidjs/uuid/issues/267)) ([c47702c](https://github.com/uuidjs/uuid/commit/c47702c)) + +### Features + +- enforce Conventional Commit style commit messages ([#282](https://github.com/uuidjs/uuid/issues/282)) ([cc9a182](https://github.com/uuidjs/uuid/commit/cc9a182)) + +## [3.2.1](https://github.com/uuidjs/uuid/compare/v3.2.0...v3.2.1) (2018-01-16) + +### Bug Fixes + +- use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) + +# [3.2.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.2.0) (2018-01-16) + +### Bug Fixes + +- remove mistakenly added typescript dependency, rollback version (standard-version will auto-increment) ([09fa824](https://github.com/uuidjs/uuid/commit/09fa824)) +- use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) + +### Features + +- Add v3 Support ([#217](https://github.com/uuidjs/uuid/issues/217)) ([d94f726](https://github.com/uuidjs/uuid/commit/d94f726)) + +# [3.1.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.0.1) (2017-06-17) + +### Bug Fixes + +- (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183) +- Fix typo (#178) +- Simple typo fix (#165) + +### Features + +- v5 support in CLI (#197) +- V5 support (#188) + +# 3.0.1 (2016-11-28) + +- split uuid versions into separate files + +# 3.0.0 (2016-11-17) + +- remove .parse and .unparse + +# 2.0.0 + +- Removed uuid.BufferClass + +# 1.4.0 + +- Improved module context detection +- Removed public RNG functions + +# 1.3.2 + +- Improve tests and handling of v1() options (Issue #24) +- Expose RNG option to allow for perf testing with different generators + +# 1.3.0 + +- Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! +- Support for node.js crypto API +- De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/uuid/CONTRIBUTING.md b/node_modules/uuid/CONTRIBUTING.md new file mode 100644 index 0000000..4a4503d --- /dev/null +++ b/node_modules/uuid/CONTRIBUTING.md @@ -0,0 +1,18 @@ +# Contributing + +Please feel free to file GitHub Issues or propose Pull Requests. We're always happy to discuss improvements to this library! + +## Testing + +```shell +npm test +``` + +## Releasing + +Releases are supposed to be done from master, version bumping is automated through [`standard-version`](https://github.com/conventional-changelog/standard-version): + +```shell +npm run release -- --dry-run # verify output manually +npm run release # follow the instructions from the output of this command +``` diff --git a/node_modules/uuid/LICENSE.md b/node_modules/uuid/LICENSE.md new file mode 100644 index 0000000..3934168 --- /dev/null +++ b/node_modules/uuid/LICENSE.md @@ -0,0 +1,9 @@ +The MIT License (MIT) + +Copyright (c) 2010-2020 Robert Kieffer and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/uuid/README.md b/node_modules/uuid/README.md new file mode 100644 index 0000000..4f51e09 --- /dev/null +++ b/node_modules/uuid/README.md @@ -0,0 +1,466 @@ + + + +# uuid [![CI](https://github.com/uuidjs/uuid/workflows/CI/badge.svg)](https://github.com/uuidjs/uuid/actions?query=workflow%3ACI) [![Browser](https://github.com/uuidjs/uuid/workflows/Browser/badge.svg)](https://github.com/uuidjs/uuid/actions?query=workflow%3ABrowser) + +For the creation of [RFC4122](https://www.ietf.org/rfc/rfc4122.txt) UUIDs + +- **Complete** - Support for RFC4122 version 1, 3, 4, and 5 UUIDs +- **Cross-platform** - Support for ... + - CommonJS, [ECMAScript Modules](#ecmascript-modules) and [CDN builds](#cdn-builds) + - NodeJS 12+ ([LTS releases](https://github.com/nodejs/Release)) + - Chrome, Safari, Firefox, Edge browsers + - Webpack and rollup.js module bundlers + - [React Native / Expo](#react-native--expo) +- **Secure** - Cryptographically-strong random values +- **Small** - Zero-dependency, small footprint, plays nice with "tree shaking" packagers +- **CLI** - Includes the [`uuid` command line](#command-line) utility + +> **Note** Upgrading from `uuid@3`? Your code is probably okay, but check out [Upgrading From `uuid@3`](#upgrading-from-uuid3) for details. + +> **Note** Only interested in creating a version 4 UUID? You might be able to use [`crypto.randomUUID()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID), eliminating the need to install this library. + +## Quickstart + +To create a random UUID... + +**1. Install** + +```shell +npm install uuid +``` + +**2. Create a UUID** (ES6 module syntax) + +```javascript +import { v4 as uuidv4 } from 'uuid'; +uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d' +``` + +... or using CommonJS syntax: + +```javascript +const { v4: uuidv4 } = require('uuid'); +uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' +``` + +For timestamp UUIDs, namespace UUIDs, and other options read on ... + +## API Summary + +| | | | +| --- | --- | --- | +| [`uuid.NIL`](#uuidnil) | The nil UUID string (all zeros) | New in `uuid@8.3` | +| [`uuid.parse()`](#uuidparsestr) | Convert UUID string to array of bytes | New in `uuid@8.3` | +| [`uuid.stringify()`](#uuidstringifyarr-offset) | Convert array of bytes to UUID string | New in `uuid@8.3` | +| [`uuid.v1()`](#uuidv1options-buffer-offset) | Create a version 1 (timestamp) UUID | | +| [`uuid.v3()`](#uuidv3name-namespace-buffer-offset) | Create a version 3 (namespace w/ MD5) UUID | | +| [`uuid.v4()`](#uuidv4options-buffer-offset) | Create a version 4 (random) UUID | | +| [`uuid.v5()`](#uuidv5name-namespace-buffer-offset) | Create a version 5 (namespace w/ SHA-1) UUID | | +| [`uuid.validate()`](#uuidvalidatestr) | Test a string to see if it is a valid UUID | New in `uuid@8.3` | +| [`uuid.version()`](#uuidversionstr) | Detect RFC version of a UUID | New in `uuid@8.3` | + +## API + +### uuid.NIL + +The nil UUID string (all zeros). + +Example: + +```javascript +import { NIL as NIL_UUID } from 'uuid'; + +NIL_UUID; // ⇨ '00000000-0000-0000-0000-000000000000' +``` + +### uuid.parse(str) + +Convert UUID string to array of bytes + +| | | +| --------- | ---------------------------------------- | +| `str` | A valid UUID `String` | +| _returns_ | `Uint8Array[16]` | +| _throws_ | `TypeError` if `str` is not a valid UUID | + +Note: Ordering of values in the byte arrays used by `parse()` and `stringify()` follows the left ↠ right order of hex-pairs in UUID strings. As shown in the example below. + +Example: + +```javascript +import { parse as uuidParse } from 'uuid'; + +// Parse a UUID +const bytes = uuidParse('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'); + +// Convert to hex strings to show byte order (for documentation purposes) +[...bytes].map((v) => v.toString(16).padStart(2, '0')); // ⇨ + // [ + // '6e', 'c0', 'bd', '7f', + // '11', 'c0', '43', 'da', + // '97', '5e', '2a', '8a', + // 'd9', 'eb', 'ae', '0b' + // ] +``` + +### uuid.stringify(arr[, offset]) + +Convert array of bytes to UUID string + +| | | +| -------------- | ---------------------------------------------------------------------------- | +| `arr` | `Array`-like collection of 16 values (starting from `offset`) between 0-255. | +| [`offset` = 0] | `Number` Starting index in the Array | +| _returns_ | `String` | +| _throws_ | `TypeError` if a valid UUID string cannot be generated | + +Note: Ordering of values in the byte arrays used by `parse()` and `stringify()` follows the left ↠ right order of hex-pairs in UUID strings. As shown in the example below. + +Example: + +```javascript +import { stringify as uuidStringify } from 'uuid'; + +const uuidBytes = [ + 0x6e, 0xc0, 0xbd, 0x7f, 0x11, 0xc0, 0x43, 0xda, 0x97, 0x5e, 0x2a, 0x8a, 0xd9, 0xeb, 0xae, 0x0b, +]; + +uuidStringify(uuidBytes); // ⇨ '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' +``` + +### uuid.v1([options[, buffer[, offset]]]) + +Create an RFC version 1 (timestamp) UUID + +| | | +| --- | --- | +| [`options`] | `Object` with one or more of the following properties: | +| [`options.node` ] | RFC "node" field as an `Array[6]` of byte values (per 4.1.6) | +| [`options.clockseq`] | RFC "clock sequence" as a `Number` between 0 - 0x3fff | +| [`options.msecs`] | RFC "timestamp" field (`Number` of milliseconds, unix epoch) | +| [`options.nsecs`] | RFC "timestamp" field (`Number` of nanoseconds to add to `msecs`, should be 0-10,000) | +| [`options.random`] | `Array` of 16 random bytes (0-255) | +| [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) | +| [`buffer`] | `Array \| Buffer` If specified, uuid will be written here in byte-form, starting at `offset` | +| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` | +| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` | +| _throws_ | `Error` if more than 10M UUIDs/sec are requested | + +Note: The default [node id](https://tools.ietf.org/html/rfc4122#section-4.1.6) (the last 12 digits in the UUID) is generated once, randomly, on process startup, and then remains unchanged for the duration of the process. + +Note: `options.random` and `options.rng` are only meaningful on the very first call to `v1()`, where they may be passed to initialize the internal `node` and `clockseq` fields. + +Example: + +```javascript +import { v1 as uuidv1 } from 'uuid'; + +uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-8bad-9b1deb4d3b7d' +``` + +Example using `options`: + +```javascript +import { v1 as uuidv1 } from 'uuid'; + +const v1options = { + node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], + clockseq: 0x1234, + msecs: new Date('2011-11-01').getTime(), + nsecs: 5678, +}; +uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab' +``` + +### uuid.v3(name, namespace[, buffer[, offset]]) + +Create an RFC version 3 (namespace w/ MD5) UUID + +API is identical to `v5()`, but uses "v3" instead. + +⚠️ Note: Per the RFC, "_If backward compatibility is not an issue, SHA-1 [Version 5] is preferred_." + +### uuid.v4([options[, buffer[, offset]]]) + +Create an RFC version 4 (random) UUID + +| | | +| --- | --- | +| [`options`] | `Object` with one or more of the following properties: | +| [`options.random`] | `Array` of 16 random bytes (0-255) | +| [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) | +| [`buffer`] | `Array \| Buffer` If specified, uuid will be written here in byte-form, starting at `offset` | +| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` | +| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` | + +Example: + +```javascript +import { v4 as uuidv4 } from 'uuid'; + +uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' +``` + +Example using predefined `random` values: + +```javascript +import { v4 as uuidv4 } from 'uuid'; + +const v4options = { + random: [ + 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36, + ], +}; +uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836' +``` + +### uuid.v5(name, namespace[, buffer[, offset]]) + +Create an RFC version 5 (namespace w/ SHA-1) UUID + +| | | +| --- | --- | +| `name` | `String \| Array` | +| `namespace` | `String \| Array[16]` Namespace UUID | +| [`buffer`] | `Array \| Buffer` If specified, uuid will be written here in byte-form, starting at `offset` | +| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` | +| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` | + +Note: The RFC `DNS` and `URL` namespaces are available as `v5.DNS` and `v5.URL`. + +Example with custom namespace: + +```javascript +import { v5 as uuidv5 } from 'uuid'; + +// Define a custom namespace. Readers, create your own using something like +// https://www.uuidgenerator.net/ +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; + +uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681' +``` + +Example with RFC `URL` namespace: + +```javascript +import { v5 as uuidv5 } from 'uuid'; + +uuidv5('https://www.w3.org/', uuidv5.URL); // ⇨ 'c106a26a-21bb-5538-8bf2-57095d1976c1' +``` + +### uuid.validate(str) + +Test a string to see if it is a valid UUID + +| | | +| --------- | --------------------------------------------------- | +| `str` | `String` to validate | +| _returns_ | `true` if string is a valid UUID, `false` otherwise | + +Example: + +```javascript +import { validate as uuidValidate } from 'uuid'; + +uuidValidate('not a UUID'); // ⇨ false +uuidValidate('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'); // ⇨ true +``` + +Using `validate` and `version` together it is possible to do per-version validation, e.g. validate for only v4 UUIds. + +```javascript +import { version as uuidVersion } from 'uuid'; +import { validate as uuidValidate } from 'uuid'; + +function uuidValidateV4(uuid) { + return uuidValidate(uuid) && uuidVersion(uuid) === 4; +} + +const v1Uuid = 'd9428888-122b-11e1-b85c-61cd3cbb3210'; +const v4Uuid = '109156be-c4fb-41ea-b1b4-efe1671c5836'; + +uuidValidateV4(v4Uuid); // ⇨ true +uuidValidateV4(v1Uuid); // ⇨ false +``` + +### uuid.version(str) + +Detect RFC version of a UUID + +| | | +| --------- | ---------------------------------------- | +| `str` | A valid UUID `String` | +| _returns_ | `Number` The RFC version of the UUID | +| _throws_ | `TypeError` if `str` is not a valid UUID | + +Example: + +```javascript +import { version as uuidVersion } from 'uuid'; + +uuidVersion('45637ec4-c85f-11ea-87d0-0242ac130003'); // ⇨ 1 +uuidVersion('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'); // ⇨ 4 +``` + +## Command Line + +UUIDs can be generated from the command line using `uuid`. + +```shell +$ npx uuid +ddeb27fb-d9a0-4624-be4d-4615062daed4 +``` + +The default is to generate version 4 UUIDS, however the other versions are supported. Type `uuid --help` for details: + +```shell +$ npx uuid --help + +Usage: + uuid + uuid v1 + uuid v3 + uuid v4 + uuid v5 + uuid --help + +Note: may be "URL" or "DNS" to use the corresponding UUIDs +defined by RFC4122 +``` + +## ECMAScript Modules + +This library comes with [ECMAScript Modules](https://www.ecma-international.org/ecma-262/6.0/#sec-modules) (ESM) support for Node.js versions that support it ([example](./examples/node-esmodules/)) as well as bundlers like [rollup.js](https://rollupjs.org/guide/en/#tree-shaking) ([example](./examples/browser-rollup/)) and [webpack](https://webpack.js.org/guides/tree-shaking/) ([example](./examples/browser-webpack/)) (targeting both, Node.js and browser environments). + +```javascript +import { v4 as uuidv4 } from 'uuid'; +uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' +``` + +To run the examples you must first create a dist build of this library in the module root: + +```shell +npm run build +``` + +## CDN Builds + +### ECMAScript Modules + +To load this module directly into modern browsers that [support loading ECMAScript Modules](https://caniuse.com/#feat=es6-module) you can make use of [jspm](https://jspm.org/): + +```html + +``` + +### UMD + +As of `uuid@9` [UMD (Universal Module Definition)](https://github.com/umdjs/umd) builds are no longer shipped with this library. + +If you need a UMD build of this library, use a bundler like Webpack or Rollup. Alternatively, refer to the documentation of [`uuid@8.3.2`](https://github.com/uuidjs/uuid/blob/v8.3.2/README.md#umd) which was the last version that shipped UMD builds. + +## Known issues + +### Duplicate UUIDs (Googlebot) + +This module may generate duplicate UUIDs when run in clients with _deterministic_ random number generators, such as [Googlebot crawlers](https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers). This can cause problems for apps that expect client-generated UUIDs to always be unique. Developers should be prepared for this and have a strategy for dealing with possible collisions, such as: + +- Check for duplicate UUIDs, fail gracefully +- Disable write operations for Googlebot clients + +### "getRandomValues() not supported" + +This error occurs in environments where the standard [`crypto.getRandomValues()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues) API is not supported. This issue can be resolved by adding an appropriate polyfill: + +### React Native / Expo + +1. Install [`react-native-get-random-values`](https://github.com/LinusU/react-native-get-random-values#readme) +1. Import it _before_ `uuid`. Since `uuid` might also appear as a transitive dependency of some other imports it's safest to just import `react-native-get-random-values` as the very first thing in your entry point: + +```javascript +import 'react-native-get-random-values'; +import { v4 as uuidv4 } from 'uuid'; +``` + +Note: If you are using Expo, you must be using at least `react-native-get-random-values@1.5.0` and `expo@39.0.0`. + +### Web Workers / Service Workers (Edge <= 18) + +[In Edge <= 18, Web Crypto is not supported in Web Workers or Service Workers](https://caniuse.com/#feat=cryptography) and we are not aware of a polyfill (let us know if you find one, please). + +### IE 11 (Internet Explorer) + +Support for IE11 and other legacy browsers has been dropped as of `uuid@9`. If you need to support legacy browsers, you can always transpile the uuid module source yourself (e.g. using [Babel](https://babeljs.io/)). + +## Upgrading From `uuid@7` + +### Only Named Exports Supported When Using with Node.js ESM + +`uuid@7` did not come with native ECMAScript Module (ESM) support for Node.js. Importing it in Node.js ESM consequently imported the CommonJS source with a default export. This library now comes with true Node.js ESM support and only provides named exports. + +Instead of doing: + +```javascript +import uuid from 'uuid'; +uuid.v4(); +``` + +you will now have to use the named exports: + +```javascript +import { v4 as uuidv4 } from 'uuid'; +uuidv4(); +``` + +### Deep Requires No Longer Supported + +Deep requires like `require('uuid/v4')` [which have been deprecated in `uuid@7`](#deep-requires-now-deprecated) are no longer supported. + +## Upgrading From `uuid@3` + +"_Wait... what happened to `uuid@4` thru `uuid@6`?!?_" + +In order to avoid confusion with RFC [version 4](#uuidv4options-buffer-offset) and [version 5](#uuidv5name-namespace-buffer-offset) UUIDs, and a possible [version 6](http://gh.peabody.io/uuidv6/), releases 4 thru 6 of this module have been skipped. + +### Deep Requires Now Deprecated + +`uuid@3` encouraged the use of deep requires to minimize the bundle size of browser builds: + +```javascript +const uuidv4 = require('uuid/v4'); // <== NOW DEPRECATED! +uuidv4(); +``` + +As of `uuid@7` this library now provides ECMAScript modules builds, which allow packagers like Webpack and Rollup to do "tree-shaking" to remove dead code. Instead, use the `import` syntax: + +```javascript +import { v4 as uuidv4 } from 'uuid'; +uuidv4(); +``` + +... or for CommonJS: + +```javascript +const { v4: uuidv4 } = require('uuid'); +uuidv4(); +``` + +### Default Export Removed + +`uuid@3` was exporting the Version 4 UUID method as a default export: + +```javascript +const uuid = require('uuid'); // <== REMOVED! +``` + +This usage pattern was already discouraged in `uuid@3` and has been removed in `uuid@7`. + +--- + +Markdown generated from [README_js.md](README_js.md) by diff --git a/node_modules/uuid/dist/bin/uuid b/node_modules/uuid/dist/bin/uuid new file mode 100644 index 0000000..f38d2ee --- /dev/null +++ b/node_modules/uuid/dist/bin/uuid @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../uuid-bin'); diff --git a/node_modules/uuid/dist/commonjs-browser/index.js b/node_modules/uuid/dist/commonjs-browser/index.js new file mode 100644 index 0000000..5586dd3 --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/index.js @@ -0,0 +1,79 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NIL", { + enumerable: true, + get: function get() { + return _nil.default; + } +}); +Object.defineProperty(exports, "parse", { + enumerable: true, + get: function get() { + return _parse.default; + } +}); +Object.defineProperty(exports, "stringify", { + enumerable: true, + get: function get() { + return _stringify.default; + } +}); +Object.defineProperty(exports, "v1", { + enumerable: true, + get: function get() { + return _v.default; + } +}); +Object.defineProperty(exports, "v3", { + enumerable: true, + get: function get() { + return _v2.default; + } +}); +Object.defineProperty(exports, "v4", { + enumerable: true, + get: function get() { + return _v3.default; + } +}); +Object.defineProperty(exports, "v5", { + enumerable: true, + get: function get() { + return _v4.default; + } +}); +Object.defineProperty(exports, "validate", { + enumerable: true, + get: function get() { + return _validate.default; + } +}); +Object.defineProperty(exports, "version", { + enumerable: true, + get: function get() { + return _version.default; + } +}); + +var _v = _interopRequireDefault(require("./v1.js")); + +var _v2 = _interopRequireDefault(require("./v3.js")); + +var _v3 = _interopRequireDefault(require("./v4.js")); + +var _v4 = _interopRequireDefault(require("./v5.js")); + +var _nil = _interopRequireDefault(require("./nil.js")); + +var _version = _interopRequireDefault(require("./version.js")); + +var _validate = _interopRequireDefault(require("./validate.js")); + +var _stringify = _interopRequireDefault(require("./stringify.js")); + +var _parse = _interopRequireDefault(require("./parse.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/md5.js b/node_modules/uuid/dist/commonjs-browser/md5.js new file mode 100644 index 0000000..7a4582a --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/md5.js @@ -0,0 +1,223 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ +function md5(bytes) { + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = new Uint8Array(msg.length); + + for (let i = 0; i < msg.length; ++i) { + bytes[i] = msg.charCodeAt(i); + } + } + + return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); +} +/* + * Convert an array of little-endian words to an array of bytes + */ + + +function md5ToHexEncodedArray(input) { + const output = []; + const length32 = input.length * 32; + const hexTab = '0123456789abcdef'; + + for (let i = 0; i < length32; i += 8) { + const x = input[i >> 5] >>> i % 32 & 0xff; + const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16); + output.push(hex); + } + + return output; +} +/** + * Calculate output length with padding and bit length + */ + + +function getOutputLength(inputLength8) { + return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; +} +/* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + + +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << len % 32; + x[getOutputLength(len) - 1] = len; + let a = 1732584193; + let b = -271733879; + let c = -1732584194; + let d = 271733878; + + for (let i = 0; i < x.length; i += 16) { + const olda = a; + const oldb = b; + const oldc = c; + const oldd = d; + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + + return [a, b, c, d]; +} +/* + * Convert an array bytes to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + + +function bytesToWords(input) { + if (input.length === 0) { + return []; + } + + const length8 = input.length * 8; + const output = new Uint32Array(getOutputLength(length8)); + + for (let i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[i / 8] & 0xff) << i % 32; + } + + return output; +} +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + + +function safeAdd(x, y) { + const lsw = (x & 0xffff) + (y & 0xffff); + const msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xffff; +} +/* + * Bitwise rotate a 32-bit number to the left. + */ + + +function bitRotateLeft(num, cnt) { + return num << cnt | num >>> 32 - cnt; +} +/* + * These functions implement the four basic operations the algorithm uses. + */ + + +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} + +function md5ff(a, b, c, d, x, s, t) { + return md5cmn(b & c | ~b & d, a, b, x, s, t); +} + +function md5gg(a, b, c, d, x, s, t) { + return md5cmn(b & d | c & ~d, a, b, x, s, t); +} + +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} + +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | ~d), a, b, x, s, t); +} + +var _default = md5; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/native.js b/node_modules/uuid/dist/commonjs-browser/native.js new file mode 100644 index 0000000..c2eea59 --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/native.js @@ -0,0 +1,11 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto); +var _default = { + randomUUID +}; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/nil.js b/node_modules/uuid/dist/commonjs-browser/nil.js new file mode 100644 index 0000000..7ade577 --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/nil.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = '00000000-0000-0000-0000-000000000000'; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/parse.js b/node_modules/uuid/dist/commonjs-browser/parse.js new file mode 100644 index 0000000..4c69fc3 --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/parse.js @@ -0,0 +1,45 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _validate = _interopRequireDefault(require("./validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function parse(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +var _default = parse; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/regex.js b/node_modules/uuid/dist/commonjs-browser/regex.js new file mode 100644 index 0000000..1ef91d6 --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/regex.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/rng.js b/node_modules/uuid/dist/commonjs-browser/rng.js new file mode 100644 index 0000000..d067cdb --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/rng.js @@ -0,0 +1,25 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = rng; +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +let getRandomValues; +const rnds8 = new Uint8Array(16); + +function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); +} \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/sha1.js b/node_modules/uuid/dist/commonjs-browser/sha1.js new file mode 100644 index 0000000..24cbced --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/sha1.js @@ -0,0 +1,104 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +function f(s, x, y, z) { + switch (s) { + case 0: + return x & y ^ ~x & z; + + case 1: + return x ^ y ^ z; + + case 2: + return x & y ^ x & z ^ y & z; + + case 3: + return x ^ y ^ z; + } +} + +function ROTL(x, n) { + return x << n | x >>> 32 - n; +} + +function sha1(bytes) { + const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = []; + + for (let i = 0; i < msg.length; ++i) { + bytes.push(msg.charCodeAt(i)); + } + } else if (!Array.isArray(bytes)) { + // Convert Array-like to Array + bytes = Array.prototype.slice.call(bytes); + } + + bytes.push(0x80); + const l = bytes.length / 4 + 2; + const N = Math.ceil(l / 16); + const M = new Array(N); + + for (let i = 0; i < N; ++i) { + const arr = new Uint32Array(16); + + for (let j = 0; j < 16; ++j) { + arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3]; + } + + M[i] = arr; + } + + M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); + M[N - 1][14] = Math.floor(M[N - 1][14]); + M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff; + + for (let i = 0; i < N; ++i) { + const W = new Uint32Array(80); + + for (let t = 0; t < 16; ++t) { + W[t] = M[i][t]; + } + + for (let t = 16; t < 80; ++t) { + W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); + } + + let a = H[0]; + let b = H[1]; + let c = H[2]; + let d = H[3]; + let e = H[4]; + + for (let t = 0; t < 80; ++t) { + const s = Math.floor(t / 20); + const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + + H[0] = H[0] + a >>> 0; + H[1] = H[1] + b >>> 0; + H[2] = H[2] + c >>> 0; + H[3] = H[3] + d >>> 0; + H[4] = H[4] + e >>> 0; + } + + return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff]; +} + +var _default = sha1; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/stringify.js b/node_modules/uuid/dist/commonjs-browser/stringify.js new file mode 100644 index 0000000..390bf89 --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/stringify.js @@ -0,0 +1,44 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +exports.unsafeStringify = unsafeStringify; + +var _validate = _interopRequireDefault(require("./validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).slice(1)); +} + +function unsafeStringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; +} + +function stringify(arr, offset = 0) { + const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!(0, _validate.default)(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +var _default = stringify; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/v1.js b/node_modules/uuid/dist/commonjs-browser/v1.js new file mode 100644 index 0000000..125bc58 --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/v1.js @@ -0,0 +1,107 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _rng = _interopRequireDefault(require("./rng.js")); + +var _stringify = require("./stringify.js"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || _rng.default)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || (0, _stringify.unsafeStringify)(b); +} + +var _default = v1; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/v3.js b/node_modules/uuid/dist/commonjs-browser/v3.js new file mode 100644 index 0000000..6b47ff5 --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/v3.js @@ -0,0 +1,16 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _v = _interopRequireDefault(require("./v35.js")); + +var _md = _interopRequireDefault(require("./md5.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const v3 = (0, _v.default)('v3', 0x30, _md.default); +var _default = v3; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/v35.js b/node_modules/uuid/dist/commonjs-browser/v35.js new file mode 100644 index 0000000..7c522d9 --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/v35.js @@ -0,0 +1,80 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.URL = exports.DNS = void 0; +exports.default = v35; + +var _stringify = require("./stringify.js"); + +var _parse = _interopRequireDefault(require("./parse.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +exports.DNS = DNS; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +exports.URL = URL; + +function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + var _namespace; + + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = (0, _parse.default)(namespace); + } + + if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return (0, _stringify.unsafeStringify)(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/v4.js b/node_modules/uuid/dist/commonjs-browser/v4.js new file mode 100644 index 0000000..959d698 --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/v4.js @@ -0,0 +1,43 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _native = _interopRequireDefault(require("./native.js")); + +var _rng = _interopRequireDefault(require("./rng.js")); + +var _stringify = require("./stringify.js"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function v4(options, buf, offset) { + if (_native.default.randomUUID && !buf && !options) { + return _native.default.randomUUID(); + } + + options = options || {}; + + const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return (0, _stringify.unsafeStringify)(rnds); +} + +var _default = v4; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/v5.js b/node_modules/uuid/dist/commonjs-browser/v5.js new file mode 100644 index 0000000..99d615e --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/v5.js @@ -0,0 +1,16 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _v = _interopRequireDefault(require("./v35.js")); + +var _sha = _interopRequireDefault(require("./sha1.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const v5 = (0, _v.default)('v5', 0x50, _sha.default); +var _default = v5; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/validate.js b/node_modules/uuid/dist/commonjs-browser/validate.js new file mode 100644 index 0000000..fd05215 --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/validate.js @@ -0,0 +1,17 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _regex = _interopRequireDefault(require("./regex.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function validate(uuid) { + return typeof uuid === 'string' && _regex.default.test(uuid); +} + +var _default = validate; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/commonjs-browser/version.js b/node_modules/uuid/dist/commonjs-browser/version.js new file mode 100644 index 0000000..f63af01 --- /dev/null +++ b/node_modules/uuid/dist/commonjs-browser/version.js @@ -0,0 +1,21 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _validate = _interopRequireDefault(require("./validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function version(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.slice(14, 15), 16); +} + +var _default = version; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/index.js b/node_modules/uuid/dist/esm-browser/index.js new file mode 100644 index 0000000..1db6f6d --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/index.js @@ -0,0 +1,9 @@ +export { default as v1 } from './v1.js'; +export { default as v3 } from './v3.js'; +export { default as v4 } from './v4.js'; +export { default as v5 } from './v5.js'; +export { default as NIL } from './nil.js'; +export { default as version } from './version.js'; +export { default as validate } from './validate.js'; +export { default as stringify } from './stringify.js'; +export { default as parse } from './parse.js'; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/md5.js b/node_modules/uuid/dist/esm-browser/md5.js new file mode 100644 index 0000000..f12212e --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/md5.js @@ -0,0 +1,215 @@ +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ +function md5(bytes) { + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = new Uint8Array(msg.length); + + for (let i = 0; i < msg.length; ++i) { + bytes[i] = msg.charCodeAt(i); + } + } + + return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); +} +/* + * Convert an array of little-endian words to an array of bytes + */ + + +function md5ToHexEncodedArray(input) { + const output = []; + const length32 = input.length * 32; + const hexTab = '0123456789abcdef'; + + for (let i = 0; i < length32; i += 8) { + const x = input[i >> 5] >>> i % 32 & 0xff; + const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16); + output.push(hex); + } + + return output; +} +/** + * Calculate output length with padding and bit length + */ + + +function getOutputLength(inputLength8) { + return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; +} +/* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + + +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << len % 32; + x[getOutputLength(len) - 1] = len; + let a = 1732584193; + let b = -271733879; + let c = -1732584194; + let d = 271733878; + + for (let i = 0; i < x.length; i += 16) { + const olda = a; + const oldb = b; + const oldc = c; + const oldd = d; + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + + return [a, b, c, d]; +} +/* + * Convert an array bytes to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + + +function bytesToWords(input) { + if (input.length === 0) { + return []; + } + + const length8 = input.length * 8; + const output = new Uint32Array(getOutputLength(length8)); + + for (let i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[i / 8] & 0xff) << i % 32; + } + + return output; +} +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + + +function safeAdd(x, y) { + const lsw = (x & 0xffff) + (y & 0xffff); + const msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xffff; +} +/* + * Bitwise rotate a 32-bit number to the left. + */ + + +function bitRotateLeft(num, cnt) { + return num << cnt | num >>> 32 - cnt; +} +/* + * These functions implement the four basic operations the algorithm uses. + */ + + +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} + +function md5ff(a, b, c, d, x, s, t) { + return md5cmn(b & c | ~b & d, a, b, x, s, t); +} + +function md5gg(a, b, c, d, x, s, t) { + return md5cmn(b & d | c & ~d, a, b, x, s, t); +} + +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} + +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | ~d), a, b, x, s, t); +} + +export default md5; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/native.js b/node_modules/uuid/dist/esm-browser/native.js new file mode 100644 index 0000000..b22292c --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/native.js @@ -0,0 +1,4 @@ +const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto); +export default { + randomUUID +}; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/nil.js b/node_modules/uuid/dist/esm-browser/nil.js new file mode 100644 index 0000000..b36324c --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/nil.js @@ -0,0 +1 @@ +export default '00000000-0000-0000-0000-000000000000'; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/parse.js b/node_modules/uuid/dist/esm-browser/parse.js new file mode 100644 index 0000000..6421c5d --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/parse.js @@ -0,0 +1,35 @@ +import validate from './validate.js'; + +function parse(uuid) { + if (!validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +export default parse; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/regex.js b/node_modules/uuid/dist/esm-browser/regex.js new file mode 100644 index 0000000..3da8673 --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/regex.js @@ -0,0 +1 @@ +export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/rng.js b/node_modules/uuid/dist/esm-browser/rng.js new file mode 100644 index 0000000..6e65234 --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/rng.js @@ -0,0 +1,18 @@ +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +let getRandomValues; +const rnds8 = new Uint8Array(16); +export default function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); +} \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/sha1.js b/node_modules/uuid/dist/esm-browser/sha1.js new file mode 100644 index 0000000..d3c2565 --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/sha1.js @@ -0,0 +1,96 @@ +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +function f(s, x, y, z) { + switch (s) { + case 0: + return x & y ^ ~x & z; + + case 1: + return x ^ y ^ z; + + case 2: + return x & y ^ x & z ^ y & z; + + case 3: + return x ^ y ^ z; + } +} + +function ROTL(x, n) { + return x << n | x >>> 32 - n; +} + +function sha1(bytes) { + const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = []; + + for (let i = 0; i < msg.length; ++i) { + bytes.push(msg.charCodeAt(i)); + } + } else if (!Array.isArray(bytes)) { + // Convert Array-like to Array + bytes = Array.prototype.slice.call(bytes); + } + + bytes.push(0x80); + const l = bytes.length / 4 + 2; + const N = Math.ceil(l / 16); + const M = new Array(N); + + for (let i = 0; i < N; ++i) { + const arr = new Uint32Array(16); + + for (let j = 0; j < 16; ++j) { + arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3]; + } + + M[i] = arr; + } + + M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); + M[N - 1][14] = Math.floor(M[N - 1][14]); + M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff; + + for (let i = 0; i < N; ++i) { + const W = new Uint32Array(80); + + for (let t = 0; t < 16; ++t) { + W[t] = M[i][t]; + } + + for (let t = 16; t < 80; ++t) { + W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); + } + + let a = H[0]; + let b = H[1]; + let c = H[2]; + let d = H[3]; + let e = H[4]; + + for (let t = 0; t < 80; ++t) { + const s = Math.floor(t / 20); + const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + + H[0] = H[0] + a >>> 0; + H[1] = H[1] + b >>> 0; + H[2] = H[2] + c >>> 0; + H[3] = H[3] + d >>> 0; + H[4] = H[4] + e >>> 0; + } + + return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff]; +} + +export default sha1; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/stringify.js b/node_modules/uuid/dist/esm-browser/stringify.js new file mode 100644 index 0000000..a6e4c88 --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/stringify.js @@ -0,0 +1,33 @@ +import validate from './validate.js'; +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).slice(1)); +} + +export function unsafeStringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; +} + +function stringify(arr, offset = 0) { + const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +export default stringify; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/v1.js b/node_modules/uuid/dist/esm-browser/v1.js new file mode 100644 index 0000000..382e5d7 --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/v1.js @@ -0,0 +1,95 @@ +import rng from './rng.js'; +import { unsafeStringify } from './stringify.js'; // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || unsafeStringify(b); +} + +export default v1; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/v3.js b/node_modules/uuid/dist/esm-browser/v3.js new file mode 100644 index 0000000..09063b8 --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/v3.js @@ -0,0 +1,4 @@ +import v35 from './v35.js'; +import md5 from './md5.js'; +const v3 = v35('v3', 0x30, md5); +export default v3; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/v35.js b/node_modules/uuid/dist/esm-browser/v35.js new file mode 100644 index 0000000..3355e1f --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/v35.js @@ -0,0 +1,66 @@ +import { unsafeStringify } from './stringify.js'; +import parse from './parse.js'; + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +export const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +export const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +export default function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + var _namespace; + + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = parse(namespace); + } + + if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return unsafeStringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/v4.js b/node_modules/uuid/dist/esm-browser/v4.js new file mode 100644 index 0000000..95ea879 --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/v4.js @@ -0,0 +1,29 @@ +import native from './native.js'; +import rng from './rng.js'; +import { unsafeStringify } from './stringify.js'; + +function v4(options, buf, offset) { + if (native.randomUUID && !buf && !options) { + return native.randomUUID(); + } + + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return unsafeStringify(rnds); +} + +export default v4; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/v5.js b/node_modules/uuid/dist/esm-browser/v5.js new file mode 100644 index 0000000..e87fe31 --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/v5.js @@ -0,0 +1,4 @@ +import v35 from './v35.js'; +import sha1 from './sha1.js'; +const v5 = v35('v5', 0x50, sha1); +export default v5; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/validate.js b/node_modules/uuid/dist/esm-browser/validate.js new file mode 100644 index 0000000..f1cdc7a --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/validate.js @@ -0,0 +1,7 @@ +import REGEX from './regex.js'; + +function validate(uuid) { + return typeof uuid === 'string' && REGEX.test(uuid); +} + +export default validate; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-browser/version.js b/node_modules/uuid/dist/esm-browser/version.js new file mode 100644 index 0000000..9363076 --- /dev/null +++ b/node_modules/uuid/dist/esm-browser/version.js @@ -0,0 +1,11 @@ +import validate from './validate.js'; + +function version(uuid) { + if (!validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.slice(14, 15), 16); +} + +export default version; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/index.js b/node_modules/uuid/dist/esm-node/index.js new file mode 100644 index 0000000..1db6f6d --- /dev/null +++ b/node_modules/uuid/dist/esm-node/index.js @@ -0,0 +1,9 @@ +export { default as v1 } from './v1.js'; +export { default as v3 } from './v3.js'; +export { default as v4 } from './v4.js'; +export { default as v5 } from './v5.js'; +export { default as NIL } from './nil.js'; +export { default as version } from './version.js'; +export { default as validate } from './validate.js'; +export { default as stringify } from './stringify.js'; +export { default as parse } from './parse.js'; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/md5.js b/node_modules/uuid/dist/esm-node/md5.js new file mode 100644 index 0000000..4d68b04 --- /dev/null +++ b/node_modules/uuid/dist/esm-node/md5.js @@ -0,0 +1,13 @@ +import crypto from 'crypto'; + +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return crypto.createHash('md5').update(bytes).digest(); +} + +export default md5; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/native.js b/node_modules/uuid/dist/esm-node/native.js new file mode 100644 index 0000000..f0d1992 --- /dev/null +++ b/node_modules/uuid/dist/esm-node/native.js @@ -0,0 +1,4 @@ +import crypto from 'crypto'; +export default { + randomUUID: crypto.randomUUID +}; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/nil.js b/node_modules/uuid/dist/esm-node/nil.js new file mode 100644 index 0000000..b36324c --- /dev/null +++ b/node_modules/uuid/dist/esm-node/nil.js @@ -0,0 +1 @@ +export default '00000000-0000-0000-0000-000000000000'; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/parse.js b/node_modules/uuid/dist/esm-node/parse.js new file mode 100644 index 0000000..6421c5d --- /dev/null +++ b/node_modules/uuid/dist/esm-node/parse.js @@ -0,0 +1,35 @@ +import validate from './validate.js'; + +function parse(uuid) { + if (!validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +export default parse; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/regex.js b/node_modules/uuid/dist/esm-node/regex.js new file mode 100644 index 0000000..3da8673 --- /dev/null +++ b/node_modules/uuid/dist/esm-node/regex.js @@ -0,0 +1 @@ +export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/rng.js b/node_modules/uuid/dist/esm-node/rng.js new file mode 100644 index 0000000..8006244 --- /dev/null +++ b/node_modules/uuid/dist/esm-node/rng.js @@ -0,0 +1,12 @@ +import crypto from 'crypto'; +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +export default function rng() { + if (poolPtr > rnds8Pool.length - 16) { + crypto.randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/sha1.js b/node_modules/uuid/dist/esm-node/sha1.js new file mode 100644 index 0000000..e23850b --- /dev/null +++ b/node_modules/uuid/dist/esm-node/sha1.js @@ -0,0 +1,13 @@ +import crypto from 'crypto'; + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return crypto.createHash('sha1').update(bytes).digest(); +} + +export default sha1; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/stringify.js b/node_modules/uuid/dist/esm-node/stringify.js new file mode 100644 index 0000000..a6e4c88 --- /dev/null +++ b/node_modules/uuid/dist/esm-node/stringify.js @@ -0,0 +1,33 @@ +import validate from './validate.js'; +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).slice(1)); +} + +export function unsafeStringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; +} + +function stringify(arr, offset = 0) { + const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +export default stringify; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/v1.js b/node_modules/uuid/dist/esm-node/v1.js new file mode 100644 index 0000000..382e5d7 --- /dev/null +++ b/node_modules/uuid/dist/esm-node/v1.js @@ -0,0 +1,95 @@ +import rng from './rng.js'; +import { unsafeStringify } from './stringify.js'; // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || unsafeStringify(b); +} + +export default v1; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/v3.js b/node_modules/uuid/dist/esm-node/v3.js new file mode 100644 index 0000000..09063b8 --- /dev/null +++ b/node_modules/uuid/dist/esm-node/v3.js @@ -0,0 +1,4 @@ +import v35 from './v35.js'; +import md5 from './md5.js'; +const v3 = v35('v3', 0x30, md5); +export default v3; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/v35.js b/node_modules/uuid/dist/esm-node/v35.js new file mode 100644 index 0000000..3355e1f --- /dev/null +++ b/node_modules/uuid/dist/esm-node/v35.js @@ -0,0 +1,66 @@ +import { unsafeStringify } from './stringify.js'; +import parse from './parse.js'; + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +export const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +export const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +export default function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + var _namespace; + + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = parse(namespace); + } + + if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return unsafeStringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/v4.js b/node_modules/uuid/dist/esm-node/v4.js new file mode 100644 index 0000000..95ea879 --- /dev/null +++ b/node_modules/uuid/dist/esm-node/v4.js @@ -0,0 +1,29 @@ +import native from './native.js'; +import rng from './rng.js'; +import { unsafeStringify } from './stringify.js'; + +function v4(options, buf, offset) { + if (native.randomUUID && !buf && !options) { + return native.randomUUID(); + } + + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return unsafeStringify(rnds); +} + +export default v4; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/v5.js b/node_modules/uuid/dist/esm-node/v5.js new file mode 100644 index 0000000..e87fe31 --- /dev/null +++ b/node_modules/uuid/dist/esm-node/v5.js @@ -0,0 +1,4 @@ +import v35 from './v35.js'; +import sha1 from './sha1.js'; +const v5 = v35('v5', 0x50, sha1); +export default v5; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/validate.js b/node_modules/uuid/dist/esm-node/validate.js new file mode 100644 index 0000000..f1cdc7a --- /dev/null +++ b/node_modules/uuid/dist/esm-node/validate.js @@ -0,0 +1,7 @@ +import REGEX from './regex.js'; + +function validate(uuid) { + return typeof uuid === 'string' && REGEX.test(uuid); +} + +export default validate; \ No newline at end of file diff --git a/node_modules/uuid/dist/esm-node/version.js b/node_modules/uuid/dist/esm-node/version.js new file mode 100644 index 0000000..9363076 --- /dev/null +++ b/node_modules/uuid/dist/esm-node/version.js @@ -0,0 +1,11 @@ +import validate from './validate.js'; + +function version(uuid) { + if (!validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.slice(14, 15), 16); +} + +export default version; \ No newline at end of file diff --git a/node_modules/uuid/dist/index.js b/node_modules/uuid/dist/index.js new file mode 100644 index 0000000..88d676a --- /dev/null +++ b/node_modules/uuid/dist/index.js @@ -0,0 +1,79 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NIL", { + enumerable: true, + get: function () { + return _nil.default; + } +}); +Object.defineProperty(exports, "parse", { + enumerable: true, + get: function () { + return _parse.default; + } +}); +Object.defineProperty(exports, "stringify", { + enumerable: true, + get: function () { + return _stringify.default; + } +}); +Object.defineProperty(exports, "v1", { + enumerable: true, + get: function () { + return _v.default; + } +}); +Object.defineProperty(exports, "v3", { + enumerable: true, + get: function () { + return _v2.default; + } +}); +Object.defineProperty(exports, "v4", { + enumerable: true, + get: function () { + return _v3.default; + } +}); +Object.defineProperty(exports, "v5", { + enumerable: true, + get: function () { + return _v4.default; + } +}); +Object.defineProperty(exports, "validate", { + enumerable: true, + get: function () { + return _validate.default; + } +}); +Object.defineProperty(exports, "version", { + enumerable: true, + get: function () { + return _version.default; + } +}); + +var _v = _interopRequireDefault(require("./v1.js")); + +var _v2 = _interopRequireDefault(require("./v3.js")); + +var _v3 = _interopRequireDefault(require("./v4.js")); + +var _v4 = _interopRequireDefault(require("./v5.js")); + +var _nil = _interopRequireDefault(require("./nil.js")); + +var _version = _interopRequireDefault(require("./version.js")); + +var _validate = _interopRequireDefault(require("./validate.js")); + +var _stringify = _interopRequireDefault(require("./stringify.js")); + +var _parse = _interopRequireDefault(require("./parse.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } \ No newline at end of file diff --git a/node_modules/uuid/dist/md5-browser.js b/node_modules/uuid/dist/md5-browser.js new file mode 100644 index 0000000..7a4582a --- /dev/null +++ b/node_modules/uuid/dist/md5-browser.js @@ -0,0 +1,223 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ +function md5(bytes) { + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = new Uint8Array(msg.length); + + for (let i = 0; i < msg.length; ++i) { + bytes[i] = msg.charCodeAt(i); + } + } + + return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); +} +/* + * Convert an array of little-endian words to an array of bytes + */ + + +function md5ToHexEncodedArray(input) { + const output = []; + const length32 = input.length * 32; + const hexTab = '0123456789abcdef'; + + for (let i = 0; i < length32; i += 8) { + const x = input[i >> 5] >>> i % 32 & 0xff; + const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16); + output.push(hex); + } + + return output; +} +/** + * Calculate output length with padding and bit length + */ + + +function getOutputLength(inputLength8) { + return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; +} +/* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + + +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << len % 32; + x[getOutputLength(len) - 1] = len; + let a = 1732584193; + let b = -271733879; + let c = -1732584194; + let d = 271733878; + + for (let i = 0; i < x.length; i += 16) { + const olda = a; + const oldb = b; + const oldc = c; + const oldd = d; + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + + return [a, b, c, d]; +} +/* + * Convert an array bytes to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + + +function bytesToWords(input) { + if (input.length === 0) { + return []; + } + + const length8 = input.length * 8; + const output = new Uint32Array(getOutputLength(length8)); + + for (let i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[i / 8] & 0xff) << i % 32; + } + + return output; +} +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + + +function safeAdd(x, y) { + const lsw = (x & 0xffff) + (y & 0xffff); + const msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xffff; +} +/* + * Bitwise rotate a 32-bit number to the left. + */ + + +function bitRotateLeft(num, cnt) { + return num << cnt | num >>> 32 - cnt; +} +/* + * These functions implement the four basic operations the algorithm uses. + */ + + +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} + +function md5ff(a, b, c, d, x, s, t) { + return md5cmn(b & c | ~b & d, a, b, x, s, t); +} + +function md5gg(a, b, c, d, x, s, t) { + return md5cmn(b & d | c & ~d, a, b, x, s, t); +} + +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} + +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | ~d), a, b, x, s, t); +} + +var _default = md5; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/md5.js b/node_modules/uuid/dist/md5.js new file mode 100644 index 0000000..824d481 --- /dev/null +++ b/node_modules/uuid/dist/md5.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _crypto = _interopRequireDefault(require("crypto")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return _crypto.default.createHash('md5').update(bytes).digest(); +} + +var _default = md5; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/native-browser.js b/node_modules/uuid/dist/native-browser.js new file mode 100644 index 0000000..c2eea59 --- /dev/null +++ b/node_modules/uuid/dist/native-browser.js @@ -0,0 +1,11 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto); +var _default = { + randomUUID +}; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/native.js b/node_modules/uuid/dist/native.js new file mode 100644 index 0000000..de80469 --- /dev/null +++ b/node_modules/uuid/dist/native.js @@ -0,0 +1,15 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _crypto = _interopRequireDefault(require("crypto")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _default = { + randomUUID: _crypto.default.randomUUID +}; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/nil.js b/node_modules/uuid/dist/nil.js new file mode 100644 index 0000000..7ade577 --- /dev/null +++ b/node_modules/uuid/dist/nil.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = '00000000-0000-0000-0000-000000000000'; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/parse.js b/node_modules/uuid/dist/parse.js new file mode 100644 index 0000000..4c69fc3 --- /dev/null +++ b/node_modules/uuid/dist/parse.js @@ -0,0 +1,45 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _validate = _interopRequireDefault(require("./validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function parse(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +var _default = parse; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/regex.js b/node_modules/uuid/dist/regex.js new file mode 100644 index 0000000..1ef91d6 --- /dev/null +++ b/node_modules/uuid/dist/regex.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/rng-browser.js b/node_modules/uuid/dist/rng-browser.js new file mode 100644 index 0000000..d067cdb --- /dev/null +++ b/node_modules/uuid/dist/rng-browser.js @@ -0,0 +1,25 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = rng; +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +let getRandomValues; +const rnds8 = new Uint8Array(16); + +function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); +} \ No newline at end of file diff --git a/node_modules/uuid/dist/rng.js b/node_modules/uuid/dist/rng.js new file mode 100644 index 0000000..3507f93 --- /dev/null +++ b/node_modules/uuid/dist/rng.js @@ -0,0 +1,24 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = rng; + +var _crypto = _interopRequireDefault(require("crypto")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; + +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + _crypto.default.randomFillSync(rnds8Pool); + + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} \ No newline at end of file diff --git a/node_modules/uuid/dist/sha1-browser.js b/node_modules/uuid/dist/sha1-browser.js new file mode 100644 index 0000000..24cbced --- /dev/null +++ b/node_modules/uuid/dist/sha1-browser.js @@ -0,0 +1,104 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +function f(s, x, y, z) { + switch (s) { + case 0: + return x & y ^ ~x & z; + + case 1: + return x ^ y ^ z; + + case 2: + return x & y ^ x & z ^ y & z; + + case 3: + return x ^ y ^ z; + } +} + +function ROTL(x, n) { + return x << n | x >>> 32 - n; +} + +function sha1(bytes) { + const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = []; + + for (let i = 0; i < msg.length; ++i) { + bytes.push(msg.charCodeAt(i)); + } + } else if (!Array.isArray(bytes)) { + // Convert Array-like to Array + bytes = Array.prototype.slice.call(bytes); + } + + bytes.push(0x80); + const l = bytes.length / 4 + 2; + const N = Math.ceil(l / 16); + const M = new Array(N); + + for (let i = 0; i < N; ++i) { + const arr = new Uint32Array(16); + + for (let j = 0; j < 16; ++j) { + arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3]; + } + + M[i] = arr; + } + + M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); + M[N - 1][14] = Math.floor(M[N - 1][14]); + M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff; + + for (let i = 0; i < N; ++i) { + const W = new Uint32Array(80); + + for (let t = 0; t < 16; ++t) { + W[t] = M[i][t]; + } + + for (let t = 16; t < 80; ++t) { + W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); + } + + let a = H[0]; + let b = H[1]; + let c = H[2]; + let d = H[3]; + let e = H[4]; + + for (let t = 0; t < 80; ++t) { + const s = Math.floor(t / 20); + const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + + H[0] = H[0] + a >>> 0; + H[1] = H[1] + b >>> 0; + H[2] = H[2] + c >>> 0; + H[3] = H[3] + d >>> 0; + H[4] = H[4] + e >>> 0; + } + + return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff]; +} + +var _default = sha1; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/sha1.js b/node_modules/uuid/dist/sha1.js new file mode 100644 index 0000000..03bdd63 --- /dev/null +++ b/node_modules/uuid/dist/sha1.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _crypto = _interopRequireDefault(require("crypto")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return _crypto.default.createHash('sha1').update(bytes).digest(); +} + +var _default = sha1; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/stringify.js b/node_modules/uuid/dist/stringify.js new file mode 100644 index 0000000..390bf89 --- /dev/null +++ b/node_modules/uuid/dist/stringify.js @@ -0,0 +1,44 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +exports.unsafeStringify = unsafeStringify; + +var _validate = _interopRequireDefault(require("./validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).slice(1)); +} + +function unsafeStringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; +} + +function stringify(arr, offset = 0) { + const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!(0, _validate.default)(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +var _default = stringify; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/uuid-bin.js b/node_modules/uuid/dist/uuid-bin.js new file mode 100644 index 0000000..50a7a9f --- /dev/null +++ b/node_modules/uuid/dist/uuid-bin.js @@ -0,0 +1,85 @@ +"use strict"; + +var _assert = _interopRequireDefault(require("assert")); + +var _v = _interopRequireDefault(require("./v1.js")); + +var _v2 = _interopRequireDefault(require("./v3.js")); + +var _v3 = _interopRequireDefault(require("./v4.js")); + +var _v4 = _interopRequireDefault(require("./v5.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function usage() { + console.log('Usage:'); + console.log(' uuid'); + console.log(' uuid v1'); + console.log(' uuid v3 '); + console.log(' uuid v4'); + console.log(' uuid v5 '); + console.log(' uuid --help'); + console.log('\nNote: may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122'); +} + +const args = process.argv.slice(2); + +if (args.indexOf('--help') >= 0) { + usage(); + process.exit(0); +} + +const version = args.shift() || 'v4'; + +switch (version) { + case 'v1': + console.log((0, _v.default)()); + break; + + case 'v3': + { + const name = args.shift(); + let namespace = args.shift(); + (0, _assert.default)(name != null, 'v3 name not specified'); + (0, _assert.default)(namespace != null, 'v3 namespace not specified'); + + if (namespace === 'URL') { + namespace = _v2.default.URL; + } + + if (namespace === 'DNS') { + namespace = _v2.default.DNS; + } + + console.log((0, _v2.default)(name, namespace)); + break; + } + + case 'v4': + console.log((0, _v3.default)()); + break; + + case 'v5': + { + const name = args.shift(); + let namespace = args.shift(); + (0, _assert.default)(name != null, 'v5 name not specified'); + (0, _assert.default)(namespace != null, 'v5 namespace not specified'); + + if (namespace === 'URL') { + namespace = _v4.default.URL; + } + + if (namespace === 'DNS') { + namespace = _v4.default.DNS; + } + + console.log((0, _v4.default)(name, namespace)); + break; + } + + default: + usage(); + process.exit(1); +} \ No newline at end of file diff --git a/node_modules/uuid/dist/v1.js b/node_modules/uuid/dist/v1.js new file mode 100644 index 0000000..125bc58 --- /dev/null +++ b/node_modules/uuid/dist/v1.js @@ -0,0 +1,107 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _rng = _interopRequireDefault(require("./rng.js")); + +var _stringify = require("./stringify.js"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || _rng.default)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || (0, _stringify.unsafeStringify)(b); +} + +var _default = v1; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/v3.js b/node_modules/uuid/dist/v3.js new file mode 100644 index 0000000..6b47ff5 --- /dev/null +++ b/node_modules/uuid/dist/v3.js @@ -0,0 +1,16 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _v = _interopRequireDefault(require("./v35.js")); + +var _md = _interopRequireDefault(require("./md5.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const v3 = (0, _v.default)('v3', 0x30, _md.default); +var _default = v3; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/v35.js b/node_modules/uuid/dist/v35.js new file mode 100644 index 0000000..7c522d9 --- /dev/null +++ b/node_modules/uuid/dist/v35.js @@ -0,0 +1,80 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.URL = exports.DNS = void 0; +exports.default = v35; + +var _stringify = require("./stringify.js"); + +var _parse = _interopRequireDefault(require("./parse.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +exports.DNS = DNS; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +exports.URL = URL; + +function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + var _namespace; + + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = (0, _parse.default)(namespace); + } + + if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return (0, _stringify.unsafeStringify)(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} \ No newline at end of file diff --git a/node_modules/uuid/dist/v4.js b/node_modules/uuid/dist/v4.js new file mode 100644 index 0000000..959d698 --- /dev/null +++ b/node_modules/uuid/dist/v4.js @@ -0,0 +1,43 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _native = _interopRequireDefault(require("./native.js")); + +var _rng = _interopRequireDefault(require("./rng.js")); + +var _stringify = require("./stringify.js"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function v4(options, buf, offset) { + if (_native.default.randomUUID && !buf && !options) { + return _native.default.randomUUID(); + } + + options = options || {}; + + const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return (0, _stringify.unsafeStringify)(rnds); +} + +var _default = v4; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/v5.js b/node_modules/uuid/dist/v5.js new file mode 100644 index 0000000..99d615e --- /dev/null +++ b/node_modules/uuid/dist/v5.js @@ -0,0 +1,16 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _v = _interopRequireDefault(require("./v35.js")); + +var _sha = _interopRequireDefault(require("./sha1.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const v5 = (0, _v.default)('v5', 0x50, _sha.default); +var _default = v5; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/validate.js b/node_modules/uuid/dist/validate.js new file mode 100644 index 0000000..fd05215 --- /dev/null +++ b/node_modules/uuid/dist/validate.js @@ -0,0 +1,17 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _regex = _interopRequireDefault(require("./regex.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function validate(uuid) { + return typeof uuid === 'string' && _regex.default.test(uuid); +} + +var _default = validate; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/dist/version.js b/node_modules/uuid/dist/version.js new file mode 100644 index 0000000..f63af01 --- /dev/null +++ b/node_modules/uuid/dist/version.js @@ -0,0 +1,21 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _validate = _interopRequireDefault(require("./validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function version(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.slice(14, 15), 16); +} + +var _default = version; +exports.default = _default; \ No newline at end of file diff --git a/node_modules/uuid/package.json b/node_modules/uuid/package.json new file mode 100644 index 0000000..6cc3361 --- /dev/null +++ b/node_modules/uuid/package.json @@ -0,0 +1,135 @@ +{ + "name": "uuid", + "version": "9.0.1", + "description": "RFC4122 (v1, v4, and v5) UUIDs", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "keywords": [ + "uuid", + "guid", + "rfc4122" + ], + "license": "MIT", + "bin": { + "uuid": "./dist/bin/uuid" + }, + "sideEffects": false, + "main": "./dist/index.js", + "exports": { + ".": { + "node": { + "module": "./dist/esm-node/index.js", + "require": "./dist/index.js", + "import": "./wrapper.mjs" + }, + "browser": { + "import": "./dist/esm-browser/index.js", + "require": "./dist/commonjs-browser/index.js" + }, + "default": "./dist/esm-browser/index.js" + }, + "./package.json": "./package.json" + }, + "module": "./dist/esm-node/index.js", + "browser": { + "./dist/md5.js": "./dist/md5-browser.js", + "./dist/native.js": "./dist/native-browser.js", + "./dist/rng.js": "./dist/rng-browser.js", + "./dist/sha1.js": "./dist/sha1-browser.js", + "./dist/esm-node/index.js": "./dist/esm-browser/index.js" + }, + "files": [ + "CHANGELOG.md", + "CONTRIBUTING.md", + "LICENSE.md", + "README.md", + "dist", + "wrapper.mjs" + ], + "devDependencies": { + "@babel/cli": "7.18.10", + "@babel/core": "7.18.10", + "@babel/eslint-parser": "7.18.9", + "@babel/preset-env": "7.18.10", + "@commitlint/cli": "17.0.3", + "@commitlint/config-conventional": "17.0.3", + "bundlewatch": "0.3.3", + "eslint": "8.21.0", + "eslint-config-prettier": "8.5.0", + "eslint-config-standard": "17.0.0", + "eslint-plugin-import": "2.26.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-prettier": "4.2.1", + "eslint-plugin-promise": "6.0.0", + "husky": "8.0.1", + "jest": "28.1.3", + "lint-staged": "13.0.3", + "npm-run-all": "4.1.5", + "optional-dev-dependency": "2.0.1", + "prettier": "2.7.1", + "random-seed": "0.3.0", + "runmd": "1.3.9", + "standard-version": "9.5.0" + }, + "optionalDevDependencies": { + "@wdio/browserstack-service": "7.16.10", + "@wdio/cli": "7.16.10", + "@wdio/jasmine-framework": "7.16.6", + "@wdio/local-runner": "7.16.10", + "@wdio/spec-reporter": "7.16.9", + "@wdio/static-server-service": "7.16.6" + }, + "scripts": { + "examples:browser:webpack:build": "cd examples/browser-webpack && npm install && npm run build", + "examples:browser:rollup:build": "cd examples/browser-rollup && npm install && npm run build", + "examples:node:commonjs:test": "cd examples/node-commonjs && npm install && npm test", + "examples:node:esmodules:test": "cd examples/node-esmodules && npm install && npm test", + "examples:node:jest:test": "cd examples/node-jest && npm install && npm test", + "prepare": "cd $( git rev-parse --show-toplevel ) && husky install", + "lint": "npm run eslint:check && npm run prettier:check", + "eslint:check": "eslint src/ test/ examples/ *.js", + "eslint:fix": "eslint --fix src/ test/ examples/ *.js", + "pretest": "[ -n $CI ] || npm run build", + "test": "BABEL_ENV=commonjsNode node --throw-deprecation node_modules/.bin/jest test/unit/", + "pretest:browser": "optional-dev-dependency && npm run build && npm-run-all --parallel examples:browser:**", + "test:browser": "wdio run ./wdio.conf.js", + "pretest:node": "npm run build", + "test:node": "npm-run-all --parallel examples:node:**", + "test:pack": "./scripts/testpack.sh", + "pretest:benchmark": "npm run build", + "test:benchmark": "cd examples/benchmark && npm install && npm test", + "prettier:check": "prettier --check '**/*.{js,jsx,json,md}'", + "prettier:fix": "prettier --write '**/*.{js,jsx,json,md}'", + "bundlewatch": "npm run pretest:browser && bundlewatch --config bundlewatch.config.json", + "md": "runmd --watch --output=README.md README_js.md", + "docs": "( node --version | grep -q 'v18' ) && ( npm run build && npx runmd --output=README.md README_js.md )", + "docs:diff": "npm run docs && git diff --quiet README.md", + "build": "./scripts/build.sh", + "prepack": "npm run build", + "release": "standard-version --no-verify" + }, + "repository": { + "type": "git", + "url": "https://github.com/uuidjs/uuid.git" + }, + "lint-staged": { + "*.{js,jsx,json,md}": [ + "prettier --write" + ], + "*.{js,jsx}": [ + "eslint --fix" + ] + }, + "standard-version": { + "scripts": { + "postchangelog": "prettier --write CHANGELOG.md" + } + } +} diff --git a/node_modules/uuid/wrapper.mjs b/node_modules/uuid/wrapper.mjs new file mode 100644 index 0000000..c31e9ce --- /dev/null +++ b/node_modules/uuid/wrapper.mjs @@ -0,0 +1,10 @@ +import uuid from './dist/index.js'; +export const v1 = uuid.v1; +export const v3 = uuid.v3; +export const v4 = uuid.v4; +export const v5 = uuid.v5; +export const NIL = uuid.NIL; +export const version = uuid.version; +export const validate = uuid.validate; +export const stringify = uuid.stringify; +export const parse = uuid.parse; diff --git a/node_modules/vary/HISTORY.md b/node_modules/vary/HISTORY.md new file mode 100644 index 0000000..f6cbcf7 --- /dev/null +++ b/node_modules/vary/HISTORY.md @@ -0,0 +1,39 @@ +1.1.2 / 2017-09-23 +================== + + * perf: improve header token parsing speed + +1.1.1 / 2017-03-20 +================== + + * perf: hoist regular expression + +1.1.0 / 2015-09-29 +================== + + * Only accept valid field names in the `field` argument + - Ensures the resulting string is a valid HTTP header value + +1.0.1 / 2015-07-08 +================== + + * Fix setting empty header from empty `field` + * perf: enable strict mode + * perf: remove argument reassignments + +1.0.0 / 2014-08-10 +================== + + * Accept valid `Vary` header string as `field` + * Add `vary.append` for low-level string manipulation + * Move to `jshttp` orgainzation + +0.1.0 / 2014-06-05 +================== + + * Support array of fields to set + +0.0.0 / 2014-06-04 +================== + + * Initial release diff --git a/node_modules/vary/LICENSE b/node_modules/vary/LICENSE new file mode 100644 index 0000000..84441fb --- /dev/null +++ b/node_modules/vary/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/node_modules/vary/README.md b/node_modules/vary/README.md new file mode 100644 index 0000000..cc000b3 --- /dev/null +++ b/node_modules/vary/README.md @@ -0,0 +1,101 @@ +# vary + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Manipulate the HTTP Vary header + +## Installation + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install vary +``` + +## API + + + +```js +var vary = require('vary') +``` + +### vary(res, field) + +Adds the given header `field` to the `Vary` response header of `res`. +This can be a string of a single field, a string of a valid `Vary` +header, or an array of multiple fields. + +This will append the header if not already listed, otherwise leaves +it listed in the current location. + + + +```js +// Append "Origin" to the Vary header of the response +vary(res, 'Origin') +``` + +### vary.append(header, field) + +Adds the given header `field` to the `Vary` response header string `header`. +This can be a string of a single field, a string of a valid `Vary` header, +or an array of multiple fields. + +This will append the header if not already listed, otherwise leaves +it listed in the current location. The new header string is returned. + + + +```js +// Get header string appending "Origin" to "Accept, User-Agent" +vary.append('Accept, User-Agent', 'Origin') +``` + +## Examples + +### Updating the Vary header when content is based on it + +```js +var http = require('http') +var vary = require('vary') + +http.createServer(function onRequest (req, res) { + // about to user-agent sniff + vary(res, 'User-Agent') + + var ua = req.headers['user-agent'] || '' + var isMobile = /mobi|android|touch|mini/i.test(ua) + + // serve site, depending on isMobile + res.setHeader('Content-Type', 'text/html') + res.end('You are (probably) ' + (isMobile ? '' : 'not ') + 'a mobile user') +}) +``` + +## Testing + +```sh +$ npm test +``` + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/vary.svg +[npm-url]: https://npmjs.org/package/vary +[node-version-image]: https://img.shields.io/node/v/vary.svg +[node-version-url]: https://nodejs.org/en/download +[travis-image]: https://img.shields.io/travis/jshttp/vary/master.svg +[travis-url]: https://travis-ci.org/jshttp/vary +[coveralls-image]: https://img.shields.io/coveralls/jshttp/vary/master.svg +[coveralls-url]: https://coveralls.io/r/jshttp/vary +[downloads-image]: https://img.shields.io/npm/dm/vary.svg +[downloads-url]: https://npmjs.org/package/vary diff --git a/node_modules/vary/index.js b/node_modules/vary/index.js new file mode 100644 index 0000000..5b5e741 --- /dev/null +++ b/node_modules/vary/index.js @@ -0,0 +1,149 @@ +/*! + * vary + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + */ + +module.exports = vary +module.exports.append = append + +/** + * RegExp to match field-name in RFC 7230 sec 3.2 + * + * field-name = token + * token = 1*tchar + * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" + * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" + * / DIGIT / ALPHA + * ; any VCHAR, except delimiters + */ + +var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/ + +/** + * Append a field to a vary header. + * + * @param {String} header + * @param {String|Array} field + * @return {String} + * @public + */ + +function append (header, field) { + if (typeof header !== 'string') { + throw new TypeError('header argument is required') + } + + if (!field) { + throw new TypeError('field argument is required') + } + + // get fields array + var fields = !Array.isArray(field) + ? parse(String(field)) + : field + + // assert on invalid field names + for (var j = 0; j < fields.length; j++) { + if (!FIELD_NAME_REGEXP.test(fields[j])) { + throw new TypeError('field argument contains an invalid header name') + } + } + + // existing, unspecified vary + if (header === '*') { + return header + } + + // enumerate current values + var val = header + var vals = parse(header.toLowerCase()) + + // unspecified vary + if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) { + return '*' + } + + for (var i = 0; i < fields.length; i++) { + var fld = fields[i].toLowerCase() + + // append value (case-preserving) + if (vals.indexOf(fld) === -1) { + vals.push(fld) + val = val + ? val + ', ' + fields[i] + : fields[i] + } + } + + return val +} + +/** + * Parse a vary header into an array. + * + * @param {String} header + * @return {Array} + * @private + */ + +function parse (header) { + var end = 0 + var list = [] + var start = 0 + + // gather tokens + for (var i = 0, len = header.length; i < len; i++) { + switch (header.charCodeAt(i)) { + case 0x20: /* */ + if (start === end) { + start = end = i + 1 + } + break + case 0x2c: /* , */ + list.push(header.substring(start, end)) + start = end = i + 1 + break + default: + end = i + 1 + break + } + } + + // final token + list.push(header.substring(start, end)) + + return list +} + +/** + * Mark that a request is varied on a header field. + * + * @param {Object} res + * @param {String|Array} field + * @public + */ + +function vary (res, field) { + if (!res || !res.getHeader || !res.setHeader) { + // quack quack + throw new TypeError('res argument is required') + } + + // get existing header + var val = res.getHeader('Vary') || '' + var header = Array.isArray(val) + ? val.join(', ') + : String(val) + + // set new header + if ((val = append(header, field))) { + res.setHeader('Vary', val) + } +} diff --git a/node_modules/vary/package.json b/node_modules/vary/package.json new file mode 100644 index 0000000..028f72a --- /dev/null +++ b/node_modules/vary/package.json @@ -0,0 +1,43 @@ +{ + "name": "vary", + "description": "Manipulate the HTTP Vary header", + "version": "1.1.2", + "author": "Douglas Christopher Wilson ", + "license": "MIT", + "keywords": [ + "http", + "res", + "vary" + ], + "repository": "jshttp/vary", + "devDependencies": { + "beautify-benchmark": "0.2.4", + "benchmark": "2.1.4", + "eslint": "3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-plugin-import": "2.7.0", + "eslint-plugin-markdown": "1.0.0-beta.6", + "eslint-plugin-node": "5.1.1", + "eslint-plugin-promise": "3.5.0", + "eslint-plugin-standard": "3.0.1", + "istanbul": "0.4.5", + "mocha": "2.5.3", + "supertest": "1.1.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js" + ], + "engines": { + "node": ">= 0.8" + }, + "scripts": { + "bench": "node benchmark/index.js", + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + } +} diff --git a/node_modules/ws/LICENSE b/node_modules/ws/LICENSE new file mode 100644 index 0000000..1da5b96 --- /dev/null +++ b/node_modules/ws/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2011 Einar Otto Stangvik +Copyright (c) 2013 Arnout Kazemier and contributors +Copyright (c) 2016 Luigi Pinca and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ws/README.md b/node_modules/ws/README.md new file mode 100644 index 0000000..21f10df --- /dev/null +++ b/node_modules/ws/README.md @@ -0,0 +1,548 @@ +# ws: a Node.js WebSocket library + +[![Version npm](https://img.shields.io/npm/v/ws.svg?logo=npm)](https://www.npmjs.com/package/ws) +[![CI](https://img.shields.io/github/actions/workflow/status/websockets/ws/ci.yml?branch=master&label=CI&logo=github)](https://github.com/websockets/ws/actions?query=workflow%3ACI+branch%3Amaster) +[![Coverage Status](https://img.shields.io/coveralls/websockets/ws/master.svg?logo=coveralls)](https://coveralls.io/github/websockets/ws) + +ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and +server implementation. + +Passes the quite extensive Autobahn test suite: [server][server-report], +[client][client-report]. + +**Note**: This module does not work in the browser. The client in the docs is a +reference to a backend with the role of a client in the WebSocket communication. +Browser clients must use the native +[`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) +object. To make the same code work seamlessly on Node.js and the browser, you +can use one of the many wrappers available on npm, like +[isomorphic-ws](https://github.com/heineiuo/isomorphic-ws). + +## Table of Contents + +- [Protocol support](#protocol-support) +- [Installing](#installing) + - [Opt-in for performance](#opt-in-for-performance) + - [Legacy opt-in for performance](#legacy-opt-in-for-performance) +- [API docs](#api-docs) +- [WebSocket compression](#websocket-compression) +- [Usage examples](#usage-examples) + - [Sending and receiving text data](#sending-and-receiving-text-data) + - [Sending binary data](#sending-binary-data) + - [Simple server](#simple-server) + - [External HTTP/S server](#external-https-server) + - [Multiple servers sharing a single HTTP/S server](#multiple-servers-sharing-a-single-https-server) + - [Client authentication](#client-authentication) + - [Server broadcast](#server-broadcast) + - [Round-trip time](#round-trip-time) + - [Use the Node.js streams API](#use-the-nodejs-streams-api) + - [Other examples](#other-examples) +- [FAQ](#faq) + - [How to get the IP address of the client?](#how-to-get-the-ip-address-of-the-client) + - [How to detect and close broken connections?](#how-to-detect-and-close-broken-connections) + - [How to connect via a proxy?](#how-to-connect-via-a-proxy) +- [Changelog](#changelog) +- [License](#license) + +## Protocol support + +- **HyBi drafts 07-12** (Use the option `protocolVersion: 8`) +- **HyBi drafts 13-17** (Current default, alternatively option + `protocolVersion: 13`) + +## Installing + +``` +npm install ws +``` + +### Opt-in for performance + +[bufferutil][] is an optional module that can be installed alongside the ws +module: + +``` +npm install --save-optional bufferutil +``` + +This is a binary addon that improves the performance of certain operations such +as masking and unmasking the data payload of the WebSocket frames. Prebuilt +binaries are available for the most popular platforms, so you don't necessarily +need to have a C++ compiler installed on your machine. + +To force ws to not use bufferutil, use the +[`WS_NO_BUFFER_UTIL`](./doc/ws.md#ws_no_buffer_util) environment variable. This +can be useful to enhance security in systems where a user can put a package in +the package search path of an application of another user, due to how the +Node.js resolver algorithm works. + +#### Legacy opt-in for performance + +If you are running on an old version of Node.js (prior to v18.14.0), ws also +supports the [utf-8-validate][] module: + +``` +npm install --save-optional utf-8-validate +``` + +This contains a binary polyfill for [`buffer.isUtf8()`][]. + +To force ws not to use utf-8-validate, use the +[`WS_NO_UTF_8_VALIDATE`](./doc/ws.md#ws_no_utf_8_validate) environment variable. + +## API docs + +See [`/doc/ws.md`](./doc/ws.md) for Node.js-like documentation of ws classes and +utility functions. + +## WebSocket compression + +ws supports the [permessage-deflate extension][permessage-deflate] which enables +the client and server to negotiate a compression algorithm and its parameters, +and then selectively apply it to the data payloads of each WebSocket message. + +The extension is disabled by default on the server and enabled by default on the +client. It adds a significant overhead in terms of performance and memory +consumption so we suggest to enable it only if it is really needed. + +Note that Node.js has a variety of issues with high-performance compression, +where increased concurrency, especially on Linux, can lead to [catastrophic +memory fragmentation][node-zlib-bug] and slow performance. If you intend to use +permessage-deflate in production, it is worthwhile to set up a test +representative of your workload and ensure Node.js/zlib will handle it with +acceptable performance and memory usage. + +Tuning of permessage-deflate can be done via the options defined below. You can +also use `zlibDeflateOptions` and `zlibInflateOptions`, which is passed directly +into the creation of [raw deflate/inflate streams][node-zlib-deflaterawdocs]. + +See [the docs][ws-server-options] for more options. + +```js +import WebSocket, { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ + port: 8080, + perMessageDeflate: { + zlibDeflateOptions: { + // See zlib defaults. + chunkSize: 1024, + memLevel: 7, + level: 3 + }, + zlibInflateOptions: { + chunkSize: 10 * 1024 + }, + // Other options settable: + clientNoContextTakeover: true, // Defaults to negotiated value. + serverNoContextTakeover: true, // Defaults to negotiated value. + serverMaxWindowBits: 10, // Defaults to negotiated value. + // Below options specified as default values. + concurrencyLimit: 10, // Limits zlib concurrency for perf. + threshold: 1024 // Size (in bytes) below which messages + // should not be compressed if context takeover is disabled. + } +}); +``` + +The client will only use the extension if it is supported and enabled on the +server. To always disable the extension on the client, set the +`perMessageDeflate` option to `false`. + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('ws://www.host.com/path', { + perMessageDeflate: false +}); +``` + +## Usage examples + +### Sending and receiving text data + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('ws://www.host.com/path'); + +ws.on('error', console.error); + +ws.on('open', function open() { + ws.send('something'); +}); + +ws.on('message', function message(data) { + console.log('received: %s', data); +}); +``` + +### Sending binary data + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('ws://www.host.com/path'); + +ws.on('error', console.error); + +ws.on('open', function open() { + const array = new Float32Array(5); + + for (var i = 0; i < array.length; ++i) { + array[i] = i / 2; + } + + ws.send(array); +}); +``` + +### Simple server + +```js +import { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data) { + console.log('received: %s', data); + }); + + ws.send('something'); +}); +``` + +### External HTTP/S server + +```js +import { createServer } from 'https'; +import { readFileSync } from 'fs'; +import { WebSocketServer } from 'ws'; + +const server = createServer({ + cert: readFileSync('/path/to/cert.pem'), + key: readFileSync('/path/to/key.pem') +}); +const wss = new WebSocketServer({ server }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data) { + console.log('received: %s', data); + }); + + ws.send('something'); +}); + +server.listen(8080); +``` + +### Multiple servers sharing a single HTTP/S server + +```js +import { createServer } from 'http'; +import { WebSocketServer } from 'ws'; + +const server = createServer(); +const wss1 = new WebSocketServer({ noServer: true }); +const wss2 = new WebSocketServer({ noServer: true }); + +wss1.on('connection', function connection(ws) { + ws.on('error', console.error); + + // ... +}); + +wss2.on('connection', function connection(ws) { + ws.on('error', console.error); + + // ... +}); + +server.on('upgrade', function upgrade(request, socket, head) { + const { pathname } = new URL(request.url, 'wss://base.url'); + + if (pathname === '/foo') { + wss1.handleUpgrade(request, socket, head, function done(ws) { + wss1.emit('connection', ws, request); + }); + } else if (pathname === '/bar') { + wss2.handleUpgrade(request, socket, head, function done(ws) { + wss2.emit('connection', ws, request); + }); + } else { + socket.destroy(); + } +}); + +server.listen(8080); +``` + +### Client authentication + +```js +import { createServer } from 'http'; +import { WebSocketServer } from 'ws'; + +function onSocketError(err) { + console.error(err); +} + +const server = createServer(); +const wss = new WebSocketServer({ noServer: true }); + +wss.on('connection', function connection(ws, request, client) { + ws.on('error', console.error); + + ws.on('message', function message(data) { + console.log(`Received message ${data} from user ${client}`); + }); +}); + +server.on('upgrade', function upgrade(request, socket, head) { + socket.on('error', onSocketError); + + // This function is not defined on purpose. Implement it with your own logic. + authenticate(request, function next(err, client) { + if (err || !client) { + socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n'); + socket.destroy(); + return; + } + + socket.removeListener('error', onSocketError); + + wss.handleUpgrade(request, socket, head, function done(ws) { + wss.emit('connection', ws, request, client); + }); + }); +}); + +server.listen(8080); +``` + +Also see the provided [example][session-parse-example] using `express-session`. + +### Server broadcast + +A client WebSocket broadcasting to all connected WebSocket clients, including +itself. + +```js +import WebSocket, { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data, isBinary) { + wss.clients.forEach(function each(client) { + if (client.readyState === WebSocket.OPEN) { + client.send(data, { binary: isBinary }); + } + }); + }); +}); +``` + +A client WebSocket broadcasting to every other connected WebSocket clients, +excluding itself. + +```js +import WebSocket, { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data, isBinary) { + wss.clients.forEach(function each(client) { + if (client !== ws && client.readyState === WebSocket.OPEN) { + client.send(data, { binary: isBinary }); + } + }); + }); +}); +``` + +### Round-trip time + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('wss://websocket-echo.com/'); + +ws.on('error', console.error); + +ws.on('open', function open() { + console.log('connected'); + ws.send(Date.now()); +}); + +ws.on('close', function close() { + console.log('disconnected'); +}); + +ws.on('message', function message(data) { + console.log(`Round-trip time: ${Date.now() - data} ms`); + + setTimeout(function timeout() { + ws.send(Date.now()); + }, 500); +}); +``` + +### Use the Node.js streams API + +```js +import WebSocket, { createWebSocketStream } from 'ws'; + +const ws = new WebSocket('wss://websocket-echo.com/'); + +const duplex = createWebSocketStream(ws, { encoding: 'utf8' }); + +duplex.on('error', console.error); + +duplex.pipe(process.stdout); +process.stdin.pipe(duplex); +``` + +### Other examples + +For a full example with a browser client communicating with a ws server, see the +examples folder. + +Otherwise, see the test cases. + +## FAQ + +### How to get the IP address of the client? + +The remote IP address can be obtained from the raw socket. + +```js +import { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws, req) { + const ip = req.socket.remoteAddress; + + ws.on('error', console.error); +}); +``` + +When the server runs behind a proxy like NGINX, the de-facto standard is to use +the `X-Forwarded-For` header. + +```js +wss.on('connection', function connection(ws, req) { + const ip = req.headers['x-forwarded-for'].split(',')[0].trim(); + + ws.on('error', console.error); +}); +``` + +### How to detect and close broken connections? + +Sometimes, the link between the server and the client can be interrupted in a +way that keeps both the server and the client unaware of the broken state of the +connection (e.g. when pulling the cord). + +In these cases, ping messages can be used as a means to verify that the remote +endpoint is still responsive. + +```js +import { WebSocketServer } from 'ws'; + +function heartbeat() { + this.isAlive = true; +} + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.isAlive = true; + ws.on('error', console.error); + ws.on('pong', heartbeat); +}); + +const interval = setInterval(function ping() { + wss.clients.forEach(function each(ws) { + if (ws.isAlive === false) return ws.terminate(); + + ws.isAlive = false; + ws.ping(); + }); +}, 30000); + +wss.on('close', function close() { + clearInterval(interval); +}); +``` + +Pong messages are automatically sent in response to ping messages as required by +the spec. + +Just like the server example above, your clients might as well lose connection +without knowing it. You might want to add a ping listener on your clients to +prevent that. A simple implementation would be: + +```js +import WebSocket from 'ws'; + +function heartbeat() { + clearTimeout(this.pingTimeout); + + // Use `WebSocket#terminate()`, which immediately destroys the connection, + // instead of `WebSocket#close()`, which waits for the close timer. + // Delay should be equal to the interval at which your server + // sends out pings plus a conservative assumption of the latency. + this.pingTimeout = setTimeout(() => { + this.terminate(); + }, 30000 + 1000); +} + +const client = new WebSocket('wss://websocket-echo.com/'); + +client.on('error', console.error); +client.on('open', heartbeat); +client.on('ping', heartbeat); +client.on('close', function clear() { + clearTimeout(this.pingTimeout); +}); +``` + +### How to connect via a proxy? + +Use a custom `http.Agent` implementation like [https-proxy-agent][] or +[socks-proxy-agent][]. + +## Changelog + +We're using the GitHub [releases][changelog] for changelog entries. + +## License + +[MIT](LICENSE) + +[`buffer.isutf8()`]: https://nodejs.org/api/buffer.html#bufferisutf8input +[bufferutil]: https://github.com/websockets/bufferutil +[changelog]: https://github.com/websockets/ws/releases +[client-report]: http://websockets.github.io/ws/autobahn/clients/ +[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent +[node-zlib-bug]: https://github.com/nodejs/node/issues/8871 +[node-zlib-deflaterawdocs]: + https://nodejs.org/api/zlib.html#zlib_zlib_createdeflateraw_options +[permessage-deflate]: https://tools.ietf.org/html/rfc7692 +[server-report]: http://websockets.github.io/ws/autobahn/servers/ +[session-parse-example]: ./examples/express-session-parse +[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent +[utf-8-validate]: https://github.com/websockets/utf-8-validate +[ws-server-options]: ./doc/ws.md#new-websocketserveroptions-callback diff --git a/node_modules/ws/browser.js b/node_modules/ws/browser.js new file mode 100644 index 0000000..ca4f628 --- /dev/null +++ b/node_modules/ws/browser.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = function () { + throw new Error( + 'ws does not work in the browser. Browser clients must use the native ' + + 'WebSocket object' + ); +}; diff --git a/node_modules/ws/index.js b/node_modules/ws/index.js new file mode 100644 index 0000000..3fdb7b2 --- /dev/null +++ b/node_modules/ws/index.js @@ -0,0 +1,22 @@ +'use strict'; + +const createWebSocketStream = require('./lib/stream'); +const extension = require('./lib/extension'); +const PerMessageDeflate = require('./lib/permessage-deflate'); +const Receiver = require('./lib/receiver'); +const Sender = require('./lib/sender'); +const subprotocol = require('./lib/subprotocol'); +const WebSocket = require('./lib/websocket'); +const WebSocketServer = require('./lib/websocket-server'); + +WebSocket.createWebSocketStream = createWebSocketStream; +WebSocket.extension = extension; +WebSocket.PerMessageDeflate = PerMessageDeflate; +WebSocket.Receiver = Receiver; +WebSocket.Sender = Sender; +WebSocket.Server = WebSocketServer; +WebSocket.subprotocol = subprotocol; +WebSocket.WebSocket = WebSocket; +WebSocket.WebSocketServer = WebSocketServer; + +module.exports = WebSocket; diff --git a/node_modules/ws/lib/buffer-util.js b/node_modules/ws/lib/buffer-util.js new file mode 100644 index 0000000..f7536e2 --- /dev/null +++ b/node_modules/ws/lib/buffer-util.js @@ -0,0 +1,131 @@ +'use strict'; + +const { EMPTY_BUFFER } = require('./constants'); + +const FastBuffer = Buffer[Symbol.species]; + +/** + * Merges an array of buffers into a new buffer. + * + * @param {Buffer[]} list The array of buffers to concat + * @param {Number} totalLength The total length of buffers in the list + * @return {Buffer} The resulting buffer + * @public + */ +function concat(list, totalLength) { + if (list.length === 0) return EMPTY_BUFFER; + if (list.length === 1) return list[0]; + + const target = Buffer.allocUnsafe(totalLength); + let offset = 0; + + for (let i = 0; i < list.length; i++) { + const buf = list[i]; + target.set(buf, offset); + offset += buf.length; + } + + if (offset < totalLength) { + return new FastBuffer(target.buffer, target.byteOffset, offset); + } + + return target; +} + +/** + * Masks a buffer using the given mask. + * + * @param {Buffer} source The buffer to mask + * @param {Buffer} mask The mask to use + * @param {Buffer} output The buffer where to store the result + * @param {Number} offset The offset at which to start writing + * @param {Number} length The number of bytes to mask. + * @public + */ +function _mask(source, mask, output, offset, length) { + for (let i = 0; i < length; i++) { + output[offset + i] = source[i] ^ mask[i & 3]; + } +} + +/** + * Unmasks a buffer using the given mask. + * + * @param {Buffer} buffer The buffer to unmask + * @param {Buffer} mask The mask to use + * @public + */ +function _unmask(buffer, mask) { + for (let i = 0; i < buffer.length; i++) { + buffer[i] ^= mask[i & 3]; + } +} + +/** + * Converts a buffer to an `ArrayBuffer`. + * + * @param {Buffer} buf The buffer to convert + * @return {ArrayBuffer} Converted buffer + * @public + */ +function toArrayBuffer(buf) { + if (buf.length === buf.buffer.byteLength) { + return buf.buffer; + } + + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length); +} + +/** + * Converts `data` to a `Buffer`. + * + * @param {*} data The data to convert + * @return {Buffer} The buffer + * @throws {TypeError} + * @public + */ +function toBuffer(data) { + toBuffer.readOnly = true; + + if (Buffer.isBuffer(data)) return data; + + let buf; + + if (data instanceof ArrayBuffer) { + buf = new FastBuffer(data); + } else if (ArrayBuffer.isView(data)) { + buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength); + } else { + buf = Buffer.from(data); + toBuffer.readOnly = false; + } + + return buf; +} + +module.exports = { + concat, + mask: _mask, + toArrayBuffer, + toBuffer, + unmask: _unmask +}; + +/* istanbul ignore else */ +if (!process.env.WS_NO_BUFFER_UTIL) { + try { + const bufferUtil = require('bufferutil'); + + module.exports.mask = function (source, mask, output, offset, length) { + if (length < 48) _mask(source, mask, output, offset, length); + else bufferUtil.mask(source, mask, output, offset, length); + }; + + module.exports.unmask = function (buffer, mask) { + if (buffer.length < 32) _unmask(buffer, mask); + else bufferUtil.unmask(buffer, mask); + }; + } catch (e) { + // Continue regardless of the error. + } +} diff --git a/node_modules/ws/lib/constants.js b/node_modules/ws/lib/constants.js new file mode 100644 index 0000000..69b2fe3 --- /dev/null +++ b/node_modules/ws/lib/constants.js @@ -0,0 +1,19 @@ +'use strict'; + +const BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments']; +const hasBlob = typeof Blob !== 'undefined'; + +if (hasBlob) BINARY_TYPES.push('blob'); + +module.exports = { + BINARY_TYPES, + CLOSE_TIMEOUT: 30000, + EMPTY_BUFFER: Buffer.alloc(0), + GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', + hasBlob, + kForOnEventAttribute: Symbol('kIsForOnEventAttribute'), + kListener: Symbol('kListener'), + kStatusCode: Symbol('status-code'), + kWebSocket: Symbol('websocket'), + NOOP: () => {} +}; diff --git a/node_modules/ws/lib/event-target.js b/node_modules/ws/lib/event-target.js new file mode 100644 index 0000000..fea4cbc --- /dev/null +++ b/node_modules/ws/lib/event-target.js @@ -0,0 +1,292 @@ +'use strict'; + +const { kForOnEventAttribute, kListener } = require('./constants'); + +const kCode = Symbol('kCode'); +const kData = Symbol('kData'); +const kError = Symbol('kError'); +const kMessage = Symbol('kMessage'); +const kReason = Symbol('kReason'); +const kTarget = Symbol('kTarget'); +const kType = Symbol('kType'); +const kWasClean = Symbol('kWasClean'); + +/** + * Class representing an event. + */ +class Event { + /** + * Create a new `Event`. + * + * @param {String} type The name of the event + * @throws {TypeError} If the `type` argument is not specified + */ + constructor(type) { + this[kTarget] = null; + this[kType] = type; + } + + /** + * @type {*} + */ + get target() { + return this[kTarget]; + } + + /** + * @type {String} + */ + get type() { + return this[kType]; + } +} + +Object.defineProperty(Event.prototype, 'target', { enumerable: true }); +Object.defineProperty(Event.prototype, 'type', { enumerable: true }); + +/** + * Class representing a close event. + * + * @extends Event + */ +class CloseEvent extends Event { + /** + * Create a new `CloseEvent`. + * + * @param {String} type The name of the event + * @param {Object} [options] A dictionary object that allows for setting + * attributes via object members of the same name + * @param {Number} [options.code=0] The status code explaining why the + * connection was closed + * @param {String} [options.reason=''] A human-readable string explaining why + * the connection was closed + * @param {Boolean} [options.wasClean=false] Indicates whether or not the + * connection was cleanly closed + */ + constructor(type, options = {}) { + super(type); + + this[kCode] = options.code === undefined ? 0 : options.code; + this[kReason] = options.reason === undefined ? '' : options.reason; + this[kWasClean] = options.wasClean === undefined ? false : options.wasClean; + } + + /** + * @type {Number} + */ + get code() { + return this[kCode]; + } + + /** + * @type {String} + */ + get reason() { + return this[kReason]; + } + + /** + * @type {Boolean} + */ + get wasClean() { + return this[kWasClean]; + } +} + +Object.defineProperty(CloseEvent.prototype, 'code', { enumerable: true }); +Object.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true }); +Object.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true }); + +/** + * Class representing an error event. + * + * @extends Event + */ +class ErrorEvent extends Event { + /** + * Create a new `ErrorEvent`. + * + * @param {String} type The name of the event + * @param {Object} [options] A dictionary object that allows for setting + * attributes via object members of the same name + * @param {*} [options.error=null] The error that generated this event + * @param {String} [options.message=''] The error message + */ + constructor(type, options = {}) { + super(type); + + this[kError] = options.error === undefined ? null : options.error; + this[kMessage] = options.message === undefined ? '' : options.message; + } + + /** + * @type {*} + */ + get error() { + return this[kError]; + } + + /** + * @type {String} + */ + get message() { + return this[kMessage]; + } +} + +Object.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true }); +Object.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true }); + +/** + * Class representing a message event. + * + * @extends Event + */ +class MessageEvent extends Event { + /** + * Create a new `MessageEvent`. + * + * @param {String} type The name of the event + * @param {Object} [options] A dictionary object that allows for setting + * attributes via object members of the same name + * @param {*} [options.data=null] The message content + */ + constructor(type, options = {}) { + super(type); + + this[kData] = options.data === undefined ? null : options.data; + } + + /** + * @type {*} + */ + get data() { + return this[kData]; + } +} + +Object.defineProperty(MessageEvent.prototype, 'data', { enumerable: true }); + +/** + * This provides methods for emulating the `EventTarget` interface. It's not + * meant to be used directly. + * + * @mixin + */ +const EventTarget = { + /** + * Register an event listener. + * + * @param {String} type A string representing the event type to listen for + * @param {(Function|Object)} handler The listener to add + * @param {Object} [options] An options object specifies characteristics about + * the event listener + * @param {Boolean} [options.once=false] A `Boolean` indicating that the + * listener should be invoked at most once after being added. If `true`, + * the listener would be automatically removed when invoked. + * @public + */ + addEventListener(type, handler, options = {}) { + for (const listener of this.listeners(type)) { + if ( + !options[kForOnEventAttribute] && + listener[kListener] === handler && + !listener[kForOnEventAttribute] + ) { + return; + } + } + + let wrapper; + + if (type === 'message') { + wrapper = function onMessage(data, isBinary) { + const event = new MessageEvent('message', { + data: isBinary ? data : data.toString() + }); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else if (type === 'close') { + wrapper = function onClose(code, message) { + const event = new CloseEvent('close', { + code, + reason: message.toString(), + wasClean: this._closeFrameReceived && this._closeFrameSent + }); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else if (type === 'error') { + wrapper = function onError(error) { + const event = new ErrorEvent('error', { + error, + message: error.message + }); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else if (type === 'open') { + wrapper = function onOpen() { + const event = new Event('open'); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else { + return; + } + + wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute]; + wrapper[kListener] = handler; + + if (options.once) { + this.once(type, wrapper); + } else { + this.on(type, wrapper); + } + }, + + /** + * Remove an event listener. + * + * @param {String} type A string representing the event type to remove + * @param {(Function|Object)} handler The listener to remove + * @public + */ + removeEventListener(type, handler) { + for (const listener of this.listeners(type)) { + if (listener[kListener] === handler && !listener[kForOnEventAttribute]) { + this.removeListener(type, listener); + break; + } + } + } +}; + +module.exports = { + CloseEvent, + ErrorEvent, + Event, + EventTarget, + MessageEvent +}; + +/** + * Call an event listener + * + * @param {(Function|Object)} listener The listener to call + * @param {*} thisArg The value to use as `this`` when calling the listener + * @param {Event} event The event to pass to the listener + * @private + */ +function callListener(listener, thisArg, event) { + if (typeof listener === 'object' && listener.handleEvent) { + listener.handleEvent.call(listener, event); + } else { + listener.call(thisArg, event); + } +} diff --git a/node_modules/ws/lib/extension.js b/node_modules/ws/lib/extension.js new file mode 100644 index 0000000..3d7895c --- /dev/null +++ b/node_modules/ws/lib/extension.js @@ -0,0 +1,203 @@ +'use strict'; + +const { tokenChars } = require('./validation'); + +/** + * Adds an offer to the map of extension offers or a parameter to the map of + * parameters. + * + * @param {Object} dest The map of extension offers or parameters + * @param {String} name The extension or parameter name + * @param {(Object|Boolean|String)} elem The extension parameters or the + * parameter value + * @private + */ +function push(dest, name, elem) { + if (dest[name] === undefined) dest[name] = [elem]; + else dest[name].push(elem); +} + +/** + * Parses the `Sec-WebSocket-Extensions` header into an object. + * + * @param {String} header The field value of the header + * @return {Object} The parsed object + * @public + */ +function parse(header) { + const offers = Object.create(null); + let params = Object.create(null); + let mustUnescape = false; + let isEscaping = false; + let inQuotes = false; + let extensionName; + let paramName; + let start = -1; + let code = -1; + let end = -1; + let i = 0; + + for (; i < header.length; i++) { + code = header.charCodeAt(i); + + if (extensionName === undefined) { + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if ( + i !== 0 && + (code === 0x20 /* ' ' */ || code === 0x09) /* '\t' */ + ) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + const name = header.slice(start, end); + if (code === 0x2c) { + push(offers, name, params); + params = Object.create(null); + } else { + extensionName = name; + } + + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } else if (paramName === undefined) { + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if (code === 0x20 || code === 0x09) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x3b || code === 0x2c) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + push(params, header.slice(start, end), true); + if (code === 0x2c) { + push(offers, extensionName, params); + params = Object.create(null); + extensionName = undefined; + } + + start = end = -1; + } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) { + paramName = header.slice(start, i); + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } else { + // + // The value of a quoted-string after unescaping must conform to the + // token ABNF, so only token characters are valid. + // Ref: https://tools.ietf.org/html/rfc6455#section-9.1 + // + if (isEscaping) { + if (tokenChars[code] !== 1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + if (start === -1) start = i; + else if (!mustUnescape) mustUnescape = true; + isEscaping = false; + } else if (inQuotes) { + if (tokenChars[code] === 1) { + if (start === -1) start = i; + } else if (code === 0x22 /* '"' */ && start !== -1) { + inQuotes = false; + end = i; + } else if (code === 0x5c /* '\' */) { + isEscaping = true; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) { + inQuotes = true; + } else if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if (start !== -1 && (code === 0x20 || code === 0x09)) { + if (end === -1) end = i; + } else if (code === 0x3b || code === 0x2c) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + let value = header.slice(start, end); + if (mustUnescape) { + value = value.replace(/\\/g, ''); + mustUnescape = false; + } + push(params, paramName, value); + if (code === 0x2c) { + push(offers, extensionName, params); + params = Object.create(null); + extensionName = undefined; + } + + paramName = undefined; + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } + } + + if (start === -1 || inQuotes || code === 0x20 || code === 0x09) { + throw new SyntaxError('Unexpected end of input'); + } + + if (end === -1) end = i; + const token = header.slice(start, end); + if (extensionName === undefined) { + push(offers, token, params); + } else { + if (paramName === undefined) { + push(params, token, true); + } else if (mustUnescape) { + push(params, paramName, token.replace(/\\/g, '')); + } else { + push(params, paramName, token); + } + push(offers, extensionName, params); + } + + return offers; +} + +/** + * Builds the `Sec-WebSocket-Extensions` header field value. + * + * @param {Object} extensions The map of extensions and parameters to format + * @return {String} A string representing the given object + * @public + */ +function format(extensions) { + return Object.keys(extensions) + .map((extension) => { + let configurations = extensions[extension]; + if (!Array.isArray(configurations)) configurations = [configurations]; + return configurations + .map((params) => { + return [extension] + .concat( + Object.keys(params).map((k) => { + let values = params[k]; + if (!Array.isArray(values)) values = [values]; + return values + .map((v) => (v === true ? k : `${k}=${v}`)) + .join('; '); + }) + ) + .join('; '); + }) + .join(', '); + }) + .join(', '); +} + +module.exports = { format, parse }; diff --git a/node_modules/ws/lib/limiter.js b/node_modules/ws/lib/limiter.js new file mode 100644 index 0000000..3fd3578 --- /dev/null +++ b/node_modules/ws/lib/limiter.js @@ -0,0 +1,55 @@ +'use strict'; + +const kDone = Symbol('kDone'); +const kRun = Symbol('kRun'); + +/** + * A very simple job queue with adjustable concurrency. Adapted from + * https://github.com/STRML/async-limiter + */ +class Limiter { + /** + * Creates a new `Limiter`. + * + * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed + * to run concurrently + */ + constructor(concurrency) { + this[kDone] = () => { + this.pending--; + this[kRun](); + }; + this.concurrency = concurrency || Infinity; + this.jobs = []; + this.pending = 0; + } + + /** + * Adds a job to the queue. + * + * @param {Function} job The job to run + * @public + */ + add(job) { + this.jobs.push(job); + this[kRun](); + } + + /** + * Removes a job from the queue and runs it if possible. + * + * @private + */ + [kRun]() { + if (this.pending === this.concurrency) return; + + if (this.jobs.length) { + const job = this.jobs.shift(); + + this.pending++; + job(this[kDone]); + } + } +} + +module.exports = Limiter; diff --git a/node_modules/ws/lib/permessage-deflate.js b/node_modules/ws/lib/permessage-deflate.js new file mode 100644 index 0000000..aa5db76 --- /dev/null +++ b/node_modules/ws/lib/permessage-deflate.js @@ -0,0 +1,528 @@ +'use strict'; + +const zlib = require('zlib'); + +const bufferUtil = require('./buffer-util'); +const Limiter = require('./limiter'); +const { kStatusCode } = require('./constants'); + +const FastBuffer = Buffer[Symbol.species]; +const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]); +const kPerMessageDeflate = Symbol('permessage-deflate'); +const kTotalLength = Symbol('total-length'); +const kCallback = Symbol('callback'); +const kBuffers = Symbol('buffers'); +const kError = Symbol('error'); + +// +// We limit zlib concurrency, which prevents severe memory fragmentation +// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913 +// and https://github.com/websockets/ws/issues/1202 +// +// Intentionally global; it's the global thread pool that's an issue. +// +let zlibLimiter; + +/** + * permessage-deflate implementation. + */ +class PerMessageDeflate { + /** + * Creates a PerMessageDeflate instance. + * + * @param {Object} [options] Configuration options + * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support + * for, or request, a custom client window size + * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/ + * acknowledge disabling of client context takeover + * @param {Number} [options.concurrencyLimit=10] The number of concurrent + * calls to zlib + * @param {Boolean} [options.isServer=false] Create the instance in either + * server or client mode + * @param {Number} [options.maxPayload=0] The maximum allowed message length + * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the + * use of a custom server window size + * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept + * disabling of server context takeover + * @param {Number} [options.threshold=1024] Size (in bytes) below which + * messages should not be compressed if context takeover is disabled + * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on + * deflate + * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on + * inflate + */ + constructor(options) { + this._options = options || {}; + this._threshold = + this._options.threshold !== undefined ? this._options.threshold : 1024; + this._maxPayload = this._options.maxPayload | 0; + this._isServer = !!this._options.isServer; + this._deflate = null; + this._inflate = null; + + this.params = null; + + if (!zlibLimiter) { + const concurrency = + this._options.concurrencyLimit !== undefined + ? this._options.concurrencyLimit + : 10; + zlibLimiter = new Limiter(concurrency); + } + } + + /** + * @type {String} + */ + static get extensionName() { + return 'permessage-deflate'; + } + + /** + * Create an extension negotiation offer. + * + * @return {Object} Extension parameters + * @public + */ + offer() { + const params = {}; + + if (this._options.serverNoContextTakeover) { + params.server_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover) { + params.client_no_context_takeover = true; + } + if (this._options.serverMaxWindowBits) { + params.server_max_window_bits = this._options.serverMaxWindowBits; + } + if (this._options.clientMaxWindowBits) { + params.client_max_window_bits = this._options.clientMaxWindowBits; + } else if (this._options.clientMaxWindowBits == null) { + params.client_max_window_bits = true; + } + + return params; + } + + /** + * Accept an extension negotiation offer/response. + * + * @param {Array} configurations The extension negotiation offers/reponse + * @return {Object} Accepted configuration + * @public + */ + accept(configurations) { + configurations = this.normalizeParams(configurations); + + this.params = this._isServer + ? this.acceptAsServer(configurations) + : this.acceptAsClient(configurations); + + return this.params; + } + + /** + * Releases all resources used by the extension. + * + * @public + */ + cleanup() { + if (this._inflate) { + this._inflate.close(); + this._inflate = null; + } + + if (this._deflate) { + const callback = this._deflate[kCallback]; + + this._deflate.close(); + this._deflate = null; + + if (callback) { + callback( + new Error( + 'The deflate stream was closed while data was being processed' + ) + ); + } + } + } + + /** + * Accept an extension negotiation offer. + * + * @param {Array} offers The extension negotiation offers + * @return {Object} Accepted configuration + * @private + */ + acceptAsServer(offers) { + const opts = this._options; + const accepted = offers.find((params) => { + if ( + (opts.serverNoContextTakeover === false && + params.server_no_context_takeover) || + (params.server_max_window_bits && + (opts.serverMaxWindowBits === false || + (typeof opts.serverMaxWindowBits === 'number' && + opts.serverMaxWindowBits > params.server_max_window_bits))) || + (typeof opts.clientMaxWindowBits === 'number' && + !params.client_max_window_bits) + ) { + return false; + } + + return true; + }); + + if (!accepted) { + throw new Error('None of the extension offers can be accepted'); + } + + if (opts.serverNoContextTakeover) { + accepted.server_no_context_takeover = true; + } + if (opts.clientNoContextTakeover) { + accepted.client_no_context_takeover = true; + } + if (typeof opts.serverMaxWindowBits === 'number') { + accepted.server_max_window_bits = opts.serverMaxWindowBits; + } + if (typeof opts.clientMaxWindowBits === 'number') { + accepted.client_max_window_bits = opts.clientMaxWindowBits; + } else if ( + accepted.client_max_window_bits === true || + opts.clientMaxWindowBits === false + ) { + delete accepted.client_max_window_bits; + } + + return accepted; + } + + /** + * Accept the extension negotiation response. + * + * @param {Array} response The extension negotiation response + * @return {Object} Accepted configuration + * @private + */ + acceptAsClient(response) { + const params = response[0]; + + if ( + this._options.clientNoContextTakeover === false && + params.client_no_context_takeover + ) { + throw new Error('Unexpected parameter "client_no_context_takeover"'); + } + + if (!params.client_max_window_bits) { + if (typeof this._options.clientMaxWindowBits === 'number') { + params.client_max_window_bits = this._options.clientMaxWindowBits; + } + } else if ( + this._options.clientMaxWindowBits === false || + (typeof this._options.clientMaxWindowBits === 'number' && + params.client_max_window_bits > this._options.clientMaxWindowBits) + ) { + throw new Error( + 'Unexpected or invalid parameter "client_max_window_bits"' + ); + } + + return params; + } + + /** + * Normalize parameters. + * + * @param {Array} configurations The extension negotiation offers/reponse + * @return {Array} The offers/response with normalized parameters + * @private + */ + normalizeParams(configurations) { + configurations.forEach((params) => { + Object.keys(params).forEach((key) => { + let value = params[key]; + + if (value.length > 1) { + throw new Error(`Parameter "${key}" must have only a single value`); + } + + value = value[0]; + + if (key === 'client_max_window_bits') { + if (value !== true) { + const num = +value; + if (!Number.isInteger(num) || num < 8 || num > 15) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + value = num; + } else if (!this._isServer) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + } else if (key === 'server_max_window_bits') { + const num = +value; + if (!Number.isInteger(num) || num < 8 || num > 15) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + value = num; + } else if ( + key === 'client_no_context_takeover' || + key === 'server_no_context_takeover' + ) { + if (value !== true) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + } else { + throw new Error(`Unknown parameter "${key}"`); + } + + params[key] = value; + }); + }); + + return configurations; + } + + /** + * Decompress data. Concurrency limited. + * + * @param {Buffer} data Compressed data + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @public + */ + decompress(data, fin, callback) { + zlibLimiter.add((done) => { + this._decompress(data, fin, (err, result) => { + done(); + callback(err, result); + }); + }); + } + + /** + * Compress data. Concurrency limited. + * + * @param {(Buffer|String)} data Data to compress + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @public + */ + compress(data, fin, callback) { + zlibLimiter.add((done) => { + this._compress(data, fin, (err, result) => { + done(); + callback(err, result); + }); + }); + } + + /** + * Decompress data. + * + * @param {Buffer} data Compressed data + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @private + */ + _decompress(data, fin, callback) { + const endpoint = this._isServer ? 'client' : 'server'; + + if (!this._inflate) { + const key = `${endpoint}_max_window_bits`; + const windowBits = + typeof this.params[key] !== 'number' + ? zlib.Z_DEFAULT_WINDOWBITS + : this.params[key]; + + this._inflate = zlib.createInflateRaw({ + ...this._options.zlibInflateOptions, + windowBits + }); + this._inflate[kPerMessageDeflate] = this; + this._inflate[kTotalLength] = 0; + this._inflate[kBuffers] = []; + this._inflate.on('error', inflateOnError); + this._inflate.on('data', inflateOnData); + } + + this._inflate[kCallback] = callback; + + this._inflate.write(data); + if (fin) this._inflate.write(TRAILER); + + this._inflate.flush(() => { + const err = this._inflate[kError]; + + if (err) { + this._inflate.close(); + this._inflate = null; + callback(err); + return; + } + + const data = bufferUtil.concat( + this._inflate[kBuffers], + this._inflate[kTotalLength] + ); + + if (this._inflate._readableState.endEmitted) { + this._inflate.close(); + this._inflate = null; + } else { + this._inflate[kTotalLength] = 0; + this._inflate[kBuffers] = []; + + if (fin && this.params[`${endpoint}_no_context_takeover`]) { + this._inflate.reset(); + } + } + + callback(null, data); + }); + } + + /** + * Compress data. + * + * @param {(Buffer|String)} data Data to compress + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @private + */ + _compress(data, fin, callback) { + const endpoint = this._isServer ? 'server' : 'client'; + + if (!this._deflate) { + const key = `${endpoint}_max_window_bits`; + const windowBits = + typeof this.params[key] !== 'number' + ? zlib.Z_DEFAULT_WINDOWBITS + : this.params[key]; + + this._deflate = zlib.createDeflateRaw({ + ...this._options.zlibDeflateOptions, + windowBits + }); + + this._deflate[kTotalLength] = 0; + this._deflate[kBuffers] = []; + + this._deflate.on('data', deflateOnData); + } + + this._deflate[kCallback] = callback; + + this._deflate.write(data); + this._deflate.flush(zlib.Z_SYNC_FLUSH, () => { + if (!this._deflate) { + // + // The deflate stream was closed while data was being processed. + // + return; + } + + let data = bufferUtil.concat( + this._deflate[kBuffers], + this._deflate[kTotalLength] + ); + + if (fin) { + data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4); + } + + // + // Ensure that the callback will not be called again in + // `PerMessageDeflate#cleanup()`. + // + this._deflate[kCallback] = null; + + this._deflate[kTotalLength] = 0; + this._deflate[kBuffers] = []; + + if (fin && this.params[`${endpoint}_no_context_takeover`]) { + this._deflate.reset(); + } + + callback(null, data); + }); + } +} + +module.exports = PerMessageDeflate; + +/** + * The listener of the `zlib.DeflateRaw` stream `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function deflateOnData(chunk) { + this[kBuffers].push(chunk); + this[kTotalLength] += chunk.length; +} + +/** + * The listener of the `zlib.InflateRaw` stream `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function inflateOnData(chunk) { + this[kTotalLength] += chunk.length; + + if ( + this[kPerMessageDeflate]._maxPayload < 1 || + this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload + ) { + this[kBuffers].push(chunk); + return; + } + + this[kError] = new RangeError('Max payload size exceeded'); + this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'; + this[kError][kStatusCode] = 1009; + this.removeListener('data', inflateOnData); + + // + // The choice to employ `zlib.reset()` over `zlib.close()` is dictated by the + // fact that in Node.js versions prior to 13.10.0, the callback for + // `zlib.flush()` is not called if `zlib.close()` is used. Utilizing + // `zlib.reset()` ensures that either the callback is invoked or an error is + // emitted. + // + this.reset(); +} + +/** + * The listener of the `zlib.InflateRaw` stream `'error'` event. + * + * @param {Error} err The emitted error + * @private + */ +function inflateOnError(err) { + // + // There is no need to call `Zlib#close()` as the handle is automatically + // closed when an error is emitted. + // + this[kPerMessageDeflate]._inflate = null; + + if (this[kError]) { + this[kCallback](this[kError]); + return; + } + + err[kStatusCode] = 1007; + this[kCallback](err); +} diff --git a/node_modules/ws/lib/receiver.js b/node_modules/ws/lib/receiver.js new file mode 100644 index 0000000..54d9b4f --- /dev/null +++ b/node_modules/ws/lib/receiver.js @@ -0,0 +1,706 @@ +'use strict'; + +const { Writable } = require('stream'); + +const PerMessageDeflate = require('./permessage-deflate'); +const { + BINARY_TYPES, + EMPTY_BUFFER, + kStatusCode, + kWebSocket +} = require('./constants'); +const { concat, toArrayBuffer, unmask } = require('./buffer-util'); +const { isValidStatusCode, isValidUTF8 } = require('./validation'); + +const FastBuffer = Buffer[Symbol.species]; + +const GET_INFO = 0; +const GET_PAYLOAD_LENGTH_16 = 1; +const GET_PAYLOAD_LENGTH_64 = 2; +const GET_MASK = 3; +const GET_DATA = 4; +const INFLATING = 5; +const DEFER_EVENT = 6; + +/** + * HyBi Receiver implementation. + * + * @extends Writable + */ +class Receiver extends Writable { + /** + * Creates a Receiver instance. + * + * @param {Object} [options] Options object + * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether + * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted + * multiple times in the same tick + * @param {String} [options.binaryType=nodebuffer] The type for binary data + * @param {Object} [options.extensions] An object containing the negotiated + * extensions + * @param {Boolean} [options.isServer=false] Specifies whether to operate in + * client or server mode + * @param {Number} [options.maxPayload=0] The maximum allowed message length + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + */ + constructor(options = {}) { + super(); + + this._allowSynchronousEvents = + options.allowSynchronousEvents !== undefined + ? options.allowSynchronousEvents + : true; + this._binaryType = options.binaryType || BINARY_TYPES[0]; + this._extensions = options.extensions || {}; + this._isServer = !!options.isServer; + this._maxPayload = options.maxPayload | 0; + this._skipUTF8Validation = !!options.skipUTF8Validation; + this[kWebSocket] = undefined; + + this._bufferedBytes = 0; + this._buffers = []; + + this._compressed = false; + this._payloadLength = 0; + this._mask = undefined; + this._fragmented = 0; + this._masked = false; + this._fin = false; + this._opcode = 0; + + this._totalPayloadLength = 0; + this._messageLength = 0; + this._fragments = []; + + this._errored = false; + this._loop = false; + this._state = GET_INFO; + } + + /** + * Implements `Writable.prototype._write()`. + * + * @param {Buffer} chunk The chunk of data to write + * @param {String} encoding The character encoding of `chunk` + * @param {Function} cb Callback + * @private + */ + _write(chunk, encoding, cb) { + if (this._opcode === 0x08 && this._state == GET_INFO) return cb(); + + this._bufferedBytes += chunk.length; + this._buffers.push(chunk); + this.startLoop(cb); + } + + /** + * Consumes `n` bytes from the buffered data. + * + * @param {Number} n The number of bytes to consume + * @return {Buffer} The consumed bytes + * @private + */ + consume(n) { + this._bufferedBytes -= n; + + if (n === this._buffers[0].length) return this._buffers.shift(); + + if (n < this._buffers[0].length) { + const buf = this._buffers[0]; + this._buffers[0] = new FastBuffer( + buf.buffer, + buf.byteOffset + n, + buf.length - n + ); + + return new FastBuffer(buf.buffer, buf.byteOffset, n); + } + + const dst = Buffer.allocUnsafe(n); + + do { + const buf = this._buffers[0]; + const offset = dst.length - n; + + if (n >= buf.length) { + dst.set(this._buffers.shift(), offset); + } else { + dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset); + this._buffers[0] = new FastBuffer( + buf.buffer, + buf.byteOffset + n, + buf.length - n + ); + } + + n -= buf.length; + } while (n > 0); + + return dst; + } + + /** + * Starts the parsing loop. + * + * @param {Function} cb Callback + * @private + */ + startLoop(cb) { + this._loop = true; + + do { + switch (this._state) { + case GET_INFO: + this.getInfo(cb); + break; + case GET_PAYLOAD_LENGTH_16: + this.getPayloadLength16(cb); + break; + case GET_PAYLOAD_LENGTH_64: + this.getPayloadLength64(cb); + break; + case GET_MASK: + this.getMask(); + break; + case GET_DATA: + this.getData(cb); + break; + case INFLATING: + case DEFER_EVENT: + this._loop = false; + return; + } + } while (this._loop); + + if (!this._errored) cb(); + } + + /** + * Reads the first two bytes of a frame. + * + * @param {Function} cb Callback + * @private + */ + getInfo(cb) { + if (this._bufferedBytes < 2) { + this._loop = false; + return; + } + + const buf = this.consume(2); + + if ((buf[0] & 0x30) !== 0x00) { + const error = this.createError( + RangeError, + 'RSV2 and RSV3 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_2_3' + ); + + cb(error); + return; + } + + const compressed = (buf[0] & 0x40) === 0x40; + + if (compressed && !this._extensions[PerMessageDeflate.extensionName]) { + const error = this.createError( + RangeError, + 'RSV1 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_1' + ); + + cb(error); + return; + } + + this._fin = (buf[0] & 0x80) === 0x80; + this._opcode = buf[0] & 0x0f; + this._payloadLength = buf[1] & 0x7f; + + if (this._opcode === 0x00) { + if (compressed) { + const error = this.createError( + RangeError, + 'RSV1 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_1' + ); + + cb(error); + return; + } + + if (!this._fragmented) { + const error = this.createError( + RangeError, + 'invalid opcode 0', + true, + 1002, + 'WS_ERR_INVALID_OPCODE' + ); + + cb(error); + return; + } + + this._opcode = this._fragmented; + } else if (this._opcode === 0x01 || this._opcode === 0x02) { + if (this._fragmented) { + const error = this.createError( + RangeError, + `invalid opcode ${this._opcode}`, + true, + 1002, + 'WS_ERR_INVALID_OPCODE' + ); + + cb(error); + return; + } + + this._compressed = compressed; + } else if (this._opcode > 0x07 && this._opcode < 0x0b) { + if (!this._fin) { + const error = this.createError( + RangeError, + 'FIN must be set', + true, + 1002, + 'WS_ERR_EXPECTED_FIN' + ); + + cb(error); + return; + } + + if (compressed) { + const error = this.createError( + RangeError, + 'RSV1 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_1' + ); + + cb(error); + return; + } + + if ( + this._payloadLength > 0x7d || + (this._opcode === 0x08 && this._payloadLength === 1) + ) { + const error = this.createError( + RangeError, + `invalid payload length ${this._payloadLength}`, + true, + 1002, + 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH' + ); + + cb(error); + return; + } + } else { + const error = this.createError( + RangeError, + `invalid opcode ${this._opcode}`, + true, + 1002, + 'WS_ERR_INVALID_OPCODE' + ); + + cb(error); + return; + } + + if (!this._fin && !this._fragmented) this._fragmented = this._opcode; + this._masked = (buf[1] & 0x80) === 0x80; + + if (this._isServer) { + if (!this._masked) { + const error = this.createError( + RangeError, + 'MASK must be set', + true, + 1002, + 'WS_ERR_EXPECTED_MASK' + ); + + cb(error); + return; + } + } else if (this._masked) { + const error = this.createError( + RangeError, + 'MASK must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_MASK' + ); + + cb(error); + return; + } + + if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16; + else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64; + else this.haveLength(cb); + } + + /** + * Gets extended payload length (7+16). + * + * @param {Function} cb Callback + * @private + */ + getPayloadLength16(cb) { + if (this._bufferedBytes < 2) { + this._loop = false; + return; + } + + this._payloadLength = this.consume(2).readUInt16BE(0); + this.haveLength(cb); + } + + /** + * Gets extended payload length (7+64). + * + * @param {Function} cb Callback + * @private + */ + getPayloadLength64(cb) { + if (this._bufferedBytes < 8) { + this._loop = false; + return; + } + + const buf = this.consume(8); + const num = buf.readUInt32BE(0); + + // + // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned + // if payload length is greater than this number. + // + if (num > Math.pow(2, 53 - 32) - 1) { + const error = this.createError( + RangeError, + 'Unsupported WebSocket frame: payload length > 2^53 - 1', + false, + 1009, + 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH' + ); + + cb(error); + return; + } + + this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4); + this.haveLength(cb); + } + + /** + * Payload length has been read. + * + * @param {Function} cb Callback + * @private + */ + haveLength(cb) { + if (this._payloadLength && this._opcode < 0x08) { + this._totalPayloadLength += this._payloadLength; + if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) { + const error = this.createError( + RangeError, + 'Max payload size exceeded', + false, + 1009, + 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH' + ); + + cb(error); + return; + } + } + + if (this._masked) this._state = GET_MASK; + else this._state = GET_DATA; + } + + /** + * Reads mask bytes. + * + * @private + */ + getMask() { + if (this._bufferedBytes < 4) { + this._loop = false; + return; + } + + this._mask = this.consume(4); + this._state = GET_DATA; + } + + /** + * Reads data bytes. + * + * @param {Function} cb Callback + * @private + */ + getData(cb) { + let data = EMPTY_BUFFER; + + if (this._payloadLength) { + if (this._bufferedBytes < this._payloadLength) { + this._loop = false; + return; + } + + data = this.consume(this._payloadLength); + + if ( + this._masked && + (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0 + ) { + unmask(data, this._mask); + } + } + + if (this._opcode > 0x07) { + this.controlMessage(data, cb); + return; + } + + if (this._compressed) { + this._state = INFLATING; + this.decompress(data, cb); + return; + } + + if (data.length) { + // + // This message is not compressed so its length is the sum of the payload + // length of all fragments. + // + this._messageLength = this._totalPayloadLength; + this._fragments.push(data); + } + + this.dataMessage(cb); + } + + /** + * Decompresses data. + * + * @param {Buffer} data Compressed data + * @param {Function} cb Callback + * @private + */ + decompress(data, cb) { + const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + + perMessageDeflate.decompress(data, this._fin, (err, buf) => { + if (err) return cb(err); + + if (buf.length) { + this._messageLength += buf.length; + if (this._messageLength > this._maxPayload && this._maxPayload > 0) { + const error = this.createError( + RangeError, + 'Max payload size exceeded', + false, + 1009, + 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH' + ); + + cb(error); + return; + } + + this._fragments.push(buf); + } + + this.dataMessage(cb); + if (this._state === GET_INFO) this.startLoop(cb); + }); + } + + /** + * Handles a data message. + * + * @param {Function} cb Callback + * @private + */ + dataMessage(cb) { + if (!this._fin) { + this._state = GET_INFO; + return; + } + + const messageLength = this._messageLength; + const fragments = this._fragments; + + this._totalPayloadLength = 0; + this._messageLength = 0; + this._fragmented = 0; + this._fragments = []; + + if (this._opcode === 2) { + let data; + + if (this._binaryType === 'nodebuffer') { + data = concat(fragments, messageLength); + } else if (this._binaryType === 'arraybuffer') { + data = toArrayBuffer(concat(fragments, messageLength)); + } else if (this._binaryType === 'blob') { + data = new Blob(fragments); + } else { + data = fragments; + } + + if (this._allowSynchronousEvents) { + this.emit('message', data, true); + this._state = GET_INFO; + } else { + this._state = DEFER_EVENT; + setImmediate(() => { + this.emit('message', data, true); + this._state = GET_INFO; + this.startLoop(cb); + }); + } + } else { + const buf = concat(fragments, messageLength); + + if (!this._skipUTF8Validation && !isValidUTF8(buf)) { + const error = this.createError( + Error, + 'invalid UTF-8 sequence', + true, + 1007, + 'WS_ERR_INVALID_UTF8' + ); + + cb(error); + return; + } + + if (this._state === INFLATING || this._allowSynchronousEvents) { + this.emit('message', buf, false); + this._state = GET_INFO; + } else { + this._state = DEFER_EVENT; + setImmediate(() => { + this.emit('message', buf, false); + this._state = GET_INFO; + this.startLoop(cb); + }); + } + } + } + + /** + * Handles a control message. + * + * @param {Buffer} data Data to handle + * @return {(Error|RangeError|undefined)} A possible error + * @private + */ + controlMessage(data, cb) { + if (this._opcode === 0x08) { + if (data.length === 0) { + this._loop = false; + this.emit('conclude', 1005, EMPTY_BUFFER); + this.end(); + } else { + const code = data.readUInt16BE(0); + + if (!isValidStatusCode(code)) { + const error = this.createError( + RangeError, + `invalid status code ${code}`, + true, + 1002, + 'WS_ERR_INVALID_CLOSE_CODE' + ); + + cb(error); + return; + } + + const buf = new FastBuffer( + data.buffer, + data.byteOffset + 2, + data.length - 2 + ); + + if (!this._skipUTF8Validation && !isValidUTF8(buf)) { + const error = this.createError( + Error, + 'invalid UTF-8 sequence', + true, + 1007, + 'WS_ERR_INVALID_UTF8' + ); + + cb(error); + return; + } + + this._loop = false; + this.emit('conclude', code, buf); + this.end(); + } + + this._state = GET_INFO; + return; + } + + if (this._allowSynchronousEvents) { + this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data); + this._state = GET_INFO; + } else { + this._state = DEFER_EVENT; + setImmediate(() => { + this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data); + this._state = GET_INFO; + this.startLoop(cb); + }); + } + } + + /** + * Builds an error object. + * + * @param {function(new:Error|RangeError)} ErrorCtor The error constructor + * @param {String} message The error message + * @param {Boolean} prefix Specifies whether or not to add a default prefix to + * `message` + * @param {Number} statusCode The status code + * @param {String} errorCode The exposed error code + * @return {(Error|RangeError)} The error + * @private + */ + createError(ErrorCtor, message, prefix, statusCode, errorCode) { + this._loop = false; + this._errored = true; + + const err = new ErrorCtor( + prefix ? `Invalid WebSocket frame: ${message}` : message + ); + + Error.captureStackTrace(err, this.createError); + err.code = errorCode; + err[kStatusCode] = statusCode; + return err; + } +} + +module.exports = Receiver; diff --git a/node_modules/ws/lib/sender.js b/node_modules/ws/lib/sender.js new file mode 100644 index 0000000..2c767e2 --- /dev/null +++ b/node_modules/ws/lib/sender.js @@ -0,0 +1,607 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Duplex" }] */ + +'use strict'; + +const { Duplex } = require('stream'); +const { randomFillSync } = require('crypto'); +const { + types: { isUint8Array } +} = require('util'); + +const PerMessageDeflate = require('./permessage-deflate'); +const { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants'); +const { isBlob, isValidStatusCode } = require('./validation'); +const { mask: applyMask, toBuffer } = require('./buffer-util'); + +const kByteLength = Symbol('kByteLength'); +const maskBuffer = Buffer.alloc(4); +const RANDOM_POOL_SIZE = 8 * 1024; +let randomPool; +let randomPoolPointer = RANDOM_POOL_SIZE; + +const DEFAULT = 0; +const DEFLATING = 1; +const GET_BLOB_DATA = 2; + +/** + * HyBi Sender implementation. + */ +class Sender { + /** + * Creates a Sender instance. + * + * @param {Duplex} socket The connection socket + * @param {Object} [extensions] An object containing the negotiated extensions + * @param {Function} [generateMask] The function used to generate the masking + * key + */ + constructor(socket, extensions, generateMask) { + this._extensions = extensions || {}; + + if (generateMask) { + this._generateMask = generateMask; + this._maskBuffer = Buffer.alloc(4); + } + + this._socket = socket; + + this._firstFragment = true; + this._compress = false; + + this._bufferedBytes = 0; + this._queue = []; + this._state = DEFAULT; + this.onerror = NOOP; + this[kWebSocket] = undefined; + } + + /** + * Frames a piece of data according to the HyBi WebSocket protocol. + * + * @param {(Buffer|String)} data The data to frame + * @param {Object} options Options object + * @param {Boolean} [options.fin=false] Specifies whether or not to set the + * FIN bit + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Buffer} [options.maskBuffer] The buffer used to store the masking + * key + * @param {Number} options.opcode The opcode + * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be + * modified + * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the + * RSV1 bit + * @return {(Buffer|String)[]} The framed data + * @public + */ + static frame(data, options) { + let mask; + let merge = false; + let offset = 2; + let skipMasking = false; + + if (options.mask) { + mask = options.maskBuffer || maskBuffer; + + if (options.generateMask) { + options.generateMask(mask); + } else { + if (randomPoolPointer === RANDOM_POOL_SIZE) { + /* istanbul ignore else */ + if (randomPool === undefined) { + // + // This is lazily initialized because server-sent frames must not + // be masked so it may never be used. + // + randomPool = Buffer.alloc(RANDOM_POOL_SIZE); + } + + randomFillSync(randomPool, 0, RANDOM_POOL_SIZE); + randomPoolPointer = 0; + } + + mask[0] = randomPool[randomPoolPointer++]; + mask[1] = randomPool[randomPoolPointer++]; + mask[2] = randomPool[randomPoolPointer++]; + mask[3] = randomPool[randomPoolPointer++]; + } + + skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0; + offset = 6; + } + + let dataLength; + + if (typeof data === 'string') { + if ( + (!options.mask || skipMasking) && + options[kByteLength] !== undefined + ) { + dataLength = options[kByteLength]; + } else { + data = Buffer.from(data); + dataLength = data.length; + } + } else { + dataLength = data.length; + merge = options.mask && options.readOnly && !skipMasking; + } + + let payloadLength = dataLength; + + if (dataLength >= 65536) { + offset += 8; + payloadLength = 127; + } else if (dataLength > 125) { + offset += 2; + payloadLength = 126; + } + + const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset); + + target[0] = options.fin ? options.opcode | 0x80 : options.opcode; + if (options.rsv1) target[0] |= 0x40; + + target[1] = payloadLength; + + if (payloadLength === 126) { + target.writeUInt16BE(dataLength, 2); + } else if (payloadLength === 127) { + target[2] = target[3] = 0; + target.writeUIntBE(dataLength, 4, 6); + } + + if (!options.mask) return [target, data]; + + target[1] |= 0x80; + target[offset - 4] = mask[0]; + target[offset - 3] = mask[1]; + target[offset - 2] = mask[2]; + target[offset - 1] = mask[3]; + + if (skipMasking) return [target, data]; + + if (merge) { + applyMask(data, mask, target, offset, dataLength); + return [target]; + } + + applyMask(data, mask, data, 0, dataLength); + return [target, data]; + } + + /** + * Sends a close message to the other peer. + * + * @param {Number} [code] The status code component of the body + * @param {(String|Buffer)} [data] The message component of the body + * @param {Boolean} [mask=false] Specifies whether or not to mask the message + * @param {Function} [cb] Callback + * @public + */ + close(code, data, mask, cb) { + let buf; + + if (code === undefined) { + buf = EMPTY_BUFFER; + } else if (typeof code !== 'number' || !isValidStatusCode(code)) { + throw new TypeError('First argument must be a valid error code number'); + } else if (data === undefined || !data.length) { + buf = Buffer.allocUnsafe(2); + buf.writeUInt16BE(code, 0); + } else { + const length = Buffer.byteLength(data); + + if (length > 123) { + throw new RangeError('The message must not be greater than 123 bytes'); + } + + buf = Buffer.allocUnsafe(2 + length); + buf.writeUInt16BE(code, 0); + + if (typeof data === 'string') { + buf.write(data, 2); + } else if (isUint8Array(data)) { + buf.set(data, 2); + } else { + throw new TypeError('Second argument must be a string or a Uint8Array'); + } + } + + const options = { + [kByteLength]: buf.length, + fin: true, + generateMask: this._generateMask, + mask, + maskBuffer: this._maskBuffer, + opcode: 0x08, + readOnly: false, + rsv1: false + }; + + if (this._state !== DEFAULT) { + this.enqueue([this.dispatch, buf, false, options, cb]); + } else { + this.sendFrame(Sender.frame(buf, options), cb); + } + } + + /** + * Sends a ping message to the other peer. + * + * @param {*} data The message to send + * @param {Boolean} [mask=false] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback + * @public + */ + ping(data, mask, cb) { + let byteLength; + let readOnly; + + if (typeof data === 'string') { + byteLength = Buffer.byteLength(data); + readOnly = false; + } else if (isBlob(data)) { + byteLength = data.size; + readOnly = false; + } else { + data = toBuffer(data); + byteLength = data.length; + readOnly = toBuffer.readOnly; + } + + if (byteLength > 125) { + throw new RangeError('The data size must not be greater than 125 bytes'); + } + + const options = { + [kByteLength]: byteLength, + fin: true, + generateMask: this._generateMask, + mask, + maskBuffer: this._maskBuffer, + opcode: 0x09, + readOnly, + rsv1: false + }; + + if (isBlob(data)) { + if (this._state !== DEFAULT) { + this.enqueue([this.getBlobData, data, false, options, cb]); + } else { + this.getBlobData(data, false, options, cb); + } + } else if (this._state !== DEFAULT) { + this.enqueue([this.dispatch, data, false, options, cb]); + } else { + this.sendFrame(Sender.frame(data, options), cb); + } + } + + /** + * Sends a pong message to the other peer. + * + * @param {*} data The message to send + * @param {Boolean} [mask=false] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback + * @public + */ + pong(data, mask, cb) { + let byteLength; + let readOnly; + + if (typeof data === 'string') { + byteLength = Buffer.byteLength(data); + readOnly = false; + } else if (isBlob(data)) { + byteLength = data.size; + readOnly = false; + } else { + data = toBuffer(data); + byteLength = data.length; + readOnly = toBuffer.readOnly; + } + + if (byteLength > 125) { + throw new RangeError('The data size must not be greater than 125 bytes'); + } + + const options = { + [kByteLength]: byteLength, + fin: true, + generateMask: this._generateMask, + mask, + maskBuffer: this._maskBuffer, + opcode: 0x0a, + readOnly, + rsv1: false + }; + + if (isBlob(data)) { + if (this._state !== DEFAULT) { + this.enqueue([this.getBlobData, data, false, options, cb]); + } else { + this.getBlobData(data, false, options, cb); + } + } else if (this._state !== DEFAULT) { + this.enqueue([this.dispatch, data, false, options, cb]); + } else { + this.sendFrame(Sender.frame(data, options), cb); + } + } + + /** + * Sends a data message to the other peer. + * + * @param {*} data The message to send + * @param {Object} options Options object + * @param {Boolean} [options.binary=false] Specifies whether `data` is binary + * or text + * @param {Boolean} [options.compress=false] Specifies whether or not to + * compress `data` + * @param {Boolean} [options.fin=false] Specifies whether the fragment is the + * last one + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Function} [cb] Callback + * @public + */ + send(data, options, cb) { + const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + let opcode = options.binary ? 2 : 1; + let rsv1 = options.compress; + + let byteLength; + let readOnly; + + if (typeof data === 'string') { + byteLength = Buffer.byteLength(data); + readOnly = false; + } else if (isBlob(data)) { + byteLength = data.size; + readOnly = false; + } else { + data = toBuffer(data); + byteLength = data.length; + readOnly = toBuffer.readOnly; + } + + if (this._firstFragment) { + this._firstFragment = false; + if ( + rsv1 && + perMessageDeflate && + perMessageDeflate.params[ + perMessageDeflate._isServer + ? 'server_no_context_takeover' + : 'client_no_context_takeover' + ] + ) { + rsv1 = byteLength >= perMessageDeflate._threshold; + } + this._compress = rsv1; + } else { + rsv1 = false; + opcode = 0; + } + + if (options.fin) this._firstFragment = true; + + const opts = { + [kByteLength]: byteLength, + fin: options.fin, + generateMask: this._generateMask, + mask: options.mask, + maskBuffer: this._maskBuffer, + opcode, + readOnly, + rsv1 + }; + + if (isBlob(data)) { + if (this._state !== DEFAULT) { + this.enqueue([this.getBlobData, data, this._compress, opts, cb]); + } else { + this.getBlobData(data, this._compress, opts, cb); + } + } else if (this._state !== DEFAULT) { + this.enqueue([this.dispatch, data, this._compress, opts, cb]); + } else { + this.dispatch(data, this._compress, opts, cb); + } + } + + /** + * Gets the contents of a blob as binary data. + * + * @param {Blob} blob The blob + * @param {Boolean} [compress=false] Specifies whether or not to compress + * the data + * @param {Object} options Options object + * @param {Boolean} [options.fin=false] Specifies whether or not to set the + * FIN bit + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Buffer} [options.maskBuffer] The buffer used to store the masking + * key + * @param {Number} options.opcode The opcode + * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be + * modified + * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the + * RSV1 bit + * @param {Function} [cb] Callback + * @private + */ + getBlobData(blob, compress, options, cb) { + this._bufferedBytes += options[kByteLength]; + this._state = GET_BLOB_DATA; + + blob + .arrayBuffer() + .then((arrayBuffer) => { + if (this._socket.destroyed) { + const err = new Error( + 'The socket was closed while the blob was being read' + ); + + // + // `callCallbacks` is called in the next tick to ensure that errors + // that might be thrown in the callbacks behave like errors thrown + // outside the promise chain. + // + process.nextTick(callCallbacks, this, err, cb); + return; + } + + this._bufferedBytes -= options[kByteLength]; + const data = toBuffer(arrayBuffer); + + if (!compress) { + this._state = DEFAULT; + this.sendFrame(Sender.frame(data, options), cb); + this.dequeue(); + } else { + this.dispatch(data, compress, options, cb); + } + }) + .catch((err) => { + // + // `onError` is called in the next tick for the same reason that + // `callCallbacks` above is. + // + process.nextTick(onError, this, err, cb); + }); + } + + /** + * Dispatches a message. + * + * @param {(Buffer|String)} data The message to send + * @param {Boolean} [compress=false] Specifies whether or not to compress + * `data` + * @param {Object} options Options object + * @param {Boolean} [options.fin=false] Specifies whether or not to set the + * FIN bit + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Buffer} [options.maskBuffer] The buffer used to store the masking + * key + * @param {Number} options.opcode The opcode + * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be + * modified + * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the + * RSV1 bit + * @param {Function} [cb] Callback + * @private + */ + dispatch(data, compress, options, cb) { + if (!compress) { + this.sendFrame(Sender.frame(data, options), cb); + return; + } + + const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + + this._bufferedBytes += options[kByteLength]; + this._state = DEFLATING; + perMessageDeflate.compress(data, options.fin, (_, buf) => { + if (this._socket.destroyed) { + const err = new Error( + 'The socket was closed while data was being compressed' + ); + + callCallbacks(this, err, cb); + return; + } + + this._bufferedBytes -= options[kByteLength]; + this._state = DEFAULT; + options.readOnly = false; + this.sendFrame(Sender.frame(buf, options), cb); + this.dequeue(); + }); + } + + /** + * Executes queued send operations. + * + * @private + */ + dequeue() { + while (this._state === DEFAULT && this._queue.length) { + const params = this._queue.shift(); + + this._bufferedBytes -= params[3][kByteLength]; + Reflect.apply(params[0], this, params.slice(1)); + } + } + + /** + * Enqueues a send operation. + * + * @param {Array} params Send operation parameters. + * @private + */ + enqueue(params) { + this._bufferedBytes += params[3][kByteLength]; + this._queue.push(params); + } + + /** + * Sends a frame. + * + * @param {(Buffer | String)[]} list The frame to send + * @param {Function} [cb] Callback + * @private + */ + sendFrame(list, cb) { + if (list.length === 2) { + this._socket.cork(); + this._socket.write(list[0]); + this._socket.write(list[1], cb); + this._socket.uncork(); + } else { + this._socket.write(list[0], cb); + } + } +} + +module.exports = Sender; + +/** + * Calls queued callbacks with an error. + * + * @param {Sender} sender The `Sender` instance + * @param {Error} err The error to call the callbacks with + * @param {Function} [cb] The first callback + * @private + */ +function callCallbacks(sender, err, cb) { + if (typeof cb === 'function') cb(err); + + for (let i = 0; i < sender._queue.length; i++) { + const params = sender._queue[i]; + const callback = params[params.length - 1]; + + if (typeof callback === 'function') callback(err); + } +} + +/** + * Handles a `Sender` error. + * + * @param {Sender} sender The `Sender` instance + * @param {Error} err The error + * @param {Function} [cb] The first pending callback + * @private + */ +function onError(sender, err, cb) { + callCallbacks(sender, err, cb); + sender.onerror(err); +} diff --git a/node_modules/ws/lib/stream.js b/node_modules/ws/lib/stream.js new file mode 100644 index 0000000..4c58c91 --- /dev/null +++ b/node_modules/ws/lib/stream.js @@ -0,0 +1,161 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^WebSocket$" }] */ +'use strict'; + +const WebSocket = require('./websocket'); +const { Duplex } = require('stream'); + +/** + * Emits the `'close'` event on a stream. + * + * @param {Duplex} stream The stream. + * @private + */ +function emitClose(stream) { + stream.emit('close'); +} + +/** + * The listener of the `'end'` event. + * + * @private + */ +function duplexOnEnd() { + if (!this.destroyed && this._writableState.finished) { + this.destroy(); + } +} + +/** + * The listener of the `'error'` event. + * + * @param {Error} err The error + * @private + */ +function duplexOnError(err) { + this.removeListener('error', duplexOnError); + this.destroy(); + if (this.listenerCount('error') === 0) { + // Do not suppress the throwing behavior. + this.emit('error', err); + } +} + +/** + * Wraps a `WebSocket` in a duplex stream. + * + * @param {WebSocket} ws The `WebSocket` to wrap + * @param {Object} [options] The options for the `Duplex` constructor + * @return {Duplex} The duplex stream + * @public + */ +function createWebSocketStream(ws, options) { + let terminateOnDestroy = true; + + const duplex = new Duplex({ + ...options, + autoDestroy: false, + emitClose: false, + objectMode: false, + writableObjectMode: false + }); + + ws.on('message', function message(msg, isBinary) { + const data = + !isBinary && duplex._readableState.objectMode ? msg.toString() : msg; + + if (!duplex.push(data)) ws.pause(); + }); + + ws.once('error', function error(err) { + if (duplex.destroyed) return; + + // Prevent `ws.terminate()` from being called by `duplex._destroy()`. + // + // - If the `'error'` event is emitted before the `'open'` event, then + // `ws.terminate()` is a noop as no socket is assigned. + // - Otherwise, the error is re-emitted by the listener of the `'error'` + // event of the `Receiver` object. The listener already closes the + // connection by calling `ws.close()`. This allows a close frame to be + // sent to the other peer. If `ws.terminate()` is called right after this, + // then the close frame might not be sent. + terminateOnDestroy = false; + duplex.destroy(err); + }); + + ws.once('close', function close() { + if (duplex.destroyed) return; + + duplex.push(null); + }); + + duplex._destroy = function (err, callback) { + if (ws.readyState === ws.CLOSED) { + callback(err); + process.nextTick(emitClose, duplex); + return; + } + + let called = false; + + ws.once('error', function error(err) { + called = true; + callback(err); + }); + + ws.once('close', function close() { + if (!called) callback(err); + process.nextTick(emitClose, duplex); + }); + + if (terminateOnDestroy) ws.terminate(); + }; + + duplex._final = function (callback) { + if (ws.readyState === ws.CONNECTING) { + ws.once('open', function open() { + duplex._final(callback); + }); + return; + } + + // If the value of the `_socket` property is `null` it means that `ws` is a + // client websocket and the handshake failed. In fact, when this happens, a + // socket is never assigned to the websocket. Wait for the `'error'` event + // that will be emitted by the websocket. + if (ws._socket === null) return; + + if (ws._socket._writableState.finished) { + callback(); + if (duplex._readableState.endEmitted) duplex.destroy(); + } else { + ws._socket.once('finish', function finish() { + // `duplex` is not destroyed here because the `'end'` event will be + // emitted on `duplex` after this `'finish'` event. The EOF signaling + // `null` chunk is, in fact, pushed when the websocket emits `'close'`. + callback(); + }); + ws.close(); + } + }; + + duplex._read = function () { + if (ws.isPaused) ws.resume(); + }; + + duplex._write = function (chunk, encoding, callback) { + if (ws.readyState === ws.CONNECTING) { + ws.once('open', function open() { + duplex._write(chunk, encoding, callback); + }); + return; + } + + ws.send(chunk, callback); + }; + + duplex.on('end', duplexOnEnd); + duplex.on('error', duplexOnError); + return duplex; +} + +module.exports = createWebSocketStream; diff --git a/node_modules/ws/lib/subprotocol.js b/node_modules/ws/lib/subprotocol.js new file mode 100644 index 0000000..d4381e8 --- /dev/null +++ b/node_modules/ws/lib/subprotocol.js @@ -0,0 +1,62 @@ +'use strict'; + +const { tokenChars } = require('./validation'); + +/** + * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names. + * + * @param {String} header The field value of the header + * @return {Set} The subprotocol names + * @public + */ +function parse(header) { + const protocols = new Set(); + let start = -1; + let end = -1; + let i = 0; + + for (i; i < header.length; i++) { + const code = header.charCodeAt(i); + + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if ( + i !== 0 && + (code === 0x20 /* ' ' */ || code === 0x09) /* '\t' */ + ) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x2c /* ',' */) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + + const protocol = header.slice(start, end); + + if (protocols.has(protocol)) { + throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`); + } + + protocols.add(protocol); + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } + + if (start === -1 || end !== -1) { + throw new SyntaxError('Unexpected end of input'); + } + + const protocol = header.slice(start, i); + + if (protocols.has(protocol)) { + throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`); + } + + protocols.add(protocol); + return protocols; +} + +module.exports = { parse }; diff --git a/node_modules/ws/lib/validation.js b/node_modules/ws/lib/validation.js new file mode 100644 index 0000000..4a2e68d --- /dev/null +++ b/node_modules/ws/lib/validation.js @@ -0,0 +1,152 @@ +'use strict'; + +const { isUtf8 } = require('buffer'); + +const { hasBlob } = require('./constants'); + +// +// Allowed token characters: +// +// '!', '#', '$', '%', '&', ''', '*', '+', '-', +// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~' +// +// tokenChars[32] === 0 // ' ' +// tokenChars[33] === 1 // '!' +// tokenChars[34] === 0 // '"' +// ... +// +// prettier-ignore +const tokenChars = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31 + 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63 + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127 +]; + +/** + * Checks if a status code is allowed in a close frame. + * + * @param {Number} code The status code + * @return {Boolean} `true` if the status code is valid, else `false` + * @public + */ +function isValidStatusCode(code) { + return ( + (code >= 1000 && + code <= 1014 && + code !== 1004 && + code !== 1005 && + code !== 1006) || + (code >= 3000 && code <= 4999) + ); +} + +/** + * Checks if a given buffer contains only correct UTF-8. + * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by + * Markus Kuhn. + * + * @param {Buffer} buf The buffer to check + * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false` + * @public + */ +function _isValidUTF8(buf) { + const len = buf.length; + let i = 0; + + while (i < len) { + if ((buf[i] & 0x80) === 0) { + // 0xxxxxxx + i++; + } else if ((buf[i] & 0xe0) === 0xc0) { + // 110xxxxx 10xxxxxx + if ( + i + 1 === len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i] & 0xfe) === 0xc0 // Overlong + ) { + return false; + } + + i += 2; + } else if ((buf[i] & 0xf0) === 0xe0) { + // 1110xxxx 10xxxxxx 10xxxxxx + if ( + i + 2 >= len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i + 2] & 0xc0) !== 0x80 || + (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong + (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF) + ) { + return false; + } + + i += 3; + } else if ((buf[i] & 0xf8) === 0xf0) { + // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + if ( + i + 3 >= len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i + 2] & 0xc0) !== 0x80 || + (buf[i + 3] & 0xc0) !== 0x80 || + (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong + (buf[i] === 0xf4 && buf[i + 1] > 0x8f) || + buf[i] > 0xf4 // > U+10FFFF + ) { + return false; + } + + i += 4; + } else { + return false; + } + } + + return true; +} + +/** + * Determines whether a value is a `Blob`. + * + * @param {*} value The value to be tested + * @return {Boolean} `true` if `value` is a `Blob`, else `false` + * @private + */ +function isBlob(value) { + return ( + hasBlob && + typeof value === 'object' && + typeof value.arrayBuffer === 'function' && + typeof value.type === 'string' && + typeof value.stream === 'function' && + (value[Symbol.toStringTag] === 'Blob' || + value[Symbol.toStringTag] === 'File') + ); +} + +module.exports = { + isBlob, + isValidStatusCode, + isValidUTF8: _isValidUTF8, + tokenChars +}; + +if (isUtf8) { + module.exports.isValidUTF8 = function (buf) { + return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf); + }; +} /* istanbul ignore else */ else if (!process.env.WS_NO_UTF_8_VALIDATE) { + try { + const isValidUTF8 = require('utf-8-validate'); + + module.exports.isValidUTF8 = function (buf) { + return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf); + }; + } catch (e) { + // Continue regardless of the error. + } +} diff --git a/node_modules/ws/lib/websocket-server.js b/node_modules/ws/lib/websocket-server.js new file mode 100644 index 0000000..68aa789 --- /dev/null +++ b/node_modules/ws/lib/websocket-server.js @@ -0,0 +1,554 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Duplex$", "caughtErrors": "none" }] */ + +'use strict'; + +const EventEmitter = require('events'); +const http = require('http'); +const { Duplex } = require('stream'); +const { createHash } = require('crypto'); + +const extension = require('./extension'); +const PerMessageDeflate = require('./permessage-deflate'); +const subprotocol = require('./subprotocol'); +const WebSocket = require('./websocket'); +const { CLOSE_TIMEOUT, GUID, kWebSocket } = require('./constants'); + +const keyRegex = /^[+/0-9A-Za-z]{22}==$/; + +const RUNNING = 0; +const CLOSING = 1; +const CLOSED = 2; + +/** + * Class representing a WebSocket server. + * + * @extends EventEmitter + */ +class WebSocketServer extends EventEmitter { + /** + * Create a `WebSocketServer` instance. + * + * @param {Object} options Configuration options + * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether + * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted + * multiple times in the same tick + * @param {Boolean} [options.autoPong=true] Specifies whether or not to + * automatically send a pong in response to a ping + * @param {Number} [options.backlog=511] The maximum length of the queue of + * pending connections + * @param {Boolean} [options.clientTracking=true] Specifies whether or not to + * track clients + * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to + * wait for the closing handshake to finish after `websocket.close()` is + * called + * @param {Function} [options.handleProtocols] A hook to handle protocols + * @param {String} [options.host] The hostname where to bind the server + * @param {Number} [options.maxPayload=104857600] The maximum allowed message + * size + * @param {Boolean} [options.noServer=false] Enable no server mode + * @param {String} [options.path] Accept only connections matching this path + * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable + * permessage-deflate + * @param {Number} [options.port] The port where to bind the server + * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S + * server to use + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + * @param {Function} [options.verifyClient] A hook to reject connections + * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket` + * class to use. It must be the `WebSocket` class or class that extends it + * @param {Function} [callback] A listener for the `listening` event + */ + constructor(options, callback) { + super(); + + options = { + allowSynchronousEvents: true, + autoPong: true, + maxPayload: 100 * 1024 * 1024, + skipUTF8Validation: false, + perMessageDeflate: false, + handleProtocols: null, + clientTracking: true, + closeTimeout: CLOSE_TIMEOUT, + verifyClient: null, + noServer: false, + backlog: null, // use default (511 as implemented in net.js) + server: null, + host: null, + path: null, + port: null, + WebSocket, + ...options + }; + + if ( + (options.port == null && !options.server && !options.noServer) || + (options.port != null && (options.server || options.noServer)) || + (options.server && options.noServer) + ) { + throw new TypeError( + 'One and only one of the "port", "server", or "noServer" options ' + + 'must be specified' + ); + } + + if (options.port != null) { + this._server = http.createServer((req, res) => { + const body = http.STATUS_CODES[426]; + + res.writeHead(426, { + 'Content-Length': body.length, + 'Content-Type': 'text/plain' + }); + res.end(body); + }); + this._server.listen( + options.port, + options.host, + options.backlog, + callback + ); + } else if (options.server) { + this._server = options.server; + } + + if (this._server) { + const emitConnection = this.emit.bind(this, 'connection'); + + this._removeListeners = addListeners(this._server, { + listening: this.emit.bind(this, 'listening'), + error: this.emit.bind(this, 'error'), + upgrade: (req, socket, head) => { + this.handleUpgrade(req, socket, head, emitConnection); + } + }); + } + + if (options.perMessageDeflate === true) options.perMessageDeflate = {}; + if (options.clientTracking) { + this.clients = new Set(); + this._shouldEmitClose = false; + } + + this.options = options; + this._state = RUNNING; + } + + /** + * Returns the bound address, the address family name, and port of the server + * as reported by the operating system if listening on an IP socket. + * If the server is listening on a pipe or UNIX domain socket, the name is + * returned as a string. + * + * @return {(Object|String|null)} The address of the server + * @public + */ + address() { + if (this.options.noServer) { + throw new Error('The server is operating in "noServer" mode'); + } + + if (!this._server) return null; + return this._server.address(); + } + + /** + * Stop the server from accepting new connections and emit the `'close'` event + * when all existing connections are closed. + * + * @param {Function} [cb] A one-time listener for the `'close'` event + * @public + */ + close(cb) { + if (this._state === CLOSED) { + if (cb) { + this.once('close', () => { + cb(new Error('The server is not running')); + }); + } + + process.nextTick(emitClose, this); + return; + } + + if (cb) this.once('close', cb); + + if (this._state === CLOSING) return; + this._state = CLOSING; + + if (this.options.noServer || this.options.server) { + if (this._server) { + this._removeListeners(); + this._removeListeners = this._server = null; + } + + if (this.clients) { + if (!this.clients.size) { + process.nextTick(emitClose, this); + } else { + this._shouldEmitClose = true; + } + } else { + process.nextTick(emitClose, this); + } + } else { + const server = this._server; + + this._removeListeners(); + this._removeListeners = this._server = null; + + // + // The HTTP/S server was created internally. Close it, and rely on its + // `'close'` event. + // + server.close(() => { + emitClose(this); + }); + } + } + + /** + * See if a given request should be handled by this server instance. + * + * @param {http.IncomingMessage} req Request object to inspect + * @return {Boolean} `true` if the request is valid, else `false` + * @public + */ + shouldHandle(req) { + if (this.options.path) { + const index = req.url.indexOf('?'); + const pathname = index !== -1 ? req.url.slice(0, index) : req.url; + + if (pathname !== this.options.path) return false; + } + + return true; + } + + /** + * Handle a HTTP Upgrade request. + * + * @param {http.IncomingMessage} req The request object + * @param {Duplex} socket The network socket between the server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Function} cb Callback + * @public + */ + handleUpgrade(req, socket, head, cb) { + socket.on('error', socketOnError); + + const key = req.headers['sec-websocket-key']; + const upgrade = req.headers.upgrade; + const version = +req.headers['sec-websocket-version']; + + if (req.method !== 'GET') { + const message = 'Invalid HTTP method'; + abortHandshakeOrEmitwsClientError(this, req, socket, 405, message); + return; + } + + if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') { + const message = 'Invalid Upgrade header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (key === undefined || !keyRegex.test(key)) { + const message = 'Missing or invalid Sec-WebSocket-Key header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (version !== 13 && version !== 8) { + const message = 'Missing or invalid Sec-WebSocket-Version header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, { + 'Sec-WebSocket-Version': '13, 8' + }); + return; + } + + if (!this.shouldHandle(req)) { + abortHandshake(socket, 400); + return; + } + + const secWebSocketProtocol = req.headers['sec-websocket-protocol']; + let protocols = new Set(); + + if (secWebSocketProtocol !== undefined) { + try { + protocols = subprotocol.parse(secWebSocketProtocol); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Protocol header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + } + + const secWebSocketExtensions = req.headers['sec-websocket-extensions']; + const extensions = {}; + + if ( + this.options.perMessageDeflate && + secWebSocketExtensions !== undefined + ) { + const perMessageDeflate = new PerMessageDeflate({ + ...this.options.perMessageDeflate, + isServer: true, + maxPayload: this.options.maxPayload + }); + + try { + const offers = extension.parse(secWebSocketExtensions); + + if (offers[PerMessageDeflate.extensionName]) { + perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]); + extensions[PerMessageDeflate.extensionName] = perMessageDeflate; + } + } catch (err) { + const message = + 'Invalid or unacceptable Sec-WebSocket-Extensions header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + } + + // + // Optionally call external client verification handler. + // + if (this.options.verifyClient) { + const info = { + origin: + req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`], + secure: !!(req.socket.authorized || req.socket.encrypted), + req + }; + + if (this.options.verifyClient.length === 2) { + this.options.verifyClient(info, (verified, code, message, headers) => { + if (!verified) { + return abortHandshake(socket, code || 401, message, headers); + } + + this.completeUpgrade( + extensions, + key, + protocols, + req, + socket, + head, + cb + ); + }); + return; + } + + if (!this.options.verifyClient(info)) return abortHandshake(socket, 401); + } + + this.completeUpgrade(extensions, key, protocols, req, socket, head, cb); + } + + /** + * Upgrade the connection to WebSocket. + * + * @param {Object} extensions The accepted extensions + * @param {String} key The value of the `Sec-WebSocket-Key` header + * @param {Set} protocols The subprotocols + * @param {http.IncomingMessage} req The request object + * @param {Duplex} socket The network socket between the server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Function} cb Callback + * @throws {Error} If called more than once with the same socket + * @private + */ + completeUpgrade(extensions, key, protocols, req, socket, head, cb) { + // + // Destroy the socket if the client has already sent a FIN packet. + // + if (!socket.readable || !socket.writable) return socket.destroy(); + + if (socket[kWebSocket]) { + throw new Error( + 'server.handleUpgrade() was called more than once with the same ' + + 'socket, possibly due to a misconfiguration' + ); + } + + if (this._state > RUNNING) return abortHandshake(socket, 503); + + const digest = createHash('sha1') + .update(key + GUID) + .digest('base64'); + + const headers = [ + 'HTTP/1.1 101 Switching Protocols', + 'Upgrade: websocket', + 'Connection: Upgrade', + `Sec-WebSocket-Accept: ${digest}` + ]; + + const ws = new this.options.WebSocket(null, undefined, this.options); + + if (protocols.size) { + // + // Optionally call external protocol selection handler. + // + const protocol = this.options.handleProtocols + ? this.options.handleProtocols(protocols, req) + : protocols.values().next().value; + + if (protocol) { + headers.push(`Sec-WebSocket-Protocol: ${protocol}`); + ws._protocol = protocol; + } + } + + if (extensions[PerMessageDeflate.extensionName]) { + const params = extensions[PerMessageDeflate.extensionName].params; + const value = extension.format({ + [PerMessageDeflate.extensionName]: [params] + }); + headers.push(`Sec-WebSocket-Extensions: ${value}`); + ws._extensions = extensions; + } + + // + // Allow external modification/inspection of handshake headers. + // + this.emit('headers', headers, req); + + socket.write(headers.concat('\r\n').join('\r\n')); + socket.removeListener('error', socketOnError); + + ws.setSocket(socket, head, { + allowSynchronousEvents: this.options.allowSynchronousEvents, + maxPayload: this.options.maxPayload, + skipUTF8Validation: this.options.skipUTF8Validation + }); + + if (this.clients) { + this.clients.add(ws); + ws.on('close', () => { + this.clients.delete(ws); + + if (this._shouldEmitClose && !this.clients.size) { + process.nextTick(emitClose, this); + } + }); + } + + cb(ws, req); + } +} + +module.exports = WebSocketServer; + +/** + * Add event listeners on an `EventEmitter` using a map of + * pairs. + * + * @param {EventEmitter} server The event emitter + * @param {Object.} map The listeners to add + * @return {Function} A function that will remove the added listeners when + * called + * @private + */ +function addListeners(server, map) { + for (const event of Object.keys(map)) server.on(event, map[event]); + + return function removeListeners() { + for (const event of Object.keys(map)) { + server.removeListener(event, map[event]); + } + }; +} + +/** + * Emit a `'close'` event on an `EventEmitter`. + * + * @param {EventEmitter} server The event emitter + * @private + */ +function emitClose(server) { + server._state = CLOSED; + server.emit('close'); +} + +/** + * Handle socket errors. + * + * @private + */ +function socketOnError() { + this.destroy(); +} + +/** + * Close the connection when preconditions are not fulfilled. + * + * @param {Duplex} socket The socket of the upgrade request + * @param {Number} code The HTTP response status code + * @param {String} [message] The HTTP response body + * @param {Object} [headers] Additional HTTP response headers + * @private + */ +function abortHandshake(socket, code, message, headers) { + // + // The socket is writable unless the user destroyed or ended it before calling + // `server.handleUpgrade()` or in the `verifyClient` function, which is a user + // error. Handling this does not make much sense as the worst that can happen + // is that some of the data written by the user might be discarded due to the + // call to `socket.end()` below, which triggers an `'error'` event that in + // turn causes the socket to be destroyed. + // + message = message || http.STATUS_CODES[code]; + headers = { + Connection: 'close', + 'Content-Type': 'text/html', + 'Content-Length': Buffer.byteLength(message), + ...headers + }; + + socket.once('finish', socket.destroy); + + socket.end( + `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r\n` + + Object.keys(headers) + .map((h) => `${h}: ${headers[h]}`) + .join('\r\n') + + '\r\n\r\n' + + message + ); +} + +/** + * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least + * one listener for it, otherwise call `abortHandshake()`. + * + * @param {WebSocketServer} server The WebSocket server + * @param {http.IncomingMessage} req The request object + * @param {Duplex} socket The socket of the upgrade request + * @param {Number} code The HTTP response status code + * @param {String} message The HTTP response body + * @param {Object} [headers] The HTTP response headers + * @private + */ +function abortHandshakeOrEmitwsClientError( + server, + req, + socket, + code, + message, + headers +) { + if (server.listenerCount('wsClientError')) { + const err = new Error(message); + Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError); + + server.emit('wsClientError', err, socket, req); + } else { + abortHandshake(socket, code, message, headers); + } +} diff --git a/node_modules/ws/lib/websocket.js b/node_modules/ws/lib/websocket.js new file mode 100644 index 0000000..75d5bb2 --- /dev/null +++ b/node_modules/ws/lib/websocket.js @@ -0,0 +1,1393 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Duplex|Readable$", "caughtErrors": "none" }] */ + +'use strict'; + +const EventEmitter = require('events'); +const https = require('https'); +const http = require('http'); +const net = require('net'); +const tls = require('tls'); +const { randomBytes, createHash } = require('crypto'); +const { Duplex, Readable } = require('stream'); +const { URL } = require('url'); + +const PerMessageDeflate = require('./permessage-deflate'); +const Receiver = require('./receiver'); +const Sender = require('./sender'); +const { isBlob } = require('./validation'); + +const { + BINARY_TYPES, + CLOSE_TIMEOUT, + EMPTY_BUFFER, + GUID, + kForOnEventAttribute, + kListener, + kStatusCode, + kWebSocket, + NOOP +} = require('./constants'); +const { + EventTarget: { addEventListener, removeEventListener } +} = require('./event-target'); +const { format, parse } = require('./extension'); +const { toBuffer } = require('./buffer-util'); + +const kAborted = Symbol('kAborted'); +const protocolVersions = [8, 13]; +const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED']; +const subprotocolRegex = /^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/; + +/** + * Class representing a WebSocket. + * + * @extends EventEmitter + */ +class WebSocket extends EventEmitter { + /** + * Create a new `WebSocket`. + * + * @param {(String|URL)} address The URL to which to connect + * @param {(String|String[])} [protocols] The subprotocols + * @param {Object} [options] Connection options + */ + constructor(address, protocols, options) { + super(); + + this._binaryType = BINARY_TYPES[0]; + this._closeCode = 1006; + this._closeFrameReceived = false; + this._closeFrameSent = false; + this._closeMessage = EMPTY_BUFFER; + this._closeTimer = null; + this._errorEmitted = false; + this._extensions = {}; + this._paused = false; + this._protocol = ''; + this._readyState = WebSocket.CONNECTING; + this._receiver = null; + this._sender = null; + this._socket = null; + + if (address !== null) { + this._bufferedAmount = 0; + this._isServer = false; + this._redirects = 0; + + if (protocols === undefined) { + protocols = []; + } else if (!Array.isArray(protocols)) { + if (typeof protocols === 'object' && protocols !== null) { + options = protocols; + protocols = []; + } else { + protocols = [protocols]; + } + } + + initAsClient(this, address, protocols, options); + } else { + this._autoPong = options.autoPong; + this._closeTimeout = options.closeTimeout; + this._isServer = true; + } + } + + /** + * For historical reasons, the custom "nodebuffer" type is used by the default + * instead of "blob". + * + * @type {String} + */ + get binaryType() { + return this._binaryType; + } + + set binaryType(type) { + if (!BINARY_TYPES.includes(type)) return; + + this._binaryType = type; + + // + // Allow to change `binaryType` on the fly. + // + if (this._receiver) this._receiver._binaryType = type; + } + + /** + * @type {Number} + */ + get bufferedAmount() { + if (!this._socket) return this._bufferedAmount; + + return this._socket._writableState.length + this._sender._bufferedBytes; + } + + /** + * @type {String} + */ + get extensions() { + return Object.keys(this._extensions).join(); + } + + /** + * @type {Boolean} + */ + get isPaused() { + return this._paused; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onclose() { + return null; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onerror() { + return null; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onopen() { + return null; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onmessage() { + return null; + } + + /** + * @type {String} + */ + get protocol() { + return this._protocol; + } + + /** + * @type {Number} + */ + get readyState() { + return this._readyState; + } + + /** + * @type {String} + */ + get url() { + return this._url; + } + + /** + * Set up the socket and the internal resources. + * + * @param {Duplex} socket The network socket between the server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Object} options Options object + * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether + * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted + * multiple times in the same tick + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Number} [options.maxPayload=0] The maximum allowed message size + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + * @private + */ + setSocket(socket, head, options) { + const receiver = new Receiver({ + allowSynchronousEvents: options.allowSynchronousEvents, + binaryType: this.binaryType, + extensions: this._extensions, + isServer: this._isServer, + maxPayload: options.maxPayload, + skipUTF8Validation: options.skipUTF8Validation + }); + + const sender = new Sender(socket, this._extensions, options.generateMask); + + this._receiver = receiver; + this._sender = sender; + this._socket = socket; + + receiver[kWebSocket] = this; + sender[kWebSocket] = this; + socket[kWebSocket] = this; + + receiver.on('conclude', receiverOnConclude); + receiver.on('drain', receiverOnDrain); + receiver.on('error', receiverOnError); + receiver.on('message', receiverOnMessage); + receiver.on('ping', receiverOnPing); + receiver.on('pong', receiverOnPong); + + sender.onerror = senderOnError; + + // + // These methods may not be available if `socket` is just a `Duplex`. + // + if (socket.setTimeout) socket.setTimeout(0); + if (socket.setNoDelay) socket.setNoDelay(); + + if (head.length > 0) socket.unshift(head); + + socket.on('close', socketOnClose); + socket.on('data', socketOnData); + socket.on('end', socketOnEnd); + socket.on('error', socketOnError); + + this._readyState = WebSocket.OPEN; + this.emit('open'); + } + + /** + * Emit the `'close'` event. + * + * @private + */ + emitClose() { + if (!this._socket) { + this._readyState = WebSocket.CLOSED; + this.emit('close', this._closeCode, this._closeMessage); + return; + } + + if (this._extensions[PerMessageDeflate.extensionName]) { + this._extensions[PerMessageDeflate.extensionName].cleanup(); + } + + this._receiver.removeAllListeners(); + this._readyState = WebSocket.CLOSED; + this.emit('close', this._closeCode, this._closeMessage); + } + + /** + * Start a closing handshake. + * + * +----------+ +-----------+ +----------+ + * - - -|ws.close()|-->|close frame|-->|ws.close()|- - - + * | +----------+ +-----------+ +----------+ | + * +----------+ +-----------+ | + * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING + * +----------+ +-----------+ | + * | | | +---+ | + * +------------------------+-->|fin| - - - - + * | +---+ | +---+ + * - - - - -|fin|<---------------------+ + * +---+ + * + * @param {Number} [code] Status code explaining why the connection is closing + * @param {(String|Buffer)} [data] The reason why the connection is + * closing + * @public + */ + close(code, data) { + if (this.readyState === WebSocket.CLOSED) return; + if (this.readyState === WebSocket.CONNECTING) { + const msg = 'WebSocket was closed before the connection was established'; + abortHandshake(this, this._req, msg); + return; + } + + if (this.readyState === WebSocket.CLOSING) { + if ( + this._closeFrameSent && + (this._closeFrameReceived || this._receiver._writableState.errorEmitted) + ) { + this._socket.end(); + } + + return; + } + + this._readyState = WebSocket.CLOSING; + this._sender.close(code, data, !this._isServer, (err) => { + // + // This error is handled by the `'error'` listener on the socket. We only + // want to know if the close frame has been sent here. + // + if (err) return; + + this._closeFrameSent = true; + + if ( + this._closeFrameReceived || + this._receiver._writableState.errorEmitted + ) { + this._socket.end(); + } + }); + + setCloseTimer(this); + } + + /** + * Pause the socket. + * + * @public + */ + pause() { + if ( + this.readyState === WebSocket.CONNECTING || + this.readyState === WebSocket.CLOSED + ) { + return; + } + + this._paused = true; + this._socket.pause(); + } + + /** + * Send a ping. + * + * @param {*} [data] The data to send + * @param {Boolean} [mask] Indicates whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when the ping is sent + * @public + */ + ping(data, mask, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof data === 'function') { + cb = data; + data = mask = undefined; + } else if (typeof mask === 'function') { + cb = mask; + mask = undefined; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + if (mask === undefined) mask = !this._isServer; + this._sender.ping(data || EMPTY_BUFFER, mask, cb); + } + + /** + * Send a pong. + * + * @param {*} [data] The data to send + * @param {Boolean} [mask] Indicates whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when the pong is sent + * @public + */ + pong(data, mask, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof data === 'function') { + cb = data; + data = mask = undefined; + } else if (typeof mask === 'function') { + cb = mask; + mask = undefined; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + if (mask === undefined) mask = !this._isServer; + this._sender.pong(data || EMPTY_BUFFER, mask, cb); + } + + /** + * Resume the socket. + * + * @public + */ + resume() { + if ( + this.readyState === WebSocket.CONNECTING || + this.readyState === WebSocket.CLOSED + ) { + return; + } + + this._paused = false; + if (!this._receiver._writableState.needDrain) this._socket.resume(); + } + + /** + * Send a data message. + * + * @param {*} data The message to send + * @param {Object} [options] Options object + * @param {Boolean} [options.binary] Specifies whether `data` is binary or + * text + * @param {Boolean} [options.compress] Specifies whether or not to compress + * `data` + * @param {Boolean} [options.fin=true] Specifies whether the fragment is the + * last one + * @param {Boolean} [options.mask] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when data is written out + * @public + */ + send(data, options, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof options === 'function') { + cb = options; + options = {}; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + const opts = { + binary: typeof data !== 'string', + mask: !this._isServer, + compress: true, + fin: true, + ...options + }; + + if (!this._extensions[PerMessageDeflate.extensionName]) { + opts.compress = false; + } + + this._sender.send(data || EMPTY_BUFFER, opts, cb); + } + + /** + * Forcibly close the connection. + * + * @public + */ + terminate() { + if (this.readyState === WebSocket.CLOSED) return; + if (this.readyState === WebSocket.CONNECTING) { + const msg = 'WebSocket was closed before the connection was established'; + abortHandshake(this, this._req, msg); + return; + } + + if (this._socket) { + this._readyState = WebSocket.CLOSING; + this._socket.destroy(); + } + } +} + +/** + * @constant {Number} CONNECTING + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CONNECTING', { + enumerable: true, + value: readyStates.indexOf('CONNECTING') +}); + +/** + * @constant {Number} CONNECTING + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CONNECTING', { + enumerable: true, + value: readyStates.indexOf('CONNECTING') +}); + +/** + * @constant {Number} OPEN + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'OPEN', { + enumerable: true, + value: readyStates.indexOf('OPEN') +}); + +/** + * @constant {Number} OPEN + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'OPEN', { + enumerable: true, + value: readyStates.indexOf('OPEN') +}); + +/** + * @constant {Number} CLOSING + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CLOSING', { + enumerable: true, + value: readyStates.indexOf('CLOSING') +}); + +/** + * @constant {Number} CLOSING + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CLOSING', { + enumerable: true, + value: readyStates.indexOf('CLOSING') +}); + +/** + * @constant {Number} CLOSED + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CLOSED', { + enumerable: true, + value: readyStates.indexOf('CLOSED') +}); + +/** + * @constant {Number} CLOSED + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CLOSED', { + enumerable: true, + value: readyStates.indexOf('CLOSED') +}); + +[ + 'binaryType', + 'bufferedAmount', + 'extensions', + 'isPaused', + 'protocol', + 'readyState', + 'url' +].forEach((property) => { + Object.defineProperty(WebSocket.prototype, property, { enumerable: true }); +}); + +// +// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes. +// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface +// +['open', 'error', 'close', 'message'].forEach((method) => { + Object.defineProperty(WebSocket.prototype, `on${method}`, { + enumerable: true, + get() { + for (const listener of this.listeners(method)) { + if (listener[kForOnEventAttribute]) return listener[kListener]; + } + + return null; + }, + set(handler) { + for (const listener of this.listeners(method)) { + if (listener[kForOnEventAttribute]) { + this.removeListener(method, listener); + break; + } + } + + if (typeof handler !== 'function') return; + + this.addEventListener(method, handler, { + [kForOnEventAttribute]: true + }); + } + }); +}); + +WebSocket.prototype.addEventListener = addEventListener; +WebSocket.prototype.removeEventListener = removeEventListener; + +module.exports = WebSocket; + +/** + * Initialize a WebSocket client. + * + * @param {WebSocket} websocket The client to initialize + * @param {(String|URL)} address The URL to which to connect + * @param {Array} protocols The subprotocols + * @param {Object} [options] Connection options + * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any + * of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple + * times in the same tick + * @param {Boolean} [options.autoPong=true] Specifies whether or not to + * automatically send a pong in response to a ping + * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to wait + * for the closing handshake to finish after `websocket.close()` is called + * @param {Function} [options.finishRequest] A function which can be used to + * customize the headers of each http request before it is sent + * @param {Boolean} [options.followRedirects=false] Whether or not to follow + * redirects + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the + * handshake request + * @param {Number} [options.maxPayload=104857600] The maximum allowed message + * size + * @param {Number} [options.maxRedirects=10] The maximum number of redirects + * allowed + * @param {String} [options.origin] Value of the `Origin` or + * `Sec-WebSocket-Origin` header + * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable + * permessage-deflate + * @param {Number} [options.protocolVersion=13] Value of the + * `Sec-WebSocket-Version` header + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + * @private + */ +function initAsClient(websocket, address, protocols, options) { + const opts = { + allowSynchronousEvents: true, + autoPong: true, + closeTimeout: CLOSE_TIMEOUT, + protocolVersion: protocolVersions[1], + maxPayload: 100 * 1024 * 1024, + skipUTF8Validation: false, + perMessageDeflate: true, + followRedirects: false, + maxRedirects: 10, + ...options, + socketPath: undefined, + hostname: undefined, + protocol: undefined, + timeout: undefined, + method: 'GET', + host: undefined, + path: undefined, + port: undefined + }; + + websocket._autoPong = opts.autoPong; + websocket._closeTimeout = opts.closeTimeout; + + if (!protocolVersions.includes(opts.protocolVersion)) { + throw new RangeError( + `Unsupported protocol version: ${opts.protocolVersion} ` + + `(supported versions: ${protocolVersions.join(', ')})` + ); + } + + let parsedUrl; + + if (address instanceof URL) { + parsedUrl = address; + } else { + try { + parsedUrl = new URL(address); + } catch { + throw new SyntaxError(`Invalid URL: ${address}`); + } + } + + if (parsedUrl.protocol === 'http:') { + parsedUrl.protocol = 'ws:'; + } else if (parsedUrl.protocol === 'https:') { + parsedUrl.protocol = 'wss:'; + } + + websocket._url = parsedUrl.href; + + const isSecure = parsedUrl.protocol === 'wss:'; + const isIpcUrl = parsedUrl.protocol === 'ws+unix:'; + let invalidUrlMessage; + + if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) { + invalidUrlMessage = + 'The URL\'s protocol must be one of "ws:", "wss:", ' + + '"http:", "https:", or "ws+unix:"'; + } else if (isIpcUrl && !parsedUrl.pathname) { + invalidUrlMessage = "The URL's pathname is empty"; + } else if (parsedUrl.hash) { + invalidUrlMessage = 'The URL contains a fragment identifier'; + } + + if (invalidUrlMessage) { + const err = new SyntaxError(invalidUrlMessage); + + if (websocket._redirects === 0) { + throw err; + } else { + emitErrorAndClose(websocket, err); + return; + } + } + + const defaultPort = isSecure ? 443 : 80; + const key = randomBytes(16).toString('base64'); + const request = isSecure ? https.request : http.request; + const protocolSet = new Set(); + let perMessageDeflate; + + opts.createConnection = + opts.createConnection || (isSecure ? tlsConnect : netConnect); + opts.defaultPort = opts.defaultPort || defaultPort; + opts.port = parsedUrl.port || defaultPort; + opts.host = parsedUrl.hostname.startsWith('[') + ? parsedUrl.hostname.slice(1, -1) + : parsedUrl.hostname; + opts.headers = { + ...opts.headers, + 'Sec-WebSocket-Version': opts.protocolVersion, + 'Sec-WebSocket-Key': key, + Connection: 'Upgrade', + Upgrade: 'websocket' + }; + opts.path = parsedUrl.pathname + parsedUrl.search; + opts.timeout = opts.handshakeTimeout; + + if (opts.perMessageDeflate) { + perMessageDeflate = new PerMessageDeflate({ + ...opts.perMessageDeflate, + isServer: false, + maxPayload: opts.maxPayload + }); + opts.headers['Sec-WebSocket-Extensions'] = format({ + [PerMessageDeflate.extensionName]: perMessageDeflate.offer() + }); + } + if (protocols.length) { + for (const protocol of protocols) { + if ( + typeof protocol !== 'string' || + !subprotocolRegex.test(protocol) || + protocolSet.has(protocol) + ) { + throw new SyntaxError( + 'An invalid or duplicated subprotocol was specified' + ); + } + + protocolSet.add(protocol); + } + + opts.headers['Sec-WebSocket-Protocol'] = protocols.join(','); + } + if (opts.origin) { + if (opts.protocolVersion < 13) { + opts.headers['Sec-WebSocket-Origin'] = opts.origin; + } else { + opts.headers.Origin = opts.origin; + } + } + if (parsedUrl.username || parsedUrl.password) { + opts.auth = `${parsedUrl.username}:${parsedUrl.password}`; + } + + if (isIpcUrl) { + const parts = opts.path.split(':'); + + opts.socketPath = parts[0]; + opts.path = parts[1]; + } + + let req; + + if (opts.followRedirects) { + if (websocket._redirects === 0) { + websocket._originalIpc = isIpcUrl; + websocket._originalSecure = isSecure; + websocket._originalHostOrSocketPath = isIpcUrl + ? opts.socketPath + : parsedUrl.host; + + const headers = options && options.headers; + + // + // Shallow copy the user provided options so that headers can be changed + // without mutating the original object. + // + options = { ...options, headers: {} }; + + if (headers) { + for (const [key, value] of Object.entries(headers)) { + options.headers[key.toLowerCase()] = value; + } + } + } else if (websocket.listenerCount('redirect') === 0) { + const isSameHost = isIpcUrl + ? websocket._originalIpc + ? opts.socketPath === websocket._originalHostOrSocketPath + : false + : websocket._originalIpc + ? false + : parsedUrl.host === websocket._originalHostOrSocketPath; + + if (!isSameHost || (websocket._originalSecure && !isSecure)) { + // + // Match curl 7.77.0 behavior and drop the following headers. These + // headers are also dropped when following a redirect to a subdomain. + // + delete opts.headers.authorization; + delete opts.headers.cookie; + + if (!isSameHost) delete opts.headers.host; + + opts.auth = undefined; + } + } + + // + // Match curl 7.77.0 behavior and make the first `Authorization` header win. + // If the `Authorization` header is set, then there is nothing to do as it + // will take precedence. + // + if (opts.auth && !options.headers.authorization) { + options.headers.authorization = + 'Basic ' + Buffer.from(opts.auth).toString('base64'); + } + + req = websocket._req = request(opts); + + if (websocket._redirects) { + // + // Unlike what is done for the `'upgrade'` event, no early exit is + // triggered here if the user calls `websocket.close()` or + // `websocket.terminate()` from a listener of the `'redirect'` event. This + // is because the user can also call `request.destroy()` with an error + // before calling `websocket.close()` or `websocket.terminate()` and this + // would result in an error being emitted on the `request` object with no + // `'error'` event listeners attached. + // + websocket.emit('redirect', websocket.url, req); + } + } else { + req = websocket._req = request(opts); + } + + if (opts.timeout) { + req.on('timeout', () => { + abortHandshake(websocket, req, 'Opening handshake has timed out'); + }); + } + + req.on('error', (err) => { + if (req === null || req[kAborted]) return; + + req = websocket._req = null; + emitErrorAndClose(websocket, err); + }); + + req.on('response', (res) => { + const location = res.headers.location; + const statusCode = res.statusCode; + + if ( + location && + opts.followRedirects && + statusCode >= 300 && + statusCode < 400 + ) { + if (++websocket._redirects > opts.maxRedirects) { + abortHandshake(websocket, req, 'Maximum redirects exceeded'); + return; + } + + req.abort(); + + let addr; + + try { + addr = new URL(location, address); + } catch (e) { + const err = new SyntaxError(`Invalid URL: ${location}`); + emitErrorAndClose(websocket, err); + return; + } + + initAsClient(websocket, addr, protocols, options); + } else if (!websocket.emit('unexpected-response', req, res)) { + abortHandshake( + websocket, + req, + `Unexpected server response: ${res.statusCode}` + ); + } + }); + + req.on('upgrade', (res, socket, head) => { + websocket.emit('upgrade', res); + + // + // The user may have closed the connection from a listener of the + // `'upgrade'` event. + // + if (websocket.readyState !== WebSocket.CONNECTING) return; + + req = websocket._req = null; + + const upgrade = res.headers.upgrade; + + if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') { + abortHandshake(websocket, socket, 'Invalid Upgrade header'); + return; + } + + const digest = createHash('sha1') + .update(key + GUID) + .digest('base64'); + + if (res.headers['sec-websocket-accept'] !== digest) { + abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header'); + return; + } + + const serverProt = res.headers['sec-websocket-protocol']; + let protError; + + if (serverProt !== undefined) { + if (!protocolSet.size) { + protError = 'Server sent a subprotocol but none was requested'; + } else if (!protocolSet.has(serverProt)) { + protError = 'Server sent an invalid subprotocol'; + } + } else if (protocolSet.size) { + protError = 'Server sent no subprotocol'; + } + + if (protError) { + abortHandshake(websocket, socket, protError); + return; + } + + if (serverProt) websocket._protocol = serverProt; + + const secWebSocketExtensions = res.headers['sec-websocket-extensions']; + + if (secWebSocketExtensions !== undefined) { + if (!perMessageDeflate) { + const message = + 'Server sent a Sec-WebSocket-Extensions header but no extension ' + + 'was requested'; + abortHandshake(websocket, socket, message); + return; + } + + let extensions; + + try { + extensions = parse(secWebSocketExtensions); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Extensions header'; + abortHandshake(websocket, socket, message); + return; + } + + const extensionNames = Object.keys(extensions); + + if ( + extensionNames.length !== 1 || + extensionNames[0] !== PerMessageDeflate.extensionName + ) { + const message = 'Server indicated an extension that was not requested'; + abortHandshake(websocket, socket, message); + return; + } + + try { + perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Extensions header'; + abortHandshake(websocket, socket, message); + return; + } + + websocket._extensions[PerMessageDeflate.extensionName] = + perMessageDeflate; + } + + websocket.setSocket(socket, head, { + allowSynchronousEvents: opts.allowSynchronousEvents, + generateMask: opts.generateMask, + maxPayload: opts.maxPayload, + skipUTF8Validation: opts.skipUTF8Validation + }); + }); + + if (opts.finishRequest) { + opts.finishRequest(req, websocket); + } else { + req.end(); + } +} + +/** + * Emit the `'error'` and `'close'` events. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {Error} The error to emit + * @private + */ +function emitErrorAndClose(websocket, err) { + websocket._readyState = WebSocket.CLOSING; + // + // The following assignment is practically useless and is done only for + // consistency. + // + websocket._errorEmitted = true; + websocket.emit('error', err); + websocket.emitClose(); +} + +/** + * Create a `net.Socket` and initiate a connection. + * + * @param {Object} options Connection options + * @return {net.Socket} The newly created socket used to start the connection + * @private + */ +function netConnect(options) { + options.path = options.socketPath; + return net.connect(options); +} + +/** + * Create a `tls.TLSSocket` and initiate a connection. + * + * @param {Object} options Connection options + * @return {tls.TLSSocket} The newly created socket used to start the connection + * @private + */ +function tlsConnect(options) { + options.path = undefined; + + if (!options.servername && options.servername !== '') { + options.servername = net.isIP(options.host) ? '' : options.host; + } + + return tls.connect(options); +} + +/** + * Abort the handshake and emit an error. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to + * abort or the socket to destroy + * @param {String} message The error message + * @private + */ +function abortHandshake(websocket, stream, message) { + websocket._readyState = WebSocket.CLOSING; + + const err = new Error(message); + Error.captureStackTrace(err, abortHandshake); + + if (stream.setHeader) { + stream[kAborted] = true; + stream.abort(); + + if (stream.socket && !stream.socket.destroyed) { + // + // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if + // called after the request completed. See + // https://github.com/websockets/ws/issues/1869. + // + stream.socket.destroy(); + } + + process.nextTick(emitErrorAndClose, websocket, err); + } else { + stream.destroy(err); + stream.once('error', websocket.emit.bind(websocket, 'error')); + stream.once('close', websocket.emitClose.bind(websocket)); + } +} + +/** + * Handle cases where the `ping()`, `pong()`, or `send()` methods are called + * when the `readyState` attribute is `CLOSING` or `CLOSED`. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {*} [data] The data to send + * @param {Function} [cb] Callback + * @private + */ +function sendAfterClose(websocket, data, cb) { + if (data) { + const length = isBlob(data) ? data.size : toBuffer(data).length; + + // + // The `_bufferedAmount` property is used only when the peer is a client and + // the opening handshake fails. Under these circumstances, in fact, the + // `setSocket()` method is not called, so the `_socket` and `_sender` + // properties are set to `null`. + // + if (websocket._socket) websocket._sender._bufferedBytes += length; + else websocket._bufferedAmount += length; + } + + if (cb) { + const err = new Error( + `WebSocket is not open: readyState ${websocket.readyState} ` + + `(${readyStates[websocket.readyState]})` + ); + process.nextTick(cb, err); + } +} + +/** + * The listener of the `Receiver` `'conclude'` event. + * + * @param {Number} code The status code + * @param {Buffer} reason The reason for closing + * @private + */ +function receiverOnConclude(code, reason) { + const websocket = this[kWebSocket]; + + websocket._closeFrameReceived = true; + websocket._closeMessage = reason; + websocket._closeCode = code; + + if (websocket._socket[kWebSocket] === undefined) return; + + websocket._socket.removeListener('data', socketOnData); + process.nextTick(resume, websocket._socket); + + if (code === 1005) websocket.close(); + else websocket.close(code, reason); +} + +/** + * The listener of the `Receiver` `'drain'` event. + * + * @private + */ +function receiverOnDrain() { + const websocket = this[kWebSocket]; + + if (!websocket.isPaused) websocket._socket.resume(); +} + +/** + * The listener of the `Receiver` `'error'` event. + * + * @param {(RangeError|Error)} err The emitted error + * @private + */ +function receiverOnError(err) { + const websocket = this[kWebSocket]; + + if (websocket._socket[kWebSocket] !== undefined) { + websocket._socket.removeListener('data', socketOnData); + + // + // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See + // https://github.com/websockets/ws/issues/1940. + // + process.nextTick(resume, websocket._socket); + + websocket.close(err[kStatusCode]); + } + + if (!websocket._errorEmitted) { + websocket._errorEmitted = true; + websocket.emit('error', err); + } +} + +/** + * The listener of the `Receiver` `'finish'` event. + * + * @private + */ +function receiverOnFinish() { + this[kWebSocket].emitClose(); +} + +/** + * The listener of the `Receiver` `'message'` event. + * + * @param {Buffer|ArrayBuffer|Buffer[])} data The message + * @param {Boolean} isBinary Specifies whether the message is binary or not + * @private + */ +function receiverOnMessage(data, isBinary) { + this[kWebSocket].emit('message', data, isBinary); +} + +/** + * The listener of the `Receiver` `'ping'` event. + * + * @param {Buffer} data The data included in the ping frame + * @private + */ +function receiverOnPing(data) { + const websocket = this[kWebSocket]; + + if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP); + websocket.emit('ping', data); +} + +/** + * The listener of the `Receiver` `'pong'` event. + * + * @param {Buffer} data The data included in the pong frame + * @private + */ +function receiverOnPong(data) { + this[kWebSocket].emit('pong', data); +} + +/** + * Resume a readable stream + * + * @param {Readable} stream The readable stream + * @private + */ +function resume(stream) { + stream.resume(); +} + +/** + * The `Sender` error event handler. + * + * @param {Error} The error + * @private + */ +function senderOnError(err) { + const websocket = this[kWebSocket]; + + if (websocket.readyState === WebSocket.CLOSED) return; + if (websocket.readyState === WebSocket.OPEN) { + websocket._readyState = WebSocket.CLOSING; + setCloseTimer(websocket); + } + + // + // `socket.end()` is used instead of `socket.destroy()` to allow the other + // peer to finish sending queued data. There is no need to set a timer here + // because `CLOSING` means that it is already set or not needed. + // + this._socket.end(); + + if (!websocket._errorEmitted) { + websocket._errorEmitted = true; + websocket.emit('error', err); + } +} + +/** + * Set a timer to destroy the underlying raw socket of a WebSocket. + * + * @param {WebSocket} websocket The WebSocket instance + * @private + */ +function setCloseTimer(websocket) { + websocket._closeTimer = setTimeout( + websocket._socket.destroy.bind(websocket._socket), + websocket._closeTimeout + ); +} + +/** + * The listener of the socket `'close'` event. + * + * @private + */ +function socketOnClose() { + const websocket = this[kWebSocket]; + + this.removeListener('close', socketOnClose); + this.removeListener('data', socketOnData); + this.removeListener('end', socketOnEnd); + + websocket._readyState = WebSocket.CLOSING; + + // + // The close frame might not have been received or the `'end'` event emitted, + // for example, if the socket was destroyed due to an error. Ensure that the + // `receiver` stream is closed after writing any remaining buffered data to + // it. If the readable side of the socket is in flowing mode then there is no + // buffered data as everything has been already written. If instead, the + // socket is paused, any possible buffered data will be read as a single + // chunk. + // + if ( + !this._readableState.endEmitted && + !websocket._closeFrameReceived && + !websocket._receiver._writableState.errorEmitted && + this._readableState.length !== 0 + ) { + const chunk = this.read(this._readableState.length); + + websocket._receiver.write(chunk); + } + + websocket._receiver.end(); + + this[kWebSocket] = undefined; + + clearTimeout(websocket._closeTimer); + + if ( + websocket._receiver._writableState.finished || + websocket._receiver._writableState.errorEmitted + ) { + websocket.emitClose(); + } else { + websocket._receiver.on('error', receiverOnFinish); + websocket._receiver.on('finish', receiverOnFinish); + } +} + +/** + * The listener of the socket `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function socketOnData(chunk) { + if (!this[kWebSocket]._receiver.write(chunk)) { + this.pause(); + } +} + +/** + * The listener of the socket `'end'` event. + * + * @private + */ +function socketOnEnd() { + const websocket = this[kWebSocket]; + + websocket._readyState = WebSocket.CLOSING; + websocket._receiver.end(); + this.end(); +} + +/** + * The listener of the socket `'error'` event. + * + * @private + */ +function socketOnError() { + const websocket = this[kWebSocket]; + + this.removeListener('error', socketOnError); + this.on('error', NOOP); + + if (websocket) { + websocket._readyState = WebSocket.CLOSING; + this.destroy(); + } +} diff --git a/node_modules/ws/package.json b/node_modules/ws/package.json new file mode 100644 index 0000000..88ead78 --- /dev/null +++ b/node_modules/ws/package.json @@ -0,0 +1,70 @@ +{ + "name": "ws", + "version": "8.20.1", + "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js", + "keywords": [ + "HyBi", + "Push", + "RFC-6455", + "WebSocket", + "WebSockets", + "real-time" + ], + "homepage": "https://github.com/websockets/ws", + "bugs": "https://github.com/websockets/ws/issues", + "repository": { + "type": "git", + "url": "git+https://github.com/websockets/ws.git" + }, + "author": "Einar Otto Stangvik (http://2x.io)", + "license": "MIT", + "main": "index.js", + "exports": { + ".": { + "browser": "./browser.js", + "import": "./wrapper.mjs", + "require": "./index.js" + }, + "./package.json": "./package.json" + }, + "browser": "browser.js", + "engines": { + "node": ">=10.0.0" + }, + "files": [ + "browser.js", + "index.js", + "lib/*.js", + "wrapper.mjs" + ], + "scripts": { + "test": "nyc --reporter=lcov --reporter=text mocha --throw-deprecation test/*.test.js", + "integration": "mocha --throw-deprecation test/*.integration.js", + "lint": "eslint . && prettier --check --ignore-path .gitignore \"**/*.{json,md,yaml,yml}\"" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "benchmark": "^2.1.4", + "bufferutil": "^4.0.1", + "eslint": "^10.0.1", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-prettier": "^5.0.0", + "globals": "^17.0.0", + "mocha": "^8.4.0", + "nyc": "^15.0.0", + "prettier": "^3.0.0", + "utf-8-validate": "^6.0.0" + } +} diff --git a/node_modules/ws/wrapper.mjs b/node_modules/ws/wrapper.mjs new file mode 100644 index 0000000..a8ffabb --- /dev/null +++ b/node_modules/ws/wrapper.mjs @@ -0,0 +1,21 @@ +import createWebSocketStream from './lib/stream.js'; +import extension from './lib/extension.js'; +import PerMessageDeflate from './lib/permessage-deflate.js'; +import Receiver from './lib/receiver.js'; +import Sender from './lib/sender.js'; +import subprotocol from './lib/subprotocol.js'; +import WebSocket from './lib/websocket.js'; +import WebSocketServer from './lib/websocket-server.js'; + +export { + createWebSocketStream, + extension, + PerMessageDeflate, + Receiver, + Sender, + subprotocol, + WebSocket, + WebSocketServer +}; + +export default WebSocket; diff --git a/node_modules/xtend/.jshintrc b/node_modules/xtend/.jshintrc new file mode 100644 index 0000000..77887b5 --- /dev/null +++ b/node_modules/xtend/.jshintrc @@ -0,0 +1,30 @@ +{ + "maxdepth": 4, + "maxstatements": 200, + "maxcomplexity": 12, + "maxlen": 80, + "maxparams": 5, + + "curly": true, + "eqeqeq": true, + "immed": true, + "latedef": false, + "noarg": true, + "noempty": true, + "nonew": true, + "undef": true, + "unused": "vars", + "trailing": true, + + "quotmark": true, + "expr": true, + "asi": true, + + "browser": false, + "esnext": true, + "devel": false, + "node": false, + "nonstandard": false, + + "predef": ["require", "module", "__dirname", "__filename"] +} diff --git a/node_modules/xtend/LICENSE b/node_modules/xtend/LICENSE new file mode 100644 index 0000000..0099f4f --- /dev/null +++ b/node_modules/xtend/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) +Copyright (c) 2012-2014 Raynos. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/xtend/README.md b/node_modules/xtend/README.md new file mode 100644 index 0000000..4a2703c --- /dev/null +++ b/node_modules/xtend/README.md @@ -0,0 +1,32 @@ +# xtend + +[![browser support][3]][4] + +[![locked](http://badges.github.io/stability-badges/dist/locked.svg)](http://github.com/badges/stability-badges) + +Extend like a boss + +xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes precedence. + +## Examples + +```js +var extend = require("xtend") + +// extend returns a new object. Does not mutate arguments +var combination = extend({ + a: "a", + b: "c" +}, { + b: "b" +}) +// { a: "a", b: "b" } +``` + +## Stability status: Locked + +## MIT Licensed + + + [3]: http://ci.testling.com/Raynos/xtend.png + [4]: http://ci.testling.com/Raynos/xtend diff --git a/node_modules/xtend/immutable.js b/node_modules/xtend/immutable.js new file mode 100644 index 0000000..94889c9 --- /dev/null +++ b/node_modules/xtend/immutable.js @@ -0,0 +1,19 @@ +module.exports = extend + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +function extend() { + var target = {} + + for (var i = 0; i < arguments.length; i++) { + var source = arguments[i] + + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + } + + return target +} diff --git a/node_modules/xtend/mutable.js b/node_modules/xtend/mutable.js new file mode 100644 index 0000000..72debed --- /dev/null +++ b/node_modules/xtend/mutable.js @@ -0,0 +1,17 @@ +module.exports = extend + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +function extend(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] + + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + } + + return target +} diff --git a/node_modules/xtend/package.json b/node_modules/xtend/package.json new file mode 100644 index 0000000..f7a39d1 --- /dev/null +++ b/node_modules/xtend/package.json @@ -0,0 +1,55 @@ +{ + "name": "xtend", + "version": "4.0.2", + "description": "extend like a boss", + "keywords": [ + "extend", + "merge", + "options", + "opts", + "object", + "array" + ], + "author": "Raynos ", + "repository": "git://github.com/Raynos/xtend.git", + "main": "immutable", + "scripts": { + "test": "node test" + }, + "dependencies": {}, + "devDependencies": { + "tape": "~1.1.0" + }, + "homepage": "https://github.com/Raynos/xtend", + "contributors": [ + { + "name": "Jake Verbaten" + }, + { + "name": "Matt Esch" + } + ], + "bugs": { + "url": "https://github.com/Raynos/xtend/issues", + "email": "raynos2@gmail.com" + }, + "license": "MIT", + "testling": { + "files": "test.js", + "browsers": [ + "ie/7..latest", + "firefox/16..latest", + "firefox/nightly", + "chrome/22..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest" + ] + }, + "engines": { + "node": ">=0.4" + } +} diff --git a/node_modules/xtend/test.js b/node_modules/xtend/test.js new file mode 100644 index 0000000..b895b42 --- /dev/null +++ b/node_modules/xtend/test.js @@ -0,0 +1,103 @@ +var test = require("tape") +var extend = require("./") +var mutableExtend = require("./mutable") + +test("merge", function(assert) { + var a = { a: "foo" } + var b = { b: "bar" } + + assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) + assert.end() +}) + +test("replace", function(assert) { + var a = { a: "foo" } + var b = { a: "bar" } + + assert.deepEqual(extend(a, b), { a: "bar" }) + assert.end() +}) + +test("undefined", function(assert) { + var a = { a: undefined } + var b = { b: "foo" } + + assert.deepEqual(extend(a, b), { a: undefined, b: "foo" }) + assert.deepEqual(extend(b, a), { a: undefined, b: "foo" }) + assert.end() +}) + +test("handle 0", function(assert) { + var a = { a: "default" } + var b = { a: 0 } + + assert.deepEqual(extend(a, b), { a: 0 }) + assert.deepEqual(extend(b, a), { a: "default" }) + assert.end() +}) + +test("is immutable", function (assert) { + var record = {} + + extend(record, { foo: "bar" }) + assert.equal(record.foo, undefined) + assert.end() +}) + +test("null as argument", function (assert) { + var a = { foo: "bar" } + var b = null + var c = void 0 + + assert.deepEqual(extend(b, a, c), { foo: "bar" }) + assert.end() +}) + +test("mutable", function (assert) { + var a = { foo: "bar" } + + mutableExtend(a, { bar: "baz" }) + + assert.equal(a.bar, "baz") + assert.end() +}) + +test("null prototype", function(assert) { + var a = { a: "foo" } + var b = Object.create(null) + b.b = "bar"; + + assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) + assert.end() +}) + +test("null prototype mutable", function (assert) { + var a = { foo: "bar" } + var b = Object.create(null) + b.bar = "baz"; + + mutableExtend(a, b) + + assert.equal(a.bar, "baz") + assert.end() +}) + +test("prototype pollution", function (assert) { + var a = {} + var maliciousPayload = '{"__proto__":{"oops":"It works!"}}' + + assert.strictEqual(a.oops, undefined) + extend({}, maliciousPayload) + assert.strictEqual(a.oops, undefined) + assert.end() +}) + +test("prototype pollution mutable", function (assert) { + var a = {} + var maliciousPayload = '{"__proto__":{"oops":"It works!"}}' + + assert.strictEqual(a.oops, undefined) + mutableExtend({}, maliciousPayload) + assert.strictEqual(a.oops, undefined) + assert.end() +}) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..15af0e9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1078 @@ +{ + "name": "pdf-splitter-web", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "pdf-splitter-web", + "version": "1.0.0", + "dependencies": { + "express": "^4.18.2", + "multer": "^1.4.5-lts.1", + "pdf-lib": "^1.17.1", + "uuid": "^9.0.0", + "ws": "^8.16.0" + } + }, + "node_modules/@pdf-lib/standard-fonts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@pdf-lib/standard-fonts/-/standard-fonts-1.0.0.tgz", + "integrity": "sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.6" + } + }, + "node_modules/@pdf-lib/upng": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pdf-lib/upng/-/upng-1.0.1.tgz", + "integrity": "sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.10" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz", + "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", + "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.15.1", + "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/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "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/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "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==", + "license": "MIT", + "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.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "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.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", + "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.5", + "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.15.1", + "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/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/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "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/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/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/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/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==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "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/multer": { + "version": "1.4.5-lts.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.2.tgz", + "integrity": "sha512-VzGiVigcG9zUAoCNU+xShztrlr1auZOlurXynNvO9GiWD1/mTBbUljOKY+qMeazBqXgRnjzeEgJI/wyjJUHg9A==", + "deprecated": "Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version.", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "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/pdf-lib": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-1.17.1.tgz", + "integrity": "sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==", + "license": "MIT", + "dependencies": { + "@pdf-lib/standard-fonts": "^1.0.0", + "@pdf-lib/upng": "^1.0.1", + "pako": "^1.0.11", + "tslib": "^1.11.1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", + "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/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "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" + } + ], + "license": "MIT" + }, + "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/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/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/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "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/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "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/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "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/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ws": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..47febb1 --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "pdf-splitter-web", + "version": "1.0.0", + "description": "PDF Chapter & Page Splitter – Web Edition", + "main": "server.js", + "scripts": { + "start": "node server.js" + }, + "dependencies": { + "express": "^4.18.2", + "multer": "^1.4.5-lts.1", + "pdf-lib": "^1.17.1", + "uuid": "^9.0.0", + "ws": "^8.16.0" + } +} diff --git a/public/app.js b/public/app.js new file mode 100644 index 0000000..2604dee --- /dev/null +++ b/public/app.js @@ -0,0 +1,878 @@ +// ══════════════════════════════════════════════════════════ +// PDF Splitter – Web Client +// ══════════════════════════════════════════════════════════ + +// ── State ────────────────────────────────────────────────── + +let sessionId = null; +let pdfDoc = null; +let totalPages = 0; +let allChapters = []; +let chapters = []; +let selectedPages = new Set(); +let maxDepth = 1; +let lightboxPages = []; +let lightboxIndex = -1; + +// ── DOM References ───────────────────────────────────────── + +const fileInput = document.getElementById('file-input-hidden'); +const fileInfo = document.getElementById('file-info'); +const fileName = document.getElementById('file-name'); +const filePages = document.getElementById('file-pages'); +const chapterLoad = document.getElementById('chapter-loading'); +const chapterNone = document.getElementById('chapter-none'); +const chapterList = document.getElementById('chapter-list'); +const pageInput = document.getElementById('page-input'); +const pageCount = document.getElementById('page-count'); +const previewEmpty = document.getElementById('preview-empty'); +const previewGrid = document.getElementById('preview-grid'); +const depthSelect = document.getElementById('depth-select'); +const depthControl = document.getElementById('depth-control'); +const lightbox = document.getElementById('lightbox'); +const lbCanvas = document.getElementById('lightbox-canvas'); +const lbClose = document.getElementById('lightbox-close'); +const lbPageInfo = document.getElementById('lightbox-page-info'); +const lbPrev = document.getElementById('lightbox-prev'); +const lbNext = document.getElementById('lightbox-next'); +const resizeHandle = document.getElementById('resize-handle'); +const sidebar = document.getElementById('sidebar'); +const chapterSearch = document.getElementById('chapter-search'); +const chapterSearchWrap = document.getElementById('chapter-search-wrap'); +const btnSplit = document.getElementById('btn-split'); +const dropOverlay = document.getElementById('drop-overlay'); +const uploadOverlay = document.getElementById('upload-overlay'); +const uploadStatus = document.getElementById('upload-status'); +const loginOverlay = document.getElementById('login-overlay'); +const loginForm = document.getElementById('login-form'); +const loginPassword = document.getElementById('login-password'); +const btnAdminSettings = document.getElementById('btn-admin-settings'); +const adminModal = document.getElementById('admin-modal'); +const adminClose = document.getElementById('admin-close'); +const adminStatsContainer = document.getElementById('admin-stats-container'); +const btnAdminClearCache = document.getElementById('btn-admin-clear-cache'); +const btnAdminClearLogins = document.getElementById('btn-admin-clear-logins'); +const adminPasswordForm = document.getElementById('admin-password-form'); +const adminNewPassword = document.getElementById('admin-new-password'); + +// ── Authentication ───────────────────────────────────────── + +let authToken = localStorage.getItem('pdf_auth_token') || ''; + +async function checkAuth() { + try { + const res = await fetch('/api/check-auth', { + headers: { 'x-auth-token': authToken } + }); + if (res.ok) { + const data = await res.json(); + loginOverlay.classList.add('hidden'); + applyRole(data.role); + connectWebSocket(); + } else { + loginOverlay.classList.remove('hidden'); + } + } catch (e) { + loginOverlay.classList.remove('hidden'); + } +} + +function applyRole(role) { + if (role === 'admin') { + document.body.classList.add('role-admin'); + document.body.classList.remove('role-user'); + } else { + document.body.classList.add('role-user'); + document.body.classList.remove('role-admin'); + } +} + +loginForm.addEventListener('submit', async (e) => { + e.preventDefault(); + const password = loginPassword.value; + try { + const res = await fetch('/api/login', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password }) + }); + const data = await res.json(); + if (res.ok) { + if (data.token !== 'no-auth') { + authToken = data.token; + localStorage.setItem('pdf_auth_token', authToken); + } + loginOverlay.classList.add('hidden'); + applyRole(data.role); + connectWebSocket(); + } else { + showToast(data.error || 'Invalid password', 'error'); + } + } catch (err) { + showToast('Login failed', 'error'); + } +}); + +checkAuth(); + +// ── Admin Panel ──────────────────────────────────────────── + +btnAdminSettings.addEventListener('click', () => { + adminModal.classList.remove('hidden'); + btnAdminSettings.classList.remove('hidden'); // to be safe + fetchAdminStats(); +}); + +adminClose.addEventListener('click', () => { + adminModal.classList.add('hidden'); +}); + +async function fetchAdminStats() { + adminStatsContainer.innerHTML = '
Loading…'; + try { + const res = await fetch('/api/admin/stats', { + headers: { 'x-auth-token': authToken } + }); + if (!res.ok) throw new Error('Failed to load stats'); + const stats = await res.json(); + + // Format uptime + const h = Math.floor(stats.uptime / 3600); + const m = Math.floor((stats.uptime % 3600) / 60); + const uptimeStr = `${h}h ${m}m`; + + let html = ` +
Uptime: ${uptimeStr}
+
Memory Used: ${stats.memoryUsedMB} MB
+
Active Uploads/Sessions: ${stats.activeSessions}
+
Tracked IPs (Brute Force): ${stats.loginAttemptsTracked}
+ `; + + if (stats.blockedIps.length > 0) { + html += `
Currently Locked Out IPs:
`; + stats.blockedIps.forEach(b => { + html += `
+ ${b.ip} (${b.attempts} fails): ${b.lockoutRemaining}s left +
`; + }); + } + + adminStatsContainer.innerHTML = html; + } catch (err) { + adminStatsContainer.innerHTML = `Error loading stats`; + } +} + +btnAdminClearCache.addEventListener('click', async () => { + if (!confirm('This will delete all uploaded PDFs and immediately disconnect all users. Continue?')) return; + try { + const res = await fetch('/api/admin/clear-cache', { + method: 'POST', + headers: { 'x-auth-token': authToken } + }); + const data = await res.json(); + if (res.ok) { + showToast(`Cache cleared. Deleted ${data.deletedCount} files.`, 'success'); + fetchAdminStats(); + } else throw new Error(data.error); + } catch (err) { + showToast(err.message, 'error'); + } +}); + +btnAdminClearLogins.addEventListener('click', async () => { + if (!confirm('Clear all IP lockouts and brute-force tracking?')) return; + try { + const res = await fetch('/api/admin/clear-logins', { + method: 'POST', + headers: { 'x-auth-token': authToken } + }); + if (res.ok) { + showToast('Login tracking reset.', 'success'); + fetchAdminStats(); + } else throw new Error('Failed to reset logins'); + } catch (err) { + showToast(err.message, 'error'); + } +}); + +adminPasswordForm.addEventListener('submit', async (e) => { + e.preventDefault(); + const newPassword = adminNewPassword.value; + try { + const res = await fetch('/api/admin/change-password', { + method: 'POST', + headers: { 'x-auth-token': authToken, 'Content-Type': 'application/json' }, + body: JSON.stringify({ newPassword }) + }); + if (res.ok) { + showToast('User password updated successfully!', 'success'); + adminNewPassword.value = ''; + } else throw new Error('Failed to update password'); + } catch (err) { + showToast(err.message, 'error'); + } +}); + +// ── WebSocket ────────────────────────────────────────────── + +let ws = null; + +function connectWebSocket() { + const protocol = location.protocol === 'https:' ? 'wss:' : 'ws:'; + ws = new WebSocket(`${protocol}//${location.host}`); + + ws.onopen = () => { + if (sessionId) { + ws.send(JSON.stringify({ type: 'register', sessionId, token: authToken })); + } + }; + + ws.onclose = () => { + // Reconnect after 3 seconds + setTimeout(connectWebSocket, 3000); + }; +} + +// ── Sidebar Resize ───────────────────────────────────────── + +const SIDEBAR_MIN = 250; +const SIDEBAR_MAX = 600; +let isResizing = false; + +resizeHandle.addEventListener('mousedown', (e) => { + e.preventDefault(); + isResizing = true; + resizeHandle.classList.add('dragging'); + document.body.classList.add('resizing'); +}); + +document.addEventListener('mousemove', (e) => { + if (!isResizing) return; + const appRect = document.getElementById('app').getBoundingClientRect(); + let newWidth = e.clientX - appRect.left; + newWidth = Math.max(SIDEBAR_MIN, Math.min(SIDEBAR_MAX, newWidth)); + document.documentElement.style.setProperty('--sidebar-width', newWidth + 'px'); +}); + +document.addEventListener('mouseup', () => { + if (!isResizing) return; + isResizing = false; + resizeHandle.classList.remove('dragging'); + document.body.classList.remove('resizing'); +}); + +// ── File Upload ──────────────────────────────────────────── + +fileInput.addEventListener('change', () => { + if (fileInput.files.length > 0) uploadFile(fileInput.files[0]); +}); + +// ── Drag & Drop ──────────────────────────────────────────── + +let dragCounter = 0; + +document.addEventListener('dragenter', (e) => { + e.preventDefault(); + dragCounter++; + if (dragCounter === 1) dropOverlay.classList.remove('hidden'); +}); + +document.addEventListener('dragleave', (e) => { + e.preventDefault(); + dragCounter--; + if (dragCounter <= 0) { + dragCounter = 0; + dropOverlay.classList.add('hidden'); + } +}); + +document.addEventListener('dragover', (e) => { + e.preventDefault(); +}); + +document.addEventListener('drop', (e) => { + e.preventDefault(); + dragCounter = 0; + dropOverlay.classList.add('hidden'); + + const file = e.dataTransfer.files[0]; + if (!file) return; + if (file.type !== 'application/pdf' && !file.name.toLowerCase().endsWith('.pdf')) { + showToast('Please drop a PDF file', 'error'); + return; + } + uploadFile(file); +}); + +// ── Upload & Load PDF ────────────────────────────────────── + +async function uploadFile(file) { + uploadOverlay.classList.remove('hidden'); + uploadStatus.textContent = `Uploading ${file.name}…`; + + try { + const formData = new FormData(); + formData.append('pdf', file); + + const res = await fetch('/api/upload', { + method: 'POST', + headers: { 'x-auth-token': authToken }, + body: formData + }); + if (!res.ok) { + const err = await res.json(); + throw new Error(err.error || 'Upload failed'); + } + + const data = await res.json(); + sessionId = data.sessionId; + + // Register with WebSocket + if (ws && ws.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify({ type: 'register', sessionId, token: authToken })); + } + + uploadStatus.textContent = 'Loading preview…'; + + // Load PDF from server for client-side rendering + const pdfUrl = `/api/pdf/${sessionId}`; + pdfDoc = await pdfjsLib.getDocument({ + url: pdfUrl, + httpHeaders: { 'x-auth-token': authToken } + }).promise; + totalPages = pdfDoc.numPages; + + // Update UI + fileName.textContent = data.originalName; + fileInfo.classList.remove('hidden'); + filePages.textContent = `${totalPages} pages`; + + // Reset state + selectedPages.clear(); + chapters = []; + allChapters = []; + chapterList.innerHTML = ''; + previewGrid.innerHTML = ''; + pageInput.value = ''; + previewEmpty.classList.remove('hidden'); + previewGrid.classList.add('hidden'); + chapterNone.classList.add('hidden'); + chapterLoad.classList.remove('hidden'); + chapterSearchWrap.classList.add('hidden'); + + updateState(); + await detectChapters(); + + uploadOverlay.classList.add('hidden'); + showToast(`Loaded: ${data.originalName}`, 'success'); + } catch (err) { + uploadOverlay.classList.add('hidden'); + showToast(err.message, 'error'); + console.error('Upload error:', err); + } +} + +// ── Depth Control ────────────────────────────────────────── + +depthSelect.addEventListener('change', () => { + maxDepth = parseInt(depthSelect.value); + filterAndRenderChapters(); +}); + +// ── Chapter Detection ────────────────────────────────────── + +async function detectChapters() { + allChapters = []; + chapters = []; + + try { + const outline = await pdfDoc.getOutline(); + if (outline && outline.length > 0) { + const flatEntries = await flattenOutlineRecursive(outline, 0); + if (flatEntries.length > 0) { + for (let i = 0; i < flatEntries.length; i++) { + let endPage = totalPages; + for (let j = i + 1; j < flatEntries.length; j++) { + if (flatEntries[j].depth <= flatEntries[i].depth) { + endPage = flatEntries[j].startPage - 1; + break; + } + } + allChapters.push({ + title: flatEntries[i].title, + startPage: flatEntries[i].startPage, + endPage: Math.max(flatEntries[i].startPage, endPage), + depth: flatEntries[i].depth + }); + } + } + } + } catch (e) { + console.warn('Outline extraction failed:', e); + } + + if (allChapters.length === 0) { + await detectChaptersFromText(); + } + + chapterLoad.classList.add('hidden'); + + if (allChapters.length === 0) { + chapterNone.classList.remove('hidden'); + depthControl.classList.add('hidden'); + } else { + chapterNone.classList.add('hidden'); + depthControl.classList.remove('hidden'); + chapterSearchWrap.classList.remove('hidden'); + chapterSearch.value = ''; + filterAndRenderChapters(); + } +} + +function filterAndRenderChapters() { + let filtered = allChapters.filter(ch => ch.depth <= maxDepth); + const seen = new Set(); + filtered = filtered.filter(ch => { + const key = `${ch.startPage}-${ch.endPage}`; + if (seen.has(key)) return false; + seen.add(key); + return true; + }); + chapters = filtered; + + if (chapters.length === 0) { + chapterNone.classList.remove('hidden'); + } else { + chapterNone.classList.add('hidden'); + } + + renderChapterList(); + syncChapterCheckboxes(); +} + +async function flattenOutlineRecursive(outline, depth) { + const entries = []; + for (const item of outline) { + let pageNum = null; + try { + if (item.dest) { + let dest = item.dest; + if (typeof dest === 'string') { + dest = await pdfDoc.getDestination(dest); + } + if (dest && dest[0]) { + const pageIndex = await pdfDoc.getPageIndex(dest[0]); + pageNum = pageIndex + 1; + } + } + } catch (e) { + console.warn('Could not resolve dest for:', item.title, e); + } + if (pageNum !== null) { + entries.push({ title: item.title.trim(), startPage: pageNum, depth }); + } + if (item.items && item.items.length > 0) { + const children = await flattenOutlineRecursive(item.items, depth + 1); + entries.push(...children); + } + } + return entries; +} + +async function detectChaptersFromText() { + const chapterPattern = /(?:^|\n)\s*(?:CHAPTER|Chapter|chapter)\s+(\d+)[\s.:–—-]*(.*)/; + const unitPattern = /(?:^|\n)\s*(?:UNIT|Unit|unit)\s+(\d+)[\s.:–—-]*(.*)/; + + const maxPagesToScan = Math.min(totalPages, 800); + const rawChapters = []; + + for (let i = 1; i <= maxPagesToScan; i++) { + try { + const page = await pdfDoc.getPage(i); + const textContent = await page.getTextContent(); + const text = textContent.items.map(item => item.str).join(' '); + + let match = text.match(chapterPattern); + if (match) { + const title = `Chapter ${match[1]}${match[2] ? ': ' + match[2].trim() : ''}`; + if (!rawChapters.some(c => c.title === title)) { + rawChapters.push({ title, startPage: i }); + } + } + + match = text.match(unitPattern); + if (match) { + const title = `Unit ${match[1]}${match[2] ? ': ' + match[2].trim() : ''}`; + if (!rawChapters.some(c => c.title === title)) { + rawChapters.push({ title, startPage: i }); + } + } + } catch (e) { /* skip */ } + } + + rawChapters.sort((a, b) => a.startPage - b.startPage); + for (let i = 0; i < rawChapters.length; i++) { + const endPage = (i + 1 < rawChapters.length) ? rawChapters[i + 1].startPage - 1 : totalPages; + allChapters.push({ + title: rawChapters[i].title, + startPage: rawChapters[i].startPage, + endPage: Math.max(rawChapters[i].startPage, endPage), + depth: 0 + }); + } +} + +// ── Render Chapter List ──────────────────────────────────── + +function renderChapterList() { + chapterList.innerHTML = ''; + chapters.forEach((ch, idx) => { + const item = document.createElement('label'); + item.className = 'chapter-item'; + item.style.paddingLeft = `${8 + (ch.depth || 0) * 16}px`; + + const cb = document.createElement('input'); + cb.type = 'checkbox'; + cb.dataset.index = idx; + cb.addEventListener('change', () => onChapterToggle(idx, cb.checked)); + + const titleSpan = document.createElement('span'); + titleSpan.className = 'chapter-title'; + if (ch.depth >= 2) titleSpan.style.opacity = '0.75'; + titleSpan.textContent = ch.title; + titleSpan.title = `${ch.title} (pages ${ch.startPage}–${ch.endPage})`; + titleSpan.dataset.originalTitle = ch.title; + + const pagesSpan = document.createElement('span'); + pagesSpan.className = 'chapter-pages'; + const count = ch.endPage - ch.startPage + 1; + pagesSpan.textContent = `${ch.startPage}–${ch.endPage} (${count}p)`; + + item.appendChild(cb); + item.appendChild(titleSpan); + item.appendChild(pagesSpan); + chapterList.appendChild(item); + }); +} + +// ── Chapter Search ───────────────────────────────────────── + +chapterSearch.addEventListener('input', () => { + const query = chapterSearch.value.trim().toLowerCase(); + const items = chapterList.querySelectorAll('.chapter-item'); + + items.forEach(item => { + const titleSpan = item.querySelector('.chapter-title'); + const original = titleSpan.dataset.originalTitle || titleSpan.textContent; + + if (!query) { + item.classList.remove('search-hidden'); + titleSpan.textContent = original; + return; + } + + const lowerTitle = original.toLowerCase(); + if (lowerTitle.includes(query)) { + item.classList.remove('search-hidden'); + const startIdx = lowerTitle.indexOf(query); + const before = original.substring(0, startIdx); + const match = original.substring(startIdx, startIdx + query.length); + const after = original.substring(startIdx + query.length); + titleSpan.innerHTML = `${escapeHtml(before)}${escapeHtml(match)}${escapeHtml(after)}`; + } else { + item.classList.add('search-hidden'); + titleSpan.textContent = original; + } + }); +}); + +function escapeHtml(str) { + return str.replace(/&/g, '&').replace(//g, '>'); +} + +// ── Chapter Toggle ───────────────────────────────────────── + +function onChapterToggle(index, checked) { + const ch = chapters[index]; + for (let p = ch.startPage; p <= ch.endPage; p++) { + if (checked) selectedPages.add(p); + else selectedPages.delete(p); + } + buildPageInputFromSelection(); + updateState(); +} + +function syncChapterCheckboxes() { + const checkboxes = chapterList.querySelectorAll('input[type="checkbox"]'); + checkboxes.forEach(cb => { + const idx = parseInt(cb.dataset.index); + const ch = chapters[idx]; + if (!ch) return; + let allSelected = true; + for (let p = ch.startPage; p <= ch.endPage; p++) { + if (!selectedPages.has(p)) { allSelected = false; break; } + } + cb.checked = allSelected; + }); +} + +function buildPageInputFromSelection() { + if (selectedPages.size === 0) { + pageInput.value = ''; + return; + } + const sorted = [...selectedPages].sort((a, b) => a - b); + const ranges = []; + let start = sorted[0], end = sorted[0]; + for (let i = 1; i < sorted.length; i++) { + if (sorted[i] === end + 1) { + end = sorted[i]; + } else { + ranges.push(start === end ? `${start}` : `${start}-${end}`); + start = end = sorted[i]; + } + } + ranges.push(start === end ? `${start}` : `${start}-${end}`); + pageInput.value = ranges.join(', '); +} + +// ── Page Input Parsing ───────────────────────────────────── + +pageInput.addEventListener('input', () => { + selectedPages.clear(); + const raw = pageInput.value; + if (!raw.trim()) { updateState(); return; } + + const parts = raw.split(','); + for (const part of parts) { + const trimmed = part.trim(); + const chMatch = trimmed.match(/^(?:ch(?:apter)?)\s*(\d+)(?:\s*[-–]\s*(\d+))?$/i); + if (chMatch) { + const from = parseInt(chMatch[1]); + const to = chMatch[2] ? parseInt(chMatch[2]) : from; + for (let c = from; c <= to; c++) { + const ch = chapters.find(ch => { + const m = ch.title.match(/(\d+)/); + return m && parseInt(m[1]) === c; + }); + if (ch) { + for (let p = ch.startPage; p <= ch.endPage; p++) selectedPages.add(p); + } + } + continue; + } + const rangeMatch = trimmed.match(/^(\d+)\s*[-–]\s*(\d+)$/); + if (rangeMatch) { + const from = parseInt(rangeMatch[1]); + const to = parseInt(rangeMatch[2]); + for (let p = Math.max(1, from); p <= Math.min(totalPages, to); p++) { + selectedPages.add(p); + } + continue; + } + const single = parseInt(trimmed); + if (!isNaN(single) && single >= 1 && single <= totalPages) { + selectedPages.add(single); + } + } + updateState(); +}); + +// ── Update State ─────────────────────────────────────────── + +function updateState() { + pageCount.textContent = selectedPages.size; + btnSplit.disabled = selectedPages.size === 0 || !sessionId; + syncChapterCheckboxes(); + updatePreview(); +} + +// ── Preview Rendering ────────────────────────────────────── + +let thumbElements = []; + +function updatePreview() { + if (selectedPages.size === 0) { + previewEmpty.classList.remove('hidden'); + previewGrid.classList.add('hidden'); + previewGrid.innerHTML = ''; + thumbElements = []; + return; + } + + previewEmpty.classList.add('hidden'); + previewGrid.classList.remove('hidden'); + previewGrid.innerHTML = ''; + thumbElements = []; + + const sorted = [...selectedPages].sort((a, b) => a - b); + + for (const pageNum of sorted) { + const wrapper = document.createElement('div'); + wrapper.className = 'page-thumb'; + wrapper.addEventListener('click', () => openLightbox(pageNum)); + + const canvas = document.createElement('canvas'); + wrapper.appendChild(canvas); + + const label = document.createElement('div'); + label.className = 'page-thumb-label'; + label.textContent = `Page ${pageNum}`; + wrapper.appendChild(label); + + previewGrid.appendChild(wrapper); + thumbElements.push({ canvas, pageNum, wrapper }); + } + + // Lazy rendering with IntersectionObserver + const observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + const thumb = thumbElements.find(t => t.wrapper === entry.target); + if (thumb && !thumb.rendered) { + thumb.rendered = true; + renderPageThumb(thumb.canvas, thumb.pageNum); + } + } + }); + }, { root: previewGrid, rootMargin: '200px' }); + + thumbElements.forEach(t => observer.observe(t.wrapper)); +} + +async function renderPageThumb(canvas, pageNum) { + try { + const page = await pdfDoc.getPage(pageNum); + const viewport = page.getViewport({ scale: 1 }); + const thumbWidth = 180; + const scale = thumbWidth / viewport.width; + const scaledViewport = page.getViewport({ scale }); + + canvas.width = scaledViewport.width; + canvas.height = scaledViewport.height; + const ctx = canvas.getContext('2d'); + + await page.render({ + canvasContext: ctx, + viewport: scaledViewport + }).promise; + } catch (e) { + console.warn('Render failed for page', pageNum, e); + } +} + +// ── Lightbox ─────────────────────────────────────────────── + +function openLightbox(pageNum) { + lightboxPages = [...selectedPages].sort((a, b) => a - b); + lightboxIndex = lightboxPages.indexOf(pageNum); + if (lightboxIndex === -1) lightboxIndex = 0; + lightbox.classList.remove('hidden'); + renderLightboxPage(); +} + +function closeLightbox() { + lightbox.classList.add('hidden'); +} + +async function renderLightboxPage() { + if (lightboxIndex < 0 || lightboxIndex >= lightboxPages.length) return; + const pageNum = lightboxPages[lightboxIndex]; + lbPageInfo.textContent = `Page ${pageNum} · ${lightboxIndex + 1} of ${lightboxPages.length}`; + lbPrev.disabled = lightboxIndex <= 0; + lbNext.disabled = lightboxIndex >= lightboxPages.length - 1; + + try { + const page = await pdfDoc.getPage(pageNum); + const viewport = page.getViewport({ scale: 1 }); + const targetWidth = Math.min(viewport.width * 2, 1400); + const scale = targetWidth / viewport.width; + const scaledViewport = page.getViewport({ scale }); + + lbCanvas.width = scaledViewport.width; + lbCanvas.height = scaledViewport.height; + const ctx = lbCanvas.getContext('2d'); + ctx.clearRect(0, 0, lbCanvas.width, lbCanvas.height); + + await page.render({ canvasContext: ctx, viewport: scaledViewport }).promise; + } catch (e) { + console.warn('Lightbox render failed for page', pageNum, e); + } +} + +lbClose.addEventListener('click', closeLightbox); +document.querySelector('.lightbox-backdrop').addEventListener('click', closeLightbox); +lbPrev.addEventListener('click', () => { if (lightboxIndex > 0) { lightboxIndex--; renderLightboxPage(); } }); +lbNext.addEventListener('click', () => { if (lightboxIndex < lightboxPages.length - 1) { lightboxIndex++; renderLightboxPage(); } }); + +document.addEventListener('keydown', (e) => { + if (lightbox.classList.contains('hidden')) return; + if (e.key === 'Escape') closeLightbox(); + if (e.key === 'ArrowLeft' && lightboxIndex > 0) { lightboxIndex--; renderLightboxPage(); } + if (e.key === 'ArrowRight' && lightboxIndex < lightboxPages.length - 1) { lightboxIndex++; renderLightboxPage(); } +}); + +// ── Split & Download ─────────────────────────────────────── + +btnSplit.addEventListener('click', async () => { + if (!sessionId || selectedPages.size === 0) return; + + btnSplit.disabled = true; + btnSplit.innerHTML = `
Splitting…`; + + try { + const res = await fetch('/api/split', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'x-auth-token': authToken + }, + body: JSON.stringify({ + sessionId, + pageNumbers: [...selectedPages] + }) + }); + + if (!res.ok) { + const err = await res.json(); + throw new Error(err.error || 'Split failed'); + } + + // Download the result + const blob = await res.blob(); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = res.headers.get('Content-Disposition')?.match(/filename="(.+)"/)?.[1] || 'split.pdf'; + document.body.appendChild(a); + a.click(); + a.remove(); + URL.revokeObjectURL(url); + + showToast(`Split complete: ${selectedPages.size} pages`, 'success'); + } catch (err) { + showToast(err.message, 'error'); + } finally { + btnSplit.disabled = false; + btnSplit.innerHTML = ` + + Split & Download + `; + } +}); + +// ── Toast ────────────────────────────────────────────────── + +function showToast(message, type = 'info') { + const container = document.getElementById('toast-container'); + const toast = document.createElement('div'); + toast.className = `toast ${type}`; + toast.textContent = message; + container.appendChild(toast); + + setTimeout(() => { + toast.classList.add('fade-out'); + setTimeout(() => toast.remove(), 260); + }, 3500); +} diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..ac4df08 --- /dev/null +++ b/public/index.html @@ -0,0 +1,198 @@ + + + + + + PDF Splitter + + + + + + + + + + +
+ + + + +
+ + +
+
+ +

Upload a PDF and choose pages to preview

+
+ + + + +
+
+ + + + + + + + + + + + + + +
+ + + + + + diff --git a/public/style.css b/public/style.css new file mode 100644 index 0000000..d0fc7a2 --- /dev/null +++ b/public/style.css @@ -0,0 +1,918 @@ +/* ══════════════════════════════════════════════════════════ + PDF Splitter – Web Edition (Premium Dark UI) + ══════════════════════════════════════════════════════════ */ + +:root { + --bg-base: #09090b; + --bg-card: #131316; + --bg-card-hover: #1a1a1f; + --bg-input: #18181b; + --border: #27272a; + --border-light: #3f3f46; + --text-primary: #fafafa; + --text-secondary: #a1a1aa; + --text-muted: #71717a; + --accent: #7c3aed; + --accent-light: #a78bfa; + --accent-glow: rgba(124, 58, 237, 0.25); + --success: #22c55e; + --danger: #ef4444; + --radius: 10px; + --radius-sm: 6px; + --transition: 180ms ease; + --font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; + --sidebar-width: 300px; +} + +*, *::before, *::after { + margin: 0; padding: 0; box-sizing: border-box; +} + +body { + font-family: var(--font); + background: var(--bg-base); + color: var(--text-primary); + overflow: hidden; + height: 100vh; + display: flex; + flex-direction: column; + user-select: none; +} + +/* ── Header ──────────────────────────────────────────────── */ + +#header { + display: flex; + align-items: center; + justify-content: space-between; + height: 48px; + padding: 0 18px; + background: #0c0c0f; + border-bottom: 1px solid var(--border); + flex-shrink: 0; +} + +.header-brand { + display: flex; + align-items: center; + gap: 10px; +} + +.header-icon { + width: 20px; + height: 20px; + color: var(--accent-light); +} + +#header h1 { + font-size: 15px; + font-weight: 700; + color: var(--text-secondary); + letter-spacing: 0.3px; +} + +/* ── Main Layout ─────────────────────────────────────────── */ + +#app { + display: flex; + flex: 1; + overflow: hidden; +} + +/* ── Sidebar ─────────────────────────────────────────────── */ + +#sidebar { + width: var(--sidebar-width); + min-width: 0; + flex-shrink: 0; + display: flex; + flex-direction: column; + gap: 8px; + padding: 12px; + overflow-y: auto; + overflow-x: hidden; + scrollbar-width: thin; + scrollbar-color: var(--border-light) transparent; +} + +#sidebar::-webkit-scrollbar { width: 5px; } +#sidebar::-webkit-scrollbar-track { background: transparent; } +#sidebar::-webkit-scrollbar-thumb { background: var(--border-light); border-radius: 10px; } + +/* ── Resize Handle ───────────────────────────────────────── */ + +.resize-handle { + width: 5px; + cursor: col-resize; + background: var(--border); + flex-shrink: 0; + position: relative; + transition: background 150ms ease; + z-index: 10; +} +.resize-handle::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 3px; + height: 32px; + border-radius: 2px; + background: var(--border-light); + opacity: 0; + transition: opacity 150ms ease; +} +.resize-handle:hover, +.resize-handle.dragging { + background: var(--accent); +} +.resize-handle:hover::after, +.resize-handle.dragging::after { + opacity: 1; +} + +body.resizing { + cursor: col-resize !important; + user-select: none !important; +} +body.resizing * { + cursor: col-resize !important; +} + +/* ── Cards ───────────────────────────────────────────────── */ + +.card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 14px; + transition: border-color var(--transition); +} +.card:hover { + border-color: var(--border-light); +} + +.card-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 10px; +} + +.card-label { + font-size: 10.5px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1.2px; + color: var(--text-muted); + margin-bottom: 10px; +} + +.card-header .card-label { + margin-bottom: 0; +} + +.depth-control { + display: flex; + align-items: center; + gap: 6px; +} +.depth-label { + font-size: 10px; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.8px; + font-weight: 600; +} +.depth-select { + padding: 3px 6px; + border: 1px solid var(--border); + border-radius: 4px; + background: var(--bg-input); + color: var(--text-secondary); + font-size: 11px; + font-family: var(--font); + outline: none; + cursor: pointer; + transition: border-color var(--transition); +} +.depth-select:focus { + border-color: var(--accent); +} + +/* ── Buttons ─────────────────────────────────────────────── */ + +.btn-primary { + width: 100%; + padding: 10px 16px; + border: 1px dashed var(--border-light); + border-radius: var(--radius-sm); + background: var(--bg-input); + color: var(--text-secondary); + font-size: 13px; + font-weight: 500; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + transition: all var(--transition); +} +.btn-primary svg { width: 16px; height: 16px; flex-shrink: 0; } +.btn-primary:hover { + border-color: var(--accent); + color: var(--accent-light); + background: rgba(124, 58, 237, 0.06); +} + +.btn-accent { + width: 100%; + padding: 12px 16px; + border: none; + border-radius: var(--radius-sm); + background: linear-gradient(135deg, var(--accent), #6d28d9); + color: white; + font-size: 13.5px; + font-weight: 600; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + transition: all var(--transition); + box-shadow: 0 2px 12px var(--accent-glow); +} +.btn-accent svg { width: 16px; height: 16px; flex-shrink: 0; } +.btn-accent:hover:not(:disabled) { + filter: brightness(1.15); + box-shadow: 0 4px 20px var(--accent-glow); + transform: translateY(-1px); +} +.btn-accent:disabled { + opacity: 0.35; + cursor: not-allowed; + box-shadow: none; +} +.btn-accent:active:not(:disabled) { + transform: translateY(0); +} + +/* ── File Info ───────────────────────────────────────────── */ + +.file-info { + margin-top: 10px; + padding: 10px; + background: var(--bg-input); + border-radius: var(--radius-sm); + border: 1px solid var(--border); +} +.file-name { + font-size: 12.5px; + font-weight: 600; + color: var(--text-primary); + word-break: break-all; + line-height: 1.4; +} +.file-meta { + font-size: 11.5px; + color: var(--text-muted); + margin-top: 4px; +} + +/* ── Chapter List ────────────────────────────────────────── */ + +.chapter-list { + display: flex; + flex-direction: column; + gap: 2px; + max-height: 45vh; + overflow-y: auto; + scrollbar-width: thin; + scrollbar-color: var(--border-light) transparent; +} +.chapter-list::-webkit-scrollbar { width: 4px; } +.chapter-list::-webkit-scrollbar-thumb { background: var(--border-light); border-radius: 10px; } + +.chapter-item { + display: flex; + align-items: center; + gap: 8px; + padding: 7px 8px; + border-radius: var(--radius-sm); + cursor: pointer; + transition: background var(--transition); +} +.chapter-item:hover { background: var(--bg-card-hover); } + +.chapter-item input[type="checkbox"] { + appearance: none; + width: 16px; + height: 16px; + border: 1.5px solid var(--border-light); + border-radius: 4px; + background: var(--bg-input); + cursor: pointer; + flex-shrink: 0; + position: relative; + transition: all var(--transition); +} +.chapter-item input[type="checkbox"]:checked { + background: var(--accent); + border-color: var(--accent); +} +.chapter-item input[type="checkbox"]:checked::after { + content: ''; + position: absolute; + top: 2px; left: 5px; + width: 4px; height: 8px; + border: solid white; + border-width: 0 2px 2px 0; + transform: rotate(45deg); +} + +.chapter-title { + font-size: 12.5px; + color: var(--text-primary); + flex: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + line-height: 1.3; +} + +.chapter-pages { + font-size: 10.5px; + color: var(--text-muted); + flex-shrink: 0; + font-variant-numeric: tabular-nums; +} + +/* ── Chapter Search ──────────────────────────────────────── */ + +.chapter-search-wrap { + position: relative; + margin-bottom: 6px; +} +.search-icon { + position: absolute; + left: 9px; + top: 50%; + transform: translateY(-50%); + width: 14px; + height: 14px; + color: var(--text-muted); + pointer-events: none; +} +.chapter-search { + width: 100%; + padding: 7px 10px 7px 30px; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + background: var(--bg-input); + color: var(--text-primary); + font-size: 12.5px; + font-family: var(--font); + outline: none; + transition: border-color var(--transition), box-shadow var(--transition); +} +.chapter-search::placeholder { color: var(--text-muted); } +.chapter-search:focus { + border-color: var(--accent); + box-shadow: 0 0 0 3px var(--accent-glow); +} + +.chapter-item.search-hidden { + display: none !important; +} + +.chapter-title mark { + background: rgba(124, 58, 237, 0.35); + color: inherit; + border-radius: 2px; + padding: 0 1px; +} + +/* ── Text Input ──────────────────────────────────────────── */ + +.input-hint { + font-size: 11px; + color: var(--text-muted); + margin-bottom: 6px; +} + +.text-input { + width: 100%; + padding: 9px 12px; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + background: var(--bg-input); + color: var(--text-primary); + font-size: 13px; + font-family: var(--font); + outline: none; + transition: border-color var(--transition), box-shadow var(--transition); +} +.text-input::placeholder { color: var(--text-muted); } +.text-input:focus { + border-color: var(--accent); + box-shadow: 0 0 0 3px var(--accent-glow); +} + +/* ── Action Card ─────────────────────────────────────────── */ + +.action-card { + margin-top: auto; +} + +.page-count-row { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 12px; + padding-bottom: 10px; + border-bottom: 1px solid var(--border); +} +.count-label { font-size: 12px; color: var(--text-secondary); } +.count-value { + font-size: 20px; + font-weight: 700; + color: var(--accent-light); + font-variant-numeric: tabular-nums; +} + +/* ── Status Messages ─────────────────────────────────────── */ + +.status-msg { + display: flex; + align-items: center; + gap: 8px; + font-size: 12px; + color: var(--text-muted); + padding: 4px 0; +} + +/* ── Spinner ─────────────────────────────────────────────── */ + +.spinner { + width: 16px; height: 16px; + border: 2px solid var(--border-light); + border-top-color: var(--accent-light); + border-radius: 50%; + animation: spin 0.7s linear infinite; +} +.spinner.large { + width: 32px; height: 32px; + border-width: 3px; +} +@keyframes spin { to { transform: rotate(360deg); } } + +/* ── Preview Panel ───────────────────────────────────────── */ + +#preview { + flex: 1; + display: flex; + overflow: hidden; + position: relative; + background: #0c0c0f; +} + +.preview-placeholder { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + gap: 14px; + color: var(--text-muted); +} +.placeholder-icon { width: 56px; height: 56px; opacity: 0.3; } +.preview-placeholder p { font-size: 13px; } + +.preview-grid { + display: flex; + flex-wrap: wrap; + gap: 14px; + padding: 18px; + overflow-y: auto; + width: 100%; + align-content: flex-start; + justify-content: center; + scrollbar-width: thin; + scrollbar-color: var(--border-light) transparent; +} +.preview-grid::-webkit-scrollbar { width: 6px; } +.preview-grid::-webkit-scrollbar-thumb { background: var(--border-light); border-radius: 10px; } + +.page-thumb { + position: relative; + background: white; + border-radius: var(--radius-sm); + overflow: hidden; + box-shadow: 0 2px 8px rgba(0,0,0,0.4); + transition: transform var(--transition), box-shadow var(--transition); + cursor: pointer; +} +.page-thumb:hover { + transform: scale(1.03); + box-shadow: 0 4px 16px rgba(0,0,0,0.6); +} +.page-thumb canvas { + display: block; + width: 100%; + height: auto; +} +.page-thumb-label { + position: absolute; + bottom: 0; + left: 0; + right: 0; + text-align: center; + padding: 3px 0; + font-size: 10.5px; + font-weight: 600; + color: white; + background: rgba(0,0,0,0.65); + backdrop-filter: blur(4px); +} + +/* ── Toast ────────────────────────────────────────────────── */ + +#toast-container { + position: fixed; + bottom: 20px; + right: 20px; + display: flex; + flex-direction: column; + gap: 8px; + z-index: 40000; + pointer-events: none; +} + +.toast { + padding: 10px 18px; + border-radius: var(--radius-sm); + font-size: 12.5px; + font-weight: 500; + color: white; + box-shadow: 0 4px 16px rgba(0,0,0,0.5); + animation: toastIn 300ms ease forwards; + pointer-events: auto; +} +.toast.success { background: #16a34a; } +.toast.error { background: #dc2626; } +.toast.info { background: #2563eb; } + +.toast.fade-out { + animation: toastOut 250ms ease forwards; +} + +@keyframes toastIn { + from { opacity: 0; transform: translateY(12px) scale(0.96); } + to { opacity: 1; transform: translateY(0) scale(1); } +} +@keyframes toastOut { + from { opacity: 1; transform: translateY(0); } + to { opacity: 0; transform: translateY(8px); } +} + +/* ── Lightbox ─────────────────────────────────────────────── */ + +.lightbox { + position: absolute; + inset: 0; + z-index: 100; + display: flex; + align-items: center; + justify-content: center; + animation: lbFadeIn 200ms ease; +} +.lightbox.hidden { display: none !important; } + +.lightbox-backdrop { + position: absolute; + inset: 0; + background: rgba(0, 0, 0, 0.85); + backdrop-filter: blur(8px); +} + +.lightbox-content { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + max-width: 94%; + max-height: 94%; + z-index: 1; +} + +.lightbox-close { + position: absolute; + top: -36px; + right: -4px; + width: 30px; + height: 30px; + border: none; + background: rgba(255,255,255,0.1); + color: white; + border-radius: 50%; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: background var(--transition); + z-index: 2; +} +.lightbox-close svg { width: 16px; height: 16px; } +.lightbox-close:hover { background: rgba(255,255,255,0.2); } + +.lightbox-page-info { + font-size: 13px; + font-weight: 600; + color: rgba(255,255,255,0.7); + margin-bottom: 10px; + text-align: center; +} + +.lightbox-canvas-wrap { + overflow: auto; + max-height: calc(100vh - 140px); + border-radius: var(--radius); + box-shadow: 0 8px 40px rgba(0,0,0,0.6); + background: white; + scrollbar-width: thin; + scrollbar-color: var(--border-light) transparent; +} +.lightbox-canvas-wrap canvas { + display: block; + max-width: 100%; + height: auto; +} + +.lightbox-nav { + position: absolute; + top: 50%; + left: 8px; + right: 8px; + display: flex; + justify-content: space-between; + pointer-events: none; + transform: translateY(-50%); +} + +.lightbox-nav-btn { + width: 40px; + height: 40px; + border: none; + background: rgba(255,255,255,0.1); + color: white; + border-radius: 50%; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + pointer-events: auto; + transition: background var(--transition), transform var(--transition); +} +.lightbox-nav-btn svg { width: 20px; height: 20px; } +.lightbox-nav-btn:hover { + background: rgba(255,255,255,0.2); + transform: scale(1.1); +} +.lightbox-nav-btn:disabled { opacity: 0.2; cursor: default; } +.lightbox-nav-btn:disabled:hover { background: rgba(255,255,255,0.1); transform: none; } + +@keyframes lbFadeIn { + from { opacity: 0; } + to { opacity: 1; } +} + +/* ── Drop Overlay ─────────────────────────────────────────── */ + +.drop-overlay { + position: fixed; + inset: 0; + z-index: 20000; + background: rgba(9, 9, 11, 0.88); + backdrop-filter: blur(6px); + display: flex; + align-items: center; + justify-content: center; + animation: lbFadeIn 150ms ease; +} +.drop-overlay-content { + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + padding: 48px 64px; + border: 2px dashed var(--accent-light); + border-radius: 16px; + color: var(--accent-light); +} +.drop-icon { + width: 56px; + height: 56px; + animation: dropBounce 1s ease infinite; +} +.drop-overlay-content p { + font-size: 16px; + font-weight: 600; + letter-spacing: 0.5px; +} +@keyframes dropBounce { + 0%, 100% { transform: translateY(0); } + 50% { transform: translateY(-6px); } +} + +/* ── Upload Overlay ──────────────────────────────────────── */ + +.upload-overlay { + position: fixed; + inset: 0; + z-index: 20001; + background: rgba(9, 9, 11, 0.92); + backdrop-filter: blur(8px); + display: flex; + align-items: center; + justify-content: center; +} +.upload-overlay-content { + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + color: var(--text-secondary); +} +.upload-overlay-content p { + font-size: 14px; + font-weight: 500; +} + +/* ── Login Overlay ───────────────────────────────────────── */ + +.login-overlay { + position: fixed; + inset: 0; + z-index: 30000; + background: var(--bg-base); + display: flex; + align-items: center; + justify-content: center; +} +.login-box { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 32px; + width: 100%; + max-width: 380px; + text-align: center; + box-shadow: 0 10px 40px rgba(0,0,0,0.5); + animation: lbFadeIn 300ms ease; +} +.login-icon { + width: 48px; + height: 48px; + color: var(--accent-light); + margin-bottom: 16px; +} +.login-box h2 { + font-size: 20px; + margin-bottom: 8px; +} +.login-box p { + font-size: 13px; + color: var(--text-muted); + margin-bottom: 24px; +} +#login-form { + display: flex; + flex-direction: column; + gap: 16px; +} +#login-form input { + width: 100%; + padding: 12px; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + background: var(--bg-input); + color: var(--text-primary); + font-size: 14px; + outline: none; + transition: border-color var(--transition); +} +#login-form input:focus { + border-color: var(--accent); +} + +/* ── Admin Panel ─────────────────────────────────────────── */ + +.role-user .admin-only { + display: none !important; +} + +.icon-btn { + background: transparent; + border: none; + color: var(--text-muted); + width: 32px; + height: 32px; + border-radius: var(--radius-sm); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all var(--transition); +} +.icon-btn svg { width: 18px; height: 18px; } +.icon-btn:hover { background: var(--bg-card-hover); color: var(--accent-light); } + +.admin-panel { + position: relative; + width: 100%; + max-width: 500px; + max-height: 90vh; + overflow-y: auto; + z-index: 10; + padding: 24px; +} +.admin-close { + position: absolute; + top: 12px; + right: 12px; + width: 32px; + height: 32px; + border: none; + background: transparent; + color: var(--text-muted); + border-radius: var(--radius-sm); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: background var(--transition); +} +.admin-close:hover { background: var(--bg-input); color: white; } + +.admin-title { + font-size: 18px; + font-weight: 600; + margin-bottom: 24px; + border-bottom: 1px solid var(--border); + padding-bottom: 12px; +} +.admin-section { + margin-bottom: 24px; +} +.admin-section h3 { + font-size: 13px; + text-transform: uppercase; + color: var(--text-muted); + letter-spacing: 0.5px; + margin-bottom: 12px; +} +.admin-hint { + font-size: 12px; + color: var(--text-secondary); + margin-bottom: 12px; + line-height: 1.4; +} +.admin-stats { + display: flex; + flex-direction: column; + gap: 8px; + font-size: 13px; + background: var(--bg-input); + padding: 12px; + border-radius: var(--radius-sm); + border: 1px solid var(--border); +} +.admin-stats-row { + display: flex; + justify-content: space-between; + border-bottom: 1px solid var(--border-light); + padding-bottom: 6px; +} +.admin-stats-row:last-child { + border-bottom: none; + padding-bottom: 0; +} +.admin-actions { + display: flex; + gap: 12px; +} +.admin-password-form { + display: flex; + gap: 12px; +} +.admin-password-form input { + flex: 1; +} +.admin-password-form button { + width: auto; +} + +/* ── Utilities ───────────────────────────────────────────── */ + +.hidden { display: none !important; } diff --git a/server.js b/server.js new file mode 100644 index 0000000..57b8bc1 --- /dev/null +++ b/server.js @@ -0,0 +1,352 @@ +const express = require('express'); +const multer = require('multer'); +const path = require('path'); +const fs = require('fs'); +const { v4: uuidv4 } = require('uuid'); +const { PDFDocument } = require('pdf-lib'); +const { WebSocketServer } = require('ws'); +const http = require('http'); + +const app = express(); +const server = http.createServer(app); +const PORT = process.env.PORT || 3000; + +// Trust the reverse proxy (Nginx) so req.ip returns the real user IP +app.set('trust proxy', 1); + +// ── Authentication ───────────────────────────────────────── + +let currentAppPassword = process.env.APP_PASSWORD || null; +const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD || null; + +// Generate unique session tokens every time the server starts +const USER_TOKEN = uuidv4(); +const ADMIN_TOKEN = uuidv4(); + +function requireAuth(req, res, next) { + if (!currentAppPassword && !ADMIN_PASSWORD) { + req.userRole = 'admin'; + return next(); + } + + const token = req.headers['x-auth-token']; + + if (ADMIN_PASSWORD && token === ADMIN_TOKEN) { + req.userRole = 'admin'; + return next(); + } + + if (currentAppPassword && token === USER_TOKEN) { + req.userRole = 'user'; + return next(); + } + + res.status(401).json({ error: 'Unauthorized' }); +} + +function requireAdmin(req, res, next) { + if (req.userRole === 'admin') return next(); + res.status(403).json({ error: 'Forbidden: Admins only' }); +} + +// ── Brute Force Protection ───────────────────────────────── + +const loginAttempts = new Map(); + +function checkBruteForce(req, res, next) { + const ip = req.ip; + const record = loginAttempts.get(ip); + if (record && record.lockoutUntil && Date.now() < record.lockoutUntil) { + const remaining = Math.ceil((record.lockoutUntil - Date.now()) / 1000); + return res.status(429).json({ error: `Too many attempts. Try again in ${remaining} seconds.` }); + } + next(); +} + +function handleFailedLogin(ip) { + let record = loginAttempts.get(ip) || { attempts: 0, lockoutUntil: 0 }; + record.attempts += 1; + + if (record.attempts >= 5) { + // 5th attempt = 1 min, 6th = 2 mins, 7th = 4 mins, etc. + const lockMinutes = Math.pow(2, record.attempts - 5); + record.lockoutUntil = Date.now() + (lockMinutes * 60 * 1000); + } + loginAttempts.set(ip, record); + return record; +} + +function handleSuccessfulLogin(ip) { + loginAttempts.delete(ip); +} + +// ── Upload Storage ───────────────────────────────────────── + +const UPLOAD_DIR = path.join(__dirname, 'uploads'); +if (!fs.existsSync(UPLOAD_DIR)) fs.mkdirSync(UPLOAD_DIR, { recursive: true }); + +const storage = multer.diskStorage({ + destination: (req, file, cb) => cb(null, UPLOAD_DIR), + filename: (req, file, cb) => { + const sessionId = uuidv4(); + const ext = path.extname(file.originalname); + cb(null, `${sessionId}${ext}`); + } +}); + +const upload = multer({ + storage, + limits: { fileSize: 500 * 1024 * 1024 }, // 500 MB + fileFilter: (req, file, cb) => { + if (file.mimetype === 'application/pdf') cb(null, true); + else cb(new Error('Only PDF files are allowed')); + } +}); + +// ── Session Tracking ─────────────────────────────────────── +// Map sessionId -> { filePath, originalName, connectedClients, lastAccess } + +const sessions = new Map(); + +function touchSession(sessionId) { + const s = sessions.get(sessionId); + if (s) s.lastAccess = Date.now(); +} + +function cleanupSession(sessionId) { + const session = sessions.get(sessionId); + if (!session) return; + + // Only delete if no clients are connected + if (session.connectedClients > 0) return; + + try { + if (fs.existsSync(session.filePath)) { + fs.unlinkSync(session.filePath); + console.log(`[cleanup] Deleted: ${session.originalName} (${sessionId})`); + } + } catch (e) { + console.warn(`[cleanup] Failed to delete ${sessionId}:`, e.message); + } + sessions.delete(sessionId); +} + +// Periodic cleanup: delete sessions idle for > 10 minutes +setInterval(() => { + const now = Date.now(); + for (const [id, session] of sessions) { + if (session.connectedClients <= 0 && now - session.lastAccess > 10 * 60 * 1000) { + cleanupSession(id); + } + } +}, 60 * 1000); // check every minute + +// ── WebSocket for Connection Tracking ────────────────────── + +const wss = new WebSocketServer({ server }); + +wss.on('connection', (ws) => { + let wsSessionId = null; + + ws.on('message', (msg) => { + try { + const data = JSON.parse(msg); + if (data.type === 'register' && data.sessionId) { + // Enforce auth on websocket + if (currentAppPassword || ADMIN_PASSWORD) { + const isAdmin = ADMIN_PASSWORD && data.token === ADMIN_TOKEN; + const isUser = currentAppPassword && data.token === USER_TOKEN; + if (!isAdmin && !isUser) return; + } + + wsSessionId = data.sessionId; + const session = sessions.get(wsSessionId); + if (session) { + session.connectedClients++; + touchSession(wsSessionId); + console.log(`[ws] Client connected to session ${wsSessionId} (${session.connectedClients} clients)`); + } + } + } catch (e) { /* ignore */ } + }); + + ws.on('close', () => { + if (wsSessionId) { + const session = sessions.get(wsSessionId); + if (session) { + session.connectedClients--; + console.log(`[ws] Client disconnected from session ${wsSessionId} (${session.connectedClients} remaining)`); + // Schedule cleanup after a short delay (in case of page refresh) + setTimeout(() => { + const s = sessions.get(wsSessionId); + if (s && s.connectedClients <= 0) { + cleanupSession(wsSessionId); + } + }, 30 * 1000); // 30 second grace period for refreshes + } + } + }); +}); + +// ── Static Files ─────────────────────────────────────────── + +app.use(express.static(path.join(__dirname, 'public'))); +app.use(express.json()); + +// ── API: Auth ────────────────────────────────────────────── + +app.get('/api/check-auth', requireAuth, (req, res) => { + res.json({ ok: true, role: req.userRole }); +}); + +app.post('/api/login', checkBruteForce, (req, res) => { + if (!currentAppPassword && !ADMIN_PASSWORD) { + return res.json({ token: 'no-auth', role: 'admin' }); + } + + const { password } = req.body; + const ip = req.ip; + + if (ADMIN_PASSWORD && password === ADMIN_PASSWORD) { + handleSuccessfulLogin(ip); + return res.json({ token: ADMIN_TOKEN, role: 'admin' }); + } + + if (currentAppPassword && password === currentAppPassword) { + handleSuccessfulLogin(ip); + return res.json({ token: USER_TOKEN, role: 'user' }); + } + + const record = handleFailedLogin(ip); + + if (record.lockoutUntil > Date.now()) { + const remaining = Math.ceil((record.lockoutUntil - Date.now()) / 1000); + return res.status(429).json({ error: `Too many attempts. Locked out for ${remaining} seconds.` }); + } + + res.status(401).json({ error: 'Invalid password' }); +}); + +// ── API: Admin ───────────────────────────────────────────── + +app.get('/api/admin/stats', requireAuth, requireAdmin, (req, res) => { + const mem = process.memoryUsage(); + + const blockedIps = []; + for (const [ip, record] of loginAttempts) { + if (record.lockoutUntil > Date.now()) { + blockedIps.push({ ip, attempts: record.attempts, lockoutRemaining: Math.ceil((record.lockoutUntil - Date.now()) / 1000) }); + } + } + + res.json({ + uptime: process.uptime(), + memoryUsedMB: Math.round(mem.rss / 1024 / 1024), + activeSessions: sessions.size, + loginAttemptsTracked: loginAttempts.size, + blockedIps + }); +}); + +app.post('/api/admin/clear-cache', requireAuth, requireAdmin, (req, res) => { + let deletedCount = 0; + for (const [id, session] of sessions) { + try { + if (fs.existsSync(session.filePath)) { + fs.unlinkSync(session.filePath); + deletedCount++; + } + } catch (e) { /* ignore */ } + } + sessions.clear(); + res.json({ success: true, deletedCount }); +}); + +app.post('/api/admin/clear-logins', requireAuth, requireAdmin, (req, res) => { + loginAttempts.clear(); + res.json({ success: true }); +}); + +app.post('/api/admin/change-password', requireAuth, requireAdmin, (req, res) => { + const { newPassword } = req.body; + currentAppPassword = newPassword || null; + res.json({ success: true }); +}); + +// ── API: Upload PDF ──────────────────────────────────────── + +app.post('/api/upload', requireAuth, upload.single('pdf'), (req, res) => { + if (!req.file) return res.status(400).json({ error: 'No file uploaded' }); + + const sessionId = path.basename(req.file.filename, path.extname(req.file.filename)); + + sessions.set(sessionId, { + filePath: req.file.path, + originalName: req.file.originalname, + connectedClients: 0, + lastAccess: Date.now() + }); + + console.log(`[upload] ${req.file.originalname} -> session ${sessionId}`); + + res.json({ + sessionId, + originalName: req.file.originalname, + fileSize: req.file.size + }); +}); + +// ── API: Serve PDF for client-side rendering ─────────────── + +app.get('/api/pdf/:sessionId', requireAuth, (req, res) => { + const session = sessions.get(req.params.sessionId); + if (!session || !fs.existsSync(session.filePath)) { + return res.status(404).json({ error: 'Session not found' }); + } + touchSession(req.params.sessionId); + res.setHeader('Content-Type', 'application/pdf'); + res.sendFile(session.filePath); +}); + +// ── API: Split PDF ───────────────────────────────────────── + +app.post('/api/split', requireAuth, async (req, res) => { + const { sessionId, pageNumbers } = req.body; + + const session = sessions.get(sessionId); + if (!session || !fs.existsSync(session.filePath)) { + return res.status(404).json({ error: 'Session not found' }); + } + touchSession(sessionId); + + try { + const inputBytes = fs.readFileSync(session.filePath); + const srcDoc = await PDFDocument.load(inputBytes, { + ignoreEncryption: true, + updateMetadata: false + }); + const outDoc = await PDFDocument.create(); + + const sorted = [...pageNumbers].sort((a, b) => a - b); + const indices = sorted.map(p => p - 1).filter(i => i >= 0 && i < srcDoc.getPageCount()); + + const copiedPages = await outDoc.copyPages(srcDoc, indices); + copiedPages.forEach(page => outDoc.addPage(page)); + + const outBytes = await outDoc.save(); + + const outputName = session.originalName.replace(/\.pdf$/i, '') + '_split.pdf'; + res.setHeader('Content-Type', 'application/pdf'); + res.setHeader('Content-Disposition', `attachment; filename="${outputName}"`); + res.send(Buffer.from(outBytes)); + } catch (err) { + console.error('[split] Error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// ── Start Server ─────────────────────────────────────────── + +server.listen(PORT, '0.0.0.0', () => { + console.log(`PDF Splitter running at http://0.0.0.0:${PORT}`); +});