From 7f4d786a4f94abbaa766947ed616609a3a6c9491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 12:40:47 +0300 Subject: [PATCH 01/45] Port app to Cloudflare Workers --- .assetsignore | 3 + .gitignore | 2 +- package-lock.json | 6014 +---------------- package.json | 6 +- server/app.ts | 13 +- server/logger.ts | 9 - server/routes/asset-designer.tsx | 66 - server/routes/cloudflare.ts | 23 + server/routes/components/Interactive.tsx | 111 - server/routes/components/VariableSelector.tsx | 201 - server/routes/graphql.ts | 21 +- server/routes/index.ts | 4 - server/routes/pages/AssetDesignerPage.tsx | 457 -- server/routes/render-page.tsx | 61 - worker/index.ts | 13 + wrangler.jsonc | 11 + 16 files changed, 200 insertions(+), 6815 deletions(-) create mode 100644 .assetsignore delete mode 100644 server/routes/asset-designer.tsx create mode 100644 server/routes/cloudflare.ts delete mode 100644 server/routes/components/Interactive.tsx delete mode 100644 server/routes/components/VariableSelector.tsx delete mode 100644 server/routes/pages/AssetDesignerPage.tsx delete mode 100644 server/routes/render-page.tsx create mode 100644 worker/index.ts create mode 100644 wrangler.jsonc diff --git a/.assetsignore b/.assetsignore new file mode 100644 index 00000000..bea2c265 --- /dev/null +++ b/.assetsignore @@ -0,0 +1,3 @@ +* +!media/ +!media/** diff --git a/.gitignore b/.gitignore index 035db74c..9e35f401 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ node_modules/ logs/ attendees/ build/ +.wrangler/ server/types/ media/scripts/ utils/*.csv @@ -13,4 +14,3 @@ utils/diversity-* .env .fusebox .scripts - diff --git a/package-lock.json b/package-lock.json index ae565c34..d3778488 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,12 +19,9 @@ "csv-stringify": "^5.3.3", "date-range-array": "^2.1.0", "dotenv": "^8.1.0", - "expeditious-engine-memory": "^0.2.1", "express": "^4.18.2", - "express-expeditious": "^5.1.1", "file-saver": "^2.0.2", "fs-extra": "^8.1.0", - "fuse-box": "^3.7.1", "googleapis": "^42.0.0", "graphql": "^14.5.4", "graphql-depth-limit": "^1.1.0", @@ -38,7 +35,6 @@ "lodash": "^4.17.21", "markdown-to-jsx": "^6.11.4", "md5": "^2.3.0", - "mkdirp": "^0.5.1", "morgan": "^1.10.0", "polished": "^3.4.1", "query-string": "^6.8.3", @@ -176,7 +172,6 @@ "version": "10.0.17", "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.17.tgz", "integrity": "sha512-gykyjjr0sxzVuZBVTVK4dUmYsorc2qLhdYgSiOVK+m7WXgcYTKZevGWZ7TLAgTZvMelCTvhNq8xnf8FR1IdTbg==", - "peer": true, "dependencies": { "@babel/runtime": "^7.5.5", "@emotion/cache": "^10.0.17", @@ -395,7 +390,6 @@ "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-14.5.0.tgz", "integrity": "sha512-MOkzsEp1Jk5bXuAsHsUi6BVv0zCO+7/2PTiZMXWDSsMXvNU6w/PLMQT2vHn8hy2i0JqojPz1Sz6rsFjHtsU0lA==", "deprecated": "This is a stub types definition. graphql provides its own type definitions, so you do not need this installed.", - "peer": true, "dependencies": { "graphql": "*" } @@ -455,7 +449,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", "integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.8.0" } @@ -625,25 +618,6 @@ "node": ">= 0.6" } }, - "node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz", - "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==", - "dependencies": { - "acorn": "^5.0.3" - } - }, "node_modules/agent-base": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", @@ -655,15 +629,6 @@ "node": ">= 4.0.0" } }, - "node_modules/ajax-request": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/ajax-request/-/ajax-request-1.2.3.tgz", - "integrity": "sha1-mfy+wdbSeS+F+pSVNTMr0U9fN5A=", - "dependencies": { - "file-system": "^2.1.1", - "utils-extend": "^1.0.7" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -679,143 +644,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" - }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dependencies": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "node_modules/anymatch/node_modules/arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dependencies": { - "arr-flatten": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch/node_modules/array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch/node_modules/braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dependencies": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch/node_modules/expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dependencies": { - "is-posix-bracket": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch/node_modules/extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch/node_modules/micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dependencies": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/app-root-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz", - "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -824,44 +652,12 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "engines": { - "node": ">=0.10.0" - } - }, "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/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -887,40 +683,16 @@ "node": ">=0.8" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, - "node_modules/async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -971,78 +743,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-img": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/base64-img/-/base64-img-1.0.4.tgz", - "integrity": "sha1-PiLVXWx0okVT2EDSsbwSp9sHjTU=", - "dependencies": { - "ajax-request": "^1.2.0", - "file-system": "^2.1.0" - } - }, "node_modules/base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", @@ -1093,14 +793,6 @@ "node": "*" } }, - "node_modules/binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -1180,37 +872,6 @@ "concat-map": "0.0.1" } }, - "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -1238,25 +899,6 @@ "resolved": "https://registry.npmjs.org/bytesish/-/bytesish-0.3.3.tgz", "integrity": "sha512-Q5eMmjkF3PnHDA0k/34/aGodPWxYL/2bAB1j17JQXeejbGsWaJLpKJqLCcpe+e37Oqg+UZig0kF5vgslOOyUJQ==" }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/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", @@ -1336,15 +978,11 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "node_modules/chain-able": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chain-able/-/chain-able-1.0.1.tgz", - "integrity": "sha1-tIrJvcGPIZLscwq8ZmCfkKq1YF8=" - }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -1358,6 +996,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -1369,6 +1008,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -1376,11 +1016,6 @@ "node": ">=4" } }, - "node_modules/chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" - }, "node_modules/charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", @@ -1406,69 +1041,6 @@ "node": ">= 0.6" } }, - "node_modules/chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dependencies": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - }, - "optionalDependencies": { - "fsevents": "^1.0.0" - } - }, - "node_modules/chokidar/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/class-validator": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.12.2.tgz", @@ -1480,53 +1052,6 @@ "validator": "13.0.0" } }, - "node_modules/clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", @@ -1592,11 +1117,6 @@ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, - "node_modules/component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, "node_modules/compressible": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", @@ -1716,14 +1236,6 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/copy-to-clipboard": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.0.8.tgz", @@ -1877,11 +1389,6 @@ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1893,53 +1400,6 @@ "node": ">= 0.4" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", @@ -2198,48 +1658,6 @@ "node": ">=0.8.0" } }, - "node_modules/escodegen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", - "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", - "dependencies": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-prettier": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz", @@ -2268,14 +1686,6 @@ "node": ">=4" } }, - "node_modules/estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", @@ -2316,153 +1726,6 @@ "node": ">=6" } }, - "node_modules/exec-sh": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", - "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", - "dependencies": { - "merge": "^1.2.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dependencies": { - "fill-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dependencies": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expeditious": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/expeditious/-/expeditious-1.0.1.tgz", - "integrity": "sha1-mVt6x2dBpmApiRRJ1YZ7zMM4sw8=", - "dependencies": { - "debug": "~2.6.9", - "safejson": "~1.0.1", - "verror": "~1.6.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/expeditious-engine-memory": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/expeditious-engine-memory/-/expeditious-engine-memory-0.2.1.tgz", - "integrity": "sha1-zh2cvfLfmn25HNkZE8KLpTeWXRE=", - "dependencies": { - "expeditious": "~1.0.0" - } - }, - "node_modules/expeditious/node_modules/extsprintf": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz", - "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk=", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/expeditious/node_modules/verror": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.6.1.tgz", - "integrity": "sha1-I2QCBgZIwhnRFiwkUdHDQaDhyc4=", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "core-util-is": "1.0.2", - "extsprintf": "1.2.0" - } - }, "node_modules/express": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", @@ -2509,36 +1772,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/express-expeditious": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/express-expeditious/-/express-expeditious-5.1.1.tgz", - "integrity": "sha512-4akMwHm8TVRYzm/HQ520fJxqT1NIEb0J+CNzJ18l1kXt0GSnIHsRt2WpoI+8jdD/g3tf/Ggz+vbW6rwronJdvA==", - "dependencies": { - "debug": "~4.1.0", - "expeditious": "~1.0.1", - "expeditious-engine-memory": "~0.2.0", - "on-finished": "~2.3.0", - "timestring": "~5.0.0", - "verror": "~1.10.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/express-expeditious/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/express-expeditious/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/express/node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -2591,117 +1824,6 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dependencies": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -2726,11 +1848,6 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, "node_modules/fast-safe-stringify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", @@ -2755,61 +1872,11 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, - "node_modules/file-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/file-match/-/file-match-1.0.2.tgz", - "integrity": "sha1-ycrSZdLIrfOoFHWw30dYWQafrvc=", - "dependencies": { - "utils-extend": "^1.0.6" - } - }, "node_modules/file-saver": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz", "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==" }, - "node_modules/file-system": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/file-system/-/file-system-2.2.2.tgz", - "integrity": "sha1-fWWDPjojR9zZVqgTxncVPtPt2Yc=", - "dependencies": { - "file-match": "^1.0.1", - "utils-extend": "^1.0.4" - } - }, - "node_modules/filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/finalhandler": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", @@ -2851,14 +1918,6 @@ "integrity": "sha1-Hxik2TgVLUlZZfnJWNkjqy3WabQ=", "dev": true }, - "node_modules/fliplog": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/fliplog/-/fliplog-0.3.13.tgz", - "integrity": "sha512-R504CdX+mdhMYpmyrdiQ9PW6ncAyZnxyeA85fS1/P/Y9qmbMiQsqt6QzsYhq5kbqMb84PibVOcS1oz98GJl6EQ==", - "dependencies": { - "chain-able": "^1.0.1" - } - }, "node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -2872,25 +1931,6 @@ "is-callable": "^1.1.3" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -2907,765 +1947,40 @@ "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-extra/node_modules/graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", - "bundleDependencies": [ - "node-pre-gyp" - ], - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/fsevents/node_modules/abbrev": { - "version": "1.1.1", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/fsevents/node_modules/ansi-regex": { - "version": "2.1.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/aproba": { - "version": "1.2.0", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/fsevents/node_modules/are-we-there-yet": { - "version": "1.1.5", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/fsevents/node_modules/balanced-match": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/fsevents/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/fsevents/node_modules/chownr": { - "version": "1.1.1", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/fsevents/node_modules/code-point-at": { - "version": "1.1.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/concat-map": { - "version": "0.0.1", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/fsevents/node_modules/console-control-strings": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/fsevents/node_modules/core-util-is": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/fsevents/node_modules/debug": { - "version": "2.6.9", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/fsevents/node_modules/deep-extend": { - "version": "0.6.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/fsevents/node_modules/delegates": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/fsevents/node_modules/detect-libc": { - "version": "1.0.3", - "inBundle": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/fsevents/node_modules/fs-minipass": { - "version": "1.2.5", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^2.2.1" - } - }, - "node_modules/fsevents/node_modules/fs.realpath": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/fsevents/node_modules/gauge": { - "version": "2.7.4", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/fsevents/node_modules/glob": { - "version": "7.1.3", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/fsevents/node_modules/has-unicode": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/fsevents/node_modules/iconv-lite": { - "version": "0.4.24", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/ignore-walk": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/fsevents/node_modules/inflight": { - "version": "1.0.6", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/fsevents/node_modules/inherits": { - "version": "2.0.3", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/fsevents/node_modules/ini": { - "version": "1.3.5", - "inBundle": true, - "license": "ISC", - "optional": true, - "engines": { - "node": "*" - } - }, - "node_modules/fsevents/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/isarray": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/fsevents/node_modules/minimatch": { - "version": "3.0.4", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/fsevents/node_modules/minimist": { - "version": "0.0.8", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/fsevents/node_modules/minipass": { - "version": "2.3.5", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/fsevents/node_modules/minizlib": { - "version": "1.2.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "minipass": "^2.2.1" - } - }, - "node_modules/fsevents/node_modules/mkdirp": { - "version": "0.5.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/fsevents/node_modules/ms": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/fsevents/node_modules/needle": { - "version": "2.2.4", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 0.10.x" - } - }, - "node_modules/fsevents/node_modules/node-pre-gyp": { - "version": "0.10.3", - "inBundle": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/fsevents/node_modules/nopt": { - "version": "4.0.1", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/fsevents/node_modules/npm-bundled": { - "version": "1.0.5", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/fsevents/node_modules/npm-packlist": { - "version": "1.2.0", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "node_modules/fsevents/node_modules/npmlog": { - "version": "4.1.2", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/fsevents/node_modules/number-is-nan": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/object-assign": { - "version": "4.1.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/once": { - "version": "1.4.0", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/fsevents/node_modules/os-homedir": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/os-tmpdir": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/osenv": { - "version": "0.1.5", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/fsevents/node_modules/path-is-absolute": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/process-nextick-args": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/fsevents/node_modules/rc": { - "version": "1.2.8", - "inBundle": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "optional": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/fsevents/node_modules/rc/node_modules/minimist": { - "version": "1.2.0", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/fsevents/node_modules/readable-stream": { - "version": "2.3.6", - "inBundle": true, - "license": "MIT", - "optional": true, - "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/fsevents/node_modules/rimraf": { - "version": "2.6.3", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/fsevents/node_modules/safe-buffer": { - "version": "5.1.2", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/fsevents/node_modules/safer-buffer": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/fsevents/node_modules/sax": { - "version": "1.2.4", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/fsevents/node_modules/semver": { - "version": "5.6.0", - "inBundle": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/fsevents/node_modules/set-blocking": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/fsevents/node_modules/signal-exit": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/fsevents/node_modules/string_decoder": { - "version": "1.1.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fsevents/node_modules/string-width": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/strip-ansi": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/strip-json-comments": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/tar": { - "version": "4.4.8", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/fsevents/node_modules/util-deprecate": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/fsevents/node_modules/wide-align": { - "version": "1.1.3", - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/fsevents/node_modules/wrappy": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/fsevents/node_modules/yallist": { - "version": "3.0.3", - "inBundle": true, - "license": "ISC", - "optional": true - }, - "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" + }, + "engines": { + "node": ">= 0.12" } }, - "node_modules/fuse-box": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/fuse-box/-/fuse-box-3.7.1.tgz", - "integrity": "sha512-aM7t9bUcRpNNQu9M+YjXXzx9JSJQVPWeY+8iTyv7OhvJNWHrqqEWPzbn9OfcyFa2AfPwAUyC/uzWexBbjtTvsA==", - "dependencies": { - "acorn": "^5.7.3", - "acorn-jsx": "^4.0.1", - "ansi": "^0.3.1", - "app-root-path": "^2.0.1", - "base64-img": "^1.0.3", - "base64-js": "^1.2.0", - "bowser": "^2.0.0-beta.3", - "chokidar": "^1.6.1", - "clean-css": "^4.1.9", - "escodegen": "^1.8.1", - "express": "^4.14.0", - "fliplog": "^0.3.13", - "fs-extra": "^7.0.0", - "fuse-concat-with-sourcemaps": "^1.0.5", - "getopts": "^2.1.1", - "glob": "^7.1.1", - "ieee754": "^1.1.8", - "inquirer": "^3.0.6", - "lego-api": "^1.0.7", - "mustache": "^2.3.0", - "postcss": "^6.0.1", - "pretty-time": "^0.2.0", - "prettysize": "0.0.3", - "realm-utils": "^1.0.9", - "regexpu-core": "^4.1.3", - "request": "^2.79.0", - "shorthash": "0.0.2", - "source-map": "^0.7.1", - "sourcemap-blender": "1.0.5", - "stream-browserify": "^2.0.1", - "tslib": "^1.8.0", - "watch": "^1.0.1", - "ws": "^1.1.1" - }, - "bin": { - "fuse": "cli/entry.js" - }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "engines": { - "node": ">= 8", - "npm": ">= 3.10.10" + "node": ">= 0.6" } }, - "node_modules/fuse-box/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dependencies": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" }, @@ -3673,28 +1988,23 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/fuse-box/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } + "node_modules/fs-extra/node_modules/graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" }, - "node_modules/fuse-concat-with-sourcemaps": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fuse-concat-with-sourcemaps/-/fuse-concat-with-sourcemaps-1.0.5.tgz", - "integrity": "sha512-tKsRJIxn9tU3IH8JHMwFhGbObqkDKXhNKOvcM+QyflAlYb2EgOvIQe8D6WB/cocA3puldHatsp9SN5SKryasrw==", - "dependencies": { - "source-map": "^0.6.1" - } + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "node_modules/fuse-concat-with-sourcemaps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" + "node_modules/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/gaxios": { @@ -3768,19 +2078,6 @@ "node": ">= 0.4" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getopts": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.2.3.tgz", - "integrity": "sha512-viEcb8TpgeG05+Nqo5EzZ8QR0hxdyrYDp6ZSTZqe2M/h53Bk036NmqG38Vhf5RGirC/Of9Xql+v66B2gp256SQ==" - }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -3808,64 +2105,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dependencies": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-base/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-base/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dependencies": { - "is-glob": "^2.0.0" - } - }, - "node_modules/glob-parent/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-parent/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/google-auth-library": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.2.0.tgz", @@ -3978,13 +2217,13 @@ "node_modules/graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "optional": true }, "node_modules/graphql": { "version": "14.5.4", "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.5.4.tgz", "integrity": "sha512-dPLvHoxy5m9FrkqWczPPRnH0X80CyvRE6e7Fa5AWEqEAzg9LpxHvKh24po/482E6VWHigOkAmb4xCp6P9yT9gw==", - "peer": true, "dependencies": { "iterall": "^1.2.2" }, @@ -4113,6 +2352,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, "engines": { "node": ">=4" } @@ -4129,42 +2369,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -4378,11 +2582,6 @@ "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, "node_modules/import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -4409,77 +2608,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dependencies": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -4496,197 +2624,40 @@ "node": ">= 0.10" } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, - "node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dependencies": { - "is-primitive": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, + "node_modules/is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "node_modules/is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, "node_modules/is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -4714,14 +2685,6 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4734,14 +2697,6 @@ "dev": true, "license": "ISC" }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -4780,14 +2735,6 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, - "node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" - } - }, "node_modules/json-bigint": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.0.tgz", @@ -4862,44 +2809,11 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, - "node_modules/lego-api": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/lego-api/-/lego-api-1.0.8.tgz", - "integrity": "sha512-pZD0mf32+RL1bUMJztRcXiNBB1gE8gd/h4MDLWdZp7vaMZyjPiYK/zNpNNGoJvmoa7D/wf9dll+5z7pDObdLFg==", - "dependencies": { - "chain-able": "^3.0.0" - } - }, - "node_modules/lego-api/node_modules/chain-able": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chain-able/-/chain-able-3.0.0.tgz", - "integrity": "sha512-26MoELhta86n7gCsE2T1hGRyncZvPjFXTkB/DEp4+i/EJVSxXQNwXMDZZb2+SWcbPuow18wQtztaW7GXOel9DA==" - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -4959,31 +2873,12 @@ "loose-envify": "cli.js" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/markdown-to-jsx": { "version": "6.11.4", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz", @@ -5008,11 +2903,6 @@ "node": ">= 0.4" } }, - "node_modules/math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" - }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -5031,11 +2921,6 @@ "node": ">= 0.6" } }, - "node_modules/merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" - }, "node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", @@ -5054,29 +2939,6 @@ "node": ">= 0.6" } }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -5108,14 +2970,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -5127,46 +2981,6 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/moment": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", @@ -5215,57 +3029,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/mustache": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", - "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==", - "bin": { - "mustache": "bin/mustache" - }, - "engines": { - "npm": ">=1.4.0" - } - }, - "node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "node_modules/nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "optional": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanoseconds": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/nanoseconds/-/nanoseconds-0.1.0.tgz", - "integrity": "sha1-aew5/NAOd6s6ct4KQzQoJM15Izo=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -5305,17 +3068,6 @@ "node": ">= 4.5.0" } }, - "node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -5341,41 +3093,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", @@ -5389,40 +3106,6 @@ "node": ">= 0.4" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dependencies": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -5458,82 +3141,6 @@ "fn.name": "1.x.x" } }, - "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dependencies": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-glob/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-glob/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -5564,14 +3171,6 @@ "node": ">= 0.8" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -5618,86 +3217,29 @@ "node_modules/polished": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/polished/-/polished-3.4.1.tgz", - "integrity": "sha512-GflTnlP5rrpDoigjczEkS6Ye7NDA4sFvAnlr5hSDrEvjiVj97Xzev3hZlLi3UB27fpxyTS9rWU64VzVLWkG+mg==", - "dependencies": { - "@babel/runtime": "^7.4.5" - } - }, - "node_modules/polished/node_modules/@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "dependencies": { - "regenerator-runtime": "^0.13.2" - } - }, - "node_modules/polished/node_modules/regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "integrity": "sha512-GflTnlP5rrpDoigjczEkS6Ye7NDA4sFvAnlr5hSDrEvjiVj97Xzev3hZlLi3UB27fpxyTS9rWU64VzVLWkG+mg==", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "@babel/runtime": "^7.4.5" } }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "engines": { - "node": ">= 0.8.0" + "node_modules/polished/node_modules/@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "dependencies": { + "regenerator-runtime": "^0.13.2" } }, - "node_modules/preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/polished/node_modules/regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" }, "node_modules/prettier": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", "dev": true, - "peer": true, "bin": { "prettier": "bin-prettier.js" }, @@ -5705,45 +3247,6 @@ "node": ">=10.13.0" } }, - "node_modules/pretty-time": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-0.2.0.tgz", - "integrity": "sha1-ejvexAScYgzXxCt/NCt01W5z104=", - "dependencies": { - "is-number": "^2.0.2", - "nanoseconds": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-time/node_modules/is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-time/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prettysize": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/prettysize/-/prettysize-0.0.3.tgz", - "integrity": "sha1-FK//amReWRpN3xxykZwjtBRhgaE=" - }, "node_modules/process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -5819,27 +3322,6 @@ "node": ">=6" } }, - "node_modules/randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dependencies": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/randomatic/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -5877,7 +3359,6 @@ "version": "16.9.0", "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -5944,55 +3425,6 @@ "node": ">= 6" } }, - "node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/readdirp/node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/realm-utils": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/realm-utils/-/realm-utils-1.0.9.tgz", - "integrity": "sha1-XHal/znkgWrywTOhYfQiHWYo7/Q=", - "dependencies": { - "app-root-path": "^1.3.0", - "mkdirp": "^0.5.1" - } - }, - "node_modules/realm-utils/node_modules/app-root-path": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-1.4.0.tgz", - "integrity": "sha1-YzXYZclkDQ+tmQBOWnkjIjjpLfo=" - }, "node_modules/referrer-policy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", @@ -6007,109 +3439,16 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, - "node_modules/regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", - "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/regenerator-runtime": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" }, - "node_modules/regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dependencies": { - "is-equal-shallow": "^0.1.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexpu-core": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", - "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^7.0.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==" - }, - "node_modules/regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "engines": { - "node": ">=0.10" - } - }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "peer": true, "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -6188,24 +3527,6 @@ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/resumer": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", @@ -6214,14 +3535,6 @@ "through": "~2.3.4" } }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "engines": { - "node": ">=0.12" - } - }, "node_modules/retina-dom-to-image": { "version": "2.5.6", "resolved": "https://registry.npmjs.org/retina-dom-to-image/-/retina-dom-to-image-2.5.6.tgz", @@ -6238,48 +3551,11 @@ "rimraf": "bin.js" } }, - "node_modules/run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dependencies": { - "is-promise": "^2.1.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" - }, - "node_modules/rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dependencies": { - "rx-lite": "*" - } - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safejson": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safejson/-/safejson-1.0.1.tgz", - "integrity": "sha1-W8u5UzuW/OEOY1b0IAF8FqT5yZg=" - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -6376,31 +3652,6 @@ "node": ">= 0.8.0" } }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -6430,14 +3681,6 @@ "node": ">=8" } }, - "node_modules/shorthash": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/shorthash/-/shorthash-0.0.2.tgz", - "integrity": "sha1-WbJo7sveWQOLMNogK8+93rLEpOs=", - "engines": { - "node": "*" - } - }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -6555,149 +3798,23 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/smooth-scroll-into-view-if-needed": { - "version": "1.1.23", - "resolved": "https://registry.npmjs.org/smooth-scroll-into-view-if-needed/-/smooth-scroll-into-view-if-needed-1.1.23.tgz", - "integrity": "sha512-52177sj5yR2novVCB+vJRCYEUkHFz2mq5UKmm5wwIWs0ZtC1sotVaTjKBsuNzBPF4nOV1NxMctyD4V/VMmivCQ==", - "dependencies": { - "scroll-into-view-if-needed": "2.2.20" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "is-arrayish": "^0.3.1" } }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/smooth-scroll-into-view-if-needed": { + "version": "1.1.23", + "resolved": "https://registry.npmjs.org/smooth-scroll-into-view-if-needed/-/smooth-scroll-into-view-if-needed-1.1.23.tgz", + "integrity": "sha512-52177sj5yR2novVCB+vJRCYEUkHFz2mq5UKmm5wwIWs0ZtC1sotVaTjKBsuNzBPF4nOV1NxMctyD4V/VMmivCQ==", "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "scroll-into-view-if-needed": "2.2.20" } }, "node_modules/source-map": { @@ -6708,41 +3825,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dependencies": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated" - }, - "node_modules/sourcemap-blender": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sourcemap-blender/-/sourcemap-blender-1.0.5.tgz", - "integrity": "sha512-GPhjCmDtJ8YY6zt1L6kP6WtBg6WrdWt5hw2Wmgt9rwC3yiwLo9vEuabh/YYSZ5KmFV20hVkGdkTwpXtT2E65TA==", - "dependencies": { - "source-map": "^0.7.3" - } - }, - "node_modules/sourcemap-blender/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, "node_modules/split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -6763,17 +3845,6 @@ "node": ">=6" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -6811,29 +3882,6 @@ "node": "*" } }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -6851,37 +3899,6 @@ "node": ">=0.10.0" } }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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/stream-browserify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", @@ -6978,14 +3995,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, - "node_modules/timestring": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/timestring/-/timestring-5.0.1.tgz", - "integrity": "sha512-0VfOVpaTYqBMTEpjwcY5mB+72YYjFI44Z5F2q80ZiIyDn5pRJm+rEV1OEM8xfnf5/FdtckcrTERTp9TbrlMMHw==", - "engines": { - "node": ">=4" - } - }, "node_modules/tiny-invariant": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.3.tgz", @@ -7001,17 +4010,6 @@ "resolved": "https://registry.npmjs.org/title-case-minors/-/title-case-minors-1.0.0.tgz", "integrity": "sha1-UfFwN8KUdHodHNpCS1AEyG2OsRU=" }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/to-capital-case": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-capital-case/-/to-capital-case-1.0.0.tgz", @@ -7033,54 +4031,6 @@ "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", "integrity": "sha1-xyKQcWTvaxeBMsjmmTAhLRtKoWo=" }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-sentence-case": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-sentence-case/-/to-sentence-case-1.0.0.tgz", @@ -7279,17 +4229,6 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/type-graphql": { "version": "0.17.6", "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-0.17.6.tgz", @@ -7336,7 +4275,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7374,67 +4312,12 @@ "node": ">=0.10.0" } }, - "node_modules/ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, "node_modules/undici-types": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", "license": "MIT" }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", - "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", - "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -7456,50 +4339,6 @@ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -7508,35 +4347,16 @@ "punycode": "^2.1.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "node_modules/utils-extend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/utils-extend/-/utils-extend-1.0.8.tgz", - "integrity": "sha1-zP17ZFQPjpDuIe7Fd2nQZRyril8=" - }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -7589,26 +4409,6 @@ "extsprintf": "^1.2.0" } }, - "node_modules/watch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", - "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", - "dependencies": { - "exec-sh": "^0.2.0", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/watch/node_modules/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, "node_modules/whatwg-fetch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", @@ -7709,25 +4509,11 @@ "node": ">= 6" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "node_modules/ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "dependencies": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - }, "node_modules/x-xss-protection": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz", @@ -7830,7 +4616,6 @@ "version": "10.0.17", "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.17.tgz", "integrity": "sha512-gykyjjr0sxzVuZBVTVK4dUmYsorc2qLhdYgSiOVK+m7WXgcYTKZevGWZ7TLAgTZvMelCTvhNq8xnf8FR1IdTbg==", - "peer": true, "requires": { "@babel/runtime": "^7.5.5", "@emotion/cache": "^10.0.17", @@ -8035,7 +4820,6 @@ "version": "14.5.0", "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-14.5.0.tgz", "integrity": "sha512-MOkzsEp1Jk5bXuAsHsUi6BVv0zCO+7/2PTiZMXWDSsMXvNU6w/PLMQT2vHn8hy2i0JqojPz1Sz6rsFjHtsU0lA==", - "peer": true, "requires": { "graphql": "*" } @@ -8094,7 +4878,6 @@ "version": "24.0.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", "integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==", - "peer": true, "requires": { "undici-types": "~7.8.0" } @@ -8255,19 +5038,6 @@ "negotiator": "0.6.3" } }, - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" - }, - "acorn-jsx": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz", - "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==", - "requires": { - "acorn": "^5.0.3" - } - }, "agent-base": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", @@ -8276,15 +5046,6 @@ "es6-promisify": "^5.0.0" } }, - "ajax-request": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/ajax-request/-/ajax-request-1.2.3.tgz", - "integrity": "sha1-mfy+wdbSeS+F+pSVNTMr0U9fN5A=", - "requires": { - "file-system": "^2.1.1", - "utils-extend": "^1.0.7" - } - }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -8296,112 +5057,6 @@ "uri-js": "^4.2.2" } }, - "ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - } - } - }, - "app-root-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz", - "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=" - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -8410,30 +5065,10 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "arrify": { "version": "1.0.1", @@ -8453,31 +5088,16 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, "async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -8525,65 +5145,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-img": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/base64-img/-/base64-img-1.0.4.tgz", - "integrity": "sha1-PiLVXWx0okVT2EDSsbwSp9sHjTU=", - "requires": { - "ajax-request": "^1.2.0", - "file-system": "^2.1.0" - } - }, "base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", @@ -8627,11 +5188,6 @@ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" }, - "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==" - }, "body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -8694,33 +5250,6 @@ "concat-map": "0.0.1" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -8742,22 +5271,6 @@ "resolved": "https://registry.npmjs.org/bytesish/-/bytesish-0.3.3.tgz", "integrity": "sha512-Q5eMmjkF3PnHDA0k/34/aGodPWxYL/2bAB1j17JQXeejbGsWaJLpKJqLCcpe+e37Oqg+UZig0kF5vgslOOyUJQ==" }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, "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", @@ -8813,15 +5326,11 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "chain-able": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chain-able/-/chain-able-1.0.1.tgz", - "integrity": "sha1-tIrJvcGPIZLscwq8ZmCfkKq1YF8=" - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -8832,6 +5341,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -8840,17 +5350,13 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" - }, "charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", @@ -8870,58 +5376,6 @@ "parse5": "^3.0.1" } }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "class-validator": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.12.2.tgz", @@ -8933,43 +5387,6 @@ "validator": "13.0.0" } }, - "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", @@ -9029,11 +5446,6 @@ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, "compressible": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", @@ -9116,11 +5528,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, "copy-to-clipboard": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.0.8.tgz", @@ -9251,11 +5658,6 @@ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -9264,43 +5666,6 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", @@ -9510,31 +5875,6 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "escodegen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", - "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - } - } - }, "eslint-plugin-prettier": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz", @@ -9550,11 +5890,6 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" - }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", @@ -9585,126 +5920,6 @@ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, - "exec-sh": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", - "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", - "requires": { - "merge": "^1.2.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "requires": { - "fill-range": "^2.1.0" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "expeditious": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/expeditious/-/expeditious-1.0.1.tgz", - "integrity": "sha1-mVt6x2dBpmApiRRJ1YZ7zMM4sw8=", - "requires": { - "debug": "~2.6.9", - "safejson": "~1.0.1", - "verror": "~1.6.1" - }, - "dependencies": { - "extsprintf": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz", - "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk=" - }, - "verror": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.6.1.tgz", - "integrity": "sha1-I2QCBgZIwhnRFiwkUdHDQaDhyc4=", - "requires": { - "core-util-is": "1.0.2", - "extsprintf": "1.2.0" - } - } - } - }, - "expeditious-engine-memory": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/expeditious-engine-memory/-/expeditious-engine-memory-0.2.1.tgz", - "integrity": "sha1-zh2cvfLfmn25HNkZE8KLpTeWXRE=", - "requires": { - "expeditious": "~1.0.0" - } - }, "express": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", @@ -9766,127 +5981,11 @@ } } }, - "express-expeditious": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/express-expeditious/-/express-expeditious-5.1.1.tgz", - "integrity": "sha512-4akMwHm8TVRYzm/HQ520fJxqT1NIEb0J+CNzJ18l1kXt0GSnIHsRt2WpoI+8jdD/g3tf/Ggz+vbW6rwronJdvA==", - "requires": { - "debug": "~4.1.0", - "expeditious": "~1.0.1", - "expeditious-engine-memory": "~0.2.0", - "on-finished": "~2.3.0", - "timestring": "~5.0.0", - "verror": "~1.10.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -9908,11 +6007,6 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, "fast-safe-stringify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", @@ -9933,54 +6027,11 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, - "file-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/file-match/-/file-match-1.0.2.tgz", - "integrity": "sha1-ycrSZdLIrfOoFHWw30dYWQafrvc=", - "requires": { - "utils-extend": "^1.0.6" - } - }, "file-saver": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz", "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==" }, - "file-system": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/file-system/-/file-system-2.2.2.tgz", - "integrity": "sha1-fWWDPjojR9zZVqgTxncVPtPt2Yc=", - "requires": { - "file-match": "^1.0.1", - "utils-extend": "^1.0.4" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "finalhandler": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", @@ -10016,14 +6067,6 @@ "integrity": "sha1-Hxik2TgVLUlZZfnJWNkjqy3WabQ=", "dev": true }, - "fliplog": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/fliplog/-/fliplog-0.3.13.tgz", - "integrity": "sha512-R504CdX+mdhMYpmyrdiQ9PW6ncAyZnxyeA85fS1/P/Y9qmbMiQsqt6QzsYhq5kbqMb84PibVOcS1oz98GJl6EQ==", - "requires": { - "chain-able": "^1.0.1" - } - }, "fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -10031,23 +6074,10 @@ }, "for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "requires": { - "for-in": "^1.0.1" + "is-callable": "^1.1.3" } }, "forever-agent": { @@ -10070,14 +6100,6 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -10111,564 +6133,11 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "optional": true - } - } - }, "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, - "fuse-box": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/fuse-box/-/fuse-box-3.7.1.tgz", - "integrity": "sha512-aM7t9bUcRpNNQu9M+YjXXzx9JSJQVPWeY+8iTyv7OhvJNWHrqqEWPzbn9OfcyFa2AfPwAUyC/uzWexBbjtTvsA==", - "requires": { - "acorn": "^5.7.3", - "acorn-jsx": "^4.0.1", - "ansi": "^0.3.1", - "app-root-path": "^2.0.1", - "base64-img": "^1.0.3", - "base64-js": "^1.2.0", - "bowser": "^2.0.0-beta.3", - "chokidar": "^1.6.1", - "clean-css": "^4.1.9", - "escodegen": "^1.8.1", - "express": "^4.14.0", - "fliplog": "^0.3.13", - "fs-extra": "^7.0.0", - "fuse-concat-with-sourcemaps": "^1.0.5", - "getopts": "^2.1.1", - "glob": "^7.1.1", - "ieee754": "^1.1.8", - "inquirer": "^3.0.6", - "lego-api": "^1.0.7", - "mustache": "^2.3.0", - "postcss": "^6.0.1", - "pretty-time": "^0.2.0", - "prettysize": "0.0.3", - "realm-utils": "^1.0.9", - "regexpu-core": "^4.1.3", - "request": "^2.79.0", - "shorthash": "0.0.2", - "source-map": "^0.7.1", - "sourcemap-blender": "1.0.5", - "stream-browserify": "^2.0.1", - "tslib": "^1.8.0", - "watch": "^1.0.1", - "ws": "^1.1.1" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } - }, - "fuse-concat-with-sourcemaps": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fuse-concat-with-sourcemaps/-/fuse-concat-with-sourcemaps-1.0.5.tgz", - "integrity": "sha512-tKsRJIxn9tU3IH8JHMwFhGbObqkDKXhNKOvcM+QyflAlYb2EgOvIQe8D6WB/cocA3puldHatsp9SN5SKryasrw==", - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, "gaxios": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.0.1.tgz", @@ -10722,16 +6191,6 @@ "es-object-atoms": "^1.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getopts": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.2.3.tgz", - "integrity": "sha512-viEcb8TpgeG05+Nqo5EzZ8QR0hxdyrYDp6ZSTZqe2M/h53Bk036NmqG38Vhf5RGirC/Of9Xql+v66B2gp256SQ==" - }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -10753,53 +6212,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "google-auth-library": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.2.0.tgz", @@ -10885,13 +6297,13 @@ "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "optional": true }, "graphql": { "version": "14.5.4", "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.5.4.tgz", "integrity": "sha512-dPLvHoxy5m9FrkqWczPPRnH0X80CyvRE6e7Fa5AWEqEAzg9LpxHvKh24po/482E6VWHigOkAmb4xCp6P9yT9gw==", - "peer": true, "requires": { "iterall": "^1.2.2" } @@ -10977,42 +6389,14 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -11184,11 +6568,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, "import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -11209,66 +6588,8 @@ }, "inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "invariant": { "version": "2.2.4", @@ -11283,37 +6604,11 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "requires": { - "binary-extensions": "^1.0.0" - } - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -11324,110 +6619,16 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, "is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -11449,11 +6650,6 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -11465,11 +6661,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -11505,11 +6696,6 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - }, "json-bigint": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.0.tgz", @@ -11581,40 +6767,11 @@ "safe-buffer": "^5.0.1" } }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, "kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, - "lego-api": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/lego-api/-/lego-api-1.0.8.tgz", - "integrity": "sha512-pZD0mf32+RL1bUMJztRcXiNBB1gE8gd/h4MDLWdZp7vaMZyjPiYK/zNpNNGoJvmoa7D/wf9dll+5z7pDObdLFg==", - "requires": { - "chain-able": "^3.0.0" - }, - "dependencies": { - "chain-able": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chain-able/-/chain-able-3.0.0.tgz", - "integrity": "sha512-26MoELhta86n7gCsE2T1hGRyncZvPjFXTkB/DEp4+i/EJVSxXQNwXMDZZb2+SWcbPuow18wQtztaW7GXOel9DA==" - } - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -11673,25 +6830,12 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, "map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, "markdown-to-jsx": { "version": "6.11.4", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz", @@ -11706,11 +6850,6 @@ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" - }, "md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -11726,11 +6865,6 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" - }, "merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", @@ -11741,26 +6875,6 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -11779,11 +6893,6 @@ "mime-db": "1.52.0" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -11792,38 +6901,6 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, "moment": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", @@ -11860,45 +6937,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "mustache": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", - "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "nanoseconds": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/nanoseconds/-/nanoseconds-0.1.0.tgz", - "integrity": "sha1-aew5/NAOd6s6ct4KQzQoJM15Izo=" - }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -11925,14 +6963,6 @@ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.5.tgz", "integrity": "sha512-vFMQIWt+J/7FLNyKouZ9TazT74PRV3wgv9UT4cRjC8BffxFbKXkgIWR42URCPSnHm/QDz6BOlb2Q0U4+VQT67Q==" }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -11952,34 +6982,6 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-inspect": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", @@ -11990,31 +6992,6 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -12044,63 +7021,6 @@ "fn.name": "1.x.x" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -12124,11 +7044,6 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -12187,84 +7102,11 @@ } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" - }, "prettier": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", - "dev": true, - "peer": true - }, - "pretty-time": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-0.2.0.tgz", - "integrity": "sha1-ejvexAScYgzXxCt/NCt01W5z104=", - "requires": { - "is-number": "^2.0.2", - "nanoseconds": "^0.1.0" - }, - "dependencies": { - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "prettysize": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/prettysize/-/prettysize-0.0.3.tgz", - "integrity": "sha1-FK//amReWRpN3xxykZwjtBRhgaE=" + "dev": true }, "process-nextick-args": { "version": "2.0.0", @@ -12323,23 +7165,6 @@ "strict-uri-encode": "^2.0.0" } }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - } - } - }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -12367,7 +7192,6 @@ "version": "16.9.0", "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", - "peer": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -12388,85 +7212,35 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz", "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.15.0" - } - }, - "react-easy-emoji": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/react-easy-emoji/-/react-easy-emoji-1.2.0.tgz", - "integrity": "sha1-YRRQLHnyL5wFNGn6cnrhKSh3oAA=", - "requires": { - "lodash.assign": "^4.0.8", - "string-replace-to-array": "^1.0.1" - } - }, - "react-is": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.1.tgz", - "integrity": "sha512-ioMCzVDWvCvKD8eeT+iukyWrBGrA3DiFYkXfBsVYIRdaREZuBjENG+KjrikavCLasozqRWTwFUagU/O4vPpRMA==" - }, - "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.15.0" } }, - "realm-utils": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/realm-utils/-/realm-utils-1.0.9.tgz", - "integrity": "sha1-XHal/znkgWrywTOhYfQiHWYo7/Q=", + "react-easy-emoji": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-easy-emoji/-/react-easy-emoji-1.2.0.tgz", + "integrity": "sha1-YRRQLHnyL5wFNGn6cnrhKSh3oAA=", "requires": { - "app-root-path": "^1.3.0", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "app-root-path": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-1.4.0.tgz", - "integrity": "sha1-YzXYZclkDQ+tmQBOWnkjIjjpLfo=" - } + "lodash.assign": "^4.0.8", + "string-replace-to-array": "^1.0.1" + } + }, + "react-is": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.1.tgz", + "integrity": "sha512-ioMCzVDWvCvKD8eeT+iukyWrBGrA3DiFYkXfBsVYIRdaREZuBjENG+KjrikavCLasozqRWTwFUagU/O4vPpRMA==" + }, + "readable-stream": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "referrer-policy": { @@ -12479,87 +7253,15 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" - }, - "regenerate-unicode-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", - "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", - "requires": { - "regenerate": "^1.4.0" - } - }, "regenerator-runtime": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpu-core": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", - "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^7.0.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.0.2" - } - }, - "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==" - }, - "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "requires": { - "jsesc": "~0.5.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "peer": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -12619,20 +7321,6 @@ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, "resumer": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", @@ -12641,11 +7329,6 @@ "through": "~2.3.4" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, "retina-dom-to-image": { "version": "2.5.6", "resolved": "https://registry.npmjs.org/retina-dom-to-image/-/retina-dom-to-image-2.5.6.tgz", @@ -12659,45 +7342,11 @@ "glob": "^7.1.3" } }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "requires": { - "is-promise": "^2.1.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "requires": { - "rx-lite": "*" - } - }, "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==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safejson": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safejson/-/safejson-1.0.1.tgz", - "integrity": "sha1-W8u5UzuW/OEOY1b0IAF8FqT5yZg=" - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -12776,27 +7425,6 @@ "send": "0.19.0" } }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -12817,11 +7445,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shorthash": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/shorthash/-/shorthash-0.0.2.tgz", - "integrity": "sha1-WbJo7sveWQOLMNogK8+93rLEpOs=" - }, "side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -12894,11 +7517,6 @@ } } }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -12915,140 +7533,11 @@ "scroll-into-view-if-needed": "2.2.20" } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "sourcemap-blender": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sourcemap-blender/-/sourcemap-blender-1.0.5.tgz", - "integrity": "sha512-GPhjCmDtJ8YY6zt1L6kP6WtBg6WrdWt5hw2Wmgt9rwC3yiwLo9vEuabh/YYSZ5KmFV20hVkGdkTwpXtT2E65TA==", - "requires": { - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } - }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -13063,14 +7552,6 @@ "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -13097,25 +7578,6 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -13126,39 +7588,6 @@ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", @@ -13244,11 +7673,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, - "timestring": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/timestring/-/timestring-5.0.1.tgz", - "integrity": "sha512-0VfOVpaTYqBMTEpjwcY5mB+72YYjFI44Z5F2q80ZiIyDn5pRJm+rEV1OEM8xfnf5/FdtckcrTERTp9TbrlMMHw==" - }, "tiny-invariant": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.3.tgz", @@ -13264,14 +7688,6 @@ "resolved": "https://registry.npmjs.org/title-case-minors/-/title-case-minors-1.0.0.tgz", "integrity": "sha1-UfFwN8KUdHodHNpCS1AEyG2OsRU=" }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "to-capital-case": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-capital-case/-/to-capital-case-1.0.0.tgz", @@ -13290,44 +7706,6 @@ "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", "integrity": "sha1-xyKQcWTvaxeBMsjmmTAhLRtKoWo=" }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, "to-sentence-case": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-sentence-case/-/to-sentence-case-1.0.0.tgz", @@ -13480,14 +7858,6 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, "type-graphql": { "version": "0.17.6", "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-0.17.6.tgz", @@ -13523,8 +7893,7 @@ "typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "peer": true + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==" }, "uglify-es": { "version": "3.3.9", @@ -13547,51 +7916,11 @@ } } }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, "undici-types": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==" }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", - "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==" - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", - "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -13607,42 +7936,6 @@ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -13651,31 +7944,16 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "utils-extend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/utils-extend/-/utils-extend-1.0.8.tgz", - "integrity": "sha1-zP17ZFQPjpDuIe7Fd2nQZRyril8=" - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -13711,22 +7989,6 @@ "extsprintf": "^1.2.0" } }, - "watch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", - "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", - "requires": { - "exec-sh": "^0.2.0", - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, "whatwg-fetch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", @@ -13812,25 +8074,11 @@ } } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - }, "x-xss-protection": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz", diff --git a/package.json b/package.json index 2e311dd4..572101e0 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "generate:reason-conf": "node utils/generate-reason-conf.js", "generate:typeof": "node utils/generate-typeof.js", "build": "rimraf build && tsc", + "cf:deploy": "npx wrangler deploy", + "cf:dev": "npx wrangler dev", "lint": "tslint --config tslint.json content/**/*.ts server/**/*.ts --fix", "start": "tsc-watch --onSuccess \"node ./build/server\" --onFailure \"echo Beep! Compilation Failed\"", "heroku:start": "node ./build/server/index.js", @@ -73,12 +75,9 @@ "csv-stringify": "^5.3.3", "date-range-array": "^2.1.0", "dotenv": "^8.1.0", - "expeditious-engine-memory": "^0.2.1", "express": "^4.18.2", - "express-expeditious": "^5.1.1", "file-saver": "^2.0.2", "fs-extra": "^8.1.0", - "fuse-box": "^3.7.1", "googleapis": "^42.0.0", "graphql": "^14.5.4", "graphql-depth-limit": "^1.1.0", @@ -92,7 +91,6 @@ "lodash": "^4.17.21", "markdown-to-jsx": "^6.11.4", "md5": "^2.3.0", - "mkdirp": "^0.5.1", "morgan": "^1.10.0", "polished": "^3.4.1", "query-string": "^6.8.3", diff --git a/server/app.ts b/server/app.ts index a8487188..6df35500 100644 --- a/server/app.ts +++ b/server/app.ts @@ -4,10 +4,17 @@ import express from "express"; import helmet from "helmet"; import morgan from "morgan"; import logger from "./logger"; -import createRouter from "./routes"; -async function createApp() { +type CreateRouter = () => Promise; + +interface CreateAppOptions { + createRouter?: CreateRouter; +} + +async function createApp(options: CreateAppOptions = {}) { const app = express(); + const getRouter = + options.createRouter || (await import("./routes")).default; // Wear a helmet for extra security. app.use( @@ -42,7 +49,7 @@ async function createApp() { }) ); - const routes = await createRouter(); + const routes = await getRouter(); app.use("/", routes); diff --git a/server/logger.ts b/server/logger.ts index 3f8c80b2..9c40520c 100644 --- a/server/logger.ts +++ b/server/logger.ts @@ -1,14 +1,5 @@ -// https://github.com/amazeeio/lagoon/blob/master/services/api/src/logger.js -import * as fs from "fs"; -import * as path from "path"; import { createLogger, format, transports } from "winston"; -// Create the logs directory if it doesn't exist yet. -const directory = path.join(".", "logs"); -if (!fs.existsSync(directory)) { - fs.mkdirSync(directory); -} - const ignorePingAndMedia = format((info) => { const message = info.message; diff --git a/server/routes/asset-designer.tsx b/server/routes/asset-designer.tsx deleted file mode 100644 index 55959b59..00000000 --- a/server/routes/asset-designer.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import expeditousEngineMemory from "expeditious-engine-memory"; -import getExpeditiousCache from "express-expeditious"; -import * as React from "react"; -import "reflect-metadata"; // Needed for introspecting classes -import createInteractive from "./components/Interactive"; -import AssetDesignerPage from "./pages/AssetDesignerPage"; -import renderPage from "./render-page"; - -const cache = getExpeditiousCache({ - namespace: "assetdesignercache", - defaultTtl: "1 year", // Cache till next restart - engine: expeditousEngineMemory(), // TODO: Set up Redis -}); - -function routeAssetDesigner(router, projectRoot, scriptRoot) { - const Interactive = createInteractive(projectRoot, scriptRoot, __dirname); - - router.get( - "/asset-designer", - cache.withTtl("1 hour"), - ({ url, query }, res) => { - const selectionId = query.selectionId; - let bundlers = 0; - - // Given we use the same page for serving different bundles, - // each needs a unique identifier based on the query (differing part) - // TODO: Is this true anymore? - const pageHtml = renderPage( - "Asset designer", - url, - { - bundlers++; - }, - bundlingCompleted: (err) => { - bundlers--; - - // TODO: Figure out how to handle Fusebox home directory - /*if (err) { - console.error(err); - - return res.status(500).send("Failed to bundle frontend"); - }*/ - - if (bundlers === 0) { - console.log("Done bundling"); - - res.status(200).send(pageHtml); - } - }, - }} - > - - - ); - } - ); -} - -export default routeAssetDesigner; diff --git a/server/routes/cloudflare.ts b/server/routes/cloudflare.ts new file mode 100644 index 00000000..3f8e12b7 --- /dev/null +++ b/server/routes/cloudflare.ts @@ -0,0 +1,23 @@ +import cors from "cors"; +import express from "express"; +import generateSchema from "../schema"; +import routeCalendar from "./calendar"; +import routeGraphQL from "./graphql"; +import routePing from "./ping"; + +async function createCloudflareRouter() { + // @ts-ignore + const router = new express.Router(); + const schema = await generateSchema(); + const mediaUrl = "/media"; + + router.use(cors()); + + routeCalendar(router); + routeGraphQL(router, schema, "/bundle", mediaUrl); + routePing(router); + + return router; +} + +export default createCloudflareRouter; diff --git a/server/routes/components/Interactive.tsx b/server/routes/components/Interactive.tsx deleted file mode 100644 index 91842be4..00000000 --- a/server/routes/components/Interactive.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import * as fs from "fs"; -import { FuseBox } from "fuse-box"; -import trimStart from "lodash/trimStart"; -import mkdirp from "mkdirp"; -import * as path from "path"; -import * as React from "react"; - -function createInteractive(projectRoot, scriptRoot, componentRoot) { - mkdirp.sync(scriptRoot); - - interface IInteractiveContext { - registerBundler: () => void; - bundlingCompleted: (err) => void; - } - - // TODO: Figure out how to handle this - const InteractiveContext = React.createContext({ - registerBundler: () => {}, - bundlingCompleted: () => {}, - }); - - function InteractiveConsumer({ - component, - relativeComponentPath, - componentHash = "", - props = {}, - }) { - const componentName = `${path.basename( - relativeComponentPath - )}${componentHash}`; - const indexName = `${componentName}.index.ts`; - const indexPath = path.join(scriptRoot, indexName); - const absoluteComponentPath = path.join( - componentRoot, - relativeComponentPath - ); - const outputPath = `${path.join(scriptRoot, componentName)}.js`; - const scriptPath = `/${trimStart( - path.relative(projectRoot, outputPath), - "." - )}`; - - fs.writeFileSync( - indexPath, - renderScript(absoluteComponentPath, componentName, props) - ); - - // TODO: Likely we should use Preact here (alias?) - const fuse = FuseBox.init({ - target: "browser@es6", - homeDir: scriptRoot, - output: `${scriptRoot}/$name.js`, - shim: { - "type-graphql": { - source: path.join(projectRoot, "shims/type-graphql.js"), - exports: "TypeGraphQL", - }, - react: { - exports: "React", - }, - "react-dom": { - exports: "ReactDOM", - }, - }, - // TODO: Apply terser to minify - }); - - fuse - .bundle(componentName) - .cache(false) // TODO: Enable cache again? - .instructions(`> ${indexName}`); - - const { registerBundler, bundlingCompleted } = React.useContext( - InteractiveContext - ); - - registerBundler(); - - fuse - .run() - .then(bundlingCompleted) - .catch(bundlingCompleted); - - // Since rendering is streaming, it's important the script gets executed - // only after the div has been created! Otherwise hydration fails. - return ( - <> -
{React.createElement(component, props)}
- - - - ${reloadPage()} - - -
${html}
- - `; -} - -function cleanBase(hostname: string): string { - return trimEnd(hostname.split("?")[0], "/"); -} - -function reloadPage(): string { - if (process.env.NODE_ENV === "production") { - return ""; - } - - return ` - - `; -} - -export default renderPage; diff --git a/worker/index.ts b/worker/index.ts new file mode 100644 index 00000000..e2c4397f --- /dev/null +++ b/worker/index.ts @@ -0,0 +1,13 @@ +import { httpServerHandler } from "cloudflare:node"; +import "reflect-metadata"; +import createApp from "../server/app"; +import createCloudflareRouter from "../server/routes/cloudflare"; + +const port = 3000; +const app = await createApp({ + createRouter: createCloudflareRouter, +}); + +app.listen(port); + +export default httpServerHandler({ port }); diff --git a/wrangler.jsonc b/wrangler.jsonc new file mode 100644 index 00000000..6cf70f9b --- /dev/null +++ b/wrangler.jsonc @@ -0,0 +1,11 @@ +{ + "$schema": "./node_modules/wrangler/config-schema.json", + "name": "future-frontend-graphql-api", + "main": "./worker/index.ts", + "compatibility_date": "2026-04-03", + "compatibility_flags": ["nodejs_compat"], + "assets": { + "directory": ".", + "run_worker_first": ["/graphql", "/ping", "/calendar/*", "/calendar-2026.ics"] + } +} From 24c86628c240a3df53b4af7f6dc2cef2dbee8ff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 12:45:25 +0300 Subject: [PATCH 02/45] Document Cloudflare deploy and remove legacy deployment files --- .env.template | 3 +- Procfile | 1 - README.md | 88 ++++++++++++++++++++++++++++++------ add-compiled-to-git.sh | 6 --- app.json | 3 -- package.json | 7 +-- server/index.ts | 5 -- server/rebuild-sites.ts | 19 -------- server/test-rebuild-sites.ts | 3 -- 9 files changed, 77 insertions(+), 58 deletions(-) delete mode 100644 Procfile delete mode 100644 add-compiled-to-git.sh delete mode 100644 app.json delete mode 100644 server/rebuild-sites.ts delete mode 100644 server/test-rebuild-sites.ts diff --git a/.env.template b/.env.template index cec05ed7..bbfef685 100644 --- a/.env.template +++ b/.env.template @@ -1 +1,2 @@ -TITO_TOKEN= \ No newline at end of file +# Optional token for Tito-related utility scripts. +TITO_TOKEN= diff --git a/Procfile b/Procfile deleted file mode 100644 index efb2f3e8..00000000 --- a/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: npm run heroku:start diff --git a/README.md b/README.md index e2af8ae2..fbed86ae 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,88 @@ # GraphQL API for TOSKA conferences -Simple GraphQL API for our conferences: +This repository serves conference data over GraphQL and exposes a small set of supporting routes: -To see the query API: +- `/graphql` +- `/ping` +- `/calendar/:id` +- `/calendar-2026.ics` +- `/media/*` -1. `NODE_ENV="development" npm start` -2. `http://localhost:3000/graphql` or `http://localhost:3000/calendar-2022.ics` (calendar) +## Local development -## Asset Designer +### Node.js server -You can access the asset designer through `http://localhost:3000/asset-designer`. +Use the original Node.js server for local development: -## Image Processing +1. Install dependencies with `npm install`. +2. Start the server with `NODE_ENV=development npm start`. +3. Open `http://localhost:3000/graphql`. -There's no special image processing in place at the moment. +Other useful local endpoints: -> You can access images through `http://localhost:3000/media`. Example: `http://localhost:3000/media/people/kenw.jpg`. +- `http://localhost:3000/calendar-2026.ics` +- `http://localhost:3000/media/people/kenw.jpg` -## Webhooks +### Cloudflare Worker -See the webhooks below. +Use the Worker runtime when you want to verify the Cloudflare deployment path locally: -### Heroku to Netlify +1. Install dependencies with `npm install`. +2. Authenticate Wrangler with `npx wrangler login`. +3. Start the Worker locally with `npm run cf:dev`. -The API has been connected to the site using a webhook so that it builds whenever the API changes: +Wrangler uses [wrangler.jsonc](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/wrangler.jsonc) and serves media files from the repository root through the static-assets configuration in [.assetsignore](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.assetsignore). -- `heroku config:set REBUILD_SITES= -a react-finland-api` +## Deploying to Cloudflare -> Remember to run the server in production mode. That will enable site rebuilding hook! +### Prerequisites + +- A Cloudflare account with Workers enabled +- Node.js and npm installed +- Dependencies installed with `npm install` +- Wrangler authenticated with `npx wrangler login` + +### Configure the Worker + +The project already includes a Worker entrypoint at [worker/index.ts](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/worker/index.ts) and a Wrangler configuration at [wrangler.jsonc](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/wrangler.jsonc). + +The current configuration: + +- runs the Express app inside Cloudflare Workers using `cloudflare:node` +- routes `/graphql`, `/ping`, and calendar endpoints through the Worker +- serves `/media/*` from static assets in the repository + +If you want a different Worker name, change the `name` field in `wrangler.jsonc`. + +### Deploy + +Run: + +```sh +npm run cf:deploy +``` + +That executes `npx wrangler deploy` using the checked-in configuration. + +### Verify after deploy + +Check these endpoints on the deployed domain: + +- `/graphql` +- `/ping` +- `/calendar-2026.ics` +- `/media/people/kenw.jpg` + +## Environment variables + +The application does not currently require Cloudflare Worker secrets for runtime startup. + +The `.env` file is only relevant for local scripts and the Node.js entrypoint. The example in [.env.template](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.env.template) is: + +- `TITO_TOKEN` for Tito-related utility scripts + +## Notes + +- The old asset designer route has been removed. +- Legacy platform-specific deployment files and workflow have been removed. +- If you rely on attendee CSV files, verify that they are available in the deployment environment before using attendee-related GraphQL queries. diff --git a/add-compiled-to-git.sh b/add-compiled-to-git.sh deleted file mode 100644 index ee9975b1..00000000 --- a/add-compiled-to-git.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# https://github.com/AkhileshNS/heroku-deploy/issues/39 -git config user.name "USERNAME" -git config user.email "EMAIL" -git add -f build -git commit -m "New compilation" diff --git a/app.json b/app.json deleted file mode 100644 index 89776aa1..00000000 --- a/app.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "stack": "heroku-22" -} diff --git a/package.json b/package.json index 572101e0..f22dcfd2 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,7 @@ "cf:dev": "npx wrangler dev", "lint": "tslint --config tslint.json content/**/*.ts server/**/*.ts --fix", "start": "tsc-watch --onSuccess \"node ./build/server\" --onFailure \"echo Beep! Compilation Failed\"", - "heroku:start": "node ./build/server/index.js", - "format": "prettier content/**/*.ts server/**/*.ts --write", - "heroku-postbuild": "echo Skip build on Heroku" + "format": "prettier content/**/*.ts server/**/*.ts --write" }, "keywords": [], "author": "", @@ -117,6 +115,5 @@ "prettier --write", "git add" ] - }, - "heroku-run-build-script": true + } } diff --git a/server/index.ts b/server/index.ts index 624a28f7..d7ab813a 100644 --- a/server/index.ts +++ b/server/index.ts @@ -8,7 +8,6 @@ dotenv.config({ }); import logger from "./logger"; -import rebuildSites from "./rebuild-sites"; import createServer from "./server"; process.on("SIGINT", () => { @@ -24,10 +23,6 @@ process.on("SIGINT", () => { await createServer(); logger.debug("Running"); - - if (process.env.NODE_ENV === "production") { - rebuildSites(process.env.REBUILD_SITES); - } } catch (e) { logger.error("Failed to start"); // @ts-expect-error This is fine diff --git a/server/rebuild-sites.ts b/server/rebuild-sites.ts deleted file mode 100644 index e07cbb56..00000000 --- a/server/rebuild-sites.ts +++ /dev/null @@ -1,19 +0,0 @@ -import request from "request"; -import logger from "./logger"; - -// Expects a comma separated string -function rebuildSites(urls) { - (urls || "").split(",").forEach(rebuildSite); -} - -function rebuildSite(url) { - request.post(url, (err) => { - if (err) { - return logger.error(err); - } - - return logger.info(`rebuilt ${url}`); - }); -} - -export default rebuildSites; diff --git a/server/test-rebuild-sites.ts b/server/test-rebuild-sites.ts deleted file mode 100644 index 3f4b95ef..00000000 --- a/server/test-rebuild-sites.ts +++ /dev/null @@ -1,3 +0,0 @@ -const rebuildSites = require("./rebuild-sites"); - -rebuildSites(process.env.REBUILD_SITES); From 021ec19be27cf18869dbc3d7015ae7bca2f5af8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 12:47:45 +0300 Subject: [PATCH 03/45] Pin npm dependency versions --- .npmrc | 1 + package-lock.json | 843 ++++++++++++++++++++++++++++++---------------- package.json | 146 ++++---- 3 files changed, 619 insertions(+), 371 deletions(-) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..cffe8cde --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +save-exact=true diff --git a/package-lock.json b/package-lock.json index d3778488..817120e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,85 +9,85 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "@emotion/core": "^10.0.17", - "@emotion/styled": "^10.0.17", - "bent": "^6.1.0", - "body-parser": "^1.19.0", - "compression": "^1.7.4", - "cors": "^2.8.5", - "csv-parse": "^4.4.6", - "csv-stringify": "^5.3.3", - "date-range-array": "^2.1.0", - "dotenv": "^8.1.0", - "express": "^4.18.2", - "file-saver": "^2.0.2", - "fs-extra": "^8.1.0", - "googleapis": "^42.0.0", - "graphql": "^14.5.4", - "graphql-depth-limit": "^1.1.0", - "graphql-http": "^1.22.4", - "graphql-request": "^1.8.2", - "helmet": "^3.21.0", - "hex-to-rgba": "^2.0.1", - "history": "^4.9.0", - "ical-generator": "^1.7.2", - "just-kebab-case": "^1.1.0", - "lodash": "^4.17.21", - "markdown-to-jsx": "^6.11.4", - "md5": "^2.3.0", - "morgan": "^1.10.0", - "polished": "^3.4.1", - "query-string": "^6.8.3", - "react": "^16.9.0", - "react-copy-to-clipboard": "^5.0.1", - "react-dom": "^16.9.0", - "react-easy-emoji": "^1.2.0", - "reflect-metadata": "^0.1.13", - "request": "^2.88.2", - "request-promise-native": "^1.0.9", - "retina-dom-to-image": "^2.5.6", - "rimraf": "^3.0.0", - "smooth-scroll-into-view-if-needed": "^1.1.23", - "to-title-case": "^1.0.0", - "type-graphql": "^0.17.6", - "typescript": "^5.8.3", - "uglify-es": "^3.3.9", - "window-or-global": "^1.0.1", - "winston": "^3.3.3", - "zerofill": "^0.1.0" + "@emotion/core": "10.0.17", + "@emotion/styled": "10.0.17", + "bent": "6.1.0", + "body-parser": "1.19.0", + "compression": "1.7.4", + "cors": "2.8.5", + "csv-parse": "4.4.6", + "csv-stringify": "5.3.3", + "date-range-array": "2.1.0", + "dotenv": "8.1.0", + "express": "4.18.2", + "file-saver": "2.0.2", + "fs-extra": "8.1.0", + "googleapis": "42.0.0", + "graphql": "14.5.4", + "graphql-depth-limit": "1.1.0", + "graphql-http": "1.22.4", + "graphql-request": "1.8.2", + "helmet": "3.21.0", + "hex-to-rgba": "2.0.1", + "history": "4.9.0", + "ical-generator": "1.7.2", + "just-kebab-case": "1.1.0", + "lodash": "4.17.21", + "markdown-to-jsx": "6.11.4", + "md5": "2.3.0", + "morgan": "1.10.0", + "polished": "3.4.1", + "query-string": "6.8.3", + "react": "16.9.0", + "react-copy-to-clipboard": "5.0.1", + "react-dom": "16.9.0", + "react-easy-emoji": "1.2.0", + "reflect-metadata": "0.1.13", + "request": "2.88.2", + "request-promise-native": "1.0.9", + "retina-dom-to-image": "2.5.6", + "rimraf": "3.0.0", + "smooth-scroll-into-view-if-needed": "1.1.23", + "to-title-case": "1.0.0", + "type-graphql": "0.17.6", + "typescript": "5.8.3", + "uglify-es": "3.3.9", + "window-or-global": "1.0.1", + "winston": "3.3.3", + "zerofill": "0.1.0" }, "devDependencies": { "@types/compression": "1.0.1", - "@types/cors": "^2.8.6", - "@types/dotenv": "^6.1.1", + "@types/cors": "2.8.6", + "@types/dotenv": "6.1.1", "@types/express": "4.17.9", - "@types/file-saver": "^2.0.1", - "@types/fs-extra": "^8.0.0", - "@types/graphql": "^14.5.0", + "@types/file-saver": "2.0.1", + "@types/fs-extra": "8.0.0", + "@types/graphql": "14.5.0", "@types/helmet": "0.0.44", - "@types/history": "^4.7.3", - "@types/lodash": "^4.14.138", - "@types/md5": "^2.1.33", - "@types/morgan": "^1.7.37", - "@types/node": "^24.0.3", - "@types/query-string": "^6.3.0", - "@types/react": "^16.9.2", - "@types/react-copy-to-clipboard": "^4.2.6", - "@types/react-dom": "^16.9.0", - "@types/request": "^2.48.3", - "@types/request-promise-native": "^1.0.16", - "@types/window-or-global": "^1.0.0", - "camelcase": "^5.3.1", - "cheerio": "^1.0.0-rc.3", - "csstype": "^2.6.6", + "@types/history": "4.7.3", + "@types/lodash": "4.14.138", + "@types/md5": "2.1.33", + "@types/morgan": "1.7.37", + "@types/node": "24.0.3", + "@types/query-string": "6.3.0", + "@types/react": "16.9.2", + "@types/react-copy-to-clipboard": "4.2.6", + "@types/react-dom": "16.9.0", + "@types/request": "2.48.3", + "@types/request-promise-native": "1.0.16", + "@types/window-or-global": "1.0.0", + "camelcase": "5.3.1", + "cheerio": "1.0.0-rc.3", + "csstype": "2.6.6", "flatmap": "0.0.3", - "glob": "^7.1.7", - "mri": "^1.1.6", - "prettier": "^2.3.1", - "tsc-watch": "^7.1.1", - "tslint": "^6.1.3", - "tslint-config-prettier": "^1.18.0", - "tslint-plugin-prettier": "^2.3.0" + "glob": "7.1.7", + "mri": "1.1.6", + "prettier": "2.3.1", + "tsc-watch": "7.1.1", + "tslint": "6.1.3", + "tslint-config-prettier": "1.18.0", + "tslint-plugin-prettier": "2.3.0" } }, "node_modules/@babel/code-frame": { @@ -794,61 +794,51 @@ } }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", + "bytes": "3.1.0", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", + "depd": "~1.1.2", + "http-errors": "1.7.2", "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 0.8" } }, "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, + "node_modules/body-parser/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, "engines": { "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/boolbase": { @@ -858,9 +848,9 @@ "dev": true }, "node_modules/bowser": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.9.0.tgz", - "integrity": "sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.5.4.tgz", + "integrity": "sha512-74GGwfc2nzYD19JCiA0RwCxdq7IY5jHeEaSrrgm/5kusEuK+7UK0qDG3gyzN47c4ViNyO4osaKtZE+aSV6nlpQ==", "license": "MIT" }, "node_modules/brace-expansion": { @@ -1222,9 +1212,9 @@ } }, "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -1426,6 +1416,7 @@ "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" @@ -1440,6 +1431,15 @@ "node": ">=0.3.1" } }, + "node_modules/dns-prefetch-control": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz", + "integrity": "sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/dom-serializer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", @@ -1540,9 +1540,9 @@ "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -1726,38 +1726,47 @@ "node": ">=6" } }, + "node_modules/expect-ct": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.2.0.tgz", + "integrity": "sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", + "finalhandler": "1.2.0", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", + "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -1766,10 +1775,55 @@ }, "engines": { "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/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/express/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/express/node_modules/on-finished": { @@ -1785,12 +1839,12 @@ } }, "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.0.4" }, "engines": { "node": ">=0.6" @@ -1799,6 +1853,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1819,6 +1888,15 @@ ], "license": "MIT" }, + "node_modules/express/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/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -1878,13 +1956,13 @@ "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==" }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -1960,6 +2038,15 @@ "node": ">= 0.6" } }, + "node_modules/frameguard": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.1.0.tgz", + "integrity": "sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -2382,19 +2469,23 @@ } }, "node_modules/helmet": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.23.3.tgz", - "integrity": "sha512-U3MeYdzPJQhtvqAVBPntVgAvNSOJyagwZwyKsFdyRa8TV3pOKVFljalPOCxbw5Wwf2kncGhmP0qHjyazIdNdSA==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.0.tgz", + "integrity": "sha512-TS3GryQMPR7n/heNnGC0Cl3Ess30g8C6EtqZyylf+Y2/kF4lM8JinOR90rzIICsw4ymWTvji4OhDmqsqxkLrcg==", "license": "MIT", "dependencies": { "depd": "2.0.0", + "dns-prefetch-control": "0.2.0", "dont-sniff-mimetype": "1.1.0", + "expect-ct": "0.2.0", "feature-policy": "0.3.0", + "frameguard": "3.1.0", "helmet-crossdomain": "0.4.0", - "helmet-csp": "2.10.0", + "helmet-csp": "2.9.1", "hide-powered-by": "1.1.0", "hpkp": "2.0.0", "hsts": "2.2.0", + "ienoopen": "1.1.0", "nocache": "2.1.0", "referrer-policy": "1.2.0", "x-xss-protection": "1.3.0" @@ -2413,12 +2504,12 @@ } }, "node_modules/helmet-csp": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.10.0.tgz", - "integrity": "sha512-Rz953ZNEFk8sT2XvewXkYN0Ho4GEZdjAZy4stjiEQV3eN7GDxg1QKmYggH7otDyIA7uGA6XnUMVSgeJwbR5X+w==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.1.tgz", + "integrity": "sha512-HgdXSJ6AVyXiy5ohVGpK6L7DhjI9KVdKVB1xRoixxYKsFXFwoVqtLKgDnfe3u8FGGKf9Ml9k//C9rnncIIAmyA==", "license": "MIT", "dependencies": { - "bowser": "2.9.0", + "bowser": "2.5.4", "camelize": "1.0.0", "content-security-policy-builder": "2.1.0", "dasherize": "2.0.0" @@ -2495,26 +2586,49 @@ } }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, - "node_modules/http-errors/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==", + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/http-errors/node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "license": "ISC" + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, "node_modules/http-signature": { @@ -2575,6 +2689,7 @@ "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" }, @@ -2582,6 +2697,15 @@ "node": ">=0.10.0" } }, + "node_modules/ienoopen": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.1.0.tgz", + "integrity": "sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -2922,13 +3046,10 @@ } }, "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" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "license": "MIT" }, "node_modules/methods": { "version": "1.1.2", @@ -3195,9 +3316,9 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "license": "MIT" }, "node_modules/pause-stream": { @@ -3332,13 +3453,13 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", + "bytes": "3.1.0", + "http-errors": "1.7.2", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -3347,9 +3468,9 @@ } }, "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -3587,9 +3708,9 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -3610,11 +3731,18 @@ "node": ">= 0.8.0" } }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/send/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, "engines": { "node": ">= 0.8" } @@ -3637,16 +3765,25 @@ "node": ">= 0.8" } }, + "node_modules/send/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/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" @@ -4063,6 +4200,15 @@ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -4329,7 +4475,8 @@ "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5189,44 +5336,36 @@ "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" }, "body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", + "bytes": "3.1.0", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", + "depd": "~1.1.2", + "http-errors": "1.7.2", "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" }, "qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "requires": { - "side-channel": "^1.0.6" - } + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" } } }, @@ -5237,9 +5376,9 @@ "dev": true }, "bowser": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.9.0.tgz", - "integrity": "sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA==" + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.5.4.tgz", + "integrity": "sha512-74GGwfc2nzYD19JCiA0RwCxdq7IY5jHeEaSrrgm/5kusEuK+7UK0qDG3gyzN47c4ViNyO4osaKtZE+aSV6nlpQ==" }, "brace-expansion": { "version": "1.1.11", @@ -5519,9 +5658,9 @@ } }, "cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, "cookie-signature": { "version": "1.0.6", @@ -5692,6 +5831,11 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, + "dns-prefetch-control": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz", + "integrity": "sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q==" + }, "dom-serializer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", @@ -5781,9 +5925,9 @@ "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "entities": { "version": "1.1.2", @@ -5920,37 +6064,42 @@ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, + "expect-ct": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.2.0.tgz", + "integrity": "sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g==" + }, "express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", + "finalhandler": "1.2.0", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", + "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -5958,6 +6107,42 @@ "vary": "~1.1.2" }, "dependencies": { + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -5967,17 +6152,33 @@ } }, "qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { - "side-channel": "^1.0.6" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" } }, "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==" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" } } }, @@ -6033,12 +6234,12 @@ "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==" }, "finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -6100,6 +6301,11 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, + "frameguard": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.1.0.tgz", + "integrity": "sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g==" + }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -6406,18 +6612,22 @@ } }, "helmet": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.23.3.tgz", - "integrity": "sha512-U3MeYdzPJQhtvqAVBPntVgAvNSOJyagwZwyKsFdyRa8TV3pOKVFljalPOCxbw5Wwf2kncGhmP0qHjyazIdNdSA==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.0.tgz", + "integrity": "sha512-TS3GryQMPR7n/heNnGC0Cl3Ess30g8C6EtqZyylf+Y2/kF4lM8JinOR90rzIICsw4ymWTvji4OhDmqsqxkLrcg==", "requires": { "depd": "2.0.0", + "dns-prefetch-control": "0.2.0", "dont-sniff-mimetype": "1.1.0", + "expect-ct": "0.2.0", "feature-policy": "0.3.0", + "frameguard": "3.1.0", "helmet-crossdomain": "0.4.0", - "helmet-csp": "2.10.0", + "helmet-csp": "2.9.1", "hide-powered-by": "1.1.0", "hpkp": "2.0.0", "hsts": "2.2.0", + "ienoopen": "1.1.0", "nocache": "2.1.0", "referrer-policy": "1.2.0", "x-xss-protection": "1.3.0" @@ -6429,11 +6639,11 @@ "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==" }, "helmet-csp": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.10.0.tgz", - "integrity": "sha512-Rz953ZNEFk8sT2XvewXkYN0Ho4GEZdjAZy4stjiEQV3eN7GDxg1QKmYggH7otDyIA7uGA6XnUMVSgeJwbR5X+w==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.1.tgz", + "integrity": "sha512-HgdXSJ6AVyXiy5ohVGpK6L7DhjI9KVdKVB1xRoixxYKsFXFwoVqtLKgDnfe3u8FGGKf9Ml9k//C9rnncIIAmyA==", "requires": { - "bowser": "2.9.0", + "bowser": "2.5.4", "camelize": "1.0.0", "content-security-policy-builder": "2.1.0", "dasherize": "2.0.0" @@ -6500,21 +6710,36 @@ } }, "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "dependencies": { - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" } } }, @@ -6568,6 +6793,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ienoopen": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.1.0.tgz", + "integrity": "sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ==" + }, "import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -6866,9 +7096,9 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "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==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "methods": { "version": "1.1.2", @@ -7061,9 +7291,9 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "pause-stream": { "version": "0.0.11", @@ -7171,20 +7401,20 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", + "bytes": "3.1.0", + "http-errors": "1.7.2", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "dependencies": { "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" } } }, @@ -7375,9 +7605,9 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -7394,10 +7624,17 @@ "statuses": "2.0.1" }, "dependencies": { - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } }, "ms": { "version": "2.1.3", @@ -7411,18 +7648,23 @@ "requires": { "ee-first": "1.1.1" } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" } } }, "serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "0.18.0" } }, "setprototypeof": { @@ -7738,6 +7980,11 @@ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -7929,7 +8176,7 @@ "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "unquote": { "version": "1.1.1", diff --git a/package.json b/package.json index f22dcfd2..42b55dd0 100644 --- a/package.json +++ b/package.json @@ -21,36 +21,36 @@ "license": "MIT", "devDependencies": { "@types/compression": "1.0.1", - "@types/cors": "^2.8.6", - "@types/dotenv": "^6.1.1", + "@types/cors": "2.8.6", + "@types/dotenv": "6.1.1", "@types/express": "4.17.9", - "@types/file-saver": "^2.0.1", - "@types/fs-extra": "^8.0.0", - "@types/graphql": "^14.5.0", + "@types/file-saver": "2.0.1", + "@types/fs-extra": "8.0.0", + "@types/graphql": "14.5.0", "@types/helmet": "0.0.44", - "@types/history": "^4.7.3", - "@types/lodash": "^4.14.138", - "@types/md5": "^2.1.33", - "@types/morgan": "^1.7.37", - "@types/node": "^24.0.3", - "@types/query-string": "^6.3.0", - "@types/react": "^16.9.2", - "@types/react-copy-to-clipboard": "^4.2.6", - "@types/react-dom": "^16.9.0", - "@types/request": "^2.48.3", - "@types/request-promise-native": "^1.0.16", - "@types/window-or-global": "^1.0.0", - "camelcase": "^5.3.1", - "cheerio": "^1.0.0-rc.3", - "csstype": "^2.6.6", + "@types/history": "4.7.3", + "@types/lodash": "4.14.138", + "@types/md5": "2.1.33", + "@types/morgan": "1.7.37", + "@types/node": "24.0.3", + "@types/query-string": "6.3.0", + "@types/react": "16.9.2", + "@types/react-copy-to-clipboard": "4.2.6", + "@types/react-dom": "16.9.0", + "@types/request": "2.48.3", + "@types/request-promise-native": "1.0.16", + "@types/window-or-global": "1.0.0", + "camelcase": "5.3.1", + "cheerio": "1.0.0-rc.3", + "csstype": "2.6.6", "flatmap": "0.0.3", - "glob": "^7.1.7", - "mri": "^1.1.6", - "prettier": "^2.3.1", - "tsc-watch": "^7.1.1", - "tslint": "^6.1.3", - "tslint-config-prettier": "^1.18.0", - "tslint-plugin-prettier": "^2.3.0" + "glob": "7.1.7", + "mri": "1.1.6", + "prettier": "2.3.1", + "tsc-watch": "7.1.1", + "tslint": "6.1.3", + "tslint-config-prettier": "1.18.0", + "tslint-plugin-prettier": "2.3.0" }, "resolutions": { "@types/express": "4.17.9" @@ -63,52 +63,52 @@ "url": "https://github.com/ReactFinland/graphql-api/issues" }, "dependencies": { - "@emotion/core": "^10.0.17", - "@emotion/styled": "^10.0.17", - "bent": "^6.1.0", - "body-parser": "^1.19.0", - "compression": "^1.7.4", - "cors": "^2.8.5", - "csv-parse": "^4.4.6", - "csv-stringify": "^5.3.3", - "date-range-array": "^2.1.0", - "dotenv": "^8.1.0", - "express": "^4.18.2", - "file-saver": "^2.0.2", - "fs-extra": "^8.1.0", - "googleapis": "^42.0.0", - "graphql": "^14.5.4", - "graphql-depth-limit": "^1.1.0", - "graphql-http": "^1.22.4", - "graphql-request": "^1.8.2", - "helmet": "^3.21.0", - "hex-to-rgba": "^2.0.1", - "history": "^4.9.0", - "ical-generator": "^1.7.2", - "just-kebab-case": "^1.1.0", - "lodash": "^4.17.21", - "markdown-to-jsx": "^6.11.4", - "md5": "^2.3.0", - "morgan": "^1.10.0", - "polished": "^3.4.1", - "query-string": "^6.8.3", - "react": "^16.9.0", - "react-copy-to-clipboard": "^5.0.1", - "react-dom": "^16.9.0", - "react-easy-emoji": "^1.2.0", - "reflect-metadata": "^0.1.13", - "request": "^2.88.2", - "request-promise-native": "^1.0.9", - "retina-dom-to-image": "^2.5.6", - "rimraf": "^3.0.0", - "smooth-scroll-into-view-if-needed": "^1.1.23", - "to-title-case": "^1.0.0", - "type-graphql": "^0.17.6", - "typescript": "^5.8.3", - "uglify-es": "^3.3.9", - "window-or-global": "^1.0.1", - "winston": "^3.3.3", - "zerofill": "^0.1.0" + "@emotion/core": "10.0.17", + "@emotion/styled": "10.0.17", + "bent": "6.1.0", + "body-parser": "1.19.0", + "compression": "1.7.4", + "cors": "2.8.5", + "csv-parse": "4.4.6", + "csv-stringify": "5.3.3", + "date-range-array": "2.1.0", + "dotenv": "8.1.0", + "express": "4.18.2", + "file-saver": "2.0.2", + "fs-extra": "8.1.0", + "googleapis": "42.0.0", + "graphql": "14.5.4", + "graphql-depth-limit": "1.1.0", + "graphql-http": "1.22.4", + "graphql-request": "1.8.2", + "helmet": "3.21.0", + "hex-to-rgba": "2.0.1", + "history": "4.9.0", + "ical-generator": "1.7.2", + "just-kebab-case": "1.1.0", + "lodash": "4.17.21", + "markdown-to-jsx": "6.11.4", + "md5": "2.3.0", + "morgan": "1.10.0", + "polished": "3.4.1", + "query-string": "6.8.3", + "react": "16.9.0", + "react-copy-to-clipboard": "5.0.1", + "react-dom": "16.9.0", + "react-easy-emoji": "1.2.0", + "reflect-metadata": "0.1.13", + "request": "2.88.2", + "request-promise-native": "1.0.9", + "retina-dom-to-image": "2.5.6", + "rimraf": "3.0.0", + "smooth-scroll-into-view-if-needed": "1.1.23", + "to-title-case": "1.0.0", + "type-graphql": "0.17.6", + "typescript": "5.8.3", + "uglify-es": "3.3.9", + "window-or-global": "1.0.1", + "winston": "3.3.3", + "zerofill": "0.1.0" }, "lint-staged": { "*.--write": [ From 2ed3c818322d627ca3da39aba21703b293a01c0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 12:51:12 +0300 Subject: [PATCH 04/45] Remove redundant generate scripts --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index 42b55dd0..034da3e1 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,7 @@ "description": "React Finland GraphQL API", "main": "./build/server", "scripts": { - "generate:all": "npm run generate:indices", "generate:indices": "node utils/generate-indices.js content --verbose", - "generate:reason-conf": "node utils/generate-reason-conf.js", - "generate:typeof": "node utils/generate-typeof.js", "build": "rimraf build && tsc", "cf:deploy": "npx wrangler deploy", "cf:dev": "npx wrangler dev", From 8d8b89d57fdd08cb0847970ee43e1877e6b73c13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 12:54:56 +0300 Subject: [PATCH 05/45] Remove dead template and utility code --- package-lock.json | 2829 +---------------- package.json | 38 +- server/routes/components/Badge.tsx | 233 -- server/routes/components/Card.tsx | 55 - server/routes/components/Contacts.tsx | 21 - server/routes/components/GlobalStyles.tsx | 113 - server/routes/components/Presentation.tsx | 141 - server/routes/components/Schedule.tsx | 149 - server/routes/components/Select.tsx | 54 - server/routes/components/Slides.tsx | 105 - server/routes/components/Sponsor.tsx | 45 - server/routes/components/Sponsors.tsx | 67 - server/routes/components/connect.ts | 80 - server/routes/components/exclude-props.ts | 9 - server/routes/components/index.ts | 3 - .../components/slide-layouts/EmbedContent.tsx | 43 - .../components/slide-layouts/GridContent.tsx | 73 - .../components/slide-layouts/ImageContent.tsx | 34 - .../slide-layouts/MarkdownContent.tsx | 72 - .../components/slide-layouts/ReactContent.tsx | 24 - .../slide-layouts/SectionContent.tsx | 38 - .../components/slide-layouts/TitleContent.tsx | 45 - .../slide-layouts/get-background.ts | 12 - .../routes/components/slide-layouts/index.ts | 17 - server/routes/date-utils.ts | 8 - server/routes/queries/conferenceDayQuery.ts | 17 - server/routes/queries/conferenceDaysQuery.ts | 19 - .../routes/queries/fragments/themeFragment.ts | 51 - server/routes/queries/index.ts | 17 - server/routes/queries/scheduleQuery.ts | 25 - server/routes/queries/speakerTalkQuery.ts | 15 - server/routes/queries/sponsorQuery.ts | 34 - server/routes/queries/themeQuery.ts | 13 - server/routes/queries/themesQuery.ts | 13 - server/routes/templates/BadgeTemplate.tsx | 422 --- .../routes/templates/BusinessCardTemplate.tsx | 105 - server/routes/templates/HeaderTemplate.tsx | 305 -- server/routes/templates/IntroTemplate.tsx | 328 -- .../routes/templates/PresentationTemplate.tsx | 330 -- server/routes/templates/ScheduleTemplate.tsx | 235 -- .../routes/templates/SessionTweetTemplate.tsx | 341 -- server/routes/templates/ThemeTemplate.tsx | 162 - server/routes/templates/TweetTemplate.tsx | 466 --- .../templates/WorkshopTweetTemplate.tsx | 345 -- server/routes/templates/index.ts | 23 - shims/type-graphql.js | 66 - utils/generate-attendees-csv.js | 63 - utils/generate-diversity-coupons.js | 116 - utils/generate-emails.js | 18 - utils/generate-hotel-stays.js | 183 -- utils/generate-workshop-income.js | 42 - 51 files changed, 152 insertions(+), 7910 deletions(-) delete mode 100644 server/routes/components/Badge.tsx delete mode 100644 server/routes/components/Card.tsx delete mode 100644 server/routes/components/Contacts.tsx delete mode 100644 server/routes/components/GlobalStyles.tsx delete mode 100644 server/routes/components/Presentation.tsx delete mode 100644 server/routes/components/Schedule.tsx delete mode 100644 server/routes/components/Select.tsx delete mode 100644 server/routes/components/Slides.tsx delete mode 100644 server/routes/components/Sponsor.tsx delete mode 100644 server/routes/components/Sponsors.tsx delete mode 100644 server/routes/components/connect.ts delete mode 100644 server/routes/components/exclude-props.ts delete mode 100644 server/routes/components/index.ts delete mode 100644 server/routes/components/slide-layouts/EmbedContent.tsx delete mode 100644 server/routes/components/slide-layouts/GridContent.tsx delete mode 100644 server/routes/components/slide-layouts/ImageContent.tsx delete mode 100644 server/routes/components/slide-layouts/MarkdownContent.tsx delete mode 100644 server/routes/components/slide-layouts/ReactContent.tsx delete mode 100644 server/routes/components/slide-layouts/SectionContent.tsx delete mode 100644 server/routes/components/slide-layouts/TitleContent.tsx delete mode 100644 server/routes/components/slide-layouts/get-background.ts delete mode 100644 server/routes/components/slide-layouts/index.ts delete mode 100644 server/routes/date-utils.ts delete mode 100644 server/routes/queries/conferenceDayQuery.ts delete mode 100644 server/routes/queries/conferenceDaysQuery.ts delete mode 100644 server/routes/queries/fragments/themeFragment.ts delete mode 100644 server/routes/queries/index.ts delete mode 100644 server/routes/queries/scheduleQuery.ts delete mode 100644 server/routes/queries/speakerTalkQuery.ts delete mode 100644 server/routes/queries/sponsorQuery.ts delete mode 100644 server/routes/queries/themeQuery.ts delete mode 100644 server/routes/queries/themesQuery.ts delete mode 100644 server/routes/templates/BadgeTemplate.tsx delete mode 100644 server/routes/templates/BusinessCardTemplate.tsx delete mode 100644 server/routes/templates/HeaderTemplate.tsx delete mode 100644 server/routes/templates/IntroTemplate.tsx delete mode 100644 server/routes/templates/PresentationTemplate.tsx delete mode 100644 server/routes/templates/ScheduleTemplate.tsx delete mode 100644 server/routes/templates/SessionTweetTemplate.tsx delete mode 100644 server/routes/templates/ThemeTemplate.tsx delete mode 100644 server/routes/templates/TweetTemplate.tsx delete mode 100644 server/routes/templates/WorkshopTweetTemplate.tsx delete mode 100644 server/routes/templates/index.ts delete mode 100644 shims/type-graphql.js delete mode 100644 utils/generate-attendees-csv.js delete mode 100644 utils/generate-diversity-coupons.js delete mode 100644 utils/generate-emails.js delete mode 100644 utils/generate-hotel-stays.js delete mode 100644 utils/generate-workshop-income.js diff --git a/package-lock.json b/package-lock.json index 817120e9..e1e5684b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,77 +9,41 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "@emotion/core": "10.0.17", - "@emotion/styled": "10.0.17", - "bent": "6.1.0", "body-parser": "1.19.0", "compression": "1.7.4", "cors": "2.8.5", "csv-parse": "4.4.6", - "csv-stringify": "5.3.3", - "date-range-array": "2.1.0", "dotenv": "8.1.0", "express": "4.18.2", - "file-saver": "2.0.2", "fs-extra": "8.1.0", - "googleapis": "42.0.0", "graphql": "14.5.4", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", - "graphql-request": "1.8.2", "helmet": "3.21.0", - "hex-to-rgba": "2.0.1", - "history": "4.9.0", "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", "lodash": "4.17.21", - "markdown-to-jsx": "6.11.4", - "md5": "2.3.0", "morgan": "1.10.0", - "polished": "3.4.1", - "query-string": "6.8.3", - "react": "16.9.0", - "react-copy-to-clipboard": "5.0.1", - "react-dom": "16.9.0", - "react-easy-emoji": "1.2.0", "reflect-metadata": "0.1.13", - "request": "2.88.2", "request-promise-native": "1.0.9", - "retina-dom-to-image": "2.5.6", "rimraf": "3.0.0", - "smooth-scroll-into-view-if-needed": "1.1.23", - "to-title-case": "1.0.0", "type-graphql": "0.17.6", "typescript": "5.8.3", - "uglify-es": "3.3.9", - "window-or-global": "1.0.1", - "winston": "3.3.3", - "zerofill": "0.1.0" + "winston": "3.3.3" }, "devDependencies": { "@types/compression": "1.0.1", "@types/cors": "2.8.6", "@types/dotenv": "6.1.1", "@types/express": "4.17.9", - "@types/file-saver": "2.0.1", "@types/fs-extra": "8.0.0", "@types/graphql": "14.5.0", "@types/helmet": "0.0.44", - "@types/history": "4.7.3", "@types/lodash": "4.14.138", - "@types/md5": "2.1.33", "@types/morgan": "1.7.37", "@types/node": "24.0.3", - "@types/query-string": "6.3.0", - "@types/react": "16.9.2", - "@types/react-copy-to-clipboard": "4.2.6", - "@types/react-dom": "16.9.0", - "@types/request": "2.48.3", - "@types/request-promise-native": "1.0.16", - "@types/window-or-global": "1.0.0", "camelcase": "5.3.1", "cheerio": "1.0.0-rc.3", - "csstype": "2.6.6", "flatmap": "0.0.3", "glob": "7.1.7", "mri": "1.1.6", @@ -99,14 +63,6 @@ "@babel/highlight": "^7.0.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, "node_modules/@babel/highlight": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", @@ -124,29 +80,6 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "node_modules/@babel/runtime": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz", - "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==", - "dependencies": { - "regenerator-runtime": "^0.13.2" - } - }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" - }, - "node_modules/@babel/types": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz", - "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==", - "dependencies": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, "node_modules/@dabh/diagnostics": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", @@ -157,126 +90,6 @@ "kuler": "^2.0.0" } }, - "node_modules/@emotion/cache": { - "version": "10.0.17", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.17.tgz", - "integrity": "sha512-442/miwbuwIDfSzfMqZNxuzxSEbskcz/bZ86QBYzEjFrr/oq9w+y5kJY1BHbGhDtr91GO232PZ5NN9XYMwr/Qg==", - "dependencies": { - "@emotion/sheet": "0.9.3", - "@emotion/stylis": "0.8.4", - "@emotion/utils": "0.11.2", - "@emotion/weak-memoize": "0.2.3" - } - }, - "node_modules/@emotion/core": { - "version": "10.0.17", - "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.17.tgz", - "integrity": "sha512-gykyjjr0sxzVuZBVTVK4dUmYsorc2qLhdYgSiOVK+m7WXgcYTKZevGWZ7TLAgTZvMelCTvhNq8xnf8FR1IdTbg==", - "dependencies": { - "@babel/runtime": "^7.5.5", - "@emotion/cache": "^10.0.17", - "@emotion/css": "^10.0.14", - "@emotion/serialize": "^0.11.10", - "@emotion/sheet": "0.9.3", - "@emotion/utils": "0.11.2" - }, - "peerDependencies": { - "react": ">=16.3.0" - } - }, - "node_modules/@emotion/css": { - "version": "10.0.14", - "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.14.tgz", - "integrity": "sha512-MozgPkBEWvorcdpqHZE5x1D/PLEHUitALQCQYt2wayf4UNhpgQs2tN0UwHYS4FMy5ROBH+0ALyCFVYJ/ywmwlg==", - "dependencies": { - "@emotion/serialize": "^0.11.8", - "@emotion/utils": "0.11.2", - "babel-plugin-emotion": "^10.0.14" - } - }, - "node_modules/@emotion/hash": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.2.tgz", - "integrity": "sha512-RMtr1i6E8MXaBWwhXL3yeOU8JXRnz8GNxHvaUfVvwxokvayUY0zoBeWbKw1S9XkufmGEEdQd228pSZXFkAln8Q==" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.2.tgz", - "integrity": "sha512-ZQIMAA2kLUWiUeMZNJDTeCwYRx1l8SQL0kHktze4COT22occKpDML1GDUXP5/sxhOMrZO8vZw773ni4H5Snrsg==", - "dependencies": { - "@emotion/memoize": "0.7.2" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.2.tgz", - "integrity": "sha512-hnHhwQzvPCW1QjBWFyBtsETdllOM92BfrKWbUTmh9aeOlcVOiXvlPsK4104xH8NsaKfg86PTFsWkueQeUfMA/w==" - }, - "node_modules/@emotion/serialize": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.10.tgz", - "integrity": "sha512-04AB+wU00vv9jLgkWn13c/GJg2yXp3w7ZR3Q1O6mBSE6mbUmYeNX3OpBhfp//6r47lFyY0hBJJue+bA30iokHQ==", - "dependencies": { - "@emotion/hash": "0.7.2", - "@emotion/memoize": "0.7.2", - "@emotion/unitless": "0.7.4", - "@emotion/utils": "0.11.2", - "csstype": "^2.5.7" - } - }, - "node_modules/@emotion/sheet": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.3.tgz", - "integrity": "sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A==" - }, - "node_modules/@emotion/styled": { - "version": "10.0.17", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.17.tgz", - "integrity": "sha512-zHMgWjHDMNjD+ux64POtDnjLAObniu3znxFBLSdV/RiEhSLjHIowfvSbbd/C33/3uwtI6Uzs2KXnRZtka/PpAQ==", - "dependencies": { - "@emotion/styled-base": "^10.0.17", - "babel-plugin-emotion": "^10.0.17" - }, - "peerDependencies": { - "@emotion/core": "^10.0.17", - "react": ">=16.3.0" - } - }, - "node_modules/@emotion/styled-base": { - "version": "10.0.17", - "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.17.tgz", - "integrity": "sha512-vqQvxluZZKPByAB4zYZys0Qo/kVDP/03hAeg1K+TYpnZRwTi7WteOodc+/5669RPVNcfb93fphQpM5BYJnI1/g==", - "dependencies": { - "@babel/runtime": "^7.5.5", - "@emotion/is-prop-valid": "0.8.2", - "@emotion/serialize": "^0.11.10", - "@emotion/utils": "0.11.2" - }, - "peerDependencies": { - "@emotion/core": "^10.0.17", - "react": ">=16.3.0" - } - }, - "node_modules/@emotion/stylis": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.4.tgz", - "integrity": "sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ==" - }, - "node_modules/@emotion/unitless": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.4.tgz", - "integrity": "sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ==" - }, - "node_modules/@emotion/utils": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.2.tgz", - "integrity": "sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA==" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.3.tgz", - "integrity": "sha512-zVgvPwGK7c1aVdUVc9Qv7SqepOGRDrqCw7KZPSZziWGxSlbII3gmvGLPzLX4d0n0BMbamBacUrN22zOMyFFEkQ==" - }, "node_modules/@types/body-parser": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", @@ -287,12 +100,6 @@ "@types/node": "*" } }, - "node_modules/@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", - "dev": true - }, "node_modules/@types/compression": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.0.1.tgz", @@ -360,12 +167,6 @@ "@types/send": "*" } }, - "node_modules/@types/file-saver": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.1.tgz", - "integrity": "sha512-g1QUuhYVVAamfCifK7oB7G3aIl4BbOyzDOqVyUfEr4tfBKrXfeH+M+Tg7HKCXSrbzxYdhyCP7z9WbKo0R2hBCw==", - "dev": true - }, "node_modules/@types/fs-extra": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", @@ -403,27 +204,12 @@ "@types/express": "*" } }, - "node_modules/@types/history": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.3.tgz", - "integrity": "sha512-cS5owqtwzLN5kY+l+KgKdRJ/Cee8tlmQoGQuIE9tWnSmS3JMKzmxo2HIAk2wODMifGwO20d62xZQLYz+RLfXmw==", - "dev": true - }, "node_modules/@types/lodash": { "version": "4.14.138", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.138.tgz", "integrity": "sha512-A4uJgHz4hakwNBdHNPdxOTkYmXNgmUAKLbXZ7PKGslgeV0Mb8P3BlbYfPovExek1qnod4pDfRbxuzcVs3dlFLg==", "dev": true }, - "node_modules/@types/md5": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.1.33.tgz", - "integrity": "sha512-8+X960EtKLoSblhauxLKy3zzotagjoj3Jt1Tx9oaxUdZEPIBl+mkrUz6PNKpzJgkrKSN9YgkWTA29c0KnLshmA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/mime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", @@ -453,12 +239,6 @@ "undici-types": "~7.8.0" } }, - "node_modules/@types/prop-types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz", - "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==", - "dev": true - }, "node_modules/@types/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", @@ -466,85 +246,12 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/query-string": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@types/query-string/-/query-string-6.3.0.tgz", - "integrity": "sha512-yuIv/WRffRzL7cBW+sla4HwBZrEXRNf1MKQ5SklPEadth+BKbDxiVG8A3iISN5B3yC4EeSCzMZP8llHTcUhOzQ==", - "deprecated": "This is a stub types definition. query-string provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "query-string": "*" - } - }, "node_modules/@types/range-parser": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", "dev": true }, - "node_modules/@types/react": { - "version": "16.9.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.2.tgz", - "integrity": "sha512-jYP2LWwlh+FTqGd9v7ynUKZzjj98T8x7Yclz479QdRhHfuW9yQ+0jjnD31eXSXutmBpppj5PYNLYLRfnZJvcfg==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "node_modules/@types/react-copy-to-clipboard": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-4.2.6.tgz", - "integrity": "sha512-v4/yLsuPf8GSFuTy9fA1ABpL5uuy04vwW7qs+cfxSe1UU/M/KK95rF3N3GRseismoK9tA28SvpwVsAg/GWoF3A==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-dom": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.0.tgz", - "integrity": "sha512-OL2lk7LYGjxn4b0efW3Pvf2KBVP0y1v3wip1Bp7nA79NkOpElH98q3WdCEdDj93b2b0zaeBG9DvriuKjIK5xDA==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/request": { - "version": "2.48.3", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.3.tgz", - "integrity": "sha512-3Wo2jNYwqgXcIz/rrq18AdOZUQB8cQ34CXZo+LUwPJNpvRAL86+Kc2wwI8mqpz9Cr1V+enIox5v+WZhy/p3h8w==", - "dev": true, - "dependencies": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - } - }, - "node_modules/@types/request-promise-native": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/@types/request-promise-native/-/request-promise-native-1.0.16.tgz", - "integrity": "sha512-gbLf6cg1XGBU8BObOgs5VkCQo5JFz2GstgZjyE4FRbig/jiCEdiynu2fCzJlw3qYPuoj59spKnvuRLN4PsMvhA==", - "dev": true, - "dependencies": { - "@types/request": "*" - } - }, - "node_modules/@types/request/node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/@types/semver": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.2.1.tgz", @@ -578,34 +285,11 @@ "@types/mime": "*" } }, - "node_modules/@types/tough-cookie": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", - "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==", - "dev": true - }, "node_modules/@types/validator": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.0.0.tgz", "integrity": "sha512-WAy5txG7aFX8Vw3sloEKp5p/t/Xt8jD3GRD9DacnFv6Vo8ubudAsRTXgxpQwU0mpzY/H8U4db3roDuCMjShBmw==" }, - "node_modules/@types/window-or-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/window-or-global/-/window-or-global-1.0.0.tgz", - "integrity": "sha1-tLyEgMN/5LrCNV96ksn/zYSCLJQ=", - "dev": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -618,21 +302,11 @@ "node": ">= 0.6" } }, - "node_modules/agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dependencies": { - "es6-promisify": "^5.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -648,6 +322,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -671,6 +346,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "peer": true, "dependencies": { "safer-buffer": "~2.1.0" } @@ -679,6 +355,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "peer": true, "engines": { "node": ">=0.8" } @@ -691,12 +368,14 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "peer": true }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "peer": true, "engines": { "node": "*" } @@ -704,50 +383,14 @@ "node_modules/aws4": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "node_modules/babel-plugin-emotion": { - "version": "10.0.17", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.17.tgz", - "integrity": "sha512-KNuBadotqYWpQexHhHOu7M9EV1j2c+Oh/JJqBfEQDusD6mnORsCZKHkl+xYwK82CPQ/23wRrsBIEYnKjtbMQJw==", - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@emotion/hash": "0.7.2", - "@emotion/memoize": "0.7.2", - "@emotion/serialize": "^0.11.10", - "babel-plugin-macros": "^2.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^1.0.5", - "find-root": "^1.1.0", - "source-map": "^0.5.7" - } - }, - "node_modules/babel-plugin-macros": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz", - "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==", - "dependencies": { - "@babel/runtime": "^7.4.2", - "cosmiconfig": "^5.2.0", - "resolve": "^1.10.0" - } - }, - "node_modules/babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "peer": true }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -763,36 +406,11 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "peer": true, "dependencies": { "tweetnacl": "^0.14.3" } }, - "node_modules/bent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/bent/-/bent-6.1.0.tgz", - "integrity": "sha512-D6NaNcLrcIovZOzwm9LoV5nf0yKeqWVad2ec74T3esh8CXHzRtZM70z5prUtXM+H9kA6+0RRDfBDaxy9iScKig==", - "dependencies": { - "bytesish": "^0.3.1", - "caseless": "~0.12.0", - "is-stream": "^2.0.0" - } - }, - "node_modules/bent/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bignumber.js": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", - "engines": { - "node": "*" - } - }, "node_modules/body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -862,11 +480,6 @@ "concat-map": "0.0.1" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, "node_modules/builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -884,11 +497,6 @@ "node": ">= 0.8" } }, - "node_modules/bytesish": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/bytesish/-/bytesish-0.3.3.tgz", - "integrity": "sha512-Q5eMmjkF3PnHDA0k/34/aGodPWxYL/2bAB1j17JQXeejbGsWaJLpKJqLCcpe+e37Oqg+UZig0kF5vgslOOyUJQ==" - }, "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", @@ -918,36 +526,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "engines": { - "node": ">=4" - } - }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -966,7 +544,8 @@ "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "peer": true }, "node_modules/chalk": { "version": "2.4.2", @@ -1006,14 +585,6 @@ "node": ">=4" } }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "engines": { - "node": "*" - } - }, "node_modules/cheerio": { "version": "1.0.0-rc.3", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", @@ -1094,6 +665,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "peer": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -1143,11 +715,6 @@ "node": ">= 0.8" } }, - "node_modules/compute-scroll-into-view": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.11.tgz", - "integrity": "sha512-uUnglJowSe0IPmWOdDtrlHXof5CTIJitfJEyITHBW6zDVOGu9Pjk5puaLM73SLcwak0L4hEjO7Td88/a6P5i7A==" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1203,14 +770,6 @@ "node": ">= 0.6" } }, - "node_modules/convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", @@ -1226,14 +785,6 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, - "node_modules/copy-to-clipboard": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.0.8.tgz", - "integrity": "sha512-c3GdeY8qxCHGezVb1EFQfHYK/8NZRemgcTIzPq7PuxjHAf/raKibn2QdhHPb/y6q74PMgH6yizaDZlRmw6QyKw==", - "dependencies": { - "toggle-selection": "^1.0.3" - } - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1251,29 +802,6 @@ "node": ">= 0.10" } }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cross-fetch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz", - "integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=", - "dependencies": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -1289,14 +817,6 @@ "node": ">= 8" } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "engines": { - "node": "*" - } - }, "node_modules/css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", @@ -1318,25 +838,16 @@ "node": "*" } }, - "node_modules/csstype": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.6.tgz", - "integrity": "sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==" - }, "node_modules/csv-parse": { "version": "4.4.6", "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.4.6.tgz", "integrity": "sha512-VisC5TBBhOF+70zjrF9FOiqI2LZOhXK/vAWlOrqyqz3lLa+P8jzJ7L/sg90MHmkSY/brAXWwrmGSZR0tM5yi4g==" }, - "node_modules/csv-stringify": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.3.3.tgz", - "integrity": "sha512-q8Qj+/lN74LRmG7Mg0LauE5WcnJOD5MEGe1gI57IYJCB61KWuEbAFHm1uIPDkI26aqElyBB57SlE2GGwq2EY5A==" - }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "peer": true, "dependencies": { "assert-plus": "^1.0.0" }, @@ -1350,14 +861,6 @@ "integrity": "sha512-APql/TZ6FdLEpf2z7/X2a2zyqK8juYtqaSVqxw9mYoQ64CXkfU15AeLh8pUszT8+fnYjgm6t0aIYpWKJbnLkuA==", "license": "MIT" }, - "node_modules/date-range-array": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-range-array/-/date-range-array-2.1.0.tgz", - "integrity": "sha512-RG4dkqd+ASDHyNTLz9kcSxgqe9xgoxd9hSOS0vIKTjUDefYVYCaY945c5Y8sirW0t+72fREuxDifdeC7FHPSlQ==", - "dependencies": { - "tape": "^4.0.0" - } - }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1366,39 +869,11 @@ "ms": "2.0.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "peer": true, "engines": { "node": ">=0.4.0" } @@ -1516,19 +991,12 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "peer": true, "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1554,35 +1022,6 @@ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-ex/node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "node_modules/es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dependencies": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -1613,47 +1052,17 @@ "node": ">= 0.4" } }, - "node_modules/es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "node_modules/es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dependencies": { - "es6-promise": "^4.0.3" - } - }, "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/escape-regexp-component": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-regexp-component/-/escape-regexp-component-1.0.2.tgz", - "integrity": "sha1-nGO20LJf8qiMOtvRjFthrMO5+qI=" - }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -1678,6 +1087,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1690,6 +1100,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -1718,14 +1129,6 @@ "through": "~2.3.1" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/expect-ct": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.2.0.tgz", @@ -1900,7 +1303,8 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "peer": true }, "node_modules/extsprintf": { "version": "1.3.0", @@ -1908,12 +1312,14 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "engines": [ "node >=0.6.0" - ] + ], + "peer": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "peer": true }, "node_modules/fast-diff": { "version": "1.2.0", @@ -1924,18 +1330,14 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "peer": true }, "node_modules/fast-safe-stringify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, - "node_modules/fast-text-encoding": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz", - "integrity": "sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ==" - }, "node_modules/feature-policy": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", @@ -1950,11 +1352,6 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, - "node_modules/file-saver": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz", - "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==" - }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -1985,11 +1382,6 @@ "node": ">= 0.8" } }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, "node_modules/flatmap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/flatmap/-/flatmap-0.0.3.tgz", @@ -2001,18 +1393,11 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "peer": true, "engines": { "node": "*" } @@ -2021,6 +1406,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -2094,40 +1480,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gaxios": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.0.1.tgz", - "integrity": "sha512-c1NXovTxkgRJTIgB2FrFmOFg4YIV6N/bAa4f/FZ4jIw13Ql9ya/82x69CswvotJhbV3DiGnlTZwoq2NVXk2Irg==", - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^2.2.1", - "node-fetch": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gaxios/node_modules/node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/gcp-metadata": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-2.0.2.tgz", - "integrity": "sha512-dxPXBvjyfz5qFEBXzEwNmuZXwsGYfuASGYeg3CKZDaQRXdiWti9J3/Ezmtyon1OrCNpDO2YekyoSjEqMtsrcXw==", - "dependencies": { - "gaxios": "^2.0.1", - "json-bigint": "^0.3.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -2169,6 +1521,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "peer": true, "dependencies": { "assert-plus": "^1.0.0" } @@ -2192,45 +1545,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/google-auth-library": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.2.0.tgz", - "integrity": "sha512-I2726rgOedQ06HgTvoNvBeRCzy5iFe6z3khwj6ugfRd1b0VHwnTYKl/3t2ytOTo7kKc6KivYIBsCIdZf2ep67g==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "fast-text-encoding": "^1.0.0", - "gaxios": "^2.0.0", - "gcp-metadata": "^2.0.0", - "gtoken": "^4.0.0", - "jws": "^3.1.5", - "lru-cache": "^5.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/google-auth-library/node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "engines": { - "node": ">=8" - } - }, - "node_modules/google-auth-library/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/google-auth-library/node_modules/yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - }, "node_modules/google-libphonenumber": { "version": "3.2.13", "resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.13.tgz", @@ -2239,56 +1553,6 @@ "node": ">=0.10" } }, - "node_modules/google-p12-pem": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.1.tgz", - "integrity": "sha512-6h6x+eBX3k+IDSe/c8dVYmn8Mzr1mUcmKC9MdUSwaBkFAXlqBEnwFWmSFgGC+tcqtsLn73BDP/vUNWEehf1Rww==", - "dependencies": { - "node-forge": "^0.8.0" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/googleapis": { - "version": "42.0.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-42.0.0.tgz", - "integrity": "sha512-nQiKPDmzmMusnU8UOibmlC6hsgkm70SjqmLxSlBBb7i0z7/J6UPilSzo9tAMoHA8u3BUw3OXn13+p9YLmBH6Gg==", - "dependencies": { - "google-auth-library": "^5.1.0", - "googleapis-common": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/googleapis-common": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-3.1.0.tgz", - "integrity": "sha512-abnogPoWqv0cU6O/EFpkerCVsaUsKEG6XpCm4P1YgK44PxIRcGtalDwijqUErkcivM1Xy5MNyf1PDkKTLEjOZA==", - "dependencies": { - "extend": "^3.0.2", - "gaxios": "^2.0.1", - "google-auth-library": "^5.2.0", - "qs": "^6.7.0", - "url-template": "^2.0.8", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/googleapis-common/node_modules/qs": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.8.0.tgz", - "integrity": "sha512-tPSkj8y92PfZVbinY1n84i1Qdx75lZjMQYx9WZhnkofyxzw2r7Ho39G3/aEvSUdebxpnnM4LZJCtvE/Aq3+s9w==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -2359,14 +1623,6 @@ "graphql": "^0.13.0 || ^14.0.0" } }, - "node_modules/graphql-request": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz", - "integrity": "sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==", - "dependencies": { - "cross-fetch": "2.2.2" - } - }, "node_modules/graphql-subscriptions": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz", @@ -2378,35 +1634,11 @@ "graphql": "^0.10.5 || ^0.11.3 || ^0.12.0 || ^0.13.0 || ^14.0.0" } }, - "node_modules/gtoken": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.0.0.tgz", - "integrity": "sha512-XaRCfHJxhj06LmnWNBzVTAr85NfAErq0W1oabkdqwbq3uL/QTB1kyvGog361Uu2FMG/8e3115sIy/97Rnd4GjQ==", - "dependencies": { - "gaxios": "^2.0.0", - "google-p12-pem": "^2.0.0", - "jws": "^3.1.5", - "mime": "^2.2.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/gtoken/node_modules/mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "peer": true, "engines": { "node": ">=4" } @@ -2416,6 +1648,7 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "deprecated": "this library is no longer supported", + "peer": true, "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -2424,17 +1657,6 @@ "node": ">=6" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -2518,11 +1740,6 @@ "node": ">=4.0.0" } }, - "node_modules/hex-to-rgba": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hex-to-rgba/-/hex-to-rgba-2.0.1.tgz", - "integrity": "sha512-5XqPJBpsEUMsseJUi2w2Hl7cHFFi3+OO10M2pzAvKB1zL6fc+koGMhmBqoDOCB4GemiRM/zvDMRIhVw6EkB8dQ==" - }, "node_modules/hide-powered-by": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz", @@ -2532,27 +1749,6 @@ "node": ">=4.0.0" } }, - "node_modules/history": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/history/-/history-4.9.0.tgz", - "integrity": "sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^0.4.0" - } - }, - "node_modules/history/node_modules/@babel/runtime": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz", - "integrity": "sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==", - "dependencies": { - "regenerator-runtime": "^0.12.0" - } - }, "node_modules/hpkp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", @@ -2635,6 +1831,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "peer": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -2645,32 +1842,6 @@ "npm": ">=1.3.7" } }, - "node_modules/https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dependencies": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/ical-generator": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-1.7.2.tgz", @@ -2706,18 +1877,6 @@ "node": ">=4.0.0" } }, - "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2732,14 +1891,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -2753,61 +1904,11 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dependencies": { - "has": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dependencies": { - "has-symbols": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "peer": true }, "node_modules/isarray": { "version": "1.0.0", @@ -2824,7 +1925,8 @@ "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "peer": true }, "node_modules/iterall": { "version": "1.2.2", @@ -2837,15 +1939,11 @@ "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", "dev": true }, - "node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, "node_modules/js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -2857,35 +1955,26 @@ "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "node_modules/json-bigint": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.0.tgz", - "integrity": "sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4=", - "dependencies": { - "bignumber.js": "^7.0.0" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "peer": true }, "node_modules/json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "peer": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "peer": true }, "node_modules/jsonfile": { "version": "4.0.0", @@ -2902,6 +1991,7 @@ "engines": [ "node >=0.6.0" ], + "peer": true, "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -2914,25 +2004,6 @@ "resolved": "https://registry.npmjs.org/just-kebab-case/-/just-kebab-case-1.1.0.tgz", "integrity": "sha512-QkuwuBMQ9BQHMUEkAtIA4INLrkmnnveqlFB1oFi09gbU0wBdZo6tTnyxNWMR84zHxBuwK7GLAwqN8nrvVxOLTA==" }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", @@ -2949,26 +2020,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, "node_modules/logform": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", @@ -2986,38 +2042,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true }, - "node_modules/markdown-to-jsx": { - "version": "6.11.4", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz", - "integrity": "sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==", - "dependencies": { - "prop-types": "^15.6.2", - "unquote": "^1.1.0" - }, - "engines": { - "node": ">= 4" - }, - "peerDependencies": { - "react": ">= 0.14.0" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -3027,16 +2057,6 @@ "node": ">= 0.4" } }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -3173,22 +2193,6 @@ "integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=", "dev": true }, - "node_modules/node-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-forge": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.5.tgz", - "integrity": "sha512-vFMQIWt+J/7FLNyKouZ9TazT74PRV3wgv9UT4cRjC8BffxFbKXkgIWR42URCPSnHm/QDz6BOlb2Q0U4+VQT67Q==", - "engines": { - "node": ">= 4.5.0" - } - }, "node_modules/nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -3202,6 +2206,7 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "peer": true, "engines": { "node": "*" } @@ -3214,19 +2219,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" - }, - "node_modules/object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -3262,18 +2254,6 @@ "fn.name": "1.x.x" } }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/parse5": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", @@ -3313,7 +2293,8 @@ "node_modules/path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -3333,28 +2314,8 @@ "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "node_modules/polished": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/polished/-/polished-3.4.1.tgz", - "integrity": "sha512-GflTnlP5rrpDoigjczEkS6Ye7NDA4sFvAnlr5hSDrEvjiVj97Xzev3hZlLi3UB27fpxyTS9rWU64VzVLWkG+mg==", - "dependencies": { - "@babel/runtime": "^7.4.5" - } - }, - "node_modules/polished/node_modules/@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "dependencies": { - "regenerator-runtime": "^0.13.2" - } - }, - "node_modules/polished/node_modules/regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "peer": true }, "node_modules/prettier": { "version": "2.3.1", @@ -3373,15 +2334,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, - "node_modules/prop-types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.1.tgz", - "integrity": "sha512-f8Lku2z9kERjOCcnDOPm68EBJAO2K00Q5mSgPAUE/gJuBgsYLbVy6owSrtcHj90zt8PvW+z0qaIIgsIhHOa1Qw==", - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -3426,23 +2378,11 @@ "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "peer": true, "engines": { "node": ">=0.6" } }, - "node_modules/query-string": { - "version": "6.8.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.8.3.tgz", - "integrity": "sha512-llcxWccnyaWlODe7A9hRjkvdCKamEKTh+wH8ITdTc3OhchaqUZteiSCX/2ablWHVrkVIe04dntnaZJ7BdyW0lQ==", - "dependencies": { - "decode-uri-component": "^0.2.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -3476,62 +2416,6 @@ "node": ">= 0.8" } }, - "node_modules/react": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", - "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-copy-to-clipboard": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.1.tgz", - "integrity": "sha512-ELKq31/E3zjFs5rDWNCfFL4NvNFQvGRoJdAKReD/rUPA+xxiLPQmZBZBvy2vgH7V0GE9isIQpT9WXbwIVErYdA==", - "dependencies": { - "copy-to-clipboard": "^3", - "prop-types": "^15.5.8" - }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0" - } - }, - "node_modules/react-dom": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz", - "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.15.0" - }, - "peerDependencies": { - "react": "^16.0.0" - } - }, - "node_modules/react-easy-emoji": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/react-easy-emoji/-/react-easy-emoji-1.2.0.tgz", - "integrity": "sha1-YRRQLHnyL5wFNGn6cnrhKSh3oAA=", - "dependencies": { - "lodash.assign": "^4.0.8", - "string-replace-to-array": "^1.0.1" - }, - "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/react-is": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.1.tgz", - "integrity": "sha512-ioMCzVDWvCvKD8eeT+iukyWrBGrA3DiFYkXfBsVYIRdaREZuBjENG+KjrikavCLasozqRWTwFUagU/O4vPpRMA==" - }, "node_modules/readable-stream": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", @@ -3560,16 +2444,12 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, - "node_modules/regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "peer": true, "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -3631,36 +2511,11 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, "dependencies": { "path-parse": "^1.0.6" } }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", - "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" - }, - "node_modules/resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "dependencies": { - "through": "~2.3.4" - } - }, - "node_modules/retina-dom-to-image": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/retina-dom-to-image/-/retina-dom-to-image-2.5.6.tgz", - "integrity": "sha1-YN4Ij0v/W5FRG5rW6EzmE5Ht69M=" - }, "node_modules/rimraf": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", @@ -3682,23 +2537,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/scheduler": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", - "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/scroll-into-view-if-needed": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.20.tgz", - "integrity": "sha512-P9kYMrhi9f6dvWwTGpO5I3HgjSU/8Mts7xL3lkoH5xlewK7O9Obdc5WmMCzppln7bCVGNmf3qfoZXrpCeyNJXw==", - "dependencies": { - "compute-scroll-into-view": "1.0.11" - } - }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -3946,22 +2784,6 @@ "is-arrayish": "^0.3.1" } }, - "node_modules/smooth-scroll-into-view-if-needed": { - "version": "1.1.23", - "resolved": "https://registry.npmjs.org/smooth-scroll-into-view-if-needed/-/smooth-scroll-into-view-if-needed-1.1.23.tgz", - "integrity": "sha512-52177sj5yR2novVCB+vJRCYEUkHFz2mq5UKmm5wwIWs0ZtC1sotVaTjKBsuNzBPF4nOV1NxMctyD4V/VMmivCQ==", - "dependencies": { - "scroll-into-view-if-needed": "2.2.20" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -3974,23 +2796,17 @@ "node": "*" } }, - "node_modules/split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "engines": { - "node": ">=6" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "node_modules/sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "peer": true, "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -4045,14 +2861,6 @@ "duplexer": "~0.1.1" } }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", - "engines": { - "node": ">=4" - } - }, "node_modules/string_decoder": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", @@ -4071,57 +2879,6 @@ "node": ">=0.6.19" } }, - "node_modules/string-replace-to-array": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string-replace-to-array/-/string-replace-to-array-1.0.3.tgz", - "integrity": "sha1-yT66mZpe4k1zGuu69auja18Y978=", - "dependencies": { - "invariant": "^2.2.1", - "lodash.flatten": "^4.2.0", - "lodash.isstring": "^4.0.1" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", - "dependencies": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.0", - "function-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/tape": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.10.1.tgz", - "integrity": "sha512-G0DywYV1jQeY3axeYnXUOt6ktnxS9OPJh97FGR3nrua8lhWi1zPflLxcAHavZ7Jf3qUfY7cxcVIVFa4mY2IY1w==", - "dependencies": { - "deep-equal": "~1.0.1", - "defined": "~1.0.0", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.3", - "has": "~1.0.3", - "inherits": "~2.0.3", - "minimist": "~1.2.0", - "object-inspect": "~1.6.0", - "resolve": "~1.10.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.1.2", - "through": "~2.3.8" - }, - "bin": { - "tape": "bin/tape" - } - }, - "node_modules/tape/node_modules/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", @@ -4129,76 +2886,9 @@ }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "node_modules/tiny-invariant": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.3.tgz", - "integrity": "sha512-ytQx8T4DL8PjlX53yYzcIC0WhIZbpR0p1qcYjw2pHu3w6UtgWwFJQ/02cnhOnBBhlFx/edUIfcagCaQSe3KMWg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.2.tgz", - "integrity": "sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q==" - }, - "node_modules/title-case-minors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/title-case-minors/-/title-case-minors-1.0.0.tgz", - "integrity": "sha1-UfFwN8KUdHodHNpCS1AEyG2OsRU=" - }, - "node_modules/to-capital-case": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-capital-case/-/to-capital-case-1.0.0.tgz", - "integrity": "sha1-pXxQFP1aNyF88FCZ/4pCG7+cm38=", - "dependencies": { - "to-space-case": "^1.0.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-no-case": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", - "integrity": "sha1-xyKQcWTvaxeBMsjmmTAhLRtKoWo=" - }, - "node_modules/to-sentence-case": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-sentence-case/-/to-sentence-case-1.0.0.tgz", - "integrity": "sha1-xIO/NkdzflxzjvcAb+Ng1fmcVy4=", - "dependencies": { - "to-no-case": "^1.0.0" - } - }, - "node_modules/to-space-case": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz", - "integrity": "sha1-sFLar7Gysp3HcM6gFj5ewOvJ/Bc=", - "dependencies": { - "to-no-case": "^1.0.0" - } - }, - "node_modules/to-title-case": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-title-case/-/to-title-case-1.0.0.tgz", - "integrity": "sha1-rKiPidYGTeUBCKl86g20SCfoAGE=", - "dependencies": { - "escape-regexp-component": "^1.0.2", - "title-case-minors": "^1.0.0", - "to-capital-case": "^1.0.0", - "to-sentence-case": "^1.0.0" - } - }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "node_modules/toidentifier": { "version": "1.0.0", @@ -4363,6 +3053,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "peer": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -4373,7 +3064,8 @@ "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "peer": true }, "node_modules/type-graphql": { "version": "0.17.6", @@ -4429,35 +3121,6 @@ "node": ">=14.17" } }, - "node_modules/uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "deprecated": "support for ECMAScript is superseded by `uglify-js` as of v3.13.0", - "dependencies": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-es/node_modules/commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" - }, - "node_modules/uglify-es/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/undici-types": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", @@ -4481,24 +3144,15 @@ "node": ">= 0.8" } }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "peer": true, "dependencies": { "punycode": "^2.1.0" } }, - "node_modules/url-template": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4518,6 +3172,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "peer": true, "bin": { "uuid": "bin/uuid" } @@ -4530,11 +3185,6 @@ "node": ">= 0.10" } }, - "node_modules/value-equal": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", - "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -4550,17 +3200,13 @@ "engines": [ "node >=0.6.0" ], + "peer": true, "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, - "node_modules/whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4577,11 +3223,6 @@ "node": ">= 8" } }, - "node_modules/window-or-global": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/window-or-global/-/window-or-global-1.0.1.tgz", - "integrity": "sha1-2+RboqKRqrxW1iz2bEW3+jIpRt4=" - }, "node_modules/winston": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", @@ -4669,11 +3310,6 @@ "engines": { "node": ">=4.0.0" } - }, - "node_modules/zerofill": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/zerofill/-/zerofill-0.1.0.tgz", - "integrity": "sha1-s0nnVMYnwRNAxK84mk+e+wBjQs0=" } }, "dependencies": { @@ -4686,14 +3322,6 @@ "@babel/highlight": "^7.0.0" } }, - "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "requires": { - "@babel/types": "^7.0.0" - } - }, "@babel/highlight": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", @@ -4713,31 +3341,6 @@ } } }, - "@babel/runtime": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz", - "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==", - "requires": { - "regenerator-runtime": "^0.13.2" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" - } - } - }, - "@babel/types": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz", - "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, "@dabh/diagnostics": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", @@ -4748,115 +3351,6 @@ "kuler": "^2.0.0" } }, - "@emotion/cache": { - "version": "10.0.17", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.17.tgz", - "integrity": "sha512-442/miwbuwIDfSzfMqZNxuzxSEbskcz/bZ86QBYzEjFrr/oq9w+y5kJY1BHbGhDtr91GO232PZ5NN9XYMwr/Qg==", - "requires": { - "@emotion/sheet": "0.9.3", - "@emotion/stylis": "0.8.4", - "@emotion/utils": "0.11.2", - "@emotion/weak-memoize": "0.2.3" - } - }, - "@emotion/core": { - "version": "10.0.17", - "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.17.tgz", - "integrity": "sha512-gykyjjr0sxzVuZBVTVK4dUmYsorc2qLhdYgSiOVK+m7WXgcYTKZevGWZ7TLAgTZvMelCTvhNq8xnf8FR1IdTbg==", - "requires": { - "@babel/runtime": "^7.5.5", - "@emotion/cache": "^10.0.17", - "@emotion/css": "^10.0.14", - "@emotion/serialize": "^0.11.10", - "@emotion/sheet": "0.9.3", - "@emotion/utils": "0.11.2" - } - }, - "@emotion/css": { - "version": "10.0.14", - "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.14.tgz", - "integrity": "sha512-MozgPkBEWvorcdpqHZE5x1D/PLEHUitALQCQYt2wayf4UNhpgQs2tN0UwHYS4FMy5ROBH+0ALyCFVYJ/ywmwlg==", - "requires": { - "@emotion/serialize": "^0.11.8", - "@emotion/utils": "0.11.2", - "babel-plugin-emotion": "^10.0.14" - } - }, - "@emotion/hash": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.2.tgz", - "integrity": "sha512-RMtr1i6E8MXaBWwhXL3yeOU8JXRnz8GNxHvaUfVvwxokvayUY0zoBeWbKw1S9XkufmGEEdQd228pSZXFkAln8Q==" - }, - "@emotion/is-prop-valid": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.2.tgz", - "integrity": "sha512-ZQIMAA2kLUWiUeMZNJDTeCwYRx1l8SQL0kHktze4COT22occKpDML1GDUXP5/sxhOMrZO8vZw773ni4H5Snrsg==", - "requires": { - "@emotion/memoize": "0.7.2" - } - }, - "@emotion/memoize": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.2.tgz", - "integrity": "sha512-hnHhwQzvPCW1QjBWFyBtsETdllOM92BfrKWbUTmh9aeOlcVOiXvlPsK4104xH8NsaKfg86PTFsWkueQeUfMA/w==" - }, - "@emotion/serialize": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.10.tgz", - "integrity": "sha512-04AB+wU00vv9jLgkWn13c/GJg2yXp3w7ZR3Q1O6mBSE6mbUmYeNX3OpBhfp//6r47lFyY0hBJJue+bA30iokHQ==", - "requires": { - "@emotion/hash": "0.7.2", - "@emotion/memoize": "0.7.2", - "@emotion/unitless": "0.7.4", - "@emotion/utils": "0.11.2", - "csstype": "^2.5.7" - } - }, - "@emotion/sheet": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.3.tgz", - "integrity": "sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A==" - }, - "@emotion/styled": { - "version": "10.0.17", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.17.tgz", - "integrity": "sha512-zHMgWjHDMNjD+ux64POtDnjLAObniu3znxFBLSdV/RiEhSLjHIowfvSbbd/C33/3uwtI6Uzs2KXnRZtka/PpAQ==", - "requires": { - "@emotion/styled-base": "^10.0.17", - "babel-plugin-emotion": "^10.0.17" - } - }, - "@emotion/styled-base": { - "version": "10.0.17", - "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.17.tgz", - "integrity": "sha512-vqQvxluZZKPByAB4zYZys0Qo/kVDP/03hAeg1K+TYpnZRwTi7WteOodc+/5669RPVNcfb93fphQpM5BYJnI1/g==", - "requires": { - "@babel/runtime": "^7.5.5", - "@emotion/is-prop-valid": "0.8.2", - "@emotion/serialize": "^0.11.10", - "@emotion/utils": "0.11.2" - } - }, - "@emotion/stylis": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.4.tgz", - "integrity": "sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ==" - }, - "@emotion/unitless": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.4.tgz", - "integrity": "sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ==" - }, - "@emotion/utils": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.2.tgz", - "integrity": "sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA==" - }, - "@emotion/weak-memoize": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.3.tgz", - "integrity": "sha512-zVgvPwGK7c1aVdUVc9Qv7SqepOGRDrqCw7KZPSZziWGxSlbII3gmvGLPzLX4d0n0BMbamBacUrN22zOMyFFEkQ==" - }, "@types/body-parser": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", @@ -4867,12 +3361,6 @@ "@types/node": "*" } }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", - "dev": true - }, "@types/compression": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.0.1.tgz", @@ -4938,12 +3426,6 @@ "@types/send": "*" } }, - "@types/file-saver": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.1.tgz", - "integrity": "sha512-g1QUuhYVVAamfCifK7oB7G3aIl4BbOyzDOqVyUfEr4tfBKrXfeH+M+Tg7HKCXSrbzxYdhyCP7z9WbKo0R2hBCw==", - "dev": true - }, "@types/fs-extra": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", @@ -4980,27 +3462,12 @@ "@types/express": "*" } }, - "@types/history": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.3.tgz", - "integrity": "sha512-cS5owqtwzLN5kY+l+KgKdRJ/Cee8tlmQoGQuIE9tWnSmS3JMKzmxo2HIAk2wODMifGwO20d62xZQLYz+RLfXmw==", - "dev": true - }, "@types/lodash": { "version": "4.14.138", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.138.tgz", "integrity": "sha512-A4uJgHz4hakwNBdHNPdxOTkYmXNgmUAKLbXZ7PKGslgeV0Mb8P3BlbYfPovExek1qnod4pDfRbxuzcVs3dlFLg==", "dev": true }, - "@types/md5": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.1.33.tgz", - "integrity": "sha512-8+X960EtKLoSblhauxLKy3zzotagjoj3Jt1Tx9oaxUdZEPIBl+mkrUz6PNKpzJgkrKSN9YgkWTA29c0KnLshmA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/mime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", @@ -5029,95 +3496,18 @@ "undici-types": "~7.8.0" } }, - "@types/prop-types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz", - "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==", - "dev": true - }, "@types/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", "dev": true }, - "@types/query-string": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@types/query-string/-/query-string-6.3.0.tgz", - "integrity": "sha512-yuIv/WRffRzL7cBW+sla4HwBZrEXRNf1MKQ5SklPEadth+BKbDxiVG8A3iISN5B3yC4EeSCzMZP8llHTcUhOzQ==", - "dev": true, - "requires": { - "query-string": "*" - } - }, "@types/range-parser": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", "dev": true }, - "@types/react": { - "version": "16.9.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.2.tgz", - "integrity": "sha512-jYP2LWwlh+FTqGd9v7ynUKZzjj98T8x7Yclz479QdRhHfuW9yQ+0jjnD31eXSXutmBpppj5PYNLYLRfnZJvcfg==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "@types/react-copy-to-clipboard": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-4.2.6.tgz", - "integrity": "sha512-v4/yLsuPf8GSFuTy9fA1ABpL5uuy04vwW7qs+cfxSe1UU/M/KK95rF3N3GRseismoK9tA28SvpwVsAg/GWoF3A==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/react-dom": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.0.tgz", - "integrity": "sha512-OL2lk7LYGjxn4b0efW3Pvf2KBVP0y1v3wip1Bp7nA79NkOpElH98q3WdCEdDj93b2b0zaeBG9DvriuKjIK5xDA==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/request": { - "version": "2.48.3", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.3.tgz", - "integrity": "sha512-3Wo2jNYwqgXcIz/rrq18AdOZUQB8cQ34CXZo+LUwPJNpvRAL86+Kc2wwI8mqpz9Cr1V+enIox5v+WZhy/p3h8w==", - "dev": true, - "requires": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - }, - "dependencies": { - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - } - } - }, - "@types/request-promise-native": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/@types/request-promise-native/-/request-promise-native-1.0.16.tgz", - "integrity": "sha512-gbLf6cg1XGBU8BObOgs5VkCQo5JFz2GstgZjyE4FRbig/jiCEdiynu2fCzJlw3qYPuoj59spKnvuRLN4PsMvhA==", - "dev": true, - "requires": { - "@types/request": "*" - } - }, "@types/semver": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.2.1.tgz", @@ -5151,31 +3541,11 @@ "@types/mime": "*" } }, - "@types/tough-cookie": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", - "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==", - "dev": true - }, "@types/validator": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.0.0.tgz", "integrity": "sha512-WAy5txG7aFX8Vw3sloEKp5p/t/Xt8jD3GRD9DacnFv6Vo8ubudAsRTXgxpQwU0mpzY/H8U4db3roDuCMjShBmw==" }, - "@types/window-or-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/window-or-global/-/window-or-global-1.0.0.tgz", - "integrity": "sha1-tLyEgMN/5LrCNV96ksn/zYSCLJQ=", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -5185,18 +3555,11 @@ "negotiator": "0.6.3" } }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5208,6 +3571,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -5226,6 +3590,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "peer": true, "requires": { "safer-buffer": "~2.1.0" } @@ -5233,7 +3598,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "peer": true }, "async": { "version": "3.2.0", @@ -5243,60 +3609,26 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "peer": true }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "peer": true }, "aws4": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "babel-plugin-emotion": { - "version": "10.0.17", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.17.tgz", - "integrity": "sha512-KNuBadotqYWpQexHhHOu7M9EV1j2c+Oh/JJqBfEQDusD6mnORsCZKHkl+xYwK82CPQ/23wRrsBIEYnKjtbMQJw==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@emotion/hash": "0.7.2", - "@emotion/memoize": "0.7.2", - "@emotion/serialize": "^0.11.10", - "babel-plugin-macros": "^2.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^1.0.5", - "find-root": "^1.1.0", - "source-map": "^0.5.7" - } - }, - "babel-plugin-macros": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz", - "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==", - "requires": { - "@babel/runtime": "^7.4.2", - "cosmiconfig": "^5.2.0", - "resolve": "^1.10.0" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "peer": true }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -5309,32 +3641,11 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "peer": true, "requires": { "tweetnacl": "^0.14.3" } }, - "bent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/bent/-/bent-6.1.0.tgz", - "integrity": "sha512-D6NaNcLrcIovZOzwm9LoV5nf0yKeqWVad2ec74T3esh8CXHzRtZM70z5prUtXM+H9kA6+0RRDfBDaxy9iScKig==", - "requires": { - "bytesish": "^0.3.1", - "caseless": "~0.12.0", - "is-stream": "^2.0.0" - }, - "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - } - } - }, - "bignumber.js": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" - }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -5389,11 +3700,6 @@ "concat-map": "0.0.1" } }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -5405,11 +3711,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, - "bytesish": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/bytesish/-/bytesish-0.3.3.tgz", - "integrity": "sha512-Q5eMmjkF3PnHDA0k/34/aGodPWxYL/2bAB1j17JQXeejbGsWaJLpKJqLCcpe+e37Oqg+UZig0kF5vgslOOyUJQ==" - }, "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", @@ -5428,27 +3729,6 @@ "get-intrinsic": "^1.3.0" } }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" - }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -5463,7 +3743,8 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "peer": true }, "chalk": { "version": "2.4.2", @@ -5496,11 +3777,6 @@ } } }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" - }, "cheerio": { "version": "1.0.0-rc.3", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", @@ -5575,6 +3851,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "peer": true, "requires": { "delayed-stream": "~1.0.0" } @@ -5614,11 +3891,6 @@ } } }, - "compute-scroll-into-view": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.11.tgz", - "integrity": "sha512-uUnglJowSe0IPmWOdDtrlHXof5CTIJitfJEyITHBW6zDVOGu9Pjk5puaLM73SLcwak0L4hEjO7Td88/a6P5i7A==" - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5649,14 +3921,6 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, "cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", @@ -5667,14 +3931,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "copy-to-clipboard": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.0.8.tgz", - "integrity": "sha512-c3GdeY8qxCHGezVb1EFQfHYK/8NZRemgcTIzPq7PuxjHAf/raKibn2QdhHPb/y6q74PMgH6yizaDZlRmw6QyKw==", - "requires": { - "toggle-selection": "^1.0.3" - } - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -5689,26 +3945,6 @@ "vary": "^1" } }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "cross-fetch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz", - "integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=", - "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } - }, "cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -5720,11 +3956,6 @@ "which": "^2.0.1" } }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" - }, "css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", @@ -5743,25 +3974,16 @@ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, - "csstype": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.6.tgz", - "integrity": "sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==" - }, "csv-parse": { "version": "4.4.6", "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.4.6.tgz", "integrity": "sha512-VisC5TBBhOF+70zjrF9FOiqI2LZOhXK/vAWlOrqyqz3lLa+P8jzJ7L/sg90MHmkSY/brAXWwrmGSZR0tM5yi4g==" }, - "csv-stringify": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.3.3.tgz", - "integrity": "sha512-q8Qj+/lN74LRmG7Mg0LauE5WcnJOD5MEGe1gI57IYJCB61KWuEbAFHm1uIPDkI26aqElyBB57SlE2GGwq2EY5A==" - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "peer": true, "requires": { "assert-plus": "^1.0.0" } @@ -5771,14 +3993,6 @@ "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", "integrity": "sha512-APql/TZ6FdLEpf2z7/X2a2zyqK8juYtqaSVqxw9mYoQ64CXkfU15AeLh8pUszT8+fnYjgm6t0aIYpWKJbnLkuA==" }, - "date-range-array": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-range-array/-/date-range-array-2.1.0.tgz", - "integrity": "sha512-RG4dkqd+ASDHyNTLz9kcSxgqe9xgoxd9hSOS0vIKTjUDefYVYCaY945c5Y8sirW0t+72fREuxDifdeC7FHPSlQ==", - "requires": { - "tape": "^4.0.0" - } - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -5787,33 +4001,11 @@ "ms": "2.0.0" } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "peer": true }, "depd": { "version": "2.0.0", @@ -5901,19 +4093,12 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "peer": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -5935,34 +4120,6 @@ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - } - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, "es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -5981,43 +4138,16 @@ "es-errors": "^1.3.0" } }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, "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==" }, - "escape-regexp-component": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-regexp-component/-/escape-regexp-component-1.0.2.tgz", - "integrity": "sha1-nGO20LJf8qiMOtvRjFthrMO5+qI=" - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "eslint-plugin-prettier": { "version": "2.7.0", @@ -6032,12 +4162,14 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "etag": { "version": "1.8.1", @@ -6059,11 +4191,6 @@ "through": "~2.3.1" } }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, "expect-ct": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.2.0.tgz", @@ -6185,17 +4312,20 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "peer": true }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "peer": true }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "peer": true }, "fast-diff": { "version": "1.2.0", @@ -6206,18 +4336,14 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "peer": true }, "fast-safe-stringify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, - "fast-text-encoding": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz", - "integrity": "sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ==" - }, "feature-policy": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", @@ -6228,11 +4354,6 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, - "file-saver": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz", - "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==" - }, "finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -6257,11 +4378,6 @@ } } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, "flatmap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/flatmap/-/flatmap-0.0.3.tgz", @@ -6273,23 +4389,17 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "peer": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "peer": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -6336,40 +4446,13 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "gaxios": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.0.1.tgz", - "integrity": "sha512-c1NXovTxkgRJTIgB2FrFmOFg4YIV6N/bAa4f/FZ4jIw13Ql9ya/82x69CswvotJhbV3DiGnlTZwoq2NVXk2Irg==", - "requires": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^2.2.1", - "node-fetch": "^2.3.0" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" - } - } + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "gcp-metadata": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-2.0.2.tgz", - "integrity": "sha512-dxPXBvjyfz5qFEBXzEwNmuZXwsGYfuASGYeg3CKZDaQRXdiWti9J3/Ezmtyon1OrCNpDO2YekyoSjEqMtsrcXw==", - "requires": { - "gaxios": "^2.0.1", - "json-bigint": "^0.3.0" - } + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "get-intrinsic": { "version": "1.3.0", @@ -6401,6 +4484,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "peer": true, "requires": { "assert-plus": "^1.0.0" } @@ -6418,83 +4502,11 @@ "path-is-absolute": "^1.0.0" } }, - "google-auth-library": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.2.0.tgz", - "integrity": "sha512-I2726rgOedQ06HgTvoNvBeRCzy5iFe6z3khwj6ugfRd1b0VHwnTYKl/3t2ytOTo7kKc6KivYIBsCIdZf2ep67g==", - "requires": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "fast-text-encoding": "^1.0.0", - "gaxios": "^2.0.0", - "gcp-metadata": "^2.0.0", - "gtoken": "^4.0.0", - "jws": "^3.1.5", - "lru-cache": "^5.0.0" - }, - "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - } - } - }, "google-libphonenumber": { "version": "3.2.13", "resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.13.tgz", "integrity": "sha512-USnpjJkD8St+wyshy154lF74JeauNCd8vrcusSlWjSFWitXzl7ZSuCunA/XxeVLqBv6DShrSfFMYdwGZ7x4hOw==" }, - "google-p12-pem": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.1.tgz", - "integrity": "sha512-6h6x+eBX3k+IDSe/c8dVYmn8Mzr1mUcmKC9MdUSwaBkFAXlqBEnwFWmSFgGC+tcqtsLn73BDP/vUNWEehf1Rww==", - "requires": { - "node-forge": "^0.8.0" - } - }, - "googleapis": { - "version": "42.0.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-42.0.0.tgz", - "integrity": "sha512-nQiKPDmzmMusnU8UOibmlC6hsgkm70SjqmLxSlBBb7i0z7/J6UPilSzo9tAMoHA8u3BUw3OXn13+p9YLmBH6Gg==", - "requires": { - "google-auth-library": "^5.1.0", - "googleapis-common": "^3.0.0" - } - }, - "googleapis-common": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-3.1.0.tgz", - "integrity": "sha512-abnogPoWqv0cU6O/EFpkerCVsaUsKEG6XpCm4P1YgK44PxIRcGtalDwijqUErkcivM1Xy5MNyf1PDkKTLEjOZA==", - "requires": { - "extend": "^3.0.2", - "gaxios": "^2.0.1", - "google-auth-library": "^5.2.0", - "qs": "^6.7.0", - "url-template": "^2.0.8", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.8.0.tgz", - "integrity": "sha512-tPSkj8y92PfZVbinY1n84i1Qdx75lZjMQYx9WZhnkofyxzw2r7Ho39G3/aEvSUdebxpnnM4LZJCtvE/Aq3+s9w==" - } - } - }, "gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -6536,14 +4548,6 @@ "lodash.get": "^4.4.2" } }, - "graphql-request": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz", - "integrity": "sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==", - "requires": { - "cross-fetch": "2.2.2" - } - }, "graphql-subscriptions": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz", @@ -6552,46 +4556,22 @@ "iterall": "^1.2.1" } }, - "gtoken": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.0.0.tgz", - "integrity": "sha512-XaRCfHJxhj06LmnWNBzVTAr85NfAErq0W1oabkdqwbq3uL/QTB1kyvGog361Uu2FMG/8e3115sIy/97Rnd4GjQ==", - "requires": { - "gaxios": "^2.0.0", - "google-p12-pem": "^2.0.0", - "jws": "^3.1.5", - "mime": "^2.2.0" - }, - "dependencies": { - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" - } - } - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "peer": true }, "har-validator": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "peer": true, "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -6649,39 +4629,11 @@ "dasherize": "2.0.0" } }, - "hex-to-rgba": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hex-to-rgba/-/hex-to-rgba-2.0.1.tgz", - "integrity": "sha512-5XqPJBpsEUMsseJUi2w2Hl7cHFFi3+OO10M2pzAvKB1zL6fc+koGMhmBqoDOCB4GemiRM/zvDMRIhVw6EkB8dQ==" - }, "hide-powered-by": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz", "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg==" }, - "history": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/history/-/history-4.9.0.tgz", - "integrity": "sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^0.4.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz", - "integrity": "sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==", - "requires": { - "regenerator-runtime": "^0.12.0" - } - } - } - }, "hpkp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", @@ -6747,36 +4699,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "peer": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, "ical-generator": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-1.7.2.tgz", @@ -6798,15 +4727,6 @@ "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.1.0.tgz", "integrity": "sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ==" }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -6821,14 +4741,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -6839,46 +4751,11 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "^1.0.0" - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "peer": true }, "isarray": { "version": "1.0.0", @@ -6894,7 +4771,8 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "peer": true }, "iterall": { "version": "1.2.2", @@ -6907,15 +4785,11 @@ "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", "dev": true }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -6924,35 +4798,26 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-bigint": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.0.tgz", - "integrity": "sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4=", - "requires": { - "bignumber.js": "^7.0.0" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "peer": true }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "peer": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "peer": true }, "jsonfile": { "version": "4.0.0", @@ -6966,6 +4831,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "peer": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -6978,25 +4844,6 @@ "resolved": "https://registry.npmjs.org/just-kebab-case/-/just-kebab-case-1.1.0.tgz", "integrity": "sha512-QkuwuBMQ9BQHMUEkAtIA4INLrkmnnveqlFB1oFi09gbU0wBdZo6tTnyxNWMR84zHxBuwK7GLAwqN8nrvVxOLTA==" }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", @@ -7013,26 +4860,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, "logform": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", @@ -7052,44 +4884,17 @@ } } }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true }, - "markdown-to-jsx": { - "version": "6.11.4", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz", - "integrity": "sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==", - "requires": { - "prop-types": "^15.6.2", - "unquote": "^1.1.0" - } - }, "math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -7183,16 +4988,6 @@ "integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=", "dev": true }, - "node-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" - }, - "node-forge": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.5.tgz", - "integrity": "sha512-vFMQIWt+J/7FLNyKouZ9TazT74PRV3wgv9UT4cRjC8BffxFbKXkgIWR42URCPSnHm/QDz6BOlb2Q0U4+VQT67Q==" - }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -7205,23 +5000,14 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "peer": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" - }, - "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -7251,15 +5037,6 @@ "fn.name": "1.x.x" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, "parse5": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", @@ -7288,7 +5065,8 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true }, "path-to-regexp": { "version": "0.1.7", @@ -7307,30 +5085,8 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "polished": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/polished/-/polished-3.4.1.tgz", - "integrity": "sha512-GflTnlP5rrpDoigjczEkS6Ye7NDA4sFvAnlr5hSDrEvjiVj97Xzev3hZlLi3UB27fpxyTS9rWU64VzVLWkG+mg==", - "requires": { - "@babel/runtime": "^7.4.5" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" - } - } + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "peer": true }, "prettier": { "version": "2.3.1", @@ -7343,15 +5099,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, - "prop-types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.1.tgz", - "integrity": "sha512-f8Lku2z9kERjOCcnDOPm68EBJAO2K00Q5mSgPAUE/gJuBgsYLbVy6owSrtcHj90zt8PvW+z0qaIIgsIhHOa1Qw==", - "requires": { - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -7383,17 +5130,8 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "query-string": { - "version": "6.8.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.8.3.tgz", - "integrity": "sha512-llcxWccnyaWlODe7A9hRjkvdCKamEKTh+wH8ITdTc3OhchaqUZteiSCX/2ablWHVrkVIe04dntnaZJ7BdyW0lQ==", - "requires": { - "decode-uri-component": "^0.2.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "peer": true }, "range-parser": { "version": "1.2.1", @@ -7418,50 +5156,6 @@ } } }, - "react": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", - "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-copy-to-clipboard": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.1.tgz", - "integrity": "sha512-ELKq31/E3zjFs5rDWNCfFL4NvNFQvGRoJdAKReD/rUPA+xxiLPQmZBZBvy2vgH7V0GE9isIQpT9WXbwIVErYdA==", - "requires": { - "copy-to-clipboard": "^3", - "prop-types": "^15.5.8" - } - }, - "react-dom": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz", - "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.15.0" - } - }, - "react-easy-emoji": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/react-easy-emoji/-/react-easy-emoji-1.2.0.tgz", - "integrity": "sha1-YRRQLHnyL5wFNGn6cnrhKSh3oAA=", - "requires": { - "lodash.assign": "^4.0.8", - "string-replace-to-array": "^1.0.1" - } - }, - "react-is": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.1.tgz", - "integrity": "sha512-ioMCzVDWvCvKD8eeT+iukyWrBGrA3DiFYkXfBsVYIRdaREZuBjENG+KjrikavCLasozqRWTwFUagU/O4vPpRMA==" - }, "readable-stream": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", @@ -7483,15 +5177,11 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "peer": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -7537,33 +5227,11 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, "requires": { "path-parse": "^1.0.6" } }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, - "resolve-pathname": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", - "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" - }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "requires": { - "through": "~2.3.4" - } - }, - "retina-dom-to-image": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/retina-dom-to-image/-/retina-dom-to-image-2.5.6.tgz", - "integrity": "sha1-YN4Ij0v/W5FRG5rW6EzmE5Ht69M=" - }, "rimraf": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", @@ -7582,23 +5250,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "scheduler": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", - "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "scroll-into-view-if-needed": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.20.tgz", - "integrity": "sha512-P9kYMrhi9f6dvWwTGpO5I3HgjSU/8Mts7xL3lkoH5xlewK7O9Obdc5WmMCzppln7bCVGNmf3qfoZXrpCeyNJXw==", - "requires": { - "compute-scroll-into-view": "1.0.11" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -7767,19 +5418,6 @@ "is-arrayish": "^0.3.1" } }, - "smooth-scroll-into-view-if-needed": { - "version": "1.1.23", - "resolved": "https://registry.npmjs.org/smooth-scroll-into-view-if-needed/-/smooth-scroll-into-view-if-needed-1.1.23.tgz", - "integrity": "sha512-52177sj5yR2novVCB+vJRCYEUkHFz2mq5UKmm5wwIWs0ZtC1sotVaTjKBsuNzBPF4nOV1NxMctyD4V/VMmivCQ==", - "requires": { - "scroll-into-view-if-needed": "2.2.20" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -7789,20 +5427,17 @@ "through": "2" } }, - "split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "peer": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -7839,11 +5474,6 @@ "duplexer": "~0.1.1" } }, - "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" - }, "string_decoder": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", @@ -7858,53 +5488,6 @@ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true }, - "string-replace-to-array": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string-replace-to-array/-/string-replace-to-array-1.0.3.tgz", - "integrity": "sha1-yT66mZpe4k1zGuu69auja18Y978=", - "requires": { - "invariant": "^2.2.1", - "lodash.flatten": "^4.2.0", - "lodash.isstring": "^4.0.1" - } - }, - "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.0", - "function-bind": "^1.0.2" - } - }, - "tape": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.10.1.tgz", - "integrity": "sha512-G0DywYV1jQeY3axeYnXUOt6ktnxS9OPJh97FGR3nrua8lhWi1zPflLxcAHavZ7Jf3qUfY7cxcVIVFa4mY2IY1w==", - "requires": { - "deep-equal": "~1.0.1", - "defined": "~1.0.0", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.3", - "has": "~1.0.3", - "inherits": "~2.0.3", - "minimist": "~1.2.0", - "object-inspect": "~1.6.0", - "resolve": "~1.10.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.1.2", - "through": "~2.3.8" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, "text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", @@ -7913,72 +5496,8 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "tiny-invariant": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.3.tgz", - "integrity": "sha512-ytQx8T4DL8PjlX53yYzcIC0WhIZbpR0p1qcYjw2pHu3w6UtgWwFJQ/02cnhOnBBhlFx/edUIfcagCaQSe3KMWg==" - }, - "tiny-warning": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.2.tgz", - "integrity": "sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q==" - }, - "title-case-minors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/title-case-minors/-/title-case-minors-1.0.0.tgz", - "integrity": "sha1-UfFwN8KUdHodHNpCS1AEyG2OsRU=" - }, - "to-capital-case": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-capital-case/-/to-capital-case-1.0.0.tgz", - "integrity": "sha1-pXxQFP1aNyF88FCZ/4pCG7+cm38=", - "requires": { - "to-space-case": "^1.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-no-case": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", - "integrity": "sha1-xyKQcWTvaxeBMsjmmTAhLRtKoWo=" - }, - "to-sentence-case": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-sentence-case/-/to-sentence-case-1.0.0.tgz", - "integrity": "sha1-xIO/NkdzflxzjvcAb+Ng1fmcVy4=", - "requires": { - "to-no-case": "^1.0.0" - } - }, - "to-space-case": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz", - "integrity": "sha1-sFLar7Gysp3HcM6gFj5ewOvJ/Bc=", - "requires": { - "to-no-case": "^1.0.0" - } - }, - "to-title-case": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-title-case/-/to-title-case-1.0.0.tgz", - "integrity": "sha1-rKiPidYGTeUBCKl86g20SCfoAGE=", - "requires": { - "escape-regexp-component": "^1.0.2", - "title-case-minors": "^1.0.0", - "to-capital-case": "^1.0.0", - "to-sentence-case": "^1.0.0" - } - }, - "toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "toidentifier": { "version": "1.0.0", @@ -8096,6 +5615,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "peer": true, "requires": { "safe-buffer": "^5.0.1" } @@ -8103,7 +5623,8 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "peer": true }, "type-graphql": { "version": "0.17.6", @@ -8142,27 +5663,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==" }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, "undici-types": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", @@ -8178,24 +5678,15 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "peer": true, "requires": { "punycode": "^2.1.0" } }, - "url-template": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8209,18 +5700,14 @@ "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "peer": true }, "validator": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.0.0.tgz", "integrity": "sha512-anYx5fURbgF04lQV18nEQWZ/3wHGnxiKdG4aL8J+jEDsm98n/sU/bey+tYk6tnGJzm7ioh5FoqrAiQ6m03IgaA==" }, - "value-equal": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", - "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -8230,17 +5717,13 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "peer": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -8250,11 +5733,6 @@ "isexe": "^2.0.0" } }, - "window-or-global": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/window-or-global/-/window-or-global-1.0.1.tgz", - "integrity": "sha1-2+RboqKRqrxW1iz2bEW3+jIpRt4=" - }, "winston": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", @@ -8330,11 +5808,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz", "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==" - }, - "zerofill": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/zerofill/-/zerofill-0.1.0.tgz", - "integrity": "sha1-s0nnVMYnwRNAxK84mk+e+wBjQs0=" } } } diff --git a/package.json b/package.json index 034da3e1..609a4fac 100644 --- a/package.json +++ b/package.json @@ -21,25 +21,14 @@ "@types/cors": "2.8.6", "@types/dotenv": "6.1.1", "@types/express": "4.17.9", - "@types/file-saver": "2.0.1", "@types/fs-extra": "8.0.0", "@types/graphql": "14.5.0", "@types/helmet": "0.0.44", - "@types/history": "4.7.3", "@types/lodash": "4.14.138", - "@types/md5": "2.1.33", "@types/morgan": "1.7.37", "@types/node": "24.0.3", - "@types/query-string": "6.3.0", - "@types/react": "16.9.2", - "@types/react-copy-to-clipboard": "4.2.6", - "@types/react-dom": "16.9.0", - "@types/request": "2.48.3", - "@types/request-promise-native": "1.0.16", - "@types/window-or-global": "1.0.0", "camelcase": "5.3.1", "cheerio": "1.0.0-rc.3", - "csstype": "2.6.6", "flatmap": "0.0.3", "glob": "7.1.7", "mri": "1.1.6", @@ -60,52 +49,27 @@ "url": "https://github.com/ReactFinland/graphql-api/issues" }, "dependencies": { - "@emotion/core": "10.0.17", - "@emotion/styled": "10.0.17", - "bent": "6.1.0", "body-parser": "1.19.0", "compression": "1.7.4", "cors": "2.8.5", "csv-parse": "4.4.6", - "csv-stringify": "5.3.3", - "date-range-array": "2.1.0", "dotenv": "8.1.0", "express": "4.18.2", - "file-saver": "2.0.2", "fs-extra": "8.1.0", - "googleapis": "42.0.0", "graphql": "14.5.4", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", - "graphql-request": "1.8.2", "helmet": "3.21.0", - "hex-to-rgba": "2.0.1", - "history": "4.9.0", "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", "lodash": "4.17.21", - "markdown-to-jsx": "6.11.4", - "md5": "2.3.0", "morgan": "1.10.0", - "polished": "3.4.1", - "query-string": "6.8.3", - "react": "16.9.0", - "react-copy-to-clipboard": "5.0.1", - "react-dom": "16.9.0", - "react-easy-emoji": "1.2.0", "reflect-metadata": "0.1.13", - "request": "2.88.2", "request-promise-native": "1.0.9", - "retina-dom-to-image": "2.5.6", "rimraf": "3.0.0", - "smooth-scroll-into-view-if-needed": "1.1.23", - "to-title-case": "1.0.0", "type-graphql": "0.17.6", "typescript": "5.8.3", - "uglify-es": "3.3.9", - "window-or-global": "1.0.1", - "winston": "3.3.3", - "zerofill": "0.1.0" + "winston": "3.3.3" }, "lint-staged": { "*.--write": [ diff --git a/server/routes/components/Badge.tsx b/server/routes/components/Badge.tsx deleted file mode 100644 index e0d1bd2d..00000000 --- a/server/routes/components/Badge.tsx +++ /dev/null @@ -1,233 +0,0 @@ -import styled from "@emotion/styled"; -import { Color, HeightProperty, WidthProperty } from "csstype"; -import hexToRgba from "hex-to-rgba"; -import get from "lodash/get"; -import trimStart from "lodash/trimStart"; -import * as React from "react"; -import { Contact, ContactType } from "../../schema/Contact"; -import { Theme } from "../../schema/Theme"; -import Card from "../components/Card"; - -interface BadgeContainerProps { - width: string; - height: string; -} - -// TODO: Expose dimensions? -// TODO: Use Card.Container -const BadgeContainer = styled.section` - display: grid; - grid-template-rows: repeat(3, 1fr); - - /* Animation */ - perspective: 100%; - transform-style: preserve-3d; - transition-duration: 500ms; - - margin: 0; - padding: 0; - width: ${({ width }: BadgeContainerProps) => width}; - height: ${({ height }: BadgeContainerProps) => height}; - - /* Hole for lanyard */ - &::after { - position: relative; - top: -14.2cm; - left: 50%; - width: 1mm; - height: 1mm; - background: rgba(151, 54, 54, 1); - border-radius: 50%; - content: ""; - z-index: 5; - } -` as React.FC; - -interface BadgeBaseProps { - defaultColor: Color; - type: ContactType; - texture: string; - opacity?: { - upper: number; - lower: number; - }; -} - -const BadgeFront = styled(Card.Front)` - border-radius: 0.5cm; - background-image: ${resolveBackground}; - background-size: cover; -` as React.FC; -/*const BadgeBack = styled(Card.Back)` - border-radius: 0.5cm; - background-image: ${resolveBackground}; - background-size: cover; -` as React.FC;*/ - -function resolveBackground({ - defaultColor = "#000", - type, - texture, - opacity = { - upper: 1.0, - lower: 0.6, - }, -}: BadgeBaseProps) { - const colors = { - [ContactType.ATTENDEE]: defaultColor, - [ContactType.ORGANIZER]: "#6d0b4d", - [ContactType.PRESS]: "#e5ce3b", - [ContactType.SPEAKER]: "#d01a1a", - [ContactType.WORKSHOP_HOST]: "#d01a1a", - [ContactType.SPONSOR]: "#67d67b", - }; - const color = colors[type]; - - if (!color) { - console.log(`Badge - Missing color for ${type}`); - - return defaultColor; - } - - return `linear-gradient(${hexToRgba(color, opacity.upper)}, ${hexToRgba( - color, - opacity.lower - )}), url("${texture}")`; -} - -const BadgeContent = styled.div` - margin-left: 0.2cm; - margin-right: 0.2cm; - padding: 2cm 0.5cm; - height: 8.5cm; - clip-path: polygon(0 0, 100% 0.5cm, 100% 100%, 0 calc(100% - 0.5cm)); - background: ${hexToRgba("#fff", 0.8)}; - z-index: 1; -`; - -const BadgeLogo = styled.img` - margin-top: 0.5em; -`; - -const BadgeName = styled.h2` - display: block; - font-size: 135%; -`; - -const BadgeTwitter = styled.h3` - font-weight: bold; - margin-top: 1em; - margin-bottom: 1em; - font-size: 125%; -`; - -const BadgeCompany = styled.p` - font-weight: bold; -`; - -const BadgeFooter = styled.footer` - padding-left: 1cm; - justify-self: start; -`; - -const BadgeType = styled.h3` - text-transform: capitalize; - text-align: initial; - color: white; -`; - -interface BadgeProps { - defaultColor: Color; - logo: Theme["logos"]["white"]["withText"]["url"]; - attendee: Contact; - texture: string; - height: HeightProperty; - width: WidthProperty; -} - -// TODO: Use Image type for logo, not url (string) -function Badge({ - defaultColor, - logo, - texture, - attendee, - width, - height, -}: BadgeProps) { - if (!attendee) { - return <>No attendee!; - } - - const { type, name, social, company } = attendee; - const twitter = get(social, "twitter", ""); - - // TODO: Drop the trimStart bit -> Needs a schema change - const frontContent = ( - <> - - - {name} - {trimStart(twitter, "https://twitter.com/") && ( - - @{trimStart(twitter, "https://twitter.com/")} - - )} - {company && {company}} - - {type && ( - - {type[0]} - - )} - - ); - // TODO: Expose - // const backContent = frontContent; - - // TODO: Eliminate BadgeContainer? - // TODO: What if an attendee has multiple types at once? - return ( - - - {frontContent} - - {/* - {backContent} - */} - - ); -} - -// TODO: Generate Badge.propTypes based on this structure? -Badge.variables = [ - { - id: "defaultColor", - validation: { type: String, default: "#002fa9" }, - }, - { - id: "logo", - validation: { - type: String, - default: "/media/react-finland/logo/v2/logo-white-with-text.svg", - }, - }, - { - id: "attendee", - validation: { - type: Contact, - default: { - type: [ContactType.ATTENDEE], - name: "John Doe", - twitter: "johndoe", - company: "John Doe Co.", - noPhotography: false, - }, - }, - }, - { - id: "texture", - validation: { type: String, default: "/media/assets/wave.svg" }, - }, -]; - -export default Badge; diff --git a/server/routes/components/Card.tsx b/server/routes/components/Card.tsx deleted file mode 100644 index 064cad29..00000000 --- a/server/routes/components/Card.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import styled from "@emotion/styled"; -import { Color } from "csstype"; -import * as React from "react"; - -interface CardContainerProps { - width: string; - height: string; -} - -interface CardBaseProps { - backgroundColor?: Color; - textColor?: Color; -} - -const CardBase = styled.div` - position: absolute; - - width: 100%; - height: 100%; - background-color: ${({ backgroundColor }: CardBaseProps) => backgroundColor}; - color: ${({ textColor }: CardBaseProps) => textColor}; - backface-visibility: hidden; -` as React.FC; - -const Card = { - Container: styled.section` - width: ${({ width }: CardContainerProps) => width}; - height: ${({ height }: CardContainerProps) => height}; - - /* Animation */ - perspective: 100%; - transform-style: preserve-3d; - transition-duration: 500ms; - - &:hover { - &:nth-of-type(1) { - transform: rotateY(180deg); - } - - &:nth-of-type(2) { - transform: rotateY(0deg); - } - } - ` as React.FC, - Front: styled(CardBase)``, - Back: styled(CardBase)` - transform: rotateY(-180deg); - - @media print { - display: none; - } - `, -}; - -export default Card; diff --git a/server/routes/components/Contacts.tsx b/server/routes/components/Contacts.tsx deleted file mode 100644 index a1d1cc52..00000000 --- a/server/routes/components/Contacts.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from "react"; - -interface ContactsProps { - items: Array<{}>; - render: any; // TODO: What's the correct type for this? - renderProps: {}; -} - -const Contacts = ({ items = [], render, renderProps = {} }: ContactsProps) => ( - <> - {items.map((contact, key) => - React.createElement(render, { - ...contact, - ...renderProps, - key, - }) - )} - -); - -export default Contacts; diff --git a/server/routes/components/GlobalStyles.tsx b/server/routes/components/GlobalStyles.tsx deleted file mode 100644 index c3a32fe9..00000000 --- a/server/routes/components/GlobalStyles.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import { css, Global } from "@emotion/core"; -import forEach from "lodash/forEach"; -import * as React from "react"; -import { Font, Fonts } from "../../schema/Theme"; - -interface GlobalStylesProps { - fonts: Fonts; -} - -function GlobalStyles({ fonts }: GlobalStylesProps) { - React.useEffect(() => { - forEach(fonts.variants, (variant) => { - if (variant.href) { - generateFontReference(variant.href); - } - }); - }, []); - - return ( - - ); -} - -function generateFontReference(href: Font["href"]) { - if (!href) { - return; - } - - const fontLink = document.createElement("link"); - - fontLink.href = href; - - fontLink.rel = "stylesheet"; - fontLink.type = "text/css"; - fontLink.crossOrigin = "anonymous"; - - document.body.appendChild(fontLink); -} - -function generateFontDeclarations(fonts: Font[]) { - return fonts.map(generateFontDeclaration).join("\n"); -} - -function generateFontDeclaration(font: Font) { - if (font.href) { - return ""; - } - - return ` -@font-face { - font-family: "${font.family}"; - font-weight: ${font.weight}; - font-style: ${font.style}; - src: ${generateFontSrc(font.fileName, font.formats)} -}`; -} - -function generateFontSrc( - fileName: Font["fileName"], - formats: Font["formats"] -): string { - if (!fileName || !formats) { - return ""; - } - - return formats.map(generateFontUrl(fileName)).join(",\n"); -} - -function generateFontUrl(fileName: string) { - return (format: string): string => - `url("${fileName}.${format}") format("${generateFormat(format)}")`; -} - -function generateFormat(format: string): string { - if (format === "ttf") { - return "truetype"; - } - - if (format === "otf") { - return "opentype"; - } - - return format; -} - -export default GlobalStyles; diff --git a/server/routes/components/Presentation.tsx b/server/routes/components/Presentation.tsx deleted file mode 100644 index b4641126..00000000 --- a/server/routes/components/Presentation.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import styled from "@emotion/styled"; -import isEqual from "lodash/isEqual"; -import React from "react"; -import scrollIntoView from "smooth-scroll-into-view-if-needed"; -import root from "window-or-global"; -import { Theme } from "../../schema/Theme"; -import Slides, { Slide, SlidesProps } from "./Slides"; - -const PresenterContainer = styled.div``; - -interface PresentationProps { - conferenceId: string; - presentationID: string; - slides: Slide[]; - theme: Theme; - features: SlidesProps["features"]; -} - -class Presentation extends React.Component { - public scrollTimeout = null; - public slide = getSlide(); - - public componentDidCatch(err) { - // TODO: Use a nice error overlay here - console.error(err); - } - public componentDidMount() { - if (root.document) { - root.document.addEventListener("keydown", this.onKeydown, false); - root.addEventListener("wheel", this.onScroll); - - if (!root.location.hash) { - root.location.hash = 0; - } - } - } - public componentWillUnmount() { - if (root.document) { - root.document.removeEventListener("keydown", this.onKeydown, false); - root.removeEventListener("wheel", this.onScroll); - root.clearTimeout(this.scrollTimeout); - } - } - public componentDidUpdate(nextProps) { - if (!isEqual(this.props.slides, nextProps.slides)) { - this.scrollToSlide(this.slide); - } - } - - public onKeydown = (event) => { - const { key } = event; - - if (key === "ArrowUp" || key === "ArrowLeft") { - event.preventDefault(); - this.moveToPreviousSlide(); - } - if (key === "ArrowDown" || key === "ArrowRight") { - event.preventDefault(); - this.moveToNextSlide(); - } - }; - public onScroll = () => { - const scrollY = root.scrollY; - const slideHeight = getSlideHeight(); - const nearestSlide = Math.round(scrollY / slideHeight); - - root.location.hash = nearestSlide; - - root.clearTimeout(this.scrollTimeout); - this.scrollTimeout = root.setTimeout(() => { - if (scrollY === root.scrollY) { - this.scrollToSlide(nearestSlide); - } - }, 100); - }; - - public moveToPreviousSlide = () => { - this.goToSlide(Math.max(Number(root.location.hash.slice(1)) - 1, 0)); - }; - - public moveToNextSlide = () => { - this.goToSlide( - Math.min( - Number(root.location.hash.slice(1)) + 1, - this.props.slides.length - 1 - ) - ); - }; - - public goToSlide = (slide) => { - this.slide = slide; - this.scrollToSlide(slide); - }; - - public scrollToSlide(slide) { - const element = root.document.getElementsByClassName(`slide-${slide}`)[0]; - - scrollIntoView(element).then(() => { - root.location.hash = slide; - }); - } - - public render() { - const { features, conferenceId, presentationID, slides, theme } = - this.props; - - return ( - - - - ); - } -} - -function getSlide() { - if (!root.location) { - return 0; - } - - return root.location.hash ? Number(root.location.hash.slice(1)) : 0; -} - -// Assumes there's at least one slide -function getSlideHeight() { - const element = root.document.getElementsByClassName(`slide-0`)[0]; - - if (element) { - return element.offsetHeight; - } - - return 0; -} - -export default Presentation; diff --git a/server/routes/components/Schedule.tsx b/server/routes/components/Schedule.tsx deleted file mode 100644 index 80e4706d..00000000 --- a/server/routes/components/Schedule.tsx +++ /dev/null @@ -1,149 +0,0 @@ -import styled from "@emotion/styled"; -import * as CSS from "csstype"; -import map from "lodash/map"; -import * as React from "react"; -// import emoji from "react-easy-emoji"; -import { Interval } from "../../schema/Interval"; -import SessionType from "../../schema/SessionType"; -import { Theme } from "../../schema/Theme"; - -// TODO: Move control for margin/height to consumer -const ScheduleContainer = styled.dl` - width: 100%; - display: flex; - flex-flow: column wrap; - justify-content: center; - height: 10cm; -`; - -const ScheduleContainerItem = styled.div` - width: 50%; - margin-bottom: 0.25cm; - display: grid; - grid-template-columns: 0.5fr 1.9fr; - font-size: 83%; - - &:first-of-type { - margin-top: -0.6cm; - } -`; - -interface ScheduleTitleProps { - color: CSS.Color; - type: SessionType; -} - -const ScheduleTitle = styled.dt` - display: inline; - overflow: hidden; - font-size: 150%; - font-family: monospace; - color: ${({ color, type }: ScheduleTitleProps) => - [ - SessionType.BREAKFAST, - SessionType.COFFEE_BREAK, - SessionType.PARTY, - SessionType.LUNCH, - SessionType.ORGANIZATIONAL, - ].includes(type) - ? color - : "inherit"}; -` as React.FC; - -const ScheduleDefinition = styled.dd` - display: inline; - font-size: 99%; - margin-left: 0cm; - text-align: left; - overflow: hidden; - line-height: 1.45; -`; - -interface ScheduleProps { - theme: Theme; - intervals: Interval[]; -} - -function Schedule({ theme, intervals }: ScheduleProps) { - if (!intervals) { - return null; - } - - return ( - - {map(intervals, ({ begin, end, sessions, title }, i) => ( - - - {begin}-{end} - - - {sessions.length > 0 ? ( - sessions.map(({ title, type, people }, i) => ( - - )) - ) : ( - - )} - - - ))} - - ); -} - -const SessionTitleContainer = styled.h3` - margin-bottom: 0.15cm; -`; - -interface SessionTitleProps { - title?: string; - type?: SessionType; - people?: Array<{ name: string }>; -} - -function SessionTitle({ title, type, people = [] }: SessionTitleProps) { - return ( - - {title}{" "} - {people && - Array.isArray(people) && - people.length > 0 && - `- ${people[0].name}`}{" "} - {/*type && TODO: Make toggleable */} - - ); -} - -/* -function ScheduleIcon({ type }) { - const scheduleTypes = { - KEYNOTE: { icon: "🗝", title: "Keynote" }, - LIGHTNING_TALK: { icon: "⚡️", title: "Lightning talk" }, - TALK: { icon: "🎙", title: "Presentation" }, - PANEL: { icon: "🙋", title: "Panel" }, - WORKSHOP: { icon: "👩‍💻", title: "Workshop" }, - COFFEE_BREAK: { icon: "☕", title: "Coffee break" }, - BREAKFAST: { icon: "🥐", title: "Breakfast" }, - LUNCH: { icon: "🍕", title: "Lunch" }, - ORGANIZATIONAL: { icon: "💤", title: "Organizational" }, - PARTY: { icon: "🎉", title: "Party at Gofore office" }, - }; - - return ( - - {emoji(scheduleTypes[type].icon)} - - ); -} -*/ - -export default Schedule; diff --git a/server/routes/components/Select.tsx b/server/routes/components/Select.tsx deleted file mode 100644 index 7ca419bf..00000000 --- a/server/routes/components/Select.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import styled from "@emotion/styled"; -import { WidthProperty } from "csstype"; -import * as React from "react"; - -interface SelectContainerProps { - width?: any; - onChange?: (event: React.ChangeEvent) => void; - value: HTMLSelectElement["value"]; -} - -const SelectContainer = styled.select` - width: ${({ width }: SelectContainerProps) => width || ""}; -` as React.FC; - -// TODO: Add generics -// TODO: Drop selected from options? -interface SelectProps { - width?: WidthProperty; - onChange: React.SelectHTMLAttributes["onChange"]; - options: Array<{ value: any; label: any; selected?: boolean }>; - selected?: any; // One of options -} - -function Select({ width, onChange, options, selected }: SelectProps) { - return ( - - {options.map(({ value, label }) => ( - - ))} - - ); -} - -function getSelectedValue(options) { - if (options.length <= 0) { - return; - } - const selectedOptions = options.filter(({ selected }) => selected); - - if (selectedOptions.length <= 0) { - return; - } - - // TODO: This picks just the first one. Likely we should not even do this. - return selectedOptions[0].value; -} - -export default Select; diff --git a/server/routes/components/Slides.tsx b/server/routes/components/Slides.tsx deleted file mode 100644 index 255e556c..00000000 --- a/server/routes/components/Slides.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import styled from "@emotion/styled"; -import React from "react"; -// import { Image } from "../../schema/Image"; -import { Theme } from "../../schema/Theme"; -import excludeProps from "./exclude-props"; -import slideLayouts from "./slide-layouts"; -/*import { EmbedContent } from "./slide-layouts/EmbedContent"; -import { GridContent } from "./slide-layouts/GridContent"; -import { MarkdownContent } from "./slide-layouts/MarkdownContent"; -import { SectionContent } from "./slide-layouts/SectionContent"; -import { TitleContent } from "./slide-layouts/TitleContent";*/ - -const SlideContainer = styled.div``; -const Slide = styled.div``; - -const SlideNumber = styled(excludeProps("index", "div"))` - position: absolute; - top: ${({ index }) => (index + 1) * 100 - 5}vh; - right: 3vw; - opacity: 0.8; -`; - -const SlideProgress = styled(excludeProps(["color", "ratio"], "div"))` - position: fixed; - width: ${({ ratio }) => ratio * 100}%; - height: 3vh; - top: 97vh; - background-color: ${(props) => props.color}; - opacity: 0.8; -`; - -export interface Slide { - layout: string; // TODO: Better as enum - content: any; - /*| EmbedContent - | GridContent - | Image - | MarkdownContent - | TitleContent - | SectionContent;*/ -} - -export interface SlidesProps { - selectedSlide: number; - slides: Slide[]; - theme: Theme; - presentationID: string; - conferenceId: string; - features: { - showSlideNumber: boolean; - showSlideProgress: boolean; - }; -} - -function Slides({ - selectedSlide, - slides = [], - theme, - presentationID, - conferenceId, - features, -}: SlidesProps) { - return ( - - {slides.map((slide, index) => { - const slideKey = `slide-${index}`; - - // Slides are given class names for keyboard navigation to work. - return ( - - {React.createElement(getLayout(slide.layout), { - ...slide, - conferenceId, - theme, - presentationID, - })} - {features.showSlideNumber && index ? ( - - {index}/{slides.length - 1} - - ) : null} - - ); - })} - {features.showSlideProgress && selectedSlide ? ( - -   - - ) : null} - - ); -} - -function getLayout(id) { - if (!slideLayouts[id]) { - throw new Error(`No layout found for ${id}`); - } - - return slideLayouts[id]; -} - -export default Slides; diff --git a/server/routes/components/Sponsor.tsx b/server/routes/components/Sponsor.tsx deleted file mode 100644 index cfb4c96d..00000000 --- a/server/routes/components/Sponsor.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import styled from "@emotion/styled"; -import React from "react"; -import { Image } from "../../schema/Image"; - -interface SponsorContentProps { - src: string; - name: string; - props: {}; - rules: {}; - type: string; // TODO: Better use an enum here -} - -const SponsorContent = styled.img` - vertical-align: middle; - justify-self: center; - display: ${({ rules, type }: SponsorContentProps) => rules[type].display}; - max-height: ${({ rules, type }: SponsorContentProps) => - rules[type]["max-height"]}; - max-width: ${({ rules, type }: SponsorContentProps) => - rules[type]["max-width"]}; - width: ${({ rules, type }: SponsorContentProps) => rules[type]["width"]}; - margin: ${({ rules, type }: SponsorContentProps) => rules[type].margin}; -` as React.FC; - -interface SponsorProps { - name: string; - about: string; - social: {}; - image: Image; - logoProps: {}; - rules: {}; - type: string; // TODO: Better use the same enum here -} - -const Sponsor = ({ name, image, logoProps, rules, type }: SponsorProps) => ( - -); - -export default Sponsor; diff --git a/server/routes/components/Sponsors.tsx b/server/routes/components/Sponsors.tsx deleted file mode 100644 index 9d48b46e..00000000 --- a/server/routes/components/Sponsors.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import styled from "@emotion/styled"; -import * as React from "react"; -import { Contact } from "../../schema/Contact"; -import Contacts from "./Contacts"; -import Sponsor from "./Sponsor"; - -const SponsorsContainer = styled.div` - display: grid; - grid-template-columns: 1fr 1fr 1fr; - align-items: center; - justify-items: center; - margin-left: 0.5cm; - margin-right: 0.5cm; -`; - -const GoldSponsors = styled.section``; -const SilverSponsors = styled.section` - display: grid; - align-items: center; - grid-template-columns: 1fr 1fr; -`; -const BronzeSponsors = styled.section` - display: grid; - align-items: center; - grid-template-columns: 1fr 1fr 1fr; -`; - -interface SponsorsProps { - goldSponsors?: Contact[]; - silverSponsors?: Contact[]; - bronzeSponsors?: Contact[]; - rules: {}; -} - -// TODO: Check if the structure can be simplified -const Sponsors = ({ - goldSponsors = [], - silverSponsors = [], - bronzeSponsors = [], - rules, -}: SponsorsProps) => ( - - - - - - - - - - - -); - -export default Sponsors; diff --git a/server/routes/components/connect.ts b/server/routes/components/connect.ts deleted file mode 100644 index 010f1519..00000000 --- a/server/routes/components/connect.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { request } from "graphql-request"; -import isEqual from "lodash/isEqual"; -import * as React from "react"; - -// TODO: Extract apiUrl to context? -function connect( - apiUrl, - query, - variables = {}, - propsToVars = (props) => props -) { - return function getConnect( - component - ): React.ComponentClass & { filename: string; variables: {} } { - let queryCache = {}; - - interface ConnectState { - data: {}; - } - - class Connect

extends React.Component { - public static filename: string; - public static variables: Array<{ - id: string; - query?: string; - // TODO: Type better - mapToCollection?: (result: any) => any; - mapToOption?: (result: any) => { value: any; label: any }; - validation?: { type: any; values?: any; default: any }; - }>; - public state: ConnectState = { - data: {}, - }; - constructor(props) { - super(props); - - this.state = { data: queryCache }; - } - public componentDidMount() { - this.fetchData().then((data) => this.setState(() => data)); - } - public componentDidUpdate(prevProps) { - if (!isEqual(prevProps, this.props)) { - this.fetchData().then((data) => this.setState(() => data)); - } - } - public render() { - if (this.state.data === null) { - return null; - } - - return React.createElement(component, { - ...this.props, - ...this.state.data, - }); - } - public fetchData() { - if (propsToVars) { - variables = { - ...variables, - ...propsToVars(this.props), - }; - } - - return request(apiUrl, query, variables) - .then((data) => { - // @ts-expect-error This is fine - queryCache = data; - - return { data }; - }) - .catch((err) => console.error(err)); - } - } - - return Connect; - }; -} - -export default connect; diff --git a/server/routes/components/exclude-props.ts b/server/routes/components/exclude-props.ts deleted file mode 100644 index c32f84ec..00000000 --- a/server/routes/components/exclude-props.ts +++ /dev/null @@ -1,9 +0,0 @@ -import omit from "lodash/omit"; -import React from "react"; - -export default function excludeProps(exclude, element) { - const ExcludedStyled = props => - React.createElement(element, omit(props, exclude)); - - return ExcludedStyled; -} diff --git a/server/routes/components/index.ts b/server/routes/components/index.ts deleted file mode 100644 index 825787e0..00000000 --- a/server/routes/components/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Badge from "./Badge"; - -export { Badge }; diff --git a/server/routes/components/slide-layouts/EmbedContent.tsx b/server/routes/components/slide-layouts/EmbedContent.tsx deleted file mode 100644 index 85f40b1b..00000000 --- a/server/routes/components/slide-layouts/EmbedContent.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import styled from "@emotion/styled"; -import modularScale from "polished/lib/helpers/modularScale"; -import React from "react"; -import { Theme } from "../../../schema/Theme"; - -const EmbedPageContainer = styled.div` - min-height: 100vh; - max-height: 100vh; - display: grid; - grid-template-rows: 0.25fr 1.75fr; - align-items: center; -`; - -const Title = styled.h1` - font-size: ${modularScale(7)}; - margin-left: 5vw; - color: ${props => props.color}; -`; - -const Embed = styled.iframe` - align-self: start; - justify-self: center; -`; - -export interface EmbedContent { - title: string; - link: string; -} - -interface EmbedContentProps { - content: EmbedContent; - theme: Theme; -} - -const EmbedContent = ({ content, theme }: EmbedContentProps) => ( - - {/* @ts-expect-error This is fine */} - {content.title} - - -); - -export default EmbedContent; diff --git a/server/routes/components/slide-layouts/GridContent.tsx b/server/routes/components/slide-layouts/GridContent.tsx deleted file mode 100644 index 008e3ff8..00000000 --- a/server/routes/components/slide-layouts/GridContent.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import styled from "@emotion/styled"; -import Markdown from "markdown-to-jsx"; -import modularScale from "polished/lib/helpers/modularScale"; -import React from "react"; -import { Image } from "../../../schema/Image"; -import { Theme } from "../../../schema/Theme"; -import excludeProps from "../exclude-props"; -import getBackground from "./get-background"; - -const GridContainer = styled(excludeProps(["background"], "div"))` - min-height: 100vh; - max-height: 100vh; - display: grid; - grid-template-rows: 0.25fr 1.75fr; - align-items: center; - line-height: 1.5; - background: ${({ background }) => background}; - background-size: cover; - background-repeat: no-repeat; - background-position: center; -`; - -const Title = styled.h1` - font-size: ${modularScale(6)}; - margin-left: 5vw; - margin-right: 5vw; - color: ${props => props.color}; -`; - -const Markup = styled(excludeProps(["color"], "div"))` - display: grid; - grid-template-columns: 1fr 1fr; - font-size: ${modularScale(4)}; - margin-left: 5vw; - margin-right: 5vw; - align-self: start; - color: ${props => props.color}; - opacity: 0.8; -`; - -const MarkdownContainer = styled.div` - margin: 0.5em; -`; - -export interface GridContent { - columns: [string, string]; // TODO: Generalize - title: string; -} - -interface GridContentProps { - background: Image; - content: GridContent; - theme: Theme; -} - -const GridContent = ({ background, content, theme }: GridContentProps) => ( - - {/* @ts-expect-error This is fine */} - - <Markdown>{content.title}</Markdown> - - - - {content.columns[0]} - - - {content.columns[1]} - - - -); - -export default GridContent; diff --git a/server/routes/components/slide-layouts/ImageContent.tsx b/server/routes/components/slide-layouts/ImageContent.tsx deleted file mode 100644 index 000b747a..00000000 --- a/server/routes/components/slide-layouts/ImageContent.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/** @jsx jsx */ -import { jsx } from "@emotion/core"; -import styled from "@emotion/styled"; -import { Image } from "../../../schema/Image"; - -const ImageContainer = styled.div` - display: grid; - min-height: 100vh; - max-height: 100vh; - text-align: center; - padding: 2em; - box-sizing: border-box; -`; - -const ImageElement = styled.img` - height: 100%; - max-width: 100%; - object-fit: contain; - align-self: center; - justify-self: center; -`; - -interface ImageContentProps { - content: Image; - css: {}; -} - -const ImageContent = ({ content, css }: ImageContentProps) => ( - - - -); - -export default ImageContent; diff --git a/server/routes/components/slide-layouts/MarkdownContent.tsx b/server/routes/components/slide-layouts/MarkdownContent.tsx deleted file mode 100644 index fcf7e2bc..00000000 --- a/server/routes/components/slide-layouts/MarkdownContent.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import styled from "@emotion/styled"; -import Markdown from "markdown-to-jsx"; -import modularScale from "polished/lib/helpers/modularScale"; -import React from "react"; -import { Image } from "../../../schema/Image"; -import { Theme } from "../../../schema/Theme"; -import excludeProps from "../exclude-props"; -import getBackground from "./get-background"; - -// TODO: Allow background-size to be tuneable (contain is needed sometimes) -const MarkdownContainer = styled(excludeProps(["background", "title"], "div"))` - min-height: 100vh; - max-height: 100vh; - display: grid; - grid-template-rows: ${({ title }) => (title ? "0.25fr 1.75fr" : "1fr")}; - align-items: center; - line-height: 1.5; - background: ${({ background }) => background}; - background-size: cover; - background-repeat: no-repeat; - background-position: center; -`; - -const Title = styled.h1` - font-size: ${modularScale(6)}; - margin-left: 5vw; - margin-right: 5vw; - color: ${props => props.color}; -`; - -const Markup = styled(excludeProps(["color", "title"], "div"))` - font-size: ${modularScale(4)}; - margin-left: 5vw; - margin-right: 5vw; - align-self: ${({ title }) => (title ? "start" : "center")}; - color: ${({ color }) => color}; - opacity: 0.8; -`; - -export interface MarkdownContent { - title: string; - markup: string; -} - -interface MarkdownContentProps { - background: Image; - content: MarkdownContent; - theme: Theme; -} - -const MarkdownContent = ({ - background, - content, - theme, -}: MarkdownContentProps) => ( - - {content.title && ( - /* @ts-expect-error This is fine */ - - <Markdown>{content.title}</Markdown> - - )} - - {content.markup} - - -); - -export default MarkdownContent; diff --git a/server/routes/components/slide-layouts/ReactContent.tsx b/server/routes/components/slide-layouts/ReactContent.tsx deleted file mode 100644 index cb8c53df..00000000 --- a/server/routes/components/slide-layouts/ReactContent.tsx +++ /dev/null @@ -1,24 +0,0 @@ -/** @jsx jsx */ -import { jsx } from "@emotion/core"; -import styled from "@emotion/styled"; -import { Theme } from "../../../schema/Theme"; - -const ReactPageContainer = styled.div` - min-height: 100vh; - max-height: 100vh; - display: grid; - align-items: center; - justify-items: center; -`; - -interface ReactContentProps { - content: JSX.Element; - theme: Theme; - css: {}; -} - -function ReactContent({ content, css }: ReactContentProps) { - return {content}; -} - -export default ReactContent; diff --git a/server/routes/components/slide-layouts/SectionContent.tsx b/server/routes/components/slide-layouts/SectionContent.tsx deleted file mode 100644 index b587102a..00000000 --- a/server/routes/components/slide-layouts/SectionContent.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import styled from "@emotion/styled"; -import modularScale from "polished/lib/helpers/modularScale"; -import React from "react"; -import { Theme } from "../../../schema/Theme"; -import excludeProps from "../exclude-props"; - -const SectionPageContainer = styled(excludeProps("backgroundColor", "div"))` - min-height: 100vh; - max-height: 100vh; - display: grid; - grid-template-rows: 1fr; - align-items: center; - background: ${props => props.background}; -`; - -const Title = styled.h1` - font-size: ${modularScale(7)}; - margin-left: 10vw; - color: ${props => props.color}; -`; - -export interface SectionContent { - title: string; -} - -interface SectionContentProps { - content: SectionContent; - theme: Theme; -} - -const SectionContent = ({ content, theme }: SectionContentProps) => ( - - {/* @ts-expect-error This is fine */} - {content.title} - -); - -export default SectionContent; diff --git a/server/routes/components/slide-layouts/TitleContent.tsx b/server/routes/components/slide-layouts/TitleContent.tsx deleted file mode 100644 index a0399bf9..00000000 --- a/server/routes/components/slide-layouts/TitleContent.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import styled from "@emotion/styled"; -import modularScale from "polished/lib/helpers/modularScale"; -import React from "react"; -import { Theme } from "../../../schema/Theme"; - -const TitlePageContainer = styled.div` - min-height: 100vh; - max-height: 100vh; - display: grid; - align-items: center; - justify-items: center; -`; - -const Title = styled.h1` - font-size: ${modularScale(7)}; - color: ${(props) => props.color}; - padding: 8vw; -`; - -/*const Subtitle = styled.h2` - font-size: ${modularScale(4)}; - margin-right: 5vw; - justify-self: end; - color: ${props => props.color}; -`;*/ - -export interface TitleContent { - title: JSX.Element; -} - -interface TitleContentProps { - content: TitleContent; - theme: Theme; -} - -function TitleContent({ content, theme }: TitleContentProps) { - return ( - - {/* @ts-expect-error This is fine */} - {content.title} - - ); -} - -export default TitleContent; diff --git a/server/routes/components/slide-layouts/get-background.ts b/server/routes/components/slide-layouts/get-background.ts deleted file mode 100644 index 93d18135..00000000 --- a/server/routes/components/slide-layouts/get-background.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Image } from "../../../schema/Image"; - -function getBackground(background: Image) { - return background ? `${linearGradient()},url(${background.url})` : ""; -} - -// TODO: Make this more flexible -function linearGradient() { - return `linear-gradient(rgba(0, 0, 0, 0.5), rgba(65, 35, 0, 0.05))`; -} - -export default getBackground; diff --git a/server/routes/components/slide-layouts/index.ts b/server/routes/components/slide-layouts/index.ts deleted file mode 100644 index 2ba9648c..00000000 --- a/server/routes/components/slide-layouts/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import EMBED from "./EmbedContent"; -import GRID from "./GridContent"; -import IMAGE from "./ImageContent"; -import MARKDOWN from "./MarkdownContent"; -import REACT from "./ReactContent"; -import SECTION from "./SectionContent"; -import TITLE from "./TitleContent"; - -export default { - IMAGE, - EMBED, - MARKDOWN, - REACT, - SECTION, - TITLE, - GRID, -}; diff --git a/server/routes/date-utils.ts b/server/routes/date-utils.ts deleted file mode 100644 index d8010f44..00000000 --- a/server/routes/date-utils.ts +++ /dev/null @@ -1,8 +0,0 @@ -// TODO: Use browser here instead? -function dayToFinnishLocale(day: string): string { - const date = new Date(day); - - return `${date.getDate()}.${date.getMonth() + 1}.${date.getFullYear()}`; -} - -export { dayToFinnishLocale }; diff --git a/server/routes/queries/conferenceDayQuery.ts b/server/routes/queries/conferenceDayQuery.ts deleted file mode 100644 index 722c8f66..00000000 --- a/server/routes/queries/conferenceDayQuery.ts +++ /dev/null @@ -1,17 +0,0 @@ -const conferenceDayQuery = ` -query ConferenceDayQuery { - allSeries { - id - name - conferences { - id - name - schedules { - day - } - } - } -} -`; - -export default conferenceDayQuery; diff --git a/server/routes/queries/conferenceDaysQuery.ts b/server/routes/queries/conferenceDaysQuery.ts deleted file mode 100644 index f517c99f..00000000 --- a/server/routes/queries/conferenceDaysQuery.ts +++ /dev/null @@ -1,19 +0,0 @@ -// TODO: Separate location query -const conferenceDaysQuery = ` -query ConferenceDaysQuery($conferenceId: ID!) { - conference(id: $conferenceId) { - slogan - schedules { - day - } - locations { - city - country { - name - } - } - } -} -`; - -export default conferenceDaysQuery; diff --git a/server/routes/queries/fragments/themeFragment.ts b/server/routes/queries/fragments/themeFragment.ts deleted file mode 100644 index 0c510ac4..00000000 --- a/server/routes/queries/fragments/themeFragment.ts +++ /dev/null @@ -1,51 +0,0 @@ -const themeFragment = ` -fragment themeFragment on Theme { - id - textures { - url - style { - backgroundSize - } - } - colors { - primary - secondary - text - background - } - fonts { - primary - secondary - variants { - family - weight - style - fileName - formats - href - } - } - logos { - black { - ...logoFragment - } - colored { - ...logoFragment - } - white { - ...logoFragment - } - } -} - -fragment logoFragment on WithWithoutText { - withText { - url - } - withoutText { - url - } -} -`; - -export default themeFragment; diff --git a/server/routes/queries/index.ts b/server/routes/queries/index.ts deleted file mode 100644 index 66822b7d..00000000 --- a/server/routes/queries/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import conferenceDayQuery from "./conferenceDayQuery"; -import conferenceDaysQuery from "./conferenceDaysQuery"; -import scheduleQuery from "./scheduleQuery"; -import speakerTalkQuery from "./speakerTalkQuery"; -import sponsorQuery from "./sponsorQuery"; -import themeQuery from "./themeQuery"; -import themesQuery from "./themesQuery"; - -export { - conferenceDayQuery, - conferenceDaysQuery, - scheduleQuery, - speakerTalkQuery, - sponsorQuery, - themeQuery, - themesQuery, -}; diff --git a/server/routes/queries/scheduleQuery.ts b/server/routes/queries/scheduleQuery.ts deleted file mode 100644 index b75c2e14..00000000 --- a/server/routes/queries/scheduleQuery.ts +++ /dev/null @@ -1,25 +0,0 @@ -const scheduleQuery = ` -query ScheduleQuery($conferenceId: ID!, $day: String!) { - schedule(conferenceId: $conferenceId, day: $day) { - day - description - intervals { - title - begin - end - sessions { - type - title - people { - name - image { - url - } - } - } - } - } -} -`; - -export default scheduleQuery; diff --git a/server/routes/queries/speakerTalkQuery.ts b/server/routes/queries/speakerTalkQuery.ts deleted file mode 100644 index d4548db4..00000000 --- a/server/routes/queries/speakerTalkQuery.ts +++ /dev/null @@ -1,15 +0,0 @@ -const speakerTalkQuery = ` -query SpeakerTalkQuery($conferenceId: ID!, $contactName: String!) { - contact(contactName: $contactName, conferenceId: $conferenceId) { - name - image { - url - } - talks { - title - } - } -} -`; - -export default speakerTalkQuery; diff --git a/server/routes/queries/sponsorQuery.ts b/server/routes/queries/sponsorQuery.ts deleted file mode 100644 index 61913ec5..00000000 --- a/server/routes/queries/sponsorQuery.ts +++ /dev/null @@ -1,34 +0,0 @@ -const sponsorQuery = ` -query PageQuery($conferenceId: ID!) { - conference(id: $conferenceId) { - goldSponsors { - ...SponsorFragment - } - silverSponsors { - ...SponsorFragment - } - bronzeSponsors { - ...SponsorFragment - } - platformSponsors { - ...SponsorFragment - } - partners { - ...SponsorFragment - } - } -} - -fragment SponsorFragment on Contact { - name - social { - homepage - } - about - image { - url - } -} -`; - -export default sponsorQuery; diff --git a/server/routes/queries/themeQuery.ts b/server/routes/queries/themeQuery.ts deleted file mode 100644 index 3f7b22e0..00000000 --- a/server/routes/queries/themeQuery.ts +++ /dev/null @@ -1,13 +0,0 @@ -import themeFragment from "./fragments/themeFragment"; - -const themeQuery = ` -query ThemeQuery($conferenceSeriesId: ID!) { - theme(conferenceId: $conferenceSeriesId) { - ...themeFragment - } -} - -${themeFragment} -`; - -export default themeQuery; diff --git a/server/routes/queries/themesQuery.ts b/server/routes/queries/themesQuery.ts deleted file mode 100644 index 6ee433a0..00000000 --- a/server/routes/queries/themesQuery.ts +++ /dev/null @@ -1,13 +0,0 @@ -import themeFragment from "./fragments/themeFragment"; - -const themesQuery = ` -query ThemesQuery { - themes { - ...themeFragment - } -} - -${themeFragment} -`; - -export default themesQuery; diff --git a/server/routes/templates/BadgeTemplate.tsx b/server/routes/templates/BadgeTemplate.tsx deleted file mode 100644 index 8b257344..00000000 --- a/server/routes/templates/BadgeTemplate.tsx +++ /dev/null @@ -1,422 +0,0 @@ -import styled from "@emotion/styled"; -import { Color, WidthProperty } from "csstype"; -import chunk from "lodash/chunk"; -import flatten from "lodash/flatten"; -import get from "lodash/get"; -import map from "lodash/map"; -import * as React from "react"; -import { Contact, ContactType } from "../../schema/Contact"; -import { Theme } from "../../schema/Theme"; -import Badge from "../components/Badge"; -import connect from "../components/connect"; - -const BadgeTemplateContainer = styled.section``; - -interface BadgeTemplateProps { - attendees: Contact[]; - theme: Theme; - id: string; - showOnlyTemplates: boolean; - emptyAttendees: number; - emptyOrganizers: number; - emptyPress: number; - emptySpeakers: number; - emptySponsors: number; - // TODO: Likely a better structure - /* - emptyAmounts: { - [AttendeeType.ATTENDEE]: number; - [AttendeeType.ORGANIZER]: number; - [AttendeeType.SPEAKER]: number; - [AttendeeType.SPONSOR]: number; - }; - */ -} - -const defaultAttendees: Contact[] = [ - { - type: [ContactType.ATTENDEE], - name: "John Longsurname-Anotherlongone", - social: { - twitter: "johndoe", - }, - company: "John Doe Enterprises", - about: "", - image: { url: "" }, - location: {}, - }, - { - type: [ContactType.ORGANIZER], - name: "Jane Doe", - social: { - twitter: "johndoe", - }, - company: "John Doe Enterprises", - about: "", - image: { url: "" }, - location: {}, - }, - { - type: [ContactType.PRESS], - name: "Janette Doe", - social: { - twitter: "janettedoe", - }, - company: "News Corp", - about: "", - image: { url: "" }, - location: {}, - }, - { - type: [ContactType.SPEAKER], - name: "John Doedoedoedoedoedoedoe", - social: { - twitter: "johndoe", - }, - company: "John Doe Enterprises", - about: "", - image: { url: "" }, - location: {}, - }, - { - type: [ContactType.SPONSOR], - name: "John-Jack-Jim-Joe-Joel-Jeff Doe", - social: { - twitter: "johndoe", - }, - company: "John & Son Doe Enterprises & Co.", - about: "", - image: { url: "" }, - location: {}, - }, -]; - -function BadgeTemplate({ - id, - theme, - attendees = defaultAttendees, - showOnlyTemplates, - emptyAttendees = 0, - emptyOrganizers = 0, - emptyPress = 0, - emptySpeakers = 0, - emptySponsors = 0, -}: BadgeTemplateProps) { - const badgesPerPage = 4; - let pages; - - if (showOnlyTemplates) { - pages = chunk( - getBadgeData( - [ - { type: [ContactType.ATTENDEE] }, - { type: [ContactType.ORGANIZER] }, - { type: [ContactType.PRESS] }, - { type: [ContactType.SPEAKER] }, - { type: [ContactType.SPONSOR] }, - ], - { - [ContactType.ATTENDEE]: 0, - [ContactType.ORGANIZER]: 0, - [ContactType.PRESS]: 0, - [ContactType.SPEAKER]: 0, - [ContactType.SPONSOR]: 0, - } - ), - badgesPerPage - ); - } else { - pages = chunk( - fillWithEmpties( - getBadgeData(attendees, { - [ContactType.ATTENDEE]: emptyAttendees, - [ContactType.ORGANIZER]: emptyOrganizers, - [ContactType.PRESS]: emptyPress, - [ContactType.SPEAKER]: emptySpeakers, - [ContactType.SPONSOR]: emptySponsors, - }), - badgesPerPage - ), - badgesPerPage - ); - } - - return ( - - {map(pages, (tickets, i) => ( - - ))} - - ); -} - -const ConnectedBadgeTemplate = connect( - "/graphql", - `query AttendeeQuery($conferenceId: ID!) { - conference(id: $conferenceId) { - attendees { - name - company - type - social { - twitter - } - } - } -}`, - {}, - ({ conferenceId }) => ({ conferenceId }) -)( - ({ - conference, - id, - theme, - showOnlyTemplates, - emptyAttendees, - emptyOrganizers, - emptyPress, - emptySpeakers, - emptySponsors, - }) => ( - - ) -); - -ConnectedBadgeTemplate.filename = "badge"; - -ConnectedBadgeTemplate.variables = [ - { - id: "showOnlyTemplates", - validation: { - type: Boolean, - default: true, - }, - }, - { - id: "conferenceId", - query: `query ConferenceIdQuery { - conferences { - id - name - } -}`, - mapToCollection({ conferences }) { - return conferences; - }, - mapToOption({ id, name }) { - return { - value: id, - label: name, - }; - }, - }, - // TODO - /*{ - id: 'attendees', - validation: { - type: Array, - of: Attendee, - default: defaultAttendees - } - }*/ - // TODO: Figure out how to model this case. - // Ideally this would be abstracted further so it's - // not worth solving yet. - /*{ - id: "emptyAmounts", - validation: { - type: Object, - default: { - attendees: 0, - organizers: 0, - speakers: 0, - sponsors: 0, - }, - }, - },*/ - { - id: "emptyAttendees", - validation: { - type: Number, - default: 0, - }, - }, - { - id: "emptyOrganizers", - validation: { - type: Number, - default: 0, - }, - }, - { - id: "emptyPress", - validation: { - type: Number, - default: 0, - }, - }, - { - id: "emptySpeakers", - validation: { - type: Number, - default: 0, - }, - }, - { - id: "emptySponsors", - validation: { - type: Number, - default: 0, - }, - }, -]; - -interface PageProps { - defaultColor: Color; - logo: string; - texture: string; - tickets: any[]; // TODO - showBackside: boolean; -} - -interface PageSheetProps { - width: WidthProperty; -} - -// TODO: Is the Safari fix needed anymore? -// @ts-expect-error This is fine -const PageSheet = styled.section` - text-align: center; - width: ${({ width }) => width}; - display: flex; - flex-wrap: wrap; - - @media print { - height: 11.5in !important; /* Adjust for Safari print mode */ - } -` as React.FC; - -const PageBadgeContainer = styled.div` - display: inline-block; -`; - -function Page({ - defaultColor, - logo, - texture, - tickets = [], - showBackside, -}: PageProps) { - const pairs = chunk(tickets, 2); - const reverse = flatten(pairs.map(pair => [pair[1], pair[0]])); - const width = "105mm"; // A6 - const height = "148mm"; // A6 - - // TODO: Figure out how to deal withpage width properly - // TODO: Implement separate layouts for front/back. Now we just - // use the same. - return ( - <> - - {tickets.map((attendee: Contact, i) => ( - - - - ))} - - {showBackside && ( - - {reverse.map((attendee, i) => ( - - - - ))} - - )} - - ); -} - -type BadgeTypes = - | ContactType.ATTENDEE - | ContactType.ORGANIZER - | ContactType.PRESS - | ContactType.SPEAKER - | ContactType.SPONSOR; - -function getBadgeData( - tickets, - emptyAmounts: { [key in BadgeTypes]: number } = { - [ContactType.ATTENDEE]: 0, - [ContactType.ORGANIZER]: 0, - [ContactType.PRESS]: 0, - [ContactType.SPEAKER]: 0, - [ContactType.SPONSOR]: 0, - } -) { - const ret = tickets.concat( - flatten( - map(emptyAmounts, (amount, type) => - // TODO: See if it's possible to eliminate "as" from here - Array(amount).fill(getEmptyData(type as ContactType)) - ) - ) - ); - - return ret; -} - -function fillWithEmpties(badges, badgesPerPage, type = ContactType.ATTENDEE) { - return badges.concat( - Array(badges.length % badgesPerPage).fill(getEmptyData(type)) - ); -} - -function getEmptyData(type: ContactType): Contact { - return { - type: [type], - name: "", - company: "", - about: "", - image: { url: "" }, - social: { - twitter: "", - }, - location: {}, - }; -} - -// TODO: Connect to ticket API - -export default ConnectedBadgeTemplate; diff --git a/server/routes/templates/BusinessCardTemplate.tsx b/server/routes/templates/BusinessCardTemplate.tsx deleted file mode 100644 index 74ee606c..00000000 --- a/server/routes/templates/BusinessCardTemplate.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import styled from "@emotion/styled"; -import Markdown from "markdown-to-jsx"; -import * as React from "react"; -import { Theme } from "../../schema/Theme"; -import Card from "../components/Card"; - -interface BusinessCardTemplateContainerProps { - id: string; -} - -const BusinessCardTemplateContainer = styled.section`` as React.FC< - BusinessCardTemplateContainerProps ->; - -const BusinessCardContainer = styled(Card.Container)``; -const BusinessCardFront = styled(Card.Front)` - padding: 5mm; -`; -const BusinessCardBack = styled(Card.Back)` - padding: 5mm; -`; - -interface BusinessCardTemplateProps { - theme: Theme; - id: string; - showFront: boolean; - width: string; - height: string; - amount: number; - front: string; - back: string; -} - -function BusinessCardTemplate({ - id, - theme, - showFront, - width, - height, - front = "", - back = "", -}: BusinessCardTemplateProps) { - const frontText = front.replace(/\r?\n/g, "
"); - const backText = back.replace(/\r?\n/g, "
"); - - return ( - - - - {showFront ? frontText : backText} - - - {showFront ? backText : frontText} - - - - ); -} - -BusinessCardTemplate.filename = "business-card"; - -BusinessCardTemplate.variables = [ - { - id: "showFront", - validation: { type: Boolean, default: true }, - }, - { - id: "width", - validation: { type: String, default: "85mm" }, - }, - { - id: "height", - validation: { type: String, default: "55mm" }, - }, - { - id: "front", - // TODO: Use proper TS enum for modifiers - validation: { - type: String, - modifier: "long", - default: `John Woo -**+1234567890** - -Woo Corp. - CO123456789 -demo@localhost`, - }, - }, - { - id: "back", - // TODO: Use proper TS enum for modifiers - validation: { - type: String, - modifier: "long", - default: `Martial Artist`, - }, - }, -]; - -export default BusinessCardTemplate; diff --git a/server/routes/templates/HeaderTemplate.tsx b/server/routes/templates/HeaderTemplate.tsx deleted file mode 100644 index 99ea70dd..00000000 --- a/server/routes/templates/HeaderTemplate.tsx +++ /dev/null @@ -1,305 +0,0 @@ -/** @jsx jsx */ -import { jsx } from "@emotion/core"; -import styled from "@emotion/styled"; -import { Color, HeightProperty, WidthProperty } from "csstype"; -import hexToRgba from "hex-to-rgba"; -import map from "lodash/map"; -import * as React from "react"; -import { Conference } from "../../schema/Conference"; -import { Theme } from "../../schema/Theme"; -import connect from "../components/connect"; -import { dayToFinnishLocale } from "../date-utils"; -import conferenceDaysQuery from "../queries/conferenceDaysQuery"; - -interface HeaderContainerProps { - id: string; - primaryColor: Color; - secondaryColor: Color; - width: WidthProperty; - height: HeightProperty; - texture: string; -} - -// TODO: Allow alpha to be defined for both -const HeaderPageContainer = styled.div` - display: grid; - background-image: ${({ - primaryColor, - secondaryColor, - texture, - }: HeaderContainerProps) => `linear-gradient( - ${primaryColor}, - ${hexToRgba(secondaryColor, 0.39)} - ), - url("${texture}")`}; - background-size: cover; - position: relative; - width: ${({ width }: HeaderContainerProps) => width}; - height: ${({ height }: HeaderContainerProps) => height}; - overflow: hidden; - color: white; -` as React.FC; - -const TwitterSafeUser = styled.div` - position: absolute; - bottom: 0; - background-color: #ff00008f; - width: 450px; - height: 200px; - z-index: 1; -`; -const TwitterSafeTop = styled.div` - position: absolute; - top: 0; - background-color: #ff00008f; - width: 100%; - height: 40px; - z-index: 1; -`; -const TwitterSafeBottom = styled.div` - position: absolute; - bottom: 0; - left: 450px; - background-color: #ff00008f; - width: 100%; - height: 40px; - z-index: 1; -`; - -function TwitterSafeOverlay() { - return ( - - - - - - ); -} - -interface PrimaryRowProps { - useTwitterHeader: boolean; -} - -const PrimaryRow = styled.div` - display: grid; - grid-template-columns: ${({ useTwitterHeader }: PrimaryRowProps) => - useTwitterHeader ? "1fr 0.2fr" : "1fr 1fr"}; -` as React.FC; - -interface SecondaryRowProps { - useTwitterHeader: boolean; -} - -const SecondaryRow = styled.div` - display: grid; - padding-left: ${({ useTwitterHeader }: SecondaryRowProps) => - useTwitterHeader ? "30em" : "5em"}; -` as React.FC; - -const HeaderInfoContainer = styled.div` - text-align: right; - padding-right: 50px; -`; - -interface HeaderLogoProps { - src: string; - useTwitterHeader: boolean; -} - -const HeaderLogo = styled.img` - padding-left: 3em; - padding-right: 3em; - padding-top: 1.8em; - width: 100%; - height: ${({ useTwitterHeader }: HeaderLogoProps) => - useTwitterHeader ? "20em" : ""}; -` as React.FC; - -const HeaderConferenceDays = styled.h1` - padding-top: 2em; -`; - -const HeaderLocation = styled.h2` - padding-top: 1em; -`; - -const HeaderSlogan = styled.h2` - padding-top: 1em; -`; - -const HeaderCoupon = styled.h3` - padding-top: 2em; - font-family: "Courier New", Courier, monospace; -`; - -enum HeaderType { - WEB = "web", - TWITTER = "twitter", - A4 = "a4", -} - -interface HeaderTemplateProps { - conference?: Conference; - theme: Theme; - id: string; - type: HeaderType; - coupon?: string; - discountPercentage?: string; - showTwitterSafeArea: boolean; - showDates: boolean; - showLocation: boolean; -} - -function HeaderTemplate({ - conference, - theme, - id, - type, - coupon, - discountPercentage, - showTwitterSafeArea, - showDates, - showLocation, -}: HeaderTemplateProps) { - const { locations, schedules, slogan } = conference || { - locations: [], - schedules: [], - slogan: "", - }; - const location = - locations && locations.length > 0 && locations[0] - ? { - city: locations[0].city, - country: locations[0].country && locations[0].country.name, - } - : null; - const conferenceDays = map(schedules, ({ day }) => dayToFinnishLocale(day)); - const firstDay = conferenceDays[0]; - const lastDay = conferenceDays[conferenceDays.length - 1]; - - return ( - - {showTwitterSafeArea && } - - - - {showDates && firstDay && lastDay && ( - - {firstDay}-{lastDay} - - )} - {showLocation && location && ( - - {location.city}, {location.country} - - )} - - - - {slogan} - {coupon && ( - - Use {coupon} for a {discountPercentage}% discount! - - )} - - - ); -} - -function resolveWidth(type) { - switch (type) { - case HeaderType.TWITTER: - return "1500px"; - case HeaderType.A4: - return "297mm"; - case HeaderType.WEB: - default: - return "1024px"; - } -} - -function resolveHeight(type) { - switch (type) { - case HeaderType.TWITTER: - return "500px"; - case HeaderType.A4: - return "210mm"; - case HeaderType.WEB: - default: - return "512px"; - } -} - -const ConnectedHeaderTemplate = connect( - "/graphql", - conferenceDaysQuery, - {}, - ({ conferenceId }) => ({ conferenceId }) -)(HeaderTemplate); - -ConnectedHeaderTemplate.filename = "header"; - -// TODO: Better use enums here -ConnectedHeaderTemplate.variables = [ - { - id: "type", - /* TODO: Fix default value */ - validation: { - type: "enum", - values: [HeaderType.WEB, HeaderType.TWITTER, HeaderType.A4], - default: HeaderType.WEB, - }, - }, - { - id: "conferenceId", - query: `query ConferenceIdQuery { - conferences { - id - name - } -}`, - mapToCollection({ conferences }) { - return conferences; - }, - mapToOption({ id, name }) { - return { - value: id, - label: name, - }; - }, - }, - { - id: "coupon", - validation: { type: String, default: "" }, - }, - { - id: "discountPercentage", - validation: { type: String, default: "" }, - }, - { - id: "showTwitterSafeArea", - validation: { type: Boolean, default: false }, - }, - { - id: "showDates", - validation: { type: Boolean, default: true }, - }, - { - id: "showLocation", - validation: { type: Boolean, default: true }, - }, -]; - -export default ConnectedHeaderTemplate; diff --git a/server/routes/templates/IntroTemplate.tsx b/server/routes/templates/IntroTemplate.tsx deleted file mode 100644 index 06b20e45..00000000 --- a/server/routes/templates/IntroTemplate.tsx +++ /dev/null @@ -1,328 +0,0 @@ -import styled from "@emotion/styled"; -import { Color, WidthProperty } from "csstype"; -import hexToRgba from "hex-to-rgba"; -import desaturate from "polished/lib/color/desaturate"; -import * as React from "react"; -import { Theme } from "../../schema/Theme"; -import connect from "../components/connect"; -import Contacts from "../components/Contacts"; -import Presentation from "../components/Presentation"; -import Sponsor from "../components/Sponsor"; -import sponsorQuery from "../queries/sponsorQuery"; - -interface SchedulePageContainerProps { - id: string; - primaryColor: Color; - secondaryColor: Color; - texture: string; - sideBarWidth: WidthProperty; -} - -// @ts-expect-error This is fine -const IntroTemplateContainer = styled.article` - background-image: ${({ - primaryColor, - secondaryColor, - texture, - }: SchedulePageContainerProps) => `linear-gradient( - ${primaryColor}, - ${desaturate(0.2, hexToRgba(secondaryColor, 0.79))} - ), - url("${texture}")`}; - background-size: cover; - position: relative; - padding: 0; - width: ${({ sideBarWidth }) => - sideBarWidth ? `calc(100vw - ${sideBarWidth})` : "100vw"}; - overflow: hidden; -` as React.FC; - -interface IntroTemplateProps { - theme: Theme; - conferenceId: string; - id: string; - sideBarWidth: WidthProperty; -} - -function IntroTemplate({ - conferenceId, - theme, - id, - sideBarWidth, -}: IntroTemplateProps) { - return ( - - - - ); -} - -// TODO: Refactor so that `Sponsor` accepts a css parameter -const sponsorRules = { - goldSponsors: { - "max-height": "8cm", - "max-width": "14cm", - margin: "1cm", - }, - silverSponsors: { - "max-height": "3cm", - "max-width": "5cm", - margin: "1cm", - }, - bronzeSponsors: { - "max-height": "1.5cm", - "max-width": "3.5cm", - margin: "1cm", - }, - partners: { - "max-height": "3cm", - "max-width": "5cm", - margin: "1cm", - }, -}; - -const SponsorsContainer = styled.div` - height: 100%; - width: 100%; - display: grid; - grid-template-columns: 1fr 1fr 1fr; - background-color: #ffffffba; - justify-items: center; - align-items: center; -`; - -const SponsorContainer = styled.div` - height: 100%; - width: 100%; - display: grid; - grid-template-columns: 1fr; - background-color: #ffffffba; - justify-items: center; - align-items: center; -`; - -const SilverSponsorsContainer = styled.div` - height: 100%; - width: 100%; - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr 1fr; - background-color: #ffffffba; - justify-items: center; - align-items: center; -`; - -const PartnersContainer = styled.div` - height: 100%; - width: 100%; - grid-template-columns: 1fr 1fr 1fr 1fr; - display: grid; - background-color: #ffffffba; - justify-items: center; - align-items: center; -`; - -const connectSponsor = (type: string) => - connect("/graphql", sponsorQuery, ({ conferenceId }) => ({ conferenceId }))( - ({ conference, index }) => ( - - ) - ); - -const connectSponsors = (type: string) => - connect("/graphql", sponsorQuery, ({ conferenceId }) => ({ conferenceId }))( - ({ conference }) => ( - - ) - ); - -// const ConnectedGoldSponsors = connectSponsors("goldSponsors"); -const ConnectedGoldSponsor = connectSponsor("goldSponsors"); -const ConnectedSilverSponsors = connectSponsors("silverSponsors"); -const ConnectedBronzeSponsors = connectSponsors("bronzeSponsors"); -const ConnectedPartners = connectSponsors("partners"); - -function getSlides(theme) { - const titleSlide = [ - { - layout: "IMAGE", - content: { - url: theme.logos.white.withText.url, - }, - css: { - backgroundImage: `linear-gradient(${theme.colors.primary}, ${desaturate( - 0.2, - hexToRgba(theme.colors.secondary, 0.79) - )}), url("${theme.textures[0].url}")`, - backgroundSize: "cover", - }, - }, - { - layout: "TITLE", - content: { - title: ( - <> - "Professional" MCs - @jevakallio and @NikkitaFTW - - ), - }, - }, - { - layout: "IMAGE", - content: { - url: "https://imgoat.com/uploads/8baa56554f/141386.jpeg", - }, - }, - { - layout: "TITLE", - content: { - title: "~400 people", - }, - }, - { - layout: "TITLE", - content: { - title: "Six workshops", - }, - }, - { - layout: "TITLE", - content: { - title: "27 speakers", - }, - }, - { - layout: "TITLE", - content: { - title: "Two days", - }, - }, - { - layout: "TITLE", - content: { - title: "Single track", - }, - }, - { - layout: "TITLE", - content: { - title: "Themed sessions", - }, - }, - { - layout: "MARKDOWN", - background: { - url: "/media/assets/disco.jpg", - }, - content: { - title: "Two parties", - markup: ` -* #SMOOSH -* Afterparty - `, - }, - }, - { - layout: "REACT", - content: ( - - - - ), - }, - { - layout: "REACT", - content: ( - - - - ), - }, - { - layout: "REACT", - content: ( - - - - ), - }, - { - layout: "REACT", - content: ( - - - - ), - }, - { - layout: "REACT", - content: ( - - - - ), - }, - { - layout: "REACT", - content: ( - - - - ), - }, - { - layout: "TITLE", - content: { - title: "Remember to join the conference Slack", - }, - }, - { - layout: "MARKDOWN", - content: { - title: "Code of Conduct", - markup: ` -* Berlin Code of Conduct -* Report to info@react-finland.fi -* Or to any org with RF logo shirt`, - }, - }, - { - layout: "IMAGE", - content: { - url: "/media/assets/red-strings.jpg", - }, - }, - { - layout: "TITLE", - content: { - title: "#ReactFinland", - }, - }, - ]; - - return titleSlide; -} - -export default IntroTemplate; diff --git a/server/routes/templates/PresentationTemplate.tsx b/server/routes/templates/PresentationTemplate.tsx deleted file mode 100644 index 5573764d..00000000 --- a/server/routes/templates/PresentationTemplate.tsx +++ /dev/null @@ -1,330 +0,0 @@ -import styled from "@emotion/styled"; -import { Color, WidthProperty } from "csstype"; -import hexToRgba from "hex-to-rgba"; -import flatMap from "lodash/flatMap"; -import get from "lodash/get"; -import desaturate from "polished/lib/color/desaturate"; -import * as React from "react"; -import { Interval } from "../../schema/Interval"; -import { Theme } from "../../schema/Theme"; -import connect from "../components/connect"; -import Presentation from "../components/Presentation"; -import { dayToFinnishLocale } from "../date-utils"; -import Sponsors from "../components/Sponsors"; -import sponsorQuery from "../queries/sponsorQuery"; -import scheduleQuery from "../queries/scheduleQuery"; - -interface SchedulePageContainerProps { - id: string; - primaryColor: Color; - secondaryColor: Color; - textColor: Color; - texture: string; - sideBarWidth: WidthProperty; -} - -// @ts-expect-error This is fine -const PresentationTemplateContainer = styled.article` - background-image: ${({ - primaryColor, - secondaryColor, - texture, - }: SchedulePageContainerProps) => `linear-gradient( - ${primaryColor}, - ${desaturate(0.2, hexToRgba(secondaryColor, 0.79))} - ), - url("${texture}")`}; - background-size: cover; - position: relative; - padding: 0; - color: ${({ textColor }) => textColor }; - width: ${({ sideBarWidth }) => - sideBarWidth ? `calc(100vw - ${sideBarWidth})` : "100vw"}; - overflow: hidden; -` as React.FC; - -interface PresentationTemplateProps { - intervals?: Interval[]; - theme: Theme; - day: string; - conferenceId: string; - id: string; - sideBarWidth: WidthProperty; -} - -function PresentationTemplate({ - intervals, - conferenceId, - theme, - day, - id, - sideBarWidth, -}: PresentationTemplateProps) { - return ( - - - - ); -} - -const MainTitleContainer = styled.div` - width: 100%; - display: grid; -`; - -interface MainTitleDayProps { - color: Color; -} - -const MainTitleDay = styled.h1` - color: ${({ color }: MainTitleDayProps) => color}; - justify-self: right; - margin-right: 2cm; - font-size: 400%; -` as React.FC; - -function getSlides(theme: Theme, day, intervals, conferenceId) { - const titleSlide = [ - { - layout: "REACT", - content: ( - - - {day} - - ), - css: { - backgroundImage: `linear-gradient(${theme.colors.primary}, ${desaturate( - 0.2, - hexToRgba(theme.colors.secondary, 0.79) - )}), url("${theme.textures[0].url}")`, - backgroundSize: "cover", - }, - }, - ]; - const intervalSlides = intervalsToSlides(intervals, conferenceId); - - return titleSlide.concat(intervalSlides); -} - -const TitleContainer = styled.section` - display: grid; - grid-template-rows: 0.5fr 1.5fr; -` as React.FC<{}>; - -const TitleRowSingle = styled.div` - display: grid; - grid-template-columns: 1fr; -` as React.FC<{}>; - -const TitleRow = styled.div` - display: grid; - grid-template-columns: 1fr 1fr; -` as React.FC<{}>; - -const SpeakerImage = styled.img` - width: 75%; - max-width: 8cm; - justify-self: right; - align-self: center; - clip-path: polygon(0 0, 100% 0.5cm, 100% 100%, 0 calc(100% - 0.5cm)); -` as React.FC<{ src: string }>; - -const SpeakerTextContainer = styled.div``; - -const SpeakerTitle = styled.div` - margin-top: 0.5em; - margin-bottom: 0.5em; - font-size: 60%; -`; - -const SpeakerName = styled.div` - margin-top: 0.5em; - font-size: 50%; - opacity: 0.6; -`; - -const SpeakerTime = styled.div` - margin-top: 0.5em; - font-size: 40%; - opacity: 0.8; -`; - -const sponsorRules = { - gold: { - "max-height": "2cm", - "max-width": "6cm", - width: "6cm", - margin: "0 0.5cm 0.5cm 0.5cm", - display: "block", - }, - silver: { - "max-height": "2.5cm", - "max-width": "3cm", - width: "3cm", - margin: "0.5cm", - }, - bronze: { - "max-height": "1.25cm", - "max-width": "1.75cm", - width: "1.75cm", - margin: "0.25cm 0.5cm 0cm 0.5cm", - }, -}; - -const ConnectedSponsors = connect( - "/graphql", - sponsorQuery, - ({ conferenceId }: { conferenceId: string }) => ({ conferenceId }) -)(({ conference }) => ); - -const SponsorsContainer = styled.div` - width: 100%; - background-color: white; - margin-top: 4cm; -`; - -function intervalsToSlides(intervals, conferenceId) { - if (!intervals) { - return []; - } - - return flatMap(intervals, ({ title, begin, end, sessions }) => { - // Adjust from gmt+0 to gmt+3 - const adjustedBegin = - parseInt(begin.split(":")[0], 10) + 3 + ":" + begin.split(":")[1]; - const adjustedEnd = - parseInt(end.split(":")[0], 10) + 3 + ":" + end.split(":")[1]; - - const titleSlide = title - ? { - layout: "TITLE", - content: { - title: ( - - {title} - - {adjustedBegin}-{adjustedEnd} - - - ), - }, - } - : null; - const sessionSlides = sessions.map((session) => { - const hasPerson = session.people && session.people[0]; - const RowContainer = hasPerson ? TitleRow : TitleRowSingle; - - return { - layout: "TITLE", - content: { - title: ( - - {session.title} - - - - {hasPerson && session.people[0].name} - - {sessions.length === 1 && ( - - {adjustedBegin}-{adjustedEnd} - - )} - - {hasPerson && session.people[0].image.url ? ( - - ) : ( - - - - )} - - - ), - }, - }; - }); - - return titleSlide ? [titleSlide].concat(sessionSlides) : sessionSlides; - }); -} - -const ConnectedPresentationTemplate = connect( - "/graphql", - scheduleQuery, - {}, - ({ conferenceId, day }) => ({ conferenceId, day }) -)(({ schedule, theme, conferenceId, sideBarWidth, id }) => ( - -)); - -ConnectedPresentationTemplate.filename = "presentation"; - -// TODO: Better use enums here -ConnectedPresentationTemplate.variables = [ - { - id: "conferenceId", - query: `query ConferenceIdQuery { - conferences { - id - name - } -}`, - mapToCollection({ conferences }) { - return conferences; - }, - mapToOption({ id, name }) { - return { - value: id, - label: name, - }; - }, - }, - { - id: "day", - query: `query DayQuery($conferenceId: ID!) { - conference(id: $conferenceId) { - schedules { - day - } - } -}`, - mapToCollection({ conference }) { - return get(conference, "schedules", []); - }, - mapToOption({ day }) { - return { - value: day, - label: day, - }; - }, - }, -]; - -export default ConnectedPresentationTemplate; diff --git a/server/routes/templates/ScheduleTemplate.tsx b/server/routes/templates/ScheduleTemplate.tsx deleted file mode 100644 index 96b0d29e..00000000 --- a/server/routes/templates/ScheduleTemplate.tsx +++ /dev/null @@ -1,235 +0,0 @@ -import styled from "@emotion/styled"; -import { Color } from "csstype"; -import hexToRgba from "hex-to-rgba"; -import get from "lodash/get"; -import flatMap from "lodash/flatMap"; -import desaturate from "polished/lib/color/desaturate"; -import * as React from "react"; -import { Interval } from "../../schema/Interval"; -import { Theme } from "../../schema/Theme"; -import connect from "../components/connect"; -import Schedule from "../components/Schedule"; -import Sponsors from "../components/Sponsors"; -import { dayToFinnishLocale } from "../date-utils"; -import scheduleQuery from "../queries/scheduleQuery"; -import sponsorQuery from "../queries/sponsorQuery"; -interface SchedulePageContainerProps { - id: string; - primaryColor: Color; - secondaryColor: Color; - texture: string; -} - -const ScheduleTemplateContainer = styled.article` - display: grid; - background-image: ${({ - primaryColor, - secondaryColor, - texture, - }: SchedulePageContainerProps) => `linear-gradient( - ${primaryColor}, - ${desaturate(0.8, hexToRgba(secondaryColor, 0.89))} - ), - url("${texture}")`}; - background-size: cover; - position: relative; - padding: 0; - width: 29.7cm; - height: 21cm; - overflow: hidden; -` as React.FC; - -const ScheduleTemplateLogo = styled.img` - position: relative; - margin: 0cm 0.9cm 0cm; - width: 5cm; -` as React.FC<{ src: string }>; - -const ScheduleHeaderContainer = styled.section``; - -const ScheduleTemplateTitle = styled.h1` - color: white; - position: absolute; - right: 1.2cm; - top: 0cm; - font-size: 420%; - margin-top: 0.25cm; -` as React.FC<{}>; - -const ScheduleContentContainer = styled.div` - display: grid; - align-items: center; - justify-items: center; - position: relative; - margin: 0; - margin-top: -0.2cm; - padding: 0.25cm 0 0.25cm 0.25cm; - opacity: 0.9; - background-color: white; - height: 13.4cm; - clip-path: polygon(0 0, 100% 1cm, 100% 100%, 0 calc(100% - 1cm)); - z-index: 1; -` as React.FC<{}>; - -const PlaceholderContainer = styled.h1` - font-size: 1000%; -` as React.FC<{}>; - -interface ScheduleTemplateProps { - intervals?: Interval[]; - theme: Theme; - day: string; - conferenceId: string; - id: string; - placeholder: string; -} - -const ScheduleFooterContainer = styled.section` - margin-top: -0.3cm; -`; - -const sponsorRules = { - gold: { - "max-height": "2cm", - "max-width": "6cm", - width: "6cm", - margin: "0 0.5cm 0.5cm 0.5cm", - display: "block", - }, - silver: { - "max-height": "2.5cm", - "max-width": "3cm", - width: "3cm", - margin: "0.5cm", - }, - bronze: { - "max-height": "1.25cm", - "max-width": "1.75cm", - width: "1.75cm", - margin: "0.25cm 0.5cm 0cm 0.5cm", - }, -}; - -const ConnectedSponsors = connect( - "/graphql", - sponsorQuery, - ({ conferenceId }) => ({ conferenceId }) -)(({ conference }) => ); - -function ScheduleTemplate({ - intervals, - theme, - day, - conferenceId, - id, - placeholder, -}: ScheduleTemplateProps) { - return ( - - - - {day ? day : ""} - - - {placeholder ? ( - {placeholder} - ) : ( - intervals && - )} - - - - - - ); -} - -const ConnectedScheduleTemplate = connect( - "/graphql", - scheduleQuery, - {}, - ({ conferenceId, day }) => ({ conferenceId, day }) -)(({ schedule, theme, conferenceId, id, placeholder }) => ( - -)); - -function adjustTimezone(intervals) { - if (!intervals) { - return []; - } - - return flatMap(intervals, ({ begin, end, ...rest }) => { - // Adjust from gmt+0 to gmt+3 - const adjustedBegin = - parseInt(begin.split(":")[0], 10) + 3 + ":" + begin.split(":")[1]; - const adjustedEnd = - parseInt(end.split(":")[0], 10) + 3 + ":" + end.split(":")[1]; - - return { - ...rest, - begin: adjustedBegin, - end: adjustedEnd, - }; - }); -} - -ConnectedScheduleTemplate.filename = "schedule"; - -// TODO: Better use enums here -ConnectedScheduleTemplate.variables = [ - { - id: "placeholder", - validation: { type: String, default: "" }, - }, - { - id: "conferenceId", - query: `query ConferenceIdQuery { - conferences { - id - name - } -}`, - mapToCollection({ conferences }) { - return conferences; - }, - mapToOption({ id, name }) { - return { - value: id, - label: name, - }; - }, - }, - { - id: "day", - query: `query DayQuery($conferenceId: ID!) { - conference(id: $conferenceId) { - schedules { - day - } - } -}`, - mapToCollection({ conference }) { - return get(conference, "schedules", []); - }, - mapToOption({ day }) { - return { - value: day, - label: day, - }; - }, - }, -]; - -export default ConnectedScheduleTemplate; diff --git a/server/routes/templates/SessionTweetTemplate.tsx b/server/routes/templates/SessionTweetTemplate.tsx deleted file mode 100644 index 34aa7c6e..00000000 --- a/server/routes/templates/SessionTweetTemplate.tsx +++ /dev/null @@ -1,341 +0,0 @@ -import styled from "@emotion/styled"; -import { Color, FontFamilyProperty } from "csstype"; -import hexToRgba from "hex-to-rgba"; -import get from "lodash/get"; -import map from "lodash/map"; -import flatten from "lodash/flatten"; -import * as React from "react"; -import CopyToClipboard from "react-copy-to-clipboard"; -import { Contact } from "../../schema/Contact"; -import { Conference } from "../../schema/Conference"; -import { Interval } from "../../schema/Interval"; -import { Theme } from "../../schema/Theme"; -import connect from "../components/connect"; -import { dayToFinnishLocale } from "../date-utils"; - -const TweetTemplateContainer = styled.div``; -const TweetPageContainer = styled.div``; - -interface TweetContainerProps { - primaryColor: Color; - secondaryColor: Color; - texture: string; -} - -const TweetContainer = styled.div` - background-image: ${({ - primaryColor, - secondaryColor, - texture, - }: TweetContainerProps) => `linear-gradient( - ${primaryColor}, - ${hexToRgba(secondaryColor, 0.79)} - ), - url("${texture}")`}; - background-size: cover; - position: relative; - width: 880px; - height: 440px; - overflow: hidden; - display: grid; - grid-template-columns: 1fr 1fr; - color: white; -` as React.FC; - -const TweetTextContainer = styled.div` - position: relative; - margin-top: 2em; - padding: 0.25em; - max-width: 880px; - background-color: #fff6c8; -`; -const TweetTextToCopy = styled.span` - margin-right: 0.5em; -`; -const TweetCopyButton = styled.button` - position: absolute; - right: 0; - top: 0; - z-index: 1; -`; - -const TweetRow = styled.div` - display: grid; - grid-template-columns: 1fr 1fr; - align-items: center; -`; - -const TweetLogo = styled.img` - max-width: 10em; - margin-left: -0.5em; -`; - -const TweetConferenceDays = styled.h3``; - -const TweetText = styled.h2` - text-align: center; - padding-top: 0.5em; - font-size: 300%; -`; - -interface TweetDescriptionProps { - fontFamily: FontFamilyProperty; -} - -const TweetDescription = styled.h2` - text-align: center; - line-height: 1.5; - width: 100%; - font-size: 150%; - font-weight: 200; - font-family: ${({ fontFamily }: TweetDescriptionProps) => fontFamily}; -` as React.FC; - -interface SpeakerTweetTemplateProps { - conference?: Conference; - interval: Interval; - theme: Theme; - id: string; -} - -function SpeakerTweetTemplate({ - conference, - interval, - theme, - id, -}: SpeakerTweetTemplateProps) { - if (!conference) { - return null; - } - - const days = getConferenceDays(conference); - // TODO: Set up conference.hashtag (should not contain #) - const tweetTextToCopy = `Learn more about the topic at #${conference.name - .split(" ") - .join("")} (${days})`; - - return ( - - - {React.createElement(SpeakerTweet, { - logo: theme.logos.white.withText.url, - days, - interval, - theme, - conference, - })} - - - {tweetTextToCopy} - alert("Copied to clipboard")} - > - - - - - ); -} - -function getConferenceDays(conference): string { - const { schedules } = conference; - const conferenceDays = map(schedules, ({ day }) => dayToFinnishLocale(day)); - const firstDay = conferenceDays[0]; - const lastDay = conferenceDays[conferenceDays.length - 1]; - - return `${firstDay}-${lastDay}`; -} - -interface TweetProps { - days: string; - interval: Interval; - theme: Theme; - conference: Conference; -} - -const TweetInfoContainer = styled.div` - padding: 3em; - display: grid; - justify-content: center; -`; - -const TweetImageContainer = styled.div` - background: white; - padding: 3em; - display: grid; - grid-template-columns: 1fr 1fr; -`; - -interface TweetImageProps { - color?: Color; - isCircle?: boolean; - src: HTMLImageElement["src"]; - borderColor?: string; -} - -const TweetImage = styled.img` - width: 100%; - box-sizing: border-box; - border: 0.25em solid ${({ borderColor }: TweetImageProps) => borderColor}; - border-radius: 50%; -` as React.FC; - -const Centered = styled.div` - position: absolute; - margin: auto; - width: 150px; - left: 16%; - top: 50%; - margin-top: -75px; -` as React.FC; - -function SpeakerTweet({ days, interval, theme }: TweetProps) { - if (!interval) { - return null; - } - - const logo = theme.logos.white.withText.url; - const { title } = interval; - const speakers: Contact[] = flatten( - (interval.sessions || []).map(({ people }) => people || []) - ); - const people: Contact[] = interval.mc - ? [interval.mc].concat(speakers) - : speakers; - - return ( - - - {(people.length > 4 ? people.slice(1, 5) : people).map( - ({ name, image }) => ( - - ) - )} - {people.length > 4 && ( - - - - )} - - - - - {days} - - {title} - - {people.map(({ name }, i) => ( - - {name} - {i < people.length - 1 && , } - - ))} - - - - ); -} - -const ConnectedSpeakerTweetTemplate = connect( - "/graphql", - ` -query SpeakerTweetTemplateQuery($conferenceId: ID!, $intervalTitle: String!) { - interval(conferenceId: $conferenceId, intervalTitle: $intervalTitle) { - begin - end - title - mc { - name - image { - url - } - } - sessions { - title - description - people { - name - image { - url - } - } - } - } - conference(id: $conferenceId) { - name - slogan - schedules { - day - } - locations { - city - country { - name - } - } - } -} - `, - {}, - ({ conferenceId, intervalTitle }) => ({ conferenceId, intervalTitle }) -)(SpeakerTweetTemplate); - -ConnectedSpeakerTweetTemplate.filename = "speaker-tweet"; - -// TODO: Better use enums here -ConnectedSpeakerTweetTemplate.variables = [ - { - id: "conferenceId", - query: `query ConferenceIdQuery { - conferences { - id - name - } -}`, - mapToCollection({ conferences }) { - return conferences; - }, - mapToOption({ id, name }) { - return { - value: id, - label: name, - }; - }, - }, - { - id: "intervalTitle", - query: `query SessionQuery($conferenceId: ID!) { - conference(id: $conferenceId) { - schedules { - intervals { - title - } - } - } -}`, - mapToCollection({ conference }) { - return [] - .concat( - ...get(conference, "schedules", []).map(({ intervals }) => intervals) - ) - .filter(({ title }) => title); - }, - mapToOption({ title }) { - return { value: title, label: title }; - }, - }, -]; - -export default ConnectedSpeakerTweetTemplate; diff --git a/server/routes/templates/ThemeTemplate.tsx b/server/routes/templates/ThemeTemplate.tsx deleted file mode 100644 index a7971cf5..00000000 --- a/server/routes/templates/ThemeTemplate.tsx +++ /dev/null @@ -1,162 +0,0 @@ -import styled from "@emotion/styled"; -import { Color } from "csstype"; -import map from "lodash/map"; -import complement from "polished/lib/color/complement"; -import invert from "polished/lib/color/invert"; -import * as React from "react"; -import { Font, Theme } from "../../schema/Theme"; - -interface ThemeTemplateProps { - theme: Theme; -} - -const ThemeTemplateContainer = styled.section``; -const ThemeTemplateHeader = styled.h1``; - -const FontsContainer = styled.section` - margin-top: 1em; - margin-bottom: 1em; -`; -const FontsPrimaryHeader = styled.h2` - margin-bottom: 0.5em; -`; -const FontsSecondaryHeader = styled.h3` - margin-bottom: 0.5em; -`; - -interface FontContainerProps { - fontFamily: Font["family"]; -} - -const FontContainer = styled.div` - font-family: "${({ fontFamily }: FontContainerProps) => fontFamily}"; -` as React.FC; - -const TexturesContainer = styled.section` - margin-top: 1em; - margin-bottom: 1em; -`; -const TextureHeader = styled.h2` - margin-bottom: 0.5em; -`; - -interface TextureProps { - src: HTMLImageElement["src"]; -} -const Texture = styled.img` - max-width: 8em; - max-height: 8em; -` as React.FC; - -const ColorsContainer = styled.section` - margin-top: 1em; - margin-bottom: 1em; -`; -const ColorHeader = styled.h2` - margin-bottom: 0.5em; -`; - -interface ColorProps { - color: Color; -} -const Color = styled.div` - padding: 1em; - display: inline-block; - width: 8em; - height: 8em; - background-color: ${({ color }: ColorProps) => color}; - color: ${({ color }: ColorProps) => - tryTo(() => complement(invert(color)), "")}; -` as React.FC; - -const LogosContainer = styled.section` - margin-top: 1em; - margin-bottom: 1em; -`; -const LogoHeader = styled.h2` - margin-bottom: 0.5em; -`; - -interface LogoProps { - property: string; - alt: HTMLImageElement["alt"]; - src: HTMLImageElement["src"]; -} -const LogoContainer = styled.section` - margin-right: 1em; - display: inline-block; - vertical-align: top; - font-style: italic; -`; -const Logo = styled.img` - max-width: 8em; - max-height: 8em; - background-color: ${({ property }: LogoProps) => - tryTo(() => invert(property), "")}; -` as React.FC; -const LogoLabel = styled.label``; - -function tryTo(fn, defaultValue) { - try { - return fn(); - } catch (err) { - return defaultValue; - } -} - -interface ThemeTemplateProps { - theme: Theme; - id: string; -} - -function ThemeTemplate({ id, theme }: ThemeTemplateProps) { - return ( - - Theme - - Fonts - Primary - - The quick brown fox jumps over the lazy dog - - Secondary - - The quick brown fox jumps over the lazy dog - - - - Textures - {map(theme.textures, (texture, index) => ( - - ))} - - - Colors - {map(theme.colors, (color, colorProperty) => ( - - {colorProperty} - - ))} - - - Logos - {map(theme.logos, (logo, logoProperty) => - map(logo, (image, imageProperty) => { - const property = `${logoProperty}.${imageProperty}`; - - return ( - - {property} - - - ); - }) - )} - - - ); -} - -ThemeTemplate.filename = "theme"; - -export default ThemeTemplate; diff --git a/server/routes/templates/TweetTemplate.tsx b/server/routes/templates/TweetTemplate.tsx deleted file mode 100644 index c4f8bbc0..00000000 --- a/server/routes/templates/TweetTemplate.tsx +++ /dev/null @@ -1,466 +0,0 @@ -import styled from "@emotion/styled"; -import { Color, FontFamilyProperty } from "csstype"; -import hexToRgba from "hex-to-rgba"; -import get from "lodash/get"; -// import map from "lodash/map"; -import * as React from "react"; -import CopyToClipboard from "react-copy-to-clipboard"; -import titleCase from "to-title-case"; -import { Conference } from "../../schema/Conference"; -import { Contact, ContactType } from "../../schema/Contact"; -import { Theme } from "../../schema/Theme"; -import connect from "../components/connect"; -import { dayToFinnishLocale } from "../date-utils"; - -const TweetTemplateContainer = styled.div``; -const TweetPageContainer = styled.div``; - -interface TweetContainerProps { - primaryColor: Color; - secondaryColor: Color; - texture: string; -} - -const TweetContainer = styled.div` - background-image: ${({ - primaryColor, - secondaryColor, - texture, - }: TweetContainerProps) => `linear-gradient( - ${primaryColor}, - ${hexToRgba(secondaryColor, 0.79)} - ), - url("${texture}")`}; - background-size: cover; - position: relative; - width: 880px; - height: 440px; - overflow: hidden; - display: grid; - grid-template-columns: 1.1fr 0.9fr; - color: white; -` as React.FC; - -const TweetTextContainer = styled.div` - position: relative; - margin-top: 2em; - padding: 0.25em; - max-width: 880px; - background-color: #fff6c8; -`; -const TweetTextToCopy = styled.span` - margin-right: 0.5em; -`; -const TweetCopyButton = styled.button` - position: absolute; - right: 0; - top: 0; - z-index: 1; -`; - -const TweetRow = styled.div` - display: grid; - grid-template-columns: 1fr 1fr; - align-items: center; -`; - -const TweetLogo = styled.img` - max-width: 10em; - margin-left: -0.5em; -`; - -const TweetConferenceDays = styled.h3``; - -const TweetText = styled.h2` - padding-top: 0.5em; - font-size: 300%; -`; - -interface TweetDescriptionProps { - fontFamily: FontFamilyProperty; -} - -const TweetDescription = styled.h2` - width: 120%; - font-size: 200%; - font-weight: 200; - font-family: ${({ fontFamily }: TweetDescriptionProps) => fontFamily}; -` as React.FC; - -interface SpeakerTweetTemplateProps { - conference?: Conference; - contact: Contact; - theme: Theme; - id: string; -} - -function SpeakerTweetTemplate({ - conference, - contact, - theme, - id, -}: SpeakerTweetTemplateProps) { - if (!conference) { - return null; - } - - const days = getConferenceDays(conference); - // TODO: Set up conference.hashtag (should not contain #) - const tweetTextToCopy = `Learn more about the topic at #${conference.name - .split(" ") - .join("")} (${days})`; - - return ( - - - {React.createElement( - contact.type.includes(ContactType.SPONSOR) - ? SponsorTweet - : SpeakerTweet, - { - logo: theme.logos.white.withText.url, - days, - contact, - theme, - conference, - } - )} - - - {tweetTextToCopy} - alert("Copied to clipboard")} - > - - - - - ); -} - -function getConferenceDays(conference: Conference): string { - // const { schedules } = conference; - // const conferenceDays = map(schedules, ({ day }) => dayToFinnishLocale(day)); - const firstDay = dayToFinnishLocale(conference.startDate); // conferenceDays[0]; - const lastDay = dayToFinnishLocale(conference.endDate); // conferenceDays[conferenceDays.length - 1]; - - return `${firstDay}-${lastDay}`; -} - -interface TweetProps { - days: string; - contact: Contact; - theme: Theme; - conference: Conference; -} - -const TweetInfoContainer = styled.div` - padding: 3em 0 3em 3em; - display: grid; - justify-content: center; -`; - -const TweetImageContainer = styled.div` - padding: 3em; -`; - -interface TweetImageProps { - color?: Color; - isCircle?: boolean; - src: HTMLImageElement["src"]; -} - -const TweetImage = styled.img` - width: 100%; - box-sizing: border-box; - clip-path: ${({ isCircle }: TweetImageProps) => - isCircle ? "circle(9em at center)" : ""}; -` as React.FC; - -function SpeakerTweet({ days, contact, theme, conference }: TweetProps) { - if (conference.name === "ReasonConf 2019") { - return ( - - ); - } - - const logo = theme.logos.white.withText.url; - const { name, image, talks, workshops } = contact; - - // TODO: Restore: use secondary font instead of primary - // The problem is that Work Sans is missing a woff2 - return ( - - - - - {days} - - {name} - {Array.isArray(talks) && talks.length > 0 && ( - - {talks[0].title} - - )} - {Array.isArray(talks) && - talks.length === 0 && - Array.isArray(workshops) && - workshops.length > 0 && ( - <> - Workshop - - {workshops[0].title} - - - )} - - - - - - ); -} - -const Reason = { - TweetContainer: styled(TweetContainer)` - grid-template-columns: 1fr 1fr; - width: 600px; - height: 440px; - `, - TweetImageContainer: styled(TweetImageContainer)` - align-self: center; - `, - TweetInfoContainer: styled(TweetInfoContainer)` - padding: 2em; - display: grid; - justify-items: right; - `, - TweetImage: styled(TweetImage)` - clip-path: polygon(0 5%, 100% 0%, 100% 95%, 0% 100%); - - &::before { - content: " "; - clip-path: polygon(0 5%, 100% 0%, 100% 95%, 0% 100%); - } - ` as React.FC, - TweetRow: styled(TweetRow)` - display: grid; - grid-template-columns: 1fr; - align-items: center; - justify-items: right; - `, - TweetDescription: styled(TweetDescription)` - padding-top: 0; - justify-self: left; - font-size: 150%; - color: #97a5b1; - `, - TweetTalkTitle: styled.h3` - margin-top: 2em; - color: #97a5b1; - `, - TweetName: styled(TweetText)` - padding-top: 0; - `, -}; - -function ReasonSpeakerTweet({ - days, - contact: { name, image, company, talks }, - theme, - conference, -}: TweetProps) { - const logo = theme.logos.colored.withText.url; - - return ( - - - - - - - - - - {days} - {conference.locations && ( - - {conference.locations[0].city} - - )} - - {talks && ( - - {talks[0].title} - - )} - - {name} - - {company && ( - - {company} - - )} - - - ); -} - -const TweetSponsorContainer = styled.div` - padding: 3em; - display: grid; - grid-template-rows: 1fr 1fr; - align-items: center; -`; - -const TweetSponsorImage = styled(TweetImage)` - margin-top: 3em; - max-height: 6cm; - max-width: 100%; - width: auto; -`; - -const TweetSponsorText = styled(TweetText)` - padding-top: 0; - text-align: center; -`; - -function SponsorTweet({ - days, - contact: { about, image, type }, - theme, -}: TweetProps) { - const logo = theme.logos.white.withText.url; - - return ( - - - - - {days} - - - - - - {about} - - - {getSponsorType(type)} - - - ); -} - -function getSponsorType(type: Contact["type"]) { - return titleCase(type.filter((t) => t !== ContactType.SPONSOR)[0]); -} - -const ConnectedSpeakerTweetTemplate = connect( - "/graphql", - ` -query SpeakerTweetTemplateQuery($conferenceId: ID!, $contactName: String!) { - contact(contactName: $contactName, conferenceId: $conferenceId) { - name - company - about - image { - url - } - talks { - title - } - workshops { - title - } - type - } - conference(id: $conferenceId) { - name - startDate - endDate - slogan - schedules { - day - } - locations { - city - country { - name - } - } - } -} - `, - {}, - ({ conferenceId, contactName }) => ({ conferenceId, contactName }) -)(SpeakerTweetTemplate); - -ConnectedSpeakerTweetTemplate.filename = "speaker-tweet"; - -// TODO: Better use enums here -ConnectedSpeakerTweetTemplate.variables = [ - { - id: "conferenceId", - query: `query ConferenceIdQuery { - conferences { - id - name - } -}`, - mapToCollection({ conferences }) { - return conferences; - }, - mapToOption({ id, name }) { - return { - value: id, - label: name, - }; - }, - }, - { - id: "contactName", - query: `query SpeakerQuery($conferenceId: ID!) { - conference(id: $conferenceId) { - allSpeakers { - name - } - sponsors { - name - } - } -}`, - mapToCollection({ conference }) { - return [] - .concat(get(conference, "allSpeakers"), get(conference, "sponsors")) - .filter(Boolean); - }, - mapToOption({ name }) { - return { - value: name, - label: name, - }; - }, - }, -]; - -export default ConnectedSpeakerTweetTemplate; diff --git a/server/routes/templates/WorkshopTweetTemplate.tsx b/server/routes/templates/WorkshopTweetTemplate.tsx deleted file mode 100644 index 0848d29f..00000000 --- a/server/routes/templates/WorkshopTweetTemplate.tsx +++ /dev/null @@ -1,345 +0,0 @@ -import styled from "@emotion/styled"; -import { Color, FontFamilyProperty } from "csstype"; -import hexToRgba from "hex-to-rgba"; -import get from "lodash/get"; -import map from "lodash/map"; -import * as React from "react"; -import CopyToClipboard from "react-copy-to-clipboard"; -import titleCase from "to-title-case"; -import { Conference } from "../../schema/Conference"; -import { Contact, ContactType } from "../../schema/Contact"; -import { Theme } from "../../schema/Theme"; -import connect from "../components/connect"; -import { dayToFinnishLocale } from "../date-utils"; - -const TweetTemplateContainer = styled.div``; -const TweetPageContainer = styled.div``; - -interface TweetContainerProps { - primaryColor: Color; - secondaryColor: Color; - texture: string; -} - -const TweetContainer = styled.div` - background-image: ${({ - primaryColor, - secondaryColor, - texture, - }: TweetContainerProps) => `linear-gradient( - ${primaryColor}, - ${hexToRgba(secondaryColor, 0.79)} - ), - url("${texture}")`}; - background-size: cover; - position: relative; - width: 880px; - height: 440px; - overflow: hidden; - display: grid; - grid-template-columns: 1.1fr 0.9fr; - color: white; -` as React.FC; - -const TweetTextContainer = styled.div` - position: relative; - margin-top: 2em; - padding: 0.25em; - max-width: 880px; - background-color: #fff6c8; -`; -const TweetTextToCopy = styled.span` - margin-right: 0.5em; -`; -const TweetCopyButton = styled.button` - position: absolute; - right: 0; - top: 0; - z-index: 1; -`; - -const TweetRow = styled.div` - display: grid; - grid-template-columns: 1fr 1fr; - align-items: center; -`; - -const TweetLogo = styled.img` - max-width: 10em; - margin-left: -0.5em; -`; - -const TweetConferenceDays = styled.h3``; - -const TweetText = styled.h2` - padding-top: 0.5em; - font-size: 300%; -`; - -interface TweetDescriptionProps { - fontFamily: FontFamilyProperty; -} - -const TweetDescription = styled.h2` - width: 120%; - font-size: 200%; - font-weight: 200; - font-family: ${({ fontFamily }: TweetDescriptionProps) => fontFamily}; -` as React.FC; - -interface SpeakerTweetTemplateProps { - conference?: Conference; - contact: Contact; - theme: Theme; - id: string; -} - -function SpeakerTweetTemplate({ - conference, - contact, - theme, - id, -}: SpeakerTweetTemplateProps) { - if (!conference) { - return null; - } - - const days = getConferenceDays(conference); - // TODO: Set up conference.hashtag (should not contain #) - const tweetTextToCopy = `Learn more about the topic at #${conference.name - .split(" ") - .join("")} (${days})`; - - return ( - - - {React.createElement( - contact.type.includes(ContactType.SPONSOR) - ? SponsorTweet - : SpeakerTweet, - { - logo: theme.logos.white.withText.url, - days, - contact, - theme, - conference, - } - )} - - - {tweetTextToCopy} - alert("Copied to clipboard")} - > - - - - - ); -} - -function getConferenceDays(conference): string { - const { schedules } = conference; - const conferenceDays = map(schedules, ({ day }) => dayToFinnishLocale(day)); - const firstDay = conferenceDays[0]; - const lastDay = conferenceDays[conferenceDays.length - 1]; - - return `${firstDay}-${lastDay}`; -} - -interface TweetProps { - days: string; - contact: Contact; - theme: Theme; - conference: Conference; -} - -const TweetInfoContainer = styled.div` - padding: 3em 0 3em 3em; - display: grid; - justify-content: center; -`; - -const TweetImageContainer = styled.div` - padding: 3em; -`; - -interface TweetImageProps { - color?: Color; - isCircle?: boolean; - src: HTMLImageElement["src"]; -} - -const TweetImage = styled.img` - width: 100%; - box-sizing: border-box; - clip-path: ${({ isCircle }: TweetImageProps) => - isCircle ? "circle(9em at center)" : ""}; -` as React.FC; - -function SpeakerTweet({ days, contact, theme, conference }: TweetProps) { - const logo = theme.logos.white.withText.url; - const { name, image, workshops } = contact; - - return ( - - - - - {days} - - {name} - {Array.isArray(workshops) && workshops.length > 0 && ( - <> - Workshop - - {workshops[0].title} - - - )} - - - - - - ); -} - -const TweetSponsorContainer = styled.div` - padding: 3em; - display: grid; - grid-template-rows: 1fr 1fr; - align-items: center; -`; - -const TweetSponsorImage = styled(TweetImage)` - margin-top: 3em; - max-height: 6cm; - max-width: 100%; - width: auto; -`; - -const TweetSponsorText = styled(TweetText)` - padding-top: 0; - text-align: center; -`; - -function SponsorTweet({ - days, - contact: { about, image, type }, - theme, -}: TweetProps) { - const logo = theme.logos.white.withText.url; - - return ( - - - - - {days} - - - - - - {about} - - - {getSponsorType(type)} - - - ); -} - -function getSponsorType(type: Contact["type"]) { - return titleCase(type.filter((t) => t !== ContactType.SPONSOR)[0]); -} - -const ConnectedSpeakerTweetTemplate = connect( - "/graphql", - ` -query SpeakerTweetTemplateQuery($conferenceId: ID!, $contactName: String!) { - contact(contactName: $contactName, conferenceId: $conferenceId) { - name - company - about - image { - url - } - workshops { - title - } - type - } - conference(id: $conferenceId) { - name - slogan - schedules { - day - } - locations { - city - country { - name - } - } - } -} - `, - {}, - ({ conferenceId, contactName }) => ({ conferenceId, contactName }) -)(SpeakerTweetTemplate); - -ConnectedSpeakerTweetTemplate.filename = "speaker-tweet"; - -// TODO: Better use enums here -ConnectedSpeakerTweetTemplate.variables = [ - { - id: "conferenceId", - query: `query ConferenceIdQuery { - conferences { - id - name - } -}`, - mapToCollection({ conferences }) { - return conferences; - }, - mapToOption({ id, name }) { - return { - value: id, - label: name, - }; - }, - }, - { - id: "contactName", - query: `query SpeakerQuery($conferenceId: ID!) { - conference(id: $conferenceId) { - workshopInstructors { - name - } - } -}`, - mapToCollection({ conference }) { - return [].concat(get(conference, "workshopInstructors")).filter(Boolean); - }, - mapToOption({ name }) { - return { - value: name, - label: name, - }; - }, - }, -]; - -export default ConnectedSpeakerTweetTemplate; diff --git a/server/routes/templates/index.ts b/server/routes/templates/index.ts deleted file mode 100644 index a3143457..00000000 --- a/server/routes/templates/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -import BadgeTemplate from "./BadgeTemplate"; -import BusinessCardTemplate from "./BusinessCardTemplate"; -import HeaderTemplate from "./HeaderTemplate"; -import IntroTemplate from "./IntroTemplate"; -import PresentationTemplate from "./PresentationTemplate"; -import ScheduleTemplate from "./ScheduleTemplate"; -import ThemeTemplate from "./ThemeTemplate"; -import TweetTemplate from "./TweetTemplate"; -import SessionTweetTemplate from "./SessionTweetTemplate"; -import WorkshopTweetTemplate from "./WorkshopTweetTemplate"; - -export { - BadgeTemplate, - BusinessCardTemplate, - HeaderTemplate, - IntroTemplate, - ThemeTemplate, - PresentationTemplate, - ScheduleTemplate, - TweetTemplate, - SessionTweetTemplate, - WorkshopTweetTemplate, -}; diff --git a/shims/type-graphql.js b/shims/type-graphql.js deleted file mode 100644 index fc78e16b..00000000 --- a/shims/type-graphql.js +++ /dev/null @@ -1,66 +0,0 @@ -const dummyFn = () => void 0; -const dummyDecorator = () => dummyFn; - -TypeGraphQL = { - Arg: dummyDecorator, - Args: dummyDecorator, - ArgsType: dummyDecorator, - Authorized: dummyDecorator, - Ctx: dummyDecorator, - registerEnumType: dummyFn, - Field: typeFn => (fieldInstance, field) => { - const metaField = "_fields"; - // It should be possible to write to the meta field but - // not to enumerate it since it should be hidden. - Object.defineProperty(fieldInstance.__proto__, metaField, { - enumerable: false, - writable: true, - }); - - // Create the meta field if it doesn't exist yet. - const fields = fieldInstance.__proto__[metaField] || {}; - let type = typeFn(); - let values; - - if (!fieldInstance.__proto__[metaField]) { - fieldInstance.__proto__[metaField] = {}; - } - - // Handle enums. - if (typeof type === "object") { - values = Object.keys(type); // TODO: Is this correct always? - type = "enum"; - } - - // TODO: How to deal with scalars? Example: Url. Maybe run serialize? - - const existingFields = - fieldInstance.__proto__[metaField][fieldInstance.constructor.name] || {}; - - fieldInstance.__proto__[metaField] = { - ...fields, - [fieldInstance.constructor.name]: { - ...existingFields, - [field]: { - type, - default: "", - values, - from: [fieldInstance.constructor.name], - }, - }, - }; - }, - FieldResolver: dummyDecorator, - Info: dummyDecorator, - InputType: dummyDecorator, - InterfaceType: dummyDecorator, - Mutation: dummyDecorator, - ObjectType: dummyDecorator, - PubSub: dummyDecorator, - Query: dummyDecorator, - Resolver: dummyDecorator, - Root: dummyDecorator, - Subscription: dummyDecorator, - createUnionType: dummyFn, - UseMiddleware: dummyDecorator, -}; diff --git a/utils/generate-attendees-csv.js b/utils/generate-attendees-csv.js deleted file mode 100644 index 38eb110a..00000000 --- a/utils/generate-attendees-csv.js +++ /dev/null @@ -1,63 +0,0 @@ -const { request } = require("graphql-request"); -const { range } = require("lodash"); -const stringifyCsv = require("csv-stringify/lib/sync"); // TODO: Use the async version instead? - -generateAttendeesCsv(); - -async function generateAttendeesCsv() { - const attendees = adjustAttendees(await fetchAttendees()); - const csv = stringifyCsv(attendees, { header: true }); - - console.log(csv); -} - -async function fetchAttendees() { - const { - conference: { attendees }, - } = await request( - "http://localhost:3000/graphql", - ` - query AttendeeQuery($conferenceId: ID!) { - conference(id: $conferenceId) { - attendees { - firstName - lastName - company - social { - twitter - } - type - } - } - } - `, - { - conferenceId: "react-finland-2019", - } - ); - - return attendees; -} - -function adjustAttendees(attendees) { - return attendees - .map(({ firstName, lastName, company, social: { twitter }, type }) => ({ - firstName, - lastName, - company: company && company.split("Software Mansion")[0], - twitter: twitter ? `@${twitter.split("https://twitter.com/")[1]}` : "", - type: type[0], - })) - .concat(range(10).map(() => generateAttendee("ATTENDEE"))) - .concat(range(10).map(() => generateAttendee("ORGANIZER"))) - .concat(range(10).map(() => generateAttendee("SPONSOR"))); -} - -function generateAttendee(type) { - return { - firstName: "", - lastName: "", - twitter: "", - type, - }; -} diff --git a/utils/generate-diversity-coupons.js b/utils/generate-diversity-coupons.js deleted file mode 100644 index 5841a7c3..00000000 --- a/utils/generate-diversity-coupons.js +++ /dev/null @@ -1,116 +0,0 @@ -const dotenv = require("dotenv"); -const fs = require("fs-extra"); -const path = require("path"); -const stringifyCsv = require("csv-stringify/lib/sync"); // TODO: Use the async version instead? -const parseCsv = require("csv-parse/lib/sync"); // TODO: Use the async version instead? -const bent = require("bent"); - -// FIXME: Resolve against project root, not module as this is brittle -dotenv.config({ - path: path.resolve(__dirname, "../.env"), -}); - -generateDiversityCoupons(); - -async function generateDiversityCoupons() { - const diversitySelection = parseCsv( - await fs.readFile("./diversity-tickets.csv", { encoding: "utf8" }), - { - columns: true, - delimiter: ",", - skip_empty_lines: true, - } - ); - const selectionWithDiscountCodes = generateDiscountCodes(diversitySelection); - - selectionWithDiscountCodes.forEach(selected => { - createDiversityTicket(selected.DiversityCoupon); - }); - - const stringifiedSelection = stringifyCsv(selectionWithDiscountCodes, { - header: true, - }); - - console.log(stringifiedSelection); -} - -function generateDiscountCodes(diversitySelection) { - return diversitySelection.map(selected => ({ - ...selected, - DiversityCoupon: `DIVERSITY_${selected.Name.split(" ") - .join("") - .toUpperCase()}`, - })); -} - -async function createDiversityTicket(code) { - const titoToken = process.env.TITO_TOKEN; - const titoApi = titoClient(titoToken, "react-finland", "2019"); - // const releases = await titoApi.getReleases(); - const diversityReleaseId = "id0xabhbxjo"; // TODO: Better to search from the releases - - return await titoApi.createDiscountCode({ - code, - type: "PercentOffDiscountCode", - value: 100, - quantity: 1, - releaseIds: [diversityReleaseId], - revealSecret: true, - onlyShowAttached: true, - }); -} - -function titoClient(authToken, accountId, eventId) { - const auth = { - Authorization: `Token token=${authToken}`, - "Content-Type": "application/json", - }; - const getJson = bent("json", auth); - const postJson = bent("POST", 201, auth); - - return { - async getReleases() { - return (await getJson(getTitoEndPoint("releases"))).data; - }, - async getRelease(id) { - return (await getJson(getTitoEndPoint(`releases/${id}`))).data; - }, - async getDiscountCodes() { - return (await getJson(getTitoEndPoint("discount_codes"))).data; - }, - async getDiscountCode(id) { - return (await getJson(getTitoEndPoint(`discount_codes/${id}`))).data; - }, - async createDiscountCode({ - code, - type, - value, - quantity, - onlyShowAttached, - releaseIds, - revealSecret, - }) { - await postJson(getTitoEndPoint("discount_codes"), { - data: { - type: "discount-codes", - attributes: { - code, // DISCOUNTDRACULA - type, // MoneyOffDiscountCode/PercentOffDiscountCode - value, // 25.00 - quantity, - "release-ids": releaseIds, - "reveal-secret": revealSecret, - "only-show-attached": onlyShowAttached, - }, - }, - }); - - // If the code throws, then we won't return code. I am not sure what's the best way yet. - return code; - }, - }; - - function getTitoEndPoint(endPointName) { - return `https://api.tito.io/v2/${accountId}/${eventId}/${endPointName}`; - } -} diff --git a/utils/generate-emails.js b/utils/generate-emails.js deleted file mode 100644 index 00dae917..00000000 --- a/utils/generate-emails.js +++ /dev/null @@ -1,18 +0,0 @@ -const fs = require("fs-extra"); -const parseCsv = require("csv-parse/lib/sync"); // TODO: Use the async version instead? - -generateEmails(); - -async function generateEmails() { - const attendees = parseCsv( - await fs.readFile("./attendees.csv", { encoding: "utf8" }), - { - columns: true, - delimiter: ",", - skip_empty_lines: true, - } - ); - const emails = attendees.map(sel => sel['Ticket Email']).filter(Boolean); - - console.log(emails.join(',')); -} diff --git a/utils/generate-hotel-stays.js b/utils/generate-hotel-stays.js deleted file mode 100644 index dc3699e9..00000000 --- a/utils/generate-hotel-stays.js +++ /dev/null @@ -1,183 +0,0 @@ -const fs = require("fs"); -const readline = require("readline"); -const { google } = require("googleapis"); -const { flatMap, fromPairs, sortBy, toPairs } = require("lodash"); -const camelcase = require("camelcase"); -const dateRangeArray = require("date-range-array"); -const zerofill = require("zerofill"); - -// If modifying these scopes, delete token.json. -const SCOPES = ["https://www.googleapis.com/auth/spreadsheets"]; -// The file token.json stores the user's access and refresh tokens, and is -// created automatically when the authorization flow completes for the first -// time. -const TOKEN_PATH = "google-token.json"; - -// Load client secrets from a local file. You should generate this through -// Google's interface online. -fs.readFile("google-credentials.json", (err, content) => { - if (err) return console.log("Error loading client secret file:", err); - // Authorize a client with credentials, then call the Google Sheets API. - authorize(JSON.parse(content), convertToDateRanges); -}); - -/** - * Create an OAuth2 client with the given credentials, and then execute the - * given callback function. - * @param {Object} credentials The authorization client credentials. - * @param {function} callback The callback to call with the authorized client. - */ -function authorize(credentials, callback) { - const { client_secret, client_id, redirect_uris } = credentials.installed; - const oAuth2Client = new google.auth.OAuth2( - client_id, - client_secret, - redirect_uris[0] - ); - - // Check if we have previously stored a token. - fs.readFile(TOKEN_PATH, (err, token) => { - if (err) return getNewToken(oAuth2Client, callback); - oAuth2Client.setCredentials(JSON.parse(token)); - callback(oAuth2Client); - }); -} - -/** - * Get and store new token after prompting for user authorization, and then - * execute the given callback with the authorized OAuth2 client. - * @param {google.auth.OAuth2} oAuth2Client The OAuth2 client to get token for. - * @param {getEventsCallback} callback The callback for the authorized client. - */ -function getNewToken(oAuth2Client, callback) { - const authUrl = oAuth2Client.generateAuthUrl({ - access_type: "offline", - scope: SCOPES, - }); - console.log("Authorize this app by visiting this url:", authUrl); - const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, - }); - rl.question("Enter the code from that page here: ", code => { - rl.close(); - oAuth2Client.getToken(code, (err, token) => { - if (err) - return console.error( - "Error while trying to retrieve access token", - err - ); - oAuth2Client.setCredentials(token); - // Store the token to disk for later program executions - fs.writeFile(TOKEN_PATH, JSON.stringify(token), err => { - if (err) return console.error(err); - console.log("Token stored to", TOKEN_PATH); - }); - callback(oAuth2Client); - }); - }); -} - -/** - * Writes amounts of hotel nights needed to the budget sheet. - * @param {google.auth.OAuth2} auth The authenticated Google OAuth client. - */ -function convertToDateRanges(auth) { - const spreadsheetId = "1lgRRou8qPL3yylT5MMz3IXZBtGeq_g9sqruE4x3qzqY"; - const sheets = google.sheets({ version: "v4", auth }); - - sheets.spreadsheets.values.get( - { - spreadsheetId, - range: "2019 Speakers!A4:I", - }, - (err, res) => { - if (err) { - return console.log("The API returned an error: " + err); - } - - const rows = res.data.values; - if (rows.length) { - const keys = rows[0]; - const values = rows.slice(1); - const people = toObject(keys, values).map( - ({ arrives, leaves, ...rest }) => ({ - ...rest, - arrives, - leaves, - stays: - arrives.length > 1 && leaves.length > 1 - ? dateRangeArray( - UStoYearMonthDay(arrives), - UStoYearMonthDay(leaves) - ) - : [], - }) - ); - const stayAmounts = calculateStays( - flatMap(people, ({ stays }) => stays) - ).map(([date, amount]) => { - return [date.toLocaleString().split(", ")[0], amount]; - }); - - console.log(stayAmounts); - - sheets.spreadsheets.values.batchUpdate( - { - spreadsheetId, - resource: { - data: [ - { - range: "Hotel Information!A:C", - values: [["Date", "Amount"]].concat(stayAmounts), - }, - ], - }, - valueInputOption: "USER_ENTERED", - }, - (err, result) => { - if (err) { - return console.error(err); - } - - console.log(`${result.data.totalUpdatedCells} cells updated`); - } - ); - } else { - console.log("No data found."); - } - } - ); -} - -function calculateStays(stays) { - const ret = {}; - - stays.forEach(stay => { - if (!ret[stay]) { - ret[stay] = 0; - } - - ret[stay]++; - }); - - return sortBy( - toPairs(ret).map(([date, stays]) => { - return [new Date(date), stays]; - }), - ([date]) => date - ); -} - -// 4/23/2019 -> 2019-04-23 -function UStoYearMonthDay(date) { - const [month, day, year] = date.split("/"); - - return `${zerofill(year, 4)}-${zerofill(month, 2)}-${zerofill(day, 2)}`; -} - -function toObject(keys, rows) { - return rows.map((row, i) => { - return fromPairs(keys.map((key, j) => [camelcase(key), row[j]])); - }); -} diff --git a/utils/generate-workshop-income.js b/utils/generate-workshop-income.js deleted file mode 100644 index cf6b4ec3..00000000 --- a/utils/generate-workshop-income.js +++ /dev/null @@ -1,42 +0,0 @@ -const fs = require("fs-extra"); -const parseCsv = require("csv-parse/lib/sync"); // TODO: Use the async version instead? -const { groupBy, mapValues, sumBy } = require("lodash"); - -generateWorkshopIncome(); - -async function generateWorkshopIncome() { - const workshopNames = [ - "TypeScript for React Developers", - "Design Systems for React Developers", - "Reactive State Machines and Statecharts", - "React and GraphQL – From zero to production", - "Advanced React – Suspense, Time Slicing, Hooks and more", - "Get in the Fast Lane: Measuring React Performance", - ]; - const workshopCuts = mapValues( - groupBy( - parseCsv(await fs.readFile("./attendees.csv", { encoding: "utf8" }), { - columns: true, - delimiter: ",", - skip_empty_lines: true, - }) - .map(attendee => ({ - ...attendee, - Workshop: workshopNames.find(workshopName => - attendee.Ticket.includes(workshopName) - ), - Cut: attendee.Ticket.includes("Workshop only") - ? Number(attendee.Price) / 2 - : Number(attendee.Price) / 4, - })) - .filter(attendee => attendee.Workshop), - "Workshop" - ), - attendees => Math.round(sumBy(attendees, "Cut")) - ); - - console.log( - workshopCuts, - Object.values(workshopCuts).reduce((a, b) => a + b, 0) - ); -} From 90ed34b28f28d597b05cfee1accf44449847f699 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 12:57:04 +0300 Subject: [PATCH 06/45] Remove unused utility generators --- package-lock.json | 1077 --------------------------------- package.json | 2 - server/schema/Image.ts | 3 +- utils/generate-reason-conf.js | 41 -- utils/generate-typeof.js | 135 ----- 5 files changed, 1 insertion(+), 1257 deletions(-) delete mode 100644 utils/generate-reason-conf.js delete mode 100644 utils/generate-typeof.js diff --git a/package-lock.json b/package-lock.json index e1e5684b..3e673f27 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,6 @@ "lodash": "4.17.21", "morgan": "1.10.0", "reflect-metadata": "0.1.13", - "request-promise-native": "1.0.9", "rimraf": "3.0.0", "type-graphql": "0.17.6", "typescript": "5.8.3", @@ -43,7 +42,6 @@ "@types/morgan": "1.7.37", "@types/node": "24.0.3", "camelcase": "5.3.1", - "cheerio": "1.0.0-rc.3", "flatmap": "0.0.3", "glob": "7.1.7", "mri": "1.1.6", @@ -302,22 +300,6 @@ "node": ">= 0.6" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -342,50 +324,11 @@ "node": ">=0.10.0" } }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "peer": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "peer": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "peer": true - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "peer": true - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -402,15 +345,6 @@ "node": ">= 0.8" } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "peer": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, "node_modules/body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -459,12 +393,6 @@ "node": ">=0.6" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, "node_modules/bowser": { "version": "2.5.4", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.5.4.tgz", @@ -541,12 +469,6 @@ "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==", "license": "MIT" }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "peer": true - }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -585,23 +507,6 @@ "node": ">=4" } }, - "node_modules/cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", - "dev": true, - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/class-validator": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.12.2.tgz", @@ -661,18 +566,6 @@ "text-hex": "1.0.x" } }, - "node_modules/combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "2.20.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", @@ -817,44 +710,11 @@ "node": ">= 8" } }, - "node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/csv-parse": { "version": "4.4.6", "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.4.6.tgz", "integrity": "sha512-VisC5TBBhOF+70zjrF9FOiqI2LZOhXK/vAWlOrqyqz3lLa+P8jzJ7L/sg90MHmkSY/brAXWwrmGSZR0tM5yi4g==" }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/dasherize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", @@ -869,15 +729,6 @@ "ms": "2.0.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -915,41 +766,6 @@ "node": ">=4.0.0" } }, - "node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "node_modules/dont-sniff-mimetype": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz", @@ -987,16 +803,6 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "peer": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1016,12 +822,6 @@ "node": ">= 0.8" } }, - "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -1300,39 +1100,12 @@ "node": ">=0.6" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "peer": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "engines": [ - "node >=0.6.0" - ], - "peer": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "peer": true - }, "node_modules/fast-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "peer": true - }, "node_modules/fast-safe-stringify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", @@ -1393,29 +1166,6 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1517,15 +1267,6 @@ "node": ">= 0.4" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -1634,29 +1375,6 @@ "graphql": "^0.10.5 || ^0.11.3 || ^0.12.0 || ^0.13.0 || ^14.0.0" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "peer": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -1767,20 +1485,6 @@ "node": ">=4.0.0" } }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, "node_modules/http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -1827,21 +1531,6 @@ "node": ">= 0.6" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, "node_modules/ical-generator": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-1.7.2.tgz", @@ -1904,12 +1593,6 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "peer": true - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1922,12 +1605,6 @@ "dev": true, "license": "ISC" }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "peer": true - }, "node_modules/iterall": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", @@ -1952,30 +1629,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "peer": true - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "peer": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "peer": true - }, "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -1984,21 +1637,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "engines": [ - "node >=0.6.0" - ], - "peer": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "node_modules/just-kebab-case": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/just-kebab-case/-/just-kebab-case-1.1.0.tgz", @@ -2193,24 +1831,6 @@ "integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=", "dev": true }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "peer": true, - "engines": { - "node": "*" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -2254,15 +1874,6 @@ "fn.name": "1.x.x" } }, - "node_modules/parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -2311,12 +1922,6 @@ "through": "~2.3" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "peer": true - }, "node_modules/prettier": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", @@ -2361,28 +1966,6 @@ "node": ">= 0.10" } }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "peer": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -2416,20 +1999,6 @@ "node": ">= 0.8" } }, - "node_modules/readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/referrer-policy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", @@ -2444,69 +2013,6 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "peer": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, "node_modules/resolve": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", @@ -2802,31 +2308,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "peer": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -2844,14 +2325,6 @@ "node": ">= 0.8" } }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", @@ -2899,18 +2372,6 @@ "node": ">=0.6" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/triple-beam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", @@ -3049,24 +2510,6 @@ "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "peer": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "peer": true - }, "node_modules/type-graphql": { "version": "0.17.6", "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-0.17.6.tgz", @@ -3144,15 +2587,6 @@ "node": ">= 0.8" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "peer": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -3167,16 +2601,6 @@ "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/validator": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.0.0.tgz", @@ -3193,20 +2617,6 @@ "node": ">= 0.8" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "engines": [ - "node >=0.6.0" - ], - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3555,18 +2965,6 @@ "negotiator": "0.6.3" } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3586,44 +2984,11 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "peer": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "peer": true - }, "async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "peer": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "peer": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "peer": true - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3637,15 +3002,6 @@ "safe-buffer": "5.1.2" } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "peer": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -3680,12 +3036,6 @@ } } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, "bowser": { "version": "2.5.4", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.5.4.tgz", @@ -3740,12 +3090,6 @@ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==" }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "peer": true - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3777,20 +3121,6 @@ } } }, - "cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", - "dev": true, - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - } - }, "class-validator": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.12.2.tgz", @@ -3847,15 +3177,6 @@ "text-hex": "1.0.x" } }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "peer": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, "commander": { "version": "2.20.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", @@ -3956,38 +3277,11 @@ "which": "^2.0.1" } }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, "csv-parse": { "version": "4.4.6", "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.4.6.tgz", "integrity": "sha512-VisC5TBBhOF+70zjrF9FOiqI2LZOhXK/vAWlOrqyqz3lLa+P8jzJ7L/sg90MHmkSY/brAXWwrmGSZR0tM5yi4g==" }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "dasherize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", @@ -4001,12 +3295,6 @@ "ms": "2.0.0" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "peer": true - }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -4028,41 +3316,6 @@ "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz", "integrity": "sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q==" }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "dont-sniff-mimetype": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz", @@ -4089,16 +3342,6 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "peer": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -4114,12 +3357,6 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, "es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -4309,36 +3546,12 @@ } } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "peer": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "peer": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "peer": true - }, "fast-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "peer": true - }, "fast-safe-stringify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", @@ -4389,23 +3602,6 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "peer": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "peer": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -4480,15 +3676,6 @@ "es-object-atoms": "^1.0.0" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -4556,22 +3743,6 @@ "iterall": "^1.2.1" } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "peer": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "peer": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -4647,20 +3818,6 @@ "depd": "2.0.0" } }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -4695,17 +3852,6 @@ } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "peer": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "ical-generator": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-1.7.2.tgz", @@ -4751,12 +3897,6 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "peer": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4768,12 +3908,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "peer": true - }, "iterall": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", @@ -4795,30 +3929,6 @@ "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "peer": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "peer": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "peer": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "peer": true - }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -4827,18 +3937,6 @@ "graceful-fs": "^4.1.6" } }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "peer": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "just-kebab-case": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/just-kebab-case/-/just-kebab-case-1.1.0.tgz", @@ -4988,21 +4086,6 @@ "integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=", "dev": true }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "peer": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5037,15 +4120,6 @@ "fn.name": "1.x.x" } }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -5082,12 +4156,6 @@ "through": "~2.3" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "peer": true - }, "prettier": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", @@ -5117,22 +4185,6 @@ "event-stream": "=3.3.4" } }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "peer": true - }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -5156,17 +4208,6 @@ } } }, - "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "referrer-policy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", @@ -5177,52 +4218,6 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "peer": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, "resolve": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", @@ -5433,23 +4428,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "peer": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -5460,11 +4438,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, "stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", @@ -5504,15 +4477,6 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, "triple-beam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", @@ -5611,21 +4575,6 @@ "tslib": "^1.8.1" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "peer": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "peer": true - }, "type-graphql": { "version": "0.17.6", "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-0.17.6.tgz", @@ -5678,15 +4627,6 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "peer": true, - "requires": { - "punycode": "^2.1.0" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -5697,12 +4637,6 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "peer": true - }, "validator": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.0.0.tgz", @@ -5713,17 +4647,6 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "peer": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 609a4fac..afcab38f 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "@types/morgan": "1.7.37", "@types/node": "24.0.3", "camelcase": "5.3.1", - "cheerio": "1.0.0-rc.3", "flatmap": "0.0.3", "glob": "7.1.7", "mri": "1.1.6", @@ -65,7 +64,6 @@ "lodash": "4.17.21", "morgan": "1.10.0", "reflect-metadata": "0.1.13", - "request-promise-native": "1.0.9", "rimraf": "3.0.0", "type-graphql": "0.17.6", "typescript": "5.8.3", diff --git a/server/schema/Image.ts b/server/schema/Image.ts index f142480d..5dc82c62 100644 --- a/server/schema/Image.ts +++ b/server/schema/Image.ts @@ -1,4 +1,3 @@ -import { InterpolationWithTheme } from "@emotion/core"; import { Field, ObjectType } from "type-graphql"; @ObjectType() @@ -16,5 +15,5 @@ export class Image { public title?: string; @Field((_) => Style, { nullable: true }) - public style?: InterpolationWithTheme; + public style?: Style; } diff --git a/utils/generate-reason-conf.js b/utils/generate-reason-conf.js deleted file mode 100644 index a3fa0da0..00000000 --- a/utils/generate-reason-conf.js +++ /dev/null @@ -1,41 +0,0 @@ -const request = require("request-promise-native"); -const fs = require("fs"); -const path = require("path"); - -main(); - -async function main() { - const outputPath = path.resolve( - process.cwd(), - "content/reason-conf-2019/data.json" - ); - - fs.writeFile(outputPath, JSON.stringify(await getData(), null, 2), err => { - if (err) { - return console.error(err); - } - }); -} - -async function getData() { - try { - const { files } = await request.get( - "https://api.github.com/gists/992b79b40cea84ff7ca8efb8cc2350ee", - { - headers: { - "User-Agent": "React-Finland", - }, - json: true, - } - ); - - return { - schedules: JSON.parse(files["schedule.json"].content), - speakers: JSON.parse(files["speakers.json"].content), - }; - } catch (err) { - console.error(err); - } - - return {}; -} diff --git a/utils/generate-typeof.js b/utils/generate-typeof.js deleted file mode 100644 index 33fd2681..00000000 --- a/utils/generate-typeof.js +++ /dev/null @@ -1,135 +0,0 @@ -const cheerio = require("cheerio"); -const request = require("request-promise-native"); -const fs = require("fs"); -const path = require("path"); - -main(); - -async function main() { - const outputPath = path.resolve( - process.cwd(), - "content/typeof-2019/data.json" - ); - const schedules = await getSchedules("https://typeofconf.com/agenda/"); - const speakers = await getSpeakers("https://typeofconf.com"); - - fs.writeFile( - outputPath, - JSON.stringify({ schedules, speakers }, null, 2), - err => { - if (err) { - return console.error(err); - } - } - ); -} - -async function getSchedules(source) { - const html = await request.get(source); - - return [ - { - day: "2019-03-27", - description: "Workshop day", - intervals: scrapeIntervals(html, "#workshops-day"), - }, - { - day: "2019-03-28", - description: "Conference day 1", - intervals: scrapeIntervals(html, "#conf-day-1"), - }, - { - day: "2019-03-29", - description: "Conference day 2", - intervals: scrapeIntervals(html, "#conf-day-2"), - }, - ]; -} - -async function getSpeakers(source) { - const html = await request.get(source); - - return scrapeSpeakers(html); -} - -function scrapeIntervals(html, selector) { - const $ = cheerio.load(html); - const parent = $(selector); - const dl = $(parent, "dl"); - - const schedules = $(dl) - .find("dt") - .map(function(i) { - return { - begin: $(this).text(), - end: - $(dl) - .find("dt") - .eq(i + 1) - .text() || $(this).text(), - }; - }) - .get(); - - $(dl) - .find("dd") - .map(function(i) { - const sessions = $(this) - .find("li") - .map(function() { - return { - title: $(this) - .text() - .split(" | ")[0] - .trim(), - people: $(this) - .text() - .split(" | ")[1] - ? [ - { - name: $(this) - .text() - .split(" | ")[1] - .trim(), - }, - ] - : null, - }; - }) - .get(); - - schedules[i] = { ...schedules[i], sessions }; - }) - .get(); - - return schedules; -} - -function scrapeSpeakers(html) { - const $ = cheerio.load(html); - - return $("#speakers .speakerCard") - .map(function() { - return { - name: $(this) - .find(".name") - .text(), - about: $(this) - .find(".title") - .text(), - image: { - url: `https://typeofconf.com${$(this) - .find(".photo") - .attr("data-src")}`, - }, - /* TODO - social: { - twitter: '', - linkedin: '', - github: '' - } - */ - }; - }) - .get(); -} From 4e1e60369d64a87355ed38f73f15b40bbc7ab03b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 12:58:26 +0300 Subject: [PATCH 07/45] Restore startup rebuild hooks --- .env.template | 4 ++++ README.md | 1 + server/index.ts | 5 +++++ server/rebuild-sites.ts | 30 ++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 server/rebuild-sites.ts diff --git a/.env.template b/.env.template index bbfef685..4df241fb 100644 --- a/.env.template +++ b/.env.template @@ -1,2 +1,6 @@ # Optional token for Tito-related utility scripts. TITO_TOKEN= + +# Optional comma-separated list of webhook URLs to POST after the Node server +# has started in production. +REBUILD_SITES= diff --git a/README.md b/README.md index fbed86ae..0a4c4cee 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ The application does not currently require Cloudflare Worker secrets for runtime The `.env` file is only relevant for local scripts and the Node.js entrypoint. The example in [.env.template](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.env.template) is: - `TITO_TOKEN` for Tito-related utility scripts +- `REBUILD_SITES` for optional comma-separated webhook URLs that should be `POST`ed once after the Node server starts in production ## Notes diff --git a/server/index.ts b/server/index.ts index d7ab813a..624a28f7 100644 --- a/server/index.ts +++ b/server/index.ts @@ -8,6 +8,7 @@ dotenv.config({ }); import logger from "./logger"; +import rebuildSites from "./rebuild-sites"; import createServer from "./server"; process.on("SIGINT", () => { @@ -23,6 +24,10 @@ process.on("SIGINT", () => { await createServer(); logger.debug("Running"); + + if (process.env.NODE_ENV === "production") { + rebuildSites(process.env.REBUILD_SITES); + } } catch (e) { logger.error("Failed to start"); // @ts-expect-error This is fine diff --git a/server/rebuild-sites.ts b/server/rebuild-sites.ts new file mode 100644 index 00000000..e2369170 --- /dev/null +++ b/server/rebuild-sites.ts @@ -0,0 +1,30 @@ +import logger from "./logger"; + +// Expects a comma separated string +function rebuildSites(urls?: string) { + (urls || "") + .split(",") + .map((url) => url.trim()) + .filter(Boolean) + .forEach((url) => { + void rebuildSite(url); + }); +} + +async function rebuildSite(url: string) { + try { + const response = await fetch(url, { method: "POST" }); + + if (!response.ok) { + logger.error(`failed to rebuild ${url}: ${response.status}`); + + return; + } + + logger.info(`rebuilt ${url}`); + } catch (err) { + logger.error(err); + } +} + +export default rebuildSites; From ad5f89298489e07382934f75abf82c241fbdecdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:00:49 +0300 Subject: [PATCH 08/45] Update safe dependency versions --- package-lock.json | 1450 +++++++++++++++++++-------------------------- package.json | 24 +- 2 files changed, 614 insertions(+), 860 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3e673f27..951de275 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,12 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "body-parser": "1.19.0", - "compression": "1.7.4", - "cors": "2.8.5", + "body-parser": "1.20.3", + "compression": "1.8.1", + "cors": "2.8.6", "csv-parse": "4.4.6", "dotenv": "8.1.0", - "express": "4.18.2", + "express": "4.21.2", "fs-extra": "8.1.0", "graphql": "14.5.4", "graphql-depth-limit": "1.1.0", @@ -23,30 +23,30 @@ "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", "lodash": "4.17.21", - "morgan": "1.10.0", + "morgan": "1.10.1", "reflect-metadata": "0.1.13", "rimraf": "3.0.0", "type-graphql": "0.17.6", "typescript": "5.8.3", - "winston": "3.3.3" + "winston": "3.19.0" }, "devDependencies": { "@types/compression": "1.0.1", - "@types/cors": "2.8.6", + "@types/cors": "2.8.19", "@types/dotenv": "6.1.1", "@types/express": "4.17.9", "@types/fs-extra": "8.0.0", "@types/graphql": "14.5.0", - "@types/helmet": "0.0.44", - "@types/lodash": "4.14.138", - "@types/morgan": "1.7.37", + "@types/helmet": "0.0.48", + "@types/lodash": "4.17.24", + "@types/morgan": "1.9.10", "@types/node": "24.0.3", "camelcase": "5.3.1", "flatmap": "0.0.3", "glob": "7.1.7", - "mri": "1.1.6", + "mri": "1.2.0", "prettier": "2.3.1", - "tsc-watch": "7.1.1", + "tsc-watch": "7.2.0", "tslint": "6.1.3", "tslint-config-prettier": "1.18.0", "tslint-plugin-prettier": "2.3.0" @@ -78,16 +78,36 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/@dabh/diagnostics": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", - "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", + "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", + "license": "MIT", "dependencies": { - "colorspace": "1.1.x", + "@so-ric/colorspace": "^1.1.6", "enabled": "2.0.x", "kuler": "^2.0.0" } }, + "node_modules/@so-ric/colorspace": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", + "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "license": "MIT", + "dependencies": { + "color": "^5.0.2", + "text-hex": "1.0.x" + } + }, "node_modules/@types/body-parser": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", @@ -117,12 +137,13 @@ } }, "node_modules/@types/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-invOmosX0DqbpA+cE2yoHGUlF/blyf7nB0OGYBBiH27crcVm5NmFaZkLP4Ta1hGaesckCi5lVLlydNJCxkTOSg==", + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", "dev": true, + "license": "MIT", "dependencies": { - "@types/express": "*" + "@types/node": "*" } }, "node_modules/@types/dotenv": { @@ -194,19 +215,21 @@ } }, "node_modules/@types/helmet": { - "version": "0.0.44", - "resolved": "https://registry.npmjs.org/@types/helmet/-/helmet-0.0.44.tgz", - "integrity": "sha512-MPZ7HoCGLoajTZhy3hMWHvdiOMHCZJ51U2Bve25oujn3G7KdXy0G3iRS0dUpVtKOGMNcuBF6yLDRpNdm2JH0OQ==", + "version": "0.0.48", + "resolved": "https://registry.npmjs.org/@types/helmet/-/helmet-0.0.48.tgz", + "integrity": "sha512-C7MpnvSDrunS1q2Oy1VWCY7CDWHozqSnM8P4tFeRTuzwqni+PYOjEredwcqWG+kLpYcgLsgcY3orHB54gbx2Jw==", "dev": true, + "license": "MIT", "dependencies": { "@types/express": "*" } }, "node_modules/@types/lodash": { - "version": "4.14.138", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.138.tgz", - "integrity": "sha512-A4uJgHz4hakwNBdHNPdxOTkYmXNgmUAKLbXZ7PKGslgeV0Mb8P3BlbYfPovExek1qnod4pDfRbxuzcVs3dlFLg==", - "dev": true + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/mime": { "version": "2.0.1", @@ -220,12 +243,13 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" }, "node_modules/@types/morgan": { - "version": "1.7.37", - "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.7.37.tgz", - "integrity": "sha512-tIdEA10BcHcOumMmUiiYdw8lhiVVq62r0ghih5Xpp4WETkfsMiTUZL4w9jCI502BBOrKhFrAOGml9IeELvVaBA==", + "version": "1.9.10", + "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz", + "integrity": "sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/express": "*" + "@types/node": "*" } }, "node_modules/@types/node": { @@ -283,6 +307,12 @@ "@types/mime": "*" } }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, "node_modules/@types/validator": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.0.0.tgz", @@ -325,9 +355,10 @@ } }, "node_modules/async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" }, "node_modules/balanced-match": { "version": "1.0.2", @@ -346,53 +377,41 @@ } }, "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", + "bytes": "3.1.2", + "content-type": "~1.0.5", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "node_modules/body-parser/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/body-parser/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, "node_modules/bowser": { "version": "2.5.4", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.5.4.tgz", @@ -418,9 +437,10 @@ } }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "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" } @@ -519,18 +539,23 @@ } }, "node_modules/color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", + "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", + "license": "MIT", "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-convert": "^3.1.3", + "color-string": "^2.1.3" + }, + "engines": { + "node": ">=18" } }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -538,32 +563,49 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "node_modules/color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", + "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", + "license": "MIT", "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "node_modules/color-string/node_modules/color-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", + "license": "MIT", "engines": { - "node": ">=0.1.90" + "node": ">=12.20" } }, - "node_modules/colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "node_modules/color/node_modules/color-convert": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", + "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", + "license": "MIT", "dependencies": { - "color": "3.0.x", - "text-hex": "1.0.x" + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=14.6" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", + "license": "MIT", + "engines": { + "node": ">=12.20" } }, "node_modules/commander": { @@ -573,41 +615,64 @@ "dev": true }, "node_modules/compressible": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", - "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", "dependencies": { - "mime-db": ">= 1.38.0 < 2" + "mime-db": ">= 1.43.0 < 2" }, "engines": { "node": ">= 0.6" } }, "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "license": "MIT", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/compression/node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, + "node_modules/compression/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/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -664,9 +729,9 @@ } }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -678,21 +743,21 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cross-spawn": { @@ -811,12 +876,13 @@ "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -939,37 +1005,37 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -978,55 +1044,10 @@ }, "engines": { "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/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/express/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" }, - "engines": { - "node": ">= 0.8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/on-finished": { @@ -1041,36 +1062,6 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1091,26 +1082,12 @@ ], "license": "MIT" }, - "node_modules/express/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/fast-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "node_modules/fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" - }, "node_modules/feature-policy": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", @@ -1121,18 +1098,19 @@ } }, "node_modules/fecha": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", - "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -1486,49 +1464,19 @@ } }, "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/http-errors/node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "license": "ISC" - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/ical-generator": { @@ -1588,16 +1536,6 @@ "node": ">= 0.10" } }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1645,7 +1583,8 @@ "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" }, "node_modules/lines-and-columns": { "version": "1.1.6", @@ -1664,21 +1603,27 @@ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, "node_modules/logform": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", - "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", "dependencies": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", "fecha": "^4.2.0", "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" } }, "node_modules/logform/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==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/map-stream": { "version": "0.1.0", @@ -1704,10 +1649,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "license": "MIT" + "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", @@ -1780,25 +1728,27 @@ } }, "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", + "license": "MIT", "dependencies": { "basic-auth": "~2.0.1", "debug": "2.6.9", "depd": "~2.0.0", "on-finished": "~2.3.0", - "on-headers": "~1.0.2" + "on-headers": "~1.1.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/mri": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", - "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -1839,6 +1789,18 @@ "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.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -1851,9 +1813,10 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1908,9 +1871,9 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, "node_modules/pause-stream": { @@ -1934,11 +1897,6 @@ "node": ">=10.13.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1966,6 +1924,21 @@ "node": ">= 0.10" } }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "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", @@ -1976,13 +1949,13 @@ } }, "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -1990,13 +1963,18 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, "engines": { - "node": ">= 0.8" + "node": ">= 6" } }, "node_modules/referrer-policy": { @@ -2038,6 +2016,15 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -2052,9 +2039,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -2075,18 +2062,11 @@ "node": ">= 0.8.0" } }, - "node_modules/send/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, "engines": { "node": ">= 0.8" } @@ -2109,25 +2089,16 @@ "node": ">= 0.8" } }, - "node_modules/send/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/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -2197,18 +2168,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel-list/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/side-channel-map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", @@ -2227,18 +2186,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel-map/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/side-channel-weakmap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", @@ -2258,38 +2205,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel-weakmap/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/side-channel/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/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, "node_modules/split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -2355,7 +2270,8 @@ "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" }, "node_modules/through": { "version": "2.3.8", @@ -2364,23 +2280,27 @@ "dev": true }, "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "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/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } }, "node_modules/tsc-watch": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-7.1.1.tgz", - "integrity": "sha512-r6t37Dkk4vK44HwxOe+OzjpE/gDamZAwqXhtcAJD/hPVblcjJK45NxbK0HcDASXG0U4pEnCh640JZbeDVSC6yA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-7.2.0.tgz", + "integrity": "sha512-4gRFawQD1cVSaILvG7wl2x6NtteKbS2dGBMbL7Q6n1ldLIOKXCJUoEwUXdGuee4dp+zcnA6tukBBLz1lZrNI9w==", "dev": true, "license": "MIT", "dependencies": { @@ -2634,56 +2554,39 @@ } }, "node_modules/winston": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", - "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", + "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", + "license": "MIT", "dependencies": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.1.0", + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.8", + "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.2.0", + "logform": "^2.7.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" + "winston-transport": "^4.9.0" }, "engines": { - "node": ">= 6.4.0" + "node": ">= 12.0.0" } }, "node_modules/winston-transport": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", "dependencies": { - "readable-stream": "^2.3.7", - "triple-beam": "^1.2.0" + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" }, "engines": { - "node": ">= 6.4.0" - } - }, - "node_modules/winston-transport/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/winston-transport/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" + "node": ">= 12.0.0" } }, "node_modules/winston/node_modules/is-stream": { @@ -2694,19 +2597,6 @@ "node": ">=8" } }, - "node_modules/winston/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -2751,16 +2641,30 @@ } } }, + "@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" + }, "@dabh/diagnostics": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", - "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", + "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", "requires": { - "colorspace": "1.1.x", + "@so-ric/colorspace": "^1.1.6", "enabled": "2.0.x", "kuler": "^2.0.0" } }, + "@so-ric/colorspace": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", + "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "requires": { + "color": "^5.0.2", + "text-hex": "1.0.x" + } + }, "@types/body-parser": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", @@ -2790,12 +2694,12 @@ } }, "@types/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-invOmosX0DqbpA+cE2yoHGUlF/blyf7nB0OGYBBiH27crcVm5NmFaZkLP4Ta1hGaesckCi5lVLlydNJCxkTOSg==", + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", "dev": true, "requires": { - "@types/express": "*" + "@types/node": "*" } }, "@types/dotenv": { @@ -2864,18 +2768,18 @@ } }, "@types/helmet": { - "version": "0.0.44", - "resolved": "https://registry.npmjs.org/@types/helmet/-/helmet-0.0.44.tgz", - "integrity": "sha512-MPZ7HoCGLoajTZhy3hMWHvdiOMHCZJ51U2Bve25oujn3G7KdXy0G3iRS0dUpVtKOGMNcuBF6yLDRpNdm2JH0OQ==", + "version": "0.0.48", + "resolved": "https://registry.npmjs.org/@types/helmet/-/helmet-0.0.48.tgz", + "integrity": "sha512-C7MpnvSDrunS1q2Oy1VWCY7CDWHozqSnM8P4tFeRTuzwqni+PYOjEredwcqWG+kLpYcgLsgcY3orHB54gbx2Jw==", "dev": true, "requires": { "@types/express": "*" } }, "@types/lodash": { - "version": "4.14.138", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.138.tgz", - "integrity": "sha512-A4uJgHz4hakwNBdHNPdxOTkYmXNgmUAKLbXZ7PKGslgeV0Mb8P3BlbYfPovExek1qnod4pDfRbxuzcVs3dlFLg==", + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", "dev": true }, "@types/mime": { @@ -2890,12 +2794,12 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" }, "@types/morgan": { - "version": "1.7.37", - "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.7.37.tgz", - "integrity": "sha512-tIdEA10BcHcOumMmUiiYdw8lhiVVq62r0ghih5Xpp4WETkfsMiTUZL4w9jCI502BBOrKhFrAOGml9IeELvVaBA==", + "version": "1.9.10", + "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz", + "integrity": "sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA==", "dev": true, "requires": { - "@types/express": "*" + "@types/node": "*" } }, "@types/node": { @@ -2951,6 +2855,11 @@ "@types/mime": "*" } }, + "@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, "@types/validator": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.0.0.tgz", @@ -2985,9 +2894,9 @@ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" }, "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" }, "balanced-match": { "version": "1.0.2", @@ -3003,36 +2912,31 @@ } }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", + "bytes": "3.1.2", + "content-type": "~1.0.5", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } } } }, @@ -3057,9 +2961,9 @@ "dev": true }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "call-bind-apply-helpers": { "version": "1.0.2", @@ -3133,18 +3037,34 @@ } }, "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", + "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-convert": "^3.1.3", + "color-string": "^2.1.3" + }, + "dependencies": { + "color-convert": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", + "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", + "requires": { + "color-name": "^2.0.0" + } + }, + "color-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==" + } } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -3152,29 +3072,22 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", + "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" + "color-name": "^2.0.0" + }, + "dependencies": { + "color-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==" + } } }, "commander": { @@ -3184,31 +3097,36 @@ "dev": true }, "compressible": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", - "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "requires": { - "mime-db": ">= 1.38.0 < 2" + "mime-db": ">= 1.43.0 < 2" } }, "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "dependencies": { - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==" + }, + "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==" } } }, @@ -3243,24 +3161,19 @@ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", "requires": { "object-assign": "^4", "vary": "^1" @@ -3353,9 +3266,9 @@ "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, "es-define-property": { "version": "1.0.1", @@ -3434,36 +3347,36 @@ "integrity": "sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g==" }, "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -3471,42 +3384,6 @@ "vary": "~1.1.2" }, "dependencies": { - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -3515,34 +3392,10 @@ "ee-first": "1.1.1" } }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "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==" - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" } } }, @@ -3552,28 +3405,23 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" - }, "feature-policy": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==" }, "fecha": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", - "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -3819,37 +3667,15 @@ } }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" - } + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" } }, "ical-generator": { @@ -3892,16 +3718,6 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3964,14 +3780,15 @@ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, "logform": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", - "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", "fecha": "^4.2.0", "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", "triple-beam": "^1.3.0" }, "dependencies": { @@ -3999,9 +3816,9 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" }, "methods": { "version": "1.1.2", @@ -4048,21 +3865,21 @@ } }, "morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", "requires": { "basic-auth": "~2.0.1", "debug": "2.6.9", "depd": "~2.0.0", "on-finished": "~2.3.0", - "on-headers": "~1.0.2" + "on-headers": "~1.1.0" } }, "mri": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", - "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true }, "ms": { @@ -4091,6 +3908,11 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -4100,9 +3922,9 @@ } }, "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==" }, "once": { "version": "1.4.0", @@ -4143,9 +3965,9 @@ "dev": true }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, "pause-stream": { "version": "0.0.11", @@ -4162,11 +3984,6 @@ "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", "dev": true }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -4185,27 +4002,38 @@ "event-stream": "=3.3.4" } }, + "qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "requires": { + "side-channel": "^1.0.6" + } + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - } + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "referrer-policy": { @@ -4240,6 +4068,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==" + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -4251,9 +4084,9 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -4270,17 +4103,10 @@ "statuses": "2.0.1" }, "dependencies": { - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "ms": { "version": "2.1.3", @@ -4294,23 +4120,18 @@ "requires": { "ee-first": "1.1.1" } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" } } }, "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" } }, "setprototypeof": { @@ -4343,13 +4164,6 @@ "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" - }, - "dependencies": { - "object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" - } } }, "side-channel-list": { @@ -4359,13 +4173,6 @@ "requires": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" - }, - "dependencies": { - "object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" - } } }, "side-channel-map": { @@ -4377,13 +4184,6 @@ "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" - }, - "dependencies": { - "object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" - } } }, "side-channel-weakmap": { @@ -4396,21 +4196,6 @@ "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" - }, - "dependencies": { - "object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" - } - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" } }, "split": { @@ -4473,19 +4258,19 @@ "dev": true }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" }, "tsc-watch": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-7.1.1.tgz", - "integrity": "sha512-r6t37Dkk4vK44HwxOe+OzjpE/gDamZAwqXhtcAJD/hPVblcjJK45NxbK0HcDASXG0U4pEnCh640JZbeDVSC6yA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-7.2.0.tgz", + "integrity": "sha512-4gRFawQD1cVSaILvG7wl2x6NtteKbS2dGBMbL7Q6n1ldLIOKXCJUoEwUXdGuee4dp+zcnA6tukBBLz1lZrNI9w==", "dev": true, "requires": { "cross-spawn": "^7.0.6", @@ -4657,69 +4442,38 @@ } }, "winston": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", - "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", + "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", "requires": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.1.0", + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.8", + "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.2.0", + "logform": "^2.7.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" + "winston-transport": "^4.9.0" }, "dependencies": { "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } } } }, "winston-transport": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", "requires": { - "readable-stream": "^2.3.7", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" } }, "wrappy": { diff --git a/package.json b/package.json index afcab38f..bfdce08b 100644 --- a/package.json +++ b/package.json @@ -18,21 +18,21 @@ "license": "MIT", "devDependencies": { "@types/compression": "1.0.1", - "@types/cors": "2.8.6", + "@types/cors": "2.8.19", "@types/dotenv": "6.1.1", "@types/express": "4.17.9", "@types/fs-extra": "8.0.0", "@types/graphql": "14.5.0", - "@types/helmet": "0.0.44", - "@types/lodash": "4.14.138", - "@types/morgan": "1.7.37", + "@types/helmet": "0.0.48", + "@types/lodash": "4.17.24", + "@types/morgan": "1.9.10", "@types/node": "24.0.3", "camelcase": "5.3.1", "flatmap": "0.0.3", "glob": "7.1.7", - "mri": "1.1.6", + "mri": "1.2.0", "prettier": "2.3.1", - "tsc-watch": "7.1.1", + "tsc-watch": "7.2.0", "tslint": "6.1.3", "tslint-config-prettier": "1.18.0", "tslint-plugin-prettier": "2.3.0" @@ -48,12 +48,12 @@ "url": "https://github.com/ReactFinland/graphql-api/issues" }, "dependencies": { - "body-parser": "1.19.0", - "compression": "1.7.4", - "cors": "2.8.5", + "body-parser": "1.20.3", + "compression": "1.8.1", + "cors": "2.8.6", "csv-parse": "4.4.6", "dotenv": "8.1.0", - "express": "4.18.2", + "express": "4.21.2", "fs-extra": "8.1.0", "graphql": "14.5.4", "graphql-depth-limit": "1.1.0", @@ -62,12 +62,12 @@ "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", "lodash": "4.17.21", - "morgan": "1.10.0", + "morgan": "1.10.1", "reflect-metadata": "0.1.13", "rimraf": "3.0.0", "type-graphql": "0.17.6", "typescript": "5.8.3", - "winston": "3.3.3" + "winston": "3.19.0" }, "lint-staged": { "*.--write": [ From 49400914732e79f6d3a302844e273ab6d114e2b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:04:52 +0300 Subject: [PATCH 09/45] Add API end-to-end tests --- README.md | 1 + package.json | 2 + server/routes/graphql.ts | 20 ++++-- test/api.e2e.test.cjs | 134 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 153 insertions(+), 4 deletions(-) create mode 100644 test/api.e2e.test.cjs diff --git a/README.md b/README.md index 0a4c4cee..8a9a181f 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Use the original Node.js server for local development: 1. Install dependencies with `npm install`. 2. Start the server with `NODE_ENV=development npm start`. 3. Open `http://localhost:3000/graphql`. +4. Run the API e2e suite with `npm test`. Other useful local endpoints: diff --git a/package.json b/package.json index bfdce08b..4e5362e9 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "cf:deploy": "npx wrangler deploy", "cf:dev": "npx wrangler dev", "lint": "tslint --config tslint.json content/**/*.ts server/**/*.ts --fix", + "test": "npm run test:e2e", + "test:e2e": "npm run build && node --test test/api.e2e.test.cjs", "start": "tsc-watch --onSuccess \"node ./build/server\" --onFailure \"echo Beep! Compilation Failed\"", "format": "prettier content/**/*.ts server/**/*.ts --write" }, diff --git a/server/routes/graphql.ts b/server/routes/graphql.ts index 91b27b08..9a03a588 100644 --- a/server/routes/graphql.ts +++ b/server/routes/graphql.ts @@ -9,9 +9,11 @@ function routeGraphQL(router, schema, projectRoot, mediaUrl) { schema, validationRules: [depthLimit(7)], context: (req) => { + const rawRequest = req.raw || req; + return { - hostname: getHostname(req), - mediaUrl: `${getHostname(req)}${mediaUrl}`, + hostname: getHostname(rawRequest), + mediaUrl: `${getHostname(rawRequest)}${mediaUrl}`, projectRoot, }; }, @@ -20,11 +22,21 @@ function routeGraphQL(router, schema, projectRoot, mediaUrl) { } function getHostname(req) { - const forwardedProtocol = req.get("x-forwarded-proto"); + const forwardedProtocol = getHeader(req, "x-forwarded-proto"); const protocol = forwardedProtocol || req.protocol || "http"; - const host = req.get("host"); + const host = getHeader(req, "host"); return `${protocol}://${host}`; } +function getHeader(req, name) { + if (typeof req.get === "function") { + return req.get(name); + } + + const value = req.headers?.[name]; + + return Array.isArray(value) ? value[0] : value; +} + export default routeGraphQL; diff --git a/test/api.e2e.test.cjs b/test/api.e2e.test.cjs new file mode 100644 index 00000000..27660cbe --- /dev/null +++ b/test/api.e2e.test.cjs @@ -0,0 +1,134 @@ +const assert = require("node:assert/strict"); +const { once } = require("node:events"); +const test = require("node:test"); + +require("reflect-metadata"); + +const createApp = require("../build/server/app").default; + +let server; +let baseUrl; + +test.before(async () => { + process.env.NODE_ENV = "test"; + + const app = await createApp(); + + server = app.listen(0, "127.0.0.1"); + + await once(server, "listening"); + + const address = server.address(); + + assert.ok(address && typeof address !== "string"); + + baseUrl = `http://127.0.0.1:${address.port}`; +}); + +test.after(async () => { + if (!server) { + return; + } + + await new Promise((resolve, reject) => { + server.close((error) => { + if (error) { + reject(error); + return; + } + + resolve(); + }); + }); +}); + +async function request(pathname, init) { + return fetch(new URL(pathname, baseUrl), init); +} + +test("GET /ping returns server metadata", async () => { + const response = await request("/ping"); + + assert.equal(response.status, 200); + assert.match(response.headers.get("content-type"), /application\/json/i); + + const payload = await response.json(); + + assert.equal(typeof payload.serverVersion, "string"); + assert.ok(payload.serverVersion.length > 0); +}); + +test("GET /calendar/future-frontend-2026 returns an ICS calendar", async () => { + const response = await request("/calendar/future-frontend-2026"); + const body = await response.text(); + + assert.equal(response.status, 200); + assert.match(response.headers.get("content-type"), /text\/calendar/i); + assert.match(body, /BEGIN:VCALENDAR/); + assert.match(body, /futurefrontend\.com/i); +}); + +test("GET /calendar-2026.ics returns the published calendar file", async () => { + const response = await request("/calendar-2026.ics"); + const body = await response.text(); + + assert.equal(response.status, 200); + assert.match(response.headers.get("content-type"), /text\/calendar/i); + assert.match(body, /BEGIN:VCALENDAR/); +}); + +test("GET /calendar/:id returns 404 for an unknown conference", async () => { + const response = await request("/calendar/does-not-exist"); + const body = await response.text(); + + assert.equal(response.status, 404); + assert.match(body, /Not found/i); +}); + +test("GET /media/* serves checked-in assets", async () => { + const response = await request("/media/typeof/logo/logo-white.svg"); + const body = await response.text(); + + assert.equal(response.status, 200); + assert.match(response.headers.get("content-type"), /image\/svg\+xml/i); + assert.match(body, / { + const response = await request("/graphql", { + method: "POST", + headers: { + "content-type": "application/json", + }, + body: JSON.stringify({ + query: ` + query ConferenceById { + conference(id: "future-frontend-2026") { + id + name + year + startDate + endDate + } + } + `, + }), + }); + + assert.equal(response.status, 200); + assert.match(response.headers.get("content-type"), /application\/json/i); + + const payload = await response.json(); + + assert.deepEqual(payload, { + data: { + conference: { + id: "future-frontend-2026", + name: "Future Frontend 2026", + year: "2026", + startDate: "2026-06-08", + endDate: "2026-06-09", + }, + }, + }); +}); From f78ca01bb1c5ae94b760f86e1042380b51dc8097 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:12:35 +0300 Subject: [PATCH 10/45] Upgrade utility dependencies --- package-lock.json | 455 ++++++++++++++++------ package.json | 11 +- server/schema/resolvers/load-attendees.ts | 2 +- utils/generate-indices.js | 13 +- 4 files changed, 350 insertions(+), 131 deletions(-) diff --git a/package-lock.json b/package-lock.json index 951de275..27b1031f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,17 +12,17 @@ "body-parser": "1.20.3", "compression": "1.8.1", "cors": "2.8.6", - "csv-parse": "4.4.6", - "dotenv": "8.1.0", + "csv-parse": "6.2.1", + "dotenv": "17.4.0", "express": "4.21.2", - "fs-extra": "8.1.0", + "fs-extra": "11.3.4", "graphql": "14.5.4", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", "helmet": "3.21.0", "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", - "lodash": "4.17.21", + "lodash": "4.18.1", "morgan": "1.10.1", "reflect-metadata": "0.1.13", "rimraf": "3.0.0", @@ -42,8 +42,7 @@ "@types/morgan": "1.9.10", "@types/node": "24.0.3", "camelcase": "5.3.1", - "flatmap": "0.0.3", - "glob": "7.1.7", + "glob": "13.0.6", "mri": "1.2.0", "prettier": "2.3.1", "tsc-watch": "7.2.0", @@ -776,9 +775,10 @@ } }, "node_modules/csv-parse": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.4.6.tgz", - "integrity": "sha512-VisC5TBBhOF+70zjrF9FOiqI2LZOhXK/vAWlOrqyqz3lLa+P8jzJ7L/sg90MHmkSY/brAXWwrmGSZR0tM5yi4g==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.2.1.tgz", + "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==", + "license": "MIT" }, "node_modules/dasherize": { "version": "2.0.0", @@ -841,11 +841,15 @@ } }, "node_modules/dotenv": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz", - "integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", + "license": "BSD-2-Clause", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/dunder-proto": { @@ -1133,12 +1137,6 @@ "node": ">= 0.8" } }, - "node_modules/flatmap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/flatmap/-/flatmap-0.0.3.tgz", - "integrity": "sha1-Hxik2TgVLUlZZfnJWNkjqy3WabQ=", - "dev": true - }, "node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -1177,27 +1175,24 @@ "dev": true }, "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=14.14" } }, - "node_modules/fs-extra/node_modules/graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" }, "node_modules/function-bind": { "version": "1.1.2", @@ -1246,19 +1241,57 @@ } }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -1285,10 +1318,10 @@ } }, "node_modules/graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "optional": true + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/graphql": { "version": "14.5.4", @@ -1517,7 +1550,9 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1568,9 +1603,13 @@ } }, "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -1593,9 +1632,10 @@ "dev": true }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" }, "node_modules/lodash.get": { "version": "4.4.2", @@ -1625,6 +1665,16 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", @@ -1698,9 +1748,10 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1708,6 +1759,16 @@ "node": "*" } }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/moment": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", @@ -1824,7 +1885,8 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -1849,7 +1911,8 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1870,6 +1933,23 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", @@ -2011,6 +2091,27 @@ "rimraf": "bin.js" } }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -2385,6 +2486,28 @@ "tslint": "^5.0.0 || ^6.0.0" } }, + "node_modules/tslint/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/tslint/node_modules/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -2454,6 +2577,27 @@ "graphql": "^14.1.1" } }, + "node_modules/type-graphql/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/type-graphql/node_modules/tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -2491,11 +2635,12 @@ "license": "MIT" }, "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">= 10.0.0" } }, "node_modules/unpipe": { @@ -2600,7 +2745,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, "node_modules/x-xss-protection": { "version": "1.3.0", @@ -3191,9 +3337,9 @@ } }, "csv-parse": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.4.6.tgz", - "integrity": "sha512-VisC5TBBhOF+70zjrF9FOiqI2LZOhXK/vAWlOrqyqz3lLa+P8jzJ7L/sg90MHmkSY/brAXWwrmGSZR0tM5yi4g==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.2.1.tgz", + "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==" }, "dasherize": { "version": "2.0.0", @@ -3235,9 +3381,9 @@ "integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug==" }, "dotenv": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz", - "integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA==" + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==" }, "dunder-proto": { "version": "1.0.1", @@ -3439,12 +3585,6 @@ } } }, - "flatmap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/flatmap/-/flatmap-0.0.3.tgz", - "integrity": "sha1-Hxik2TgVLUlZZfnJWNkjqy3WabQ=", - "dev": true - }, "fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -3472,26 +3612,19 @@ "dev": true }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", "requires": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" - } + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "function-bind": { "version": "1.1.2", @@ -3525,16 +3658,40 @@ } }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "dependencies": { + "balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true + }, + "brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "requires": { + "balanced-match": "^4.0.2" + } + }, + "minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "requires": { + "brace-expansion": "^5.0.5" + } + } } }, "google-libphonenumber": { @@ -3548,10 +3705,9 @@ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "optional": true + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "graphql": { "version": "14.5.4", @@ -3702,7 +3858,7 @@ "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -3746,11 +3902,12 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "just-kebab-case": { @@ -3770,9 +3927,9 @@ "dev": true }, "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" }, "lodash.get": { "version": "4.4.2", @@ -3799,6 +3956,12 @@ } } }, + "lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "dev": true + }, "map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", @@ -3844,13 +4007,19 @@ } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "requires": { "brace-expansion": "^1.1.7" } }, + "minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true + }, "moment": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", @@ -3929,7 +4098,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } @@ -3950,7 +4119,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { "version": "3.1.1", @@ -3964,6 +4133,16 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "requires": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + } + }, "path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", @@ -4061,6 +4240,21 @@ "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", "requires": { "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "safe-buffer": { @@ -4305,6 +4499,20 @@ "tsutils": "^2.29.0" }, "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -4376,6 +4584,19 @@ "tslib": "^1.10.0" }, "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -4403,9 +4624,9 @@ "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==" }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" }, "unpipe": { "version": "1.0.0", @@ -4479,7 +4700,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "x-xss-protection": { "version": "1.3.0", diff --git a/package.json b/package.json index 4e5362e9..e7de6289 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,7 @@ "@types/morgan": "1.9.10", "@types/node": "24.0.3", "camelcase": "5.3.1", - "flatmap": "0.0.3", - "glob": "7.1.7", + "glob": "13.0.6", "mri": "1.2.0", "prettier": "2.3.1", "tsc-watch": "7.2.0", @@ -53,17 +52,17 @@ "body-parser": "1.20.3", "compression": "1.8.1", "cors": "2.8.6", - "csv-parse": "4.4.6", - "dotenv": "8.1.0", + "csv-parse": "6.2.1", + "dotenv": "17.4.0", "express": "4.21.2", - "fs-extra": "8.1.0", + "fs-extra": "11.3.4", "graphql": "14.5.4", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", "helmet": "3.21.0", "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", - "lodash": "4.17.21", + "lodash": "4.18.1", "morgan": "1.10.1", "reflect-metadata": "0.1.13", "rimraf": "3.0.0", diff --git a/server/schema/resolvers/load-attendees.ts b/server/schema/resolvers/load-attendees.ts index 4f101c1d..e750f77b 100644 --- a/server/schema/resolvers/load-attendees.ts +++ b/server/schema/resolvers/load-attendees.ts @@ -1,4 +1,4 @@ -import parse from "csv-parse/lib/sync"; // TODO: Use the async version instead? +import { parse } from "csv-parse/sync"; // TODO: Use the async version instead? import * as fs from "fs-extra"; import filter from "lodash/filter"; import map from "lodash/map"; diff --git a/utils/generate-indices.js b/utils/generate-indices.js index 345f52ad..384b9f55 100644 --- a/utils/generate-indices.js +++ b/utils/generate-indices.js @@ -1,8 +1,7 @@ const fs = require("fs-extra"); const path = require("path"); const camelCase = require("camelcase"); -const flatmap = require("flatmap"); -const glob = require("glob"); +const { globSync } = require("glob"); const { groupBy } = require("lodash"); const mri = require("mri"); const argv = process.argv.slice(2); @@ -18,11 +17,11 @@ function main() { }); const { _: rootDirs, format, verbose } = args; - const indexableDirs = flatmap(rootDirs, dir => - glob.sync(`${dir}/**/.index-modules`) - ).map(p => path.dirname(p)); - const filenames = flatmap(indexableDirs, dir => - glob.sync(`${dir}/**/*.${format}`) + const indexableDirs = rootDirs + .flatMap(dir => globSync(`${dir}/**/.index-modules`)) + .map(p => path.dirname(p)); + const filenames = indexableDirs.flatMap(dir => + globSync(`${dir}/**/*.${format}`) ); const categorizedFilenames = categorize(filenames); const indexFiles = generateIndices(categorizedFilenames, format); From 0d0956bbdfea7696e048e8cf5a32e6647e03dd5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:14:03 +0300 Subject: [PATCH 11/45] Upgrade Express runtime dependencies --- package-lock.json | 1455 +++++++++++++++-------------------- package.json | 8 +- server/routes/cloudflare.ts | 3 +- server/routes/index.ts | 3 +- server/routes/media.ts | 6 +- 5 files changed, 633 insertions(+), 842 deletions(-) diff --git a/package-lock.json b/package-lock.json index 27b1031f..84834767 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,17 +9,17 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "body-parser": "1.20.3", + "body-parser": "2.2.2", "compression": "1.8.1", "cors": "2.8.6", "csv-parse": "6.2.1", "dotenv": "17.4.0", - "express": "4.21.2", + "express": "5.2.1", "fs-extra": "11.3.4", "graphql": "14.5.4", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", - "helmet": "3.21.0", + "helmet": "8.1.0", "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", "lodash": "4.18.1", @@ -34,7 +34,7 @@ "@types/compression": "1.0.1", "@types/cors": "2.8.19", "@types/dotenv": "6.1.1", - "@types/express": "4.17.9", + "@types/express": "5.0.6", "@types/fs-extra": "8.0.0", "@types/graphql": "14.5.0", "@types/helmet": "0.0.48", @@ -160,22 +160,21 @@ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" }, "node_modules/@types/express": { - "version": "4.17.9", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz", - "integrity": "sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", "dev": true, "license": "MIT", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/qs": "*", - "@types/serve-static": "*" + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", "dev": true, "license": "MIT", "dependencies": { @@ -223,6 +222,13 @@ "@types/express": "*" } }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/lodash": { "version": "4.17.24", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", @@ -230,12 +236,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==", - "dev": true - }, "node_modules/@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -261,17 +261,18 @@ } }, "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", "dev": true, "license": "MIT" }, "node_modules/@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", - "dev": true + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/semver": { "version": "6.2.1", @@ -279,31 +280,24 @@ "integrity": "sha512-+beqKQOh9PYxuHvijhVl+tIHvT6tuwOrE9m14zd+MT2A38KoKZhh7pYJ0SNleLtwDsiIxHDsIk9bv01oOxvSvA==" }, "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, - "node_modules/@types/send/node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/serve-static": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz", - "integrity": "sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", "dev": true, + "license": "MIT", "dependencies": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" + "@types/http-errors": "*", + "@types/node": "*" } }, "node_modules/@types/triple-beam": { @@ -318,12 +312,13 @@ "integrity": "sha512-WAy5txG7aFX8Vw3sloEKp5p/t/Xt8jD3GRD9DacnFv6Vo8ubudAsRTXgxpQwU0mpzY/H8U4db3roDuCMjShBmw==" }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { "node": ">= 0.6" @@ -338,12 +333,6 @@ "sprintf-js": "~1.0.2" } }, - "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/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -376,29 +365,52 @@ } }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "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.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, + "node_modules/body-parser/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/body-parser/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/body-parser/node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -411,12 +423,6 @@ "node": ">= 0.8" } }, - "node_modules/bowser": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.5.4.tgz", - "integrity": "sha512-74GGwfc2nzYD19JCiA0RwCxdq7IY5jHeEaSrrgm/5kusEuK+7UK0qDG3gyzN47c4ViNyO4osaKtZE+aSV6nlpQ==", - "license": "MIT" - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -482,12 +488,6 @@ "node": ">=6" } }, - "node_modules/camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==", - "license": "MIT" - }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -678,44 +678,16 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "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-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/content-security-policy-builder": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz", - "integrity": "sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", "engines": { - "node": ">=4.0.0" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/content-type": { @@ -737,10 +709,13 @@ } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } }, "node_modules/cors": { "version": "2.8.6", @@ -780,12 +755,6 @@ "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==", "license": "MIT" }, - "node_modules/dasherize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", - "integrity": "sha512-APql/TZ6FdLEpf2z7/X2a2zyqK8juYtqaSVqxw9mYoQ64CXkfU15AeLh8pUszT8+fnYjgm6t0aIYpWKJbnLkuA==", - "license": "MIT" - }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -803,16 +772,6 @@ "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/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -822,24 +781,6 @@ "node": ">=0.3.1" } }, - "node_modules/dns-prefetch-control": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz", - "integrity": "sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/dont-sniff-mimetype": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz", - "integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/dotenv": { "version": "17.4.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", @@ -999,61 +940,72 @@ "through": "~2.3.1" } }, - "node_modules/expect-ct": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.2.0.tgz", - "integrity": "sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g==", + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", - "engines": { - "node": ">=4.0.0" + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "node_modules/express/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.10.0" + "node": ">=6.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/express/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/express/node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -1066,41 +1018,12 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/fast-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "node_modules/feature-policy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", - "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", @@ -1108,23 +1031,49 @@ "license": "MIT" }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "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.1", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, + "node_modules/finalhandler/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/finalhandler/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/finalhandler/node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -1150,22 +1099,13 @@ "node": ">= 0.6" } }, - "node_modules/frameguard": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.1.0.tgz", - "integrity": "sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/from": { @@ -1420,96 +1360,32 @@ } }, "node_modules/helmet": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.0.tgz", - "integrity": "sha512-TS3GryQMPR7n/heNnGC0Cl3Ess30g8C6EtqZyylf+Y2/kF4lM8JinOR90rzIICsw4ymWTvji4OhDmqsqxkLrcg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz", + "integrity": "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==", "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "dns-prefetch-control": "0.2.0", - "dont-sniff-mimetype": "1.1.0", - "expect-ct": "0.2.0", - "feature-policy": "0.3.0", - "frameguard": "3.1.0", - "helmet-crossdomain": "0.4.0", - "helmet-csp": "2.9.1", - "hide-powered-by": "1.1.0", - "hpkp": "2.0.0", - "hsts": "2.2.0", - "ienoopen": "1.1.0", - "nocache": "2.1.0", - "referrer-policy": "1.2.0", - "x-xss-protection": "1.3.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/helmet-crossdomain": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz", - "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/helmet-csp": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.1.tgz", - "integrity": "sha512-HgdXSJ6AVyXiy5ohVGpK6L7DhjI9KVdKVB1xRoixxYKsFXFwoVqtLKgDnfe3u8FGGKf9Ml9k//C9rnncIIAmyA==", - "license": "MIT", - "dependencies": { - "bowser": "2.5.4", - "camelize": "1.0.0", - "content-security-policy-builder": "2.1.0", - "dasherize": "2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/hide-powered-by": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz", - "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/hpkp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", - "integrity": "sha512-TaZpC6cO/k3DFsjfzz1LnOobbVSq+J+7WpJxrVtN4L+8+BPQj8iBDRB2Dx49613N+e7/+ZSQ9ra+xZm7Blf4wg==", - "license": "MIT" - }, - "node_modules/hsts": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.2.0.tgz", - "integrity": "sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0" - }, "engines": { - "node": ">=4.0.0" + "node": ">=18.0.0" } }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "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.1", - "toidentifier": "1.0.1" + "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/ical-generator": { @@ -1527,24 +1403,19 @@ } }, "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==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" - } - }, - "node_modules/ienoopen": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.1.0.tgz", - "integrity": "sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/inflight": { @@ -1571,6 +1442,12 @@ "node": ">= 0.10" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1691,60 +1568,49 @@ } }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "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" + "node": ">=18" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "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==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "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==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/minimatch": { @@ -1820,20 +1686,12 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/nocache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", - "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { - "node": ">=4.0.0" + "node": ">= 0.6" } }, "node_modules/node-cleanup": { @@ -1951,10 +1809,14 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, "node_modules/pause-stream": { "version": "0.0.11", @@ -2005,12 +1867,12 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -2029,18 +1891,18 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" } }, "node_modules/readable-stream": { @@ -2057,15 +1919,6 @@ "node": ">= 6" } }, - "node_modules/referrer-policy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", - "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -2112,6 +1965,45 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/router/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/router/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/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -2129,7 +2021,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/semver": { "version": "6.3.0", @@ -2140,36 +2033,46 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/send/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">= 0.8" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/send/node_modules/ms": { @@ -2191,18 +2094,22 @@ } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/setprototypeof": { @@ -2333,9 +2240,9 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "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" @@ -2604,12 +2511,14 @@ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { "node": ">= 0.6" @@ -2657,15 +2566,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "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/validator": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.0.0.tgz", @@ -2747,15 +2647,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" - }, - "node_modules/x-xss-protection": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz", - "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } } }, "dependencies": { @@ -2863,21 +2754,20 @@ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" }, "@types/express": { - "version": "4.17.9", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz", - "integrity": "sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", "dev": true, "requires": { "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/qs": "*", - "@types/serve-static": "*" + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" } }, "@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", "dev": true, "requires": { "@types/node": "*", @@ -2922,18 +2812,18 @@ "@types/express": "*" } }, + "@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true + }, "@types/lodash": { "version": "4.17.24", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", "dev": true }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==", - "dev": true - }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -2957,15 +2847,15 @@ } }, "@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", "dev": true }, "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, "@types/semver": { @@ -2974,31 +2864,22 @@ "integrity": "sha512-+beqKQOh9PYxuHvijhVl+tIHvT6tuwOrE9m14zd+MT2A38KoKZhh7pYJ0SNleLtwDsiIxHDsIk9bv01oOxvSvA==" }, "@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "dev": true, "requires": { - "@types/mime": "^1", "@types/node": "*" - }, - "dependencies": { - "@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true - } } }, "@types/serve-static": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz", - "integrity": "sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", "dev": true, "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" + "@types/http-errors": "*", + "@types/node": "*" } }, "@types/triple-beam": { @@ -3012,12 +2893,12 @@ "integrity": "sha512-WAy5txG7aFX8Vw3sloEKp5p/t/Xt8jD3GRD9DacnFv6Vo8ubudAsRTXgxpQwU0mpzY/H8U4db3roDuCMjShBmw==" }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" } }, "argparse": { @@ -3029,11 +2910,6 @@ "sprintf-js": "~1.0.2" } }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -3058,24 +2934,34 @@ } }, "body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "dependencies": { + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -3086,11 +2972,6 @@ } } }, - "bowser": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.5.4.tgz", - "integrity": "sha512-74GGwfc2nzYD19JCiA0RwCxdq7IY5jHeEaSrrgm/5kusEuK+7UK0qDG3gyzN47c4ViNyO4osaKtZE+aSV6nlpQ==" - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3135,11 +3016,6 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==" - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3282,24 +3158,9 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "content-security-policy-builder": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz", - "integrity": "sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==" }, "content-type": { "version": "1.0.5", @@ -3312,9 +3173,9 @@ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" }, "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==" }, "cors": { "version": "2.8.6", @@ -3341,11 +3202,6 @@ "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.2.1.tgz", "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==" }, - "dasherize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", - "integrity": "sha512-APql/TZ6FdLEpf2z7/X2a2zyqK8juYtqaSVqxw9mYoQ64CXkfU15AeLh8pUszT8+fnYjgm6t0aIYpWKJbnLkuA==" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -3359,27 +3215,12 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, - "dns-prefetch-control": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz", - "integrity": "sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q==" - }, - "dont-sniff-mimetype": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz", - "integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug==" - }, "dotenv": { "version": "17.4.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", @@ -3487,49 +3328,54 @@ "through": "~2.3.1" } }, - "expect-ct": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.2.0.tgz", - "integrity": "sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g==" - }, "express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "dependencies": { + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -3537,11 +3383,6 @@ "requires": { "ee-first": "1.1.1" } - }, - "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==" } } }, @@ -3551,30 +3392,37 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "feature-policy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", - "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==" - }, "fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, "finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "requires": { - "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.1", - "unpipe": "~1.0.0" - }, - "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "dependencies": { + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -3595,15 +3443,10 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, - "frameguard": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.1.0.tgz", - "integrity": "sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g==" - }, "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==" }, "from": { "version": "0.1.7", @@ -3767,71 +3610,20 @@ } }, "helmet": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.0.tgz", - "integrity": "sha512-TS3GryQMPR7n/heNnGC0Cl3Ess30g8C6EtqZyylf+Y2/kF4lM8JinOR90rzIICsw4ymWTvji4OhDmqsqxkLrcg==", - "requires": { - "depd": "2.0.0", - "dns-prefetch-control": "0.2.0", - "dont-sniff-mimetype": "1.1.0", - "expect-ct": "0.2.0", - "feature-policy": "0.3.0", - "frameguard": "3.1.0", - "helmet-crossdomain": "0.4.0", - "helmet-csp": "2.9.1", - "hide-powered-by": "1.1.0", - "hpkp": "2.0.0", - "hsts": "2.2.0", - "ienoopen": "1.1.0", - "nocache": "2.1.0", - "referrer-policy": "1.2.0", - "x-xss-protection": "1.3.0" - } - }, - "helmet-crossdomain": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz", - "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==" - }, - "helmet-csp": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.1.tgz", - "integrity": "sha512-HgdXSJ6AVyXiy5ohVGpK6L7DhjI9KVdKVB1xRoixxYKsFXFwoVqtLKgDnfe3u8FGGKf9Ml9k//C9rnncIIAmyA==", - "requires": { - "bowser": "2.5.4", - "camelize": "1.0.0", - "content-security-policy-builder": "2.1.0", - "dasherize": "2.0.0" - } - }, - "hide-powered-by": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz", - "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg==" - }, - "hpkp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", - "integrity": "sha512-TaZpC6cO/k3DFsjfzz1LnOobbVSq+J+7WpJxrVtN4L+8+BPQj8iBDRB2Dx49613N+e7/+ZSQ9ra+xZm7Blf4wg==" - }, - "hsts": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.2.0.tgz", - "integrity": "sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ==", - "requires": { - "depd": "2.0.0" - } + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz", + "integrity": "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==" }, "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" } }, "ical-generator": { @@ -3843,18 +3635,13 @@ } }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, - "ienoopen": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.1.0.tgz", - "integrity": "sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ==" - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3874,6 +3661,11 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3974,36 +3766,26 @@ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" }, "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" }, "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==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==" }, "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==" }, "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==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "requires": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" } }, "minimatch": { @@ -4057,14 +3839,9 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "nocache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", - "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==" }, "node-cleanup": { "version": "2.1.2", @@ -4144,9 +3921,9 @@ } }, "path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==" }, "pause-stream": { "version": "0.0.11", @@ -4182,11 +3959,11 @@ } }, "qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "requires": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" } }, "range-parser": { @@ -4195,14 +3972,14 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" } }, "readable-stream": { @@ -4215,11 +3992,6 @@ "util-deprecate": "^1.0.1" } }, - "referrer-policy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", - "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==" - }, "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -4257,6 +4029,33 @@ } } }, + "router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "requires": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "dependencies": { + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4278,29 +4077,30 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "dependencies": { + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "requires": { + "ms": "^2.1.3" + } }, "ms": { "version": "2.1.3", @@ -4318,14 +4118,14 @@ } }, "serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "requires": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" } }, "setprototypeof": { @@ -4413,9 +4213,9 @@ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==" }, "stream-combiner": { "version": "0.0.4", @@ -4605,12 +4405,13 @@ } }, "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" } }, "typescript": { @@ -4638,11 +4439,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "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==" - }, "validator": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.0.0.tgz", @@ -4701,11 +4497,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "x-xss-protection": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz", - "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==" } } } diff --git a/package.json b/package.json index e7de6289..042548cf 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@types/compression": "1.0.1", "@types/cors": "2.8.19", "@types/dotenv": "6.1.1", - "@types/express": "4.17.9", + "@types/express": "5.0.6", "@types/fs-extra": "8.0.0", "@types/graphql": "14.5.0", "@types/helmet": "0.0.48", @@ -49,17 +49,17 @@ "url": "https://github.com/ReactFinland/graphql-api/issues" }, "dependencies": { - "body-parser": "1.20.3", + "body-parser": "2.2.2", "compression": "1.8.1", "cors": "2.8.6", "csv-parse": "6.2.1", "dotenv": "17.4.0", - "express": "4.21.2", + "express": "5.2.1", "fs-extra": "11.3.4", "graphql": "14.5.4", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", - "helmet": "3.21.0", + "helmet": "8.1.0", "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", "lodash": "4.18.1", diff --git a/server/routes/cloudflare.ts b/server/routes/cloudflare.ts index 3f8e12b7..89a743cc 100644 --- a/server/routes/cloudflare.ts +++ b/server/routes/cloudflare.ts @@ -6,8 +6,7 @@ import routeGraphQL from "./graphql"; import routePing from "./ping"; async function createCloudflareRouter() { - // @ts-ignore - const router = new express.Router(); + const router = express.Router(); const schema = await generateSchema(); const mediaUrl = "/media"; diff --git a/server/routes/index.ts b/server/routes/index.ts index c634103a..17844dc2 100644 --- a/server/routes/index.ts +++ b/server/routes/index.ts @@ -11,8 +11,7 @@ import routePing from "./ping"; const projectRoot = path.resolve(__dirname, "../../../"); async function createRouter() { - // @ts-ignore - const router = new express.Router(); + const router = express.Router(); const schema = await generateSchema(); const mediaUrl = "/media"; const mediaPath = path.join(projectRoot, "media"); diff --git a/server/routes/media.ts b/server/routes/media.ts index 1d0c7b3a..fb07fa2b 100644 --- a/server/routes/media.ts +++ b/server/routes/media.ts @@ -2,8 +2,10 @@ import * as path from "path"; import logger from "../logger"; function routeMedia(router, mediaUrl, mediaPath) { - router.all(`${mediaUrl}/*`, async (req, res, next) => { - const asset = req.params["0"]; + router.all(`${mediaUrl}/*asset`, async (req, res, next) => { + const asset = Array.isArray(req.params.asset) + ? req.params.asset.join("/") + : req.params.asset; if ([".jpg", ".png", ".svg"].includes(path.extname(asset))) { try { From 1a286bfb652ec79642b2bffe108f894115f92e6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:15:28 +0300 Subject: [PATCH 12/45] Upgrade GraphQL dependencies --- package-lock.json | 486 ++++++++++++++++++++--------------------- package.json | 7 +- server/schema/index.ts | 8 +- 3 files changed, 250 insertions(+), 251 deletions(-) diff --git a/package-lock.json b/package-lock.json index 84834767..2f21ea36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "dotenv": "17.4.0", "express": "5.2.1", "fs-extra": "11.3.4", - "graphql": "14.5.4", + "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", "helmet": "8.1.0", @@ -24,9 +24,9 @@ "just-kebab-case": "1.1.0", "lodash": "4.18.1", "morgan": "1.10.1", - "reflect-metadata": "0.1.13", + "reflect-metadata": "0.2.2", "rimraf": "3.0.0", - "type-graphql": "0.17.6", + "type-graphql": "2.0.0-rc.3", "typescript": "5.8.3", "winston": "3.19.0" }, @@ -36,7 +36,6 @@ "@types/dotenv": "6.1.1", "@types/express": "5.0.6", "@types/fs-extra": "8.0.0", - "@types/graphql": "14.5.0", "@types/helmet": "0.0.48", "@types/lodash": "4.17.24", "@types/morgan": "1.9.10", @@ -97,6 +96,52 @@ "kuler": "^2.0.0" } }, + "node_modules/@graphql-yoga/subscription": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-5.0.5.tgz", + "integrity": "sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==", + "license": "MIT", + "dependencies": { + "@graphql-yoga/typed-event-target": "^3.0.2", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/events": "^0.1.0", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@graphql-yoga/subscription/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/@graphql-yoga/typed-event-target": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.2.tgz", + "integrity": "sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==", + "license": "MIT", + "dependencies": { + "@repeaterjs/repeater": "^3.0.4", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@graphql-yoga/typed-event-target/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/@repeaterjs/repeater": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", + "integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==", + "license": "MIT" + }, "node_modules/@so-ric/colorspace": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", @@ -154,11 +199,6 @@ "@types/node": "*" } }, - "node_modules/@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, "node_modules/@types/express": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", @@ -193,25 +233,6 @@ "@types/node": "*" } }, - "node_modules/@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dependencies": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/graphql": { - "version": "14.5.0", - "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-14.5.0.tgz", - "integrity": "sha512-MOkzsEp1Jk5bXuAsHsUi6BVv0zCO+7/2PTiZMXWDSsMXvNU6w/PLMQT2vHn8hy2i0JqojPz1Sz6rsFjHtsU0lA==", - "deprecated": "This is a stub types definition. graphql provides its own type definitions, so you do not need this installed.", - "dependencies": { - "graphql": "*" - } - }, "node_modules/@types/helmet": { "version": "0.0.48", "resolved": "https://registry.npmjs.org/@types/helmet/-/helmet-0.0.48.tgz", @@ -236,11 +257,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" - }, "node_modules/@types/morgan": { "version": "1.9.10", "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz", @@ -275,9 +291,10 @@ "license": "MIT" }, "node_modules/@types/semver": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.2.1.tgz", - "integrity": "sha512-+beqKQOh9PYxuHvijhVl+tIHvT6tuwOrE9m14zd+MT2A38KoKZhh7pYJ0SNleLtwDsiIxHDsIk9bv01oOxvSvA==" + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", + "license": "MIT" }, "node_modules/@types/send": { "version": "1.2.1", @@ -306,10 +323,23 @@ "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", "license": "MIT" }, - "node_modules/@types/validator": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.0.0.tgz", - "integrity": "sha512-WAy5txG7aFX8Vw3sloEKp5p/t/Xt8jD3GRD9DacnFv6Vo8ubudAsRTXgxpQwU0mpzY/H8U4db3roDuCMjShBmw==" + "node_modules/@whatwg-node/events": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.2.tgz", + "integrity": "sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/events/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/accepts": { "version": "2.0.0", @@ -526,17 +556,6 @@ "node": ">=4" } }, - "node_modules/class-validator": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.12.2.tgz", - "integrity": "sha512-TDzPzp8BmpsbPhQpccB3jMUE/3pK0TyqamrK0kcx+ZeFytMA+O6q87JZZGObHHnoo9GM8vl/JppIyKWeEA/EVw==", - "dependencies": { - "@types/validator": "13.0.0", - "google-libphonenumber": "^3.2.8", - "tslib": ">=1.9.0", - "validator": "13.0.0" - } - }, "node_modules/color": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", @@ -1237,14 +1256,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/google-libphonenumber": { - "version": "3.2.13", - "resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.13.tgz", - "integrity": "sha512-USnpjJkD8St+wyshy154lF74JeauNCd8vrcusSlWjSFWitXzl7ZSuCunA/XxeVLqBv6DShrSfFMYdwGZ7x4hOw==", - "engines": { - "node": ">=0.10" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -1264,14 +1275,12 @@ "license": "ISC" }, "node_modules/graphql": { - "version": "14.5.4", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.5.4.tgz", - "integrity": "sha512-dPLvHoxy5m9FrkqWczPPRnH0X80CyvRE6e7Fa5AWEqEAzg9LpxHvKh24po/482E6VWHigOkAmb4xCp6P9yT9gw==", - "dependencies": { - "iterall": "^1.2.2" - }, + "version": "16.13.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", + "integrity": "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==", + "license": "MIT", "engines": { - "node": ">= 6.x" + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, "node_modules/graphql-depth-limit": { @@ -1305,27 +1314,40 @@ } }, "node_modules/graphql-query-complexity": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/graphql-query-complexity/-/graphql-query-complexity-0.3.0.tgz", - "integrity": "sha512-JVqHT81Eh9O17iOjs1r1qzsh5YY2upfA3zoUsQGggT4d+1hajWitk4GQQY5SZtq5eul7y6jMsM9qRUSOAKhDJQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/graphql-query-complexity/-/graphql-query-complexity-1.1.0.tgz", + "integrity": "sha512-6sfAX+9CgkcPeZ7UiuBwgTGA+M1FYgHrQOXvORhQGd6SiaXbNVkLDcJ9ZSvNgzyChIfH0uPFFOY3Jm4wFZ4qEA==", + "license": "MIT", "dependencies": { "lodash.get": "^4.4.2" }, "peerDependencies": { - "graphql": "^0.13.0 || ^14.0.0" + "graphql": "^15.0.0 || ^16.0.0" } }, - "node_modules/graphql-subscriptions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz", - "integrity": "sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA==", + "node_modules/graphql-scalars": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.25.0.tgz", + "integrity": "sha512-b0xyXZeRFkne4Eq7NAnL400gStGqG/Sx9VqX0A05nHyEbv57UJnWKsjNnrpVqv5e/8N1MUxkt0wwcRXbiyKcFg==", + "license": "MIT", + "peer": true, "dependencies": { - "iterall": "^1.2.1" + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=10" }, "peerDependencies": { - "graphql": "^0.10.5 || ^0.11.3 || ^0.12.0 || ^0.13.0 || ^14.0.0" + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, + "node_modules/graphql-scalars/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "peer": true + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -1455,11 +1477,6 @@ "dev": true, "license": "ISC" }, - "node_modules/iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, "node_modules/jest-docblock": { "version": "21.2.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", @@ -1517,7 +1534,9 @@ "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "license": "MIT" }, "node_modules/logform": { "version": "2.7.0", @@ -1920,9 +1939,10 @@ } }, "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" }, "node_modules/resolve": { "version": "1.10.0", @@ -2025,11 +2045,15 @@ "license": "MIT" }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/send": { @@ -2330,7 +2354,8 @@ "node_modules/tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true }, "node_modules/tslint": { "version": "6.1.3", @@ -2461,54 +2486,47 @@ } }, "node_modules/type-graphql": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-0.17.6.tgz", - "integrity": "sha512-UFZaMMnpae3zeu9qCdWN82hm8wQeYu/+sQFbG5v3vlTtctZ9Xle9bvNi/rzSbQaG94K9Y5O5AGxjVKKMpEAMYA==", - "hasInstallScript": true, + "version": "2.0.0-rc.3", + "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", + "integrity": "sha512-o01aQg5/PWvd6nmZ55H1C74ROc9q0uNIAU2o65sbBailLmeG20LvkUuuYYA/E6fNoGABYFQlCVrIzlZlrSRDgQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/TypeGraphQL" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/typegraphql" + } + ], + "license": "MIT", "dependencies": { - "@types/glob": "^7.1.1", + "@graphql-yoga/subscription": "^5.0.5", "@types/node": "*", - "@types/semver": "^6.0.1", - "class-validator": ">=0.9.1", - "glob": "^7.1.4", - "graphql-query-complexity": "^0.3.0", - "graphql-subscriptions": "^1.1.0", - "semver": "^6.2.0", - "tslib": "^1.10.0" + "@types/semver": "^7.7.1", + "graphql-query-complexity": "^1.1.0", + "semver": "^7.7.3", + "tslib": "^2.8.1" }, "engines": { - "node": ">= 8.x" + "node": ">= 20.11.1" }, "peerDependencies": { - "@types/graphql": "^14.0.7", - "graphql": "^14.1.1" - } - }, - "node_modules/type-graphql/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "class-validator": ">=0.14.3", + "graphql": "^16.12.0", + "graphql-scalars": "^1.25.0" }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependenciesMeta": { + "class-validator": { + "optional": true + } } }, "node_modules/type-graphql/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/type-is": { "version": "2.0.1", @@ -2566,14 +2584,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "node_modules/validator": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.0.0.tgz", - "integrity": "sha512-anYx5fURbgF04lQV18nEQWZ/3wHGnxiKdG4aL8J+jEDsm98n/sU/bey+tYk6tnGJzm7ioh5FoqrAiQ6m03IgaA==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -2693,6 +2703,45 @@ "kuler": "^2.0.0" } }, + "@graphql-yoga/subscription": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-5.0.5.tgz", + "integrity": "sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==", + "requires": { + "@graphql-yoga/typed-event-target": "^3.0.2", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/events": "^0.1.0", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "@graphql-yoga/typed-event-target": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.2.tgz", + "integrity": "sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==", + "requires": { + "@repeaterjs/repeater": "^3.0.4", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "@repeaterjs/repeater": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", + "integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==" + }, "@so-ric/colorspace": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", @@ -2748,11 +2797,6 @@ "@types/node": "*" } }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, "@types/express": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", @@ -2785,24 +2829,6 @@ "@types/node": "*" } }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/graphql": { - "version": "14.5.0", - "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-14.5.0.tgz", - "integrity": "sha512-MOkzsEp1Jk5bXuAsHsUi6BVv0zCO+7/2PTiZMXWDSsMXvNU6w/PLMQT2vHn8hy2i0JqojPz1Sz6rsFjHtsU0lA==", - "requires": { - "graphql": "*" - } - }, "@types/helmet": { "version": "0.0.48", "resolved": "https://registry.npmjs.org/@types/helmet/-/helmet-0.0.48.tgz", @@ -2824,11 +2850,6 @@ "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", "dev": true }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" - }, "@types/morgan": { "version": "1.9.10", "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz", @@ -2859,9 +2880,9 @@ "dev": true }, "@types/semver": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.2.1.tgz", - "integrity": "sha512-+beqKQOh9PYxuHvijhVl+tIHvT6tuwOrE9m14zd+MT2A38KoKZhh7pYJ0SNleLtwDsiIxHDsIk9bv01oOxvSvA==" + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==" }, "@types/send": { "version": "1.2.1", @@ -2887,10 +2908,20 @@ "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" }, - "@types/validator": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.0.0.tgz", - "integrity": "sha512-WAy5txG7aFX8Vw3sloEKp5p/t/Xt8jD3GRD9DacnFv6Vo8ubudAsRTXgxpQwU0mpzY/H8U4db3roDuCMjShBmw==" + "@whatwg-node/events": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.2.tgz", + "integrity": "sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==", + "requires": { + "tslib": "^2.6.3" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } }, "accepts": { "version": "2.0.0", @@ -3047,17 +3078,6 @@ } } }, - "class-validator": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.12.2.tgz", - "integrity": "sha512-TDzPzp8BmpsbPhQpccB3jMUE/3pK0TyqamrK0kcx+ZeFytMA+O6q87JZZGObHHnoo9GM8vl/JppIyKWeEA/EVw==", - "requires": { - "@types/validator": "13.0.0", - "google-libphonenumber": "^3.2.8", - "tslib": ">=1.9.0", - "validator": "13.0.0" - } - }, "color": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", @@ -3537,11 +3557,6 @@ } } }, - "google-libphonenumber": { - "version": "3.2.13", - "resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.13.tgz", - "integrity": "sha512-USnpjJkD8St+wyshy154lF74JeauNCd8vrcusSlWjSFWitXzl7ZSuCunA/XxeVLqBv6DShrSfFMYdwGZ7x4hOw==" - }, "gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -3553,12 +3568,9 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "graphql": { - "version": "14.5.4", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.5.4.tgz", - "integrity": "sha512-dPLvHoxy5m9FrkqWczPPRnH0X80CyvRE6e7Fa5AWEqEAzg9LpxHvKh24po/482E6VWHigOkAmb4xCp6P9yT9gw==", - "requires": { - "iterall": "^1.2.2" - } + "version": "16.13.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", + "integrity": "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==" }, "graphql-depth-limit": { "version": "1.1.0", @@ -3575,19 +3587,28 @@ "requires": {} }, "graphql-query-complexity": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/graphql-query-complexity/-/graphql-query-complexity-0.3.0.tgz", - "integrity": "sha512-JVqHT81Eh9O17iOjs1r1qzsh5YY2upfA3zoUsQGggT4d+1hajWitk4GQQY5SZtq5eul7y6jMsM9qRUSOAKhDJQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/graphql-query-complexity/-/graphql-query-complexity-1.1.0.tgz", + "integrity": "sha512-6sfAX+9CgkcPeZ7UiuBwgTGA+M1FYgHrQOXvORhQGd6SiaXbNVkLDcJ9ZSvNgzyChIfH0uPFFOY3Jm4wFZ4qEA==", "requires": { "lodash.get": "^4.4.2" } }, - "graphql-subscriptions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz", - "integrity": "sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA==", + "graphql-scalars": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.25.0.tgz", + "integrity": "sha512-b0xyXZeRFkne4Eq7NAnL400gStGqG/Sx9VqX0A05nHyEbv57UJnWKsjNnrpVqv5e/8N1MUxkt0wwcRXbiyKcFg==", + "peer": true, "requires": { - "iterall": "^1.2.1" + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "peer": true + } } }, "has-flag": { @@ -3672,11 +3693,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, "jest-docblock": { "version": "21.2.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", @@ -3726,7 +3742,7 @@ "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, "logform": { "version": "2.7.0", @@ -3993,9 +4009,9 @@ } }, "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, "resolve": { "version": "1.10.0", @@ -4072,9 +4088,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==" }, "send": { "version": "1.2.1", @@ -4276,7 +4292,8 @@ "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true }, "tslint": { "version": "6.1.3", @@ -4369,38 +4386,22 @@ } }, "type-graphql": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-0.17.6.tgz", - "integrity": "sha512-UFZaMMnpae3zeu9qCdWN82hm8wQeYu/+sQFbG5v3vlTtctZ9Xle9bvNi/rzSbQaG94K9Y5O5AGxjVKKMpEAMYA==", + "version": "2.0.0-rc.3", + "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", + "integrity": "sha512-o01aQg5/PWvd6nmZ55H1C74ROc9q0uNIAU2o65sbBailLmeG20LvkUuuYYA/E6fNoGABYFQlCVrIzlZlrSRDgQ==", "requires": { - "@types/glob": "^7.1.1", + "@graphql-yoga/subscription": "^5.0.5", "@types/node": "*", - "@types/semver": "^6.0.1", - "class-validator": ">=0.9.1", - "glob": "^7.1.4", - "graphql-query-complexity": "^0.3.0", - "graphql-subscriptions": "^1.1.0", - "semver": "^6.2.0", - "tslib": "^1.10.0" + "@types/semver": "^7.7.1", + "graphql-query-complexity": "^1.1.0", + "semver": "^7.7.3", + "tslib": "^2.8.1" }, "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" } } }, @@ -4439,11 +4440,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "validator": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.0.0.tgz", - "integrity": "sha512-anYx5fURbgF04lQV18nEQWZ/3wHGnxiKdG4aL8J+jEDsm98n/sU/bey+tYk6tnGJzm7ioh5FoqrAiQ6m03IgaA==" - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/package.json b/package.json index 042548cf..01137fcc 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "@types/dotenv": "6.1.1", "@types/express": "5.0.6", "@types/fs-extra": "8.0.0", - "@types/graphql": "14.5.0", "@types/helmet": "0.0.48", "@types/lodash": "4.17.24", "@types/morgan": "1.9.10", @@ -56,7 +55,7 @@ "dotenv": "17.4.0", "express": "5.2.1", "fs-extra": "11.3.4", - "graphql": "14.5.4", + "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", "helmet": "8.1.0", @@ -64,9 +63,9 @@ "just-kebab-case": "1.1.0", "lodash": "4.18.1", "morgan": "1.10.1", - "reflect-metadata": "0.1.13", + "reflect-metadata": "0.2.2", "rimraf": "3.0.0", - "type-graphql": "0.17.6", + "type-graphql": "2.0.0-rc.3", "typescript": "5.8.3", "winston": "3.19.0" }, diff --git a/server/schema/index.ts b/server/schema/index.ts index 9f830497..dcfeaa3f 100644 --- a/server/schema/index.ts +++ b/server/schema/index.ts @@ -1,4 +1,4 @@ -import { buildSchema, registerEnumType } from "type-graphql"; +import { buildSchema, registerEnumType, type NonEmptyArray } from "type-graphql"; import { ContactType } from "./Contact"; import * as resolvers from "./resolvers"; import { Level, SessionType } from "./Session"; @@ -19,8 +19,12 @@ registerEnumType(Level, { }); export default async function generateSchema() { + const schemaResolvers = Object.values( + resolvers + ) as unknown as NonEmptyArray; + return await buildSchema({ - resolvers: Object.values(resolvers), + resolvers: schemaResolvers, // scalarsMap: [{ type: Url, scalar: UrlScalar }], // TODO: Emitting the schema could be useful for query checks. // emitSchemaFile: true, // use path for a specific location From 0f95e6d9993ec422b035307774402eb8ae69f5be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:19:37 +0300 Subject: [PATCH 13/45] Remove lodash dependency --- package-lock.json | 26 -------------- package.json | 2 -- server/schema/Conference.ts | 3 +- server/schema/Contact.ts | 25 +++++++++---- server/schema/Schedule.ts | 16 ++++----- server/schema/resolvers/load-attendees.ts | 44 +++++++++++++++-------- utils/generate-indices.js | 18 ++++++---- 7 files changed, 68 insertions(+), 66 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f21ea36..dabb290c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,6 @@ "helmet": "8.1.0", "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", - "lodash": "4.18.1", "morgan": "1.10.1", "reflect-metadata": "0.2.2", "rimraf": "3.0.0", @@ -37,7 +36,6 @@ "@types/express": "5.0.6", "@types/fs-extra": "8.0.0", "@types/helmet": "0.0.48", - "@types/lodash": "4.17.24", "@types/morgan": "1.9.10", "@types/node": "24.0.3", "camelcase": "5.3.1", @@ -250,13 +248,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/lodash": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", - "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/morgan": { "version": "1.9.10", "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz", @@ -1525,12 +1516,6 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "license": "MIT" - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -2844,12 +2829,6 @@ "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", "dev": true }, - "@types/lodash": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", - "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", - "dev": true - }, "@types/morgan": { "version": "1.9.10", "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz", @@ -3734,11 +3713,6 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", diff --git a/package.json b/package.json index 01137fcc..21da1966 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ "@types/express": "5.0.6", "@types/fs-extra": "8.0.0", "@types/helmet": "0.0.48", - "@types/lodash": "4.17.24", "@types/morgan": "1.9.10", "@types/node": "24.0.3", "camelcase": "5.3.1", @@ -61,7 +60,6 @@ "helmet": "8.1.0", "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", - "lodash": "4.18.1", "morgan": "1.10.1", "reflect-metadata": "0.2.2", "rimraf": "3.0.0", diff --git a/server/schema/Conference.ts b/server/schema/Conference.ts index 477768b1..bdde793a 100644 --- a/server/schema/Conference.ts +++ b/server/schema/Conference.ts @@ -1,4 +1,3 @@ -import map from "lodash/map"; import { Field, ID, ObjectType } from "type-graphql"; import conferences from "../conferences"; import { Contact, ContactType } from "./Contact"; @@ -124,7 +123,7 @@ function attachSponsorTypes( partners, } = conference; - return map(sponsors, ({ name, type, ...rest }) => ({ + return sponsors.map(({ name, type, ...rest }) => ({ ...rest, name, type: type diff --git a/server/schema/Contact.ts b/server/schema/Contact.ts index e29dfdf0..6ef0c7a3 100644 --- a/server/schema/Contact.ts +++ b/server/schema/Contact.ts @@ -1,5 +1,3 @@ -import flatMap from "lodash/flatMap"; -import uniqBy from "lodash/uniqBy"; import { Field, ObjectType } from "type-graphql"; import { Conference } from "./Conference"; import { Image } from "./Image"; @@ -96,15 +94,14 @@ export function getSessionSpeakers( const workshops = resolveSessions(conference.schedules, [ SessionType.WORKSHOP, ]); - const speakers = uniqBy( - flatMap(sessions, (session) => + const speakers = uniqByName( + sessions.flatMap((session) => (session.people || []).concat( session.sessions - ? flatMap(session.sessions, (session) => session.people || []) + ? session.sessions.flatMap((childSession) => childSession.people || []) : [] ) - ), - "name" + ) ); return speakers.map((speaker) => ({ @@ -123,3 +120,17 @@ export function getSessionSpeakers( : [], })); } + +function uniqByName(contacts: Contact[]) { + const names = new Set(); + + return contacts.filter(({ name }) => { + if (names.has(name)) { + return false; + } + + names.add(name); + + return true; + }); +} diff --git a/server/schema/Schedule.ts b/server/schema/Schedule.ts index 3512bb91..3c971a40 100644 --- a/server/schema/Schedule.ts +++ b/server/schema/Schedule.ts @@ -1,5 +1,3 @@ -import flatMap from "lodash/flatMap"; -import uniq from "lodash/uniq"; import { Field, ObjectType } from "type-graphql"; import { Interval } from "./Interval"; import { Location } from "./Location"; @@ -24,13 +22,13 @@ export function resolveSessions( schedules: Schedule[], sessionTypes: SessionType[] ) { - return uniq( - flatMap(schedules, ({ intervals }) => - flatMap(intervals, ({ sessions }) => - flatMap(sessions, (session) => - [session].concat(session.sessions || []) - ).filter(({ type }) => sessionTypes.includes(type)) - ) + const sessions = schedules.flatMap(({ intervals }) => + intervals.flatMap(({ sessions }) => + sessions + .flatMap((session) => [session].concat(session.sessions || [])) + .filter(({ type }) => sessionTypes.includes(type)) ) ); + + return Array.from(new Set(sessions)); } diff --git a/server/schema/resolvers/load-attendees.ts b/server/schema/resolvers/load-attendees.ts index e750f77b..3c0283c7 100644 --- a/server/schema/resolvers/load-attendees.ts +++ b/server/schema/resolvers/load-attendees.ts @@ -1,10 +1,5 @@ import { parse } from "csv-parse/sync"; // TODO: Use the async version instead? import * as fs from "fs-extra"; -import filter from "lodash/filter"; -import map from "lodash/map"; -import mapValues from "lodash/mapValues"; -import trimStart from "lodash/trimStart"; -import upperFirst from "lodash/upperFirst"; import { Conference } from "../Conference"; import { Contact, ContactType } from "../Contact"; @@ -29,12 +24,10 @@ function getSponsors(conference: Conference): Contact[] { } function convertData(sponsors: Contact[], tickets): Contact[] { - return map( - filter( - map(tickets, row => mapValues(row, v => (v === "-" ? null : v))), - t => !t["Void Status"] && !t.Ticket.startsWith("Workshop only") - ), - row => ({ + return tickets + .map(row => mapObjectValues(row, v => (v === "-" ? null : v))) + .filter((ticket) => !ticket["Void Status"] && !ticket.Ticket.startsWith("Workshop only")) + .map((row) => ({ name: getName(row), firstName: getFirstName(row), lastName: getLastName(row), @@ -53,8 +46,7 @@ function convertData(sponsors: Contact[], tickets): Contact[] { social: { twitter: getTwitter(row.Twitter || row["What's your Twitter handle?"]), }, - }) - ); + })); } function getName(row) { @@ -142,7 +134,31 @@ function getTwitter(twitter): string { return ""; } - return trimStart(twitter, "'@") || ""; + return trimPrefix(twitter || "", "'@"); +} + +function mapObjectValues(row, mapValue) { + return Object.fromEntries( + Object.entries(row).map(([key, value]) => [key, mapValue(value)]) + ); +} + +function upperFirst(value = ""): string { + if (!value) { + return ""; + } + + return value.charAt(0).toUpperCase() + value.slice(1); +} + +function trimPrefix(value: string, characters: string): string { + let index = 0; + + while (index < value.length && characters.includes(value[index])) { + index += 1; + } + + return value.slice(index); } export default loadAttendees; diff --git a/utils/generate-indices.js b/utils/generate-indices.js index 384b9f55..fdb72b30 100644 --- a/utils/generate-indices.js +++ b/utils/generate-indices.js @@ -2,7 +2,6 @@ const fs = require("fs-extra"); const path = require("path"); const camelCase = require("camelcase"); const { globSync } = require("glob"); -const { groupBy } = require("lodash"); const mri = require("mri"); const argv = process.argv.slice(2); @@ -30,14 +29,21 @@ function main() { } function categorize(filenames) { - return groupBy( - filenames.map(filename => ({ + return filenames + .map(filename => ({ basename: path.basename(filename, path.extname(filename)), dirname: path.dirname(filename), extname: path.extname(filename), - })), - "dirname" - ); + })) + .reduce((result, file) => { + if (!result[file.dirname]) { + result[file.dirname] = []; + } + + result[file.dirname].push(file); + + return result; + }, {}); } function generateIndices(categorizedFilenames, format) { From 3bb215fa7995b2a6b87f3e60f8ef19b52b2a4bd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:24:20 +0300 Subject: [PATCH 14/45] Remove Express runtime --- README.md | 2 +- package-lock.json | 2017 +---------------------------------- package.json | 14 - server/app.ts | 101 +- server/routes/calendar.ts | 62 +- server/routes/cloudflare.ts | 22 - server/routes/graphql.ts | 54 +- server/routes/index.ts | 29 - server/routes/media.ts | 86 +- server/routes/ping.ts | 8 +- server/server.ts | 113 +- test/api.e2e.test.cjs | 14 +- worker/index.ts | 18 +- 13 files changed, 306 insertions(+), 2234 deletions(-) delete mode 100644 server/routes/cloudflare.ts delete mode 100644 server/routes/index.ts diff --git a/README.md b/README.md index 8a9a181f..0ef20063 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ The project already includes a Worker entrypoint at [worker/index.ts](/Users/juh The current configuration: -- runs the Express app inside Cloudflare Workers using `cloudflare:node` +- runs a fetch-native request handler in Cloudflare Workers - routes `/graphql`, `/ping`, and calendar endpoints through the Worker - serves `/media/*` from static assets in the repository diff --git a/package-lock.json b/package-lock.json index dabb290c..bf908045 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,20 +9,14 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "body-parser": "2.2.2", - "compression": "1.8.1", - "cors": "2.8.6", "csv-parse": "6.2.1", "dotenv": "17.4.0", - "express": "5.2.1", "fs-extra": "11.3.4", "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", - "helmet": "8.1.0", "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", - "morgan": "1.10.1", "reflect-metadata": "0.2.2", "rimraf": "3.0.0", "type-graphql": "2.0.0-rc.3", @@ -30,13 +24,8 @@ "winston": "3.19.0" }, "devDependencies": { - "@types/compression": "1.0.1", - "@types/cors": "2.8.19", "@types/dotenv": "6.1.1", - "@types/express": "5.0.6", "@types/fs-extra": "8.0.0", - "@types/helmet": "0.0.48", - "@types/morgan": "1.9.10", "@types/node": "24.0.3", "camelcase": "5.3.1", "glob": "13.0.6", @@ -150,44 +139,6 @@ "text-hex": "1.0.x" } }, - "node_modules/@types/body-parser": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", - "integrity": "sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/compression": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.0.1.tgz", - "integrity": "sha512-GuoIYzD70h+4JUqUabsm31FGqvpCYHGKcLtor7nQ/YvUyNX0o9SJZ9boFI5HjFfbOda5Oe/XOvNK6FES8Y/79w==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cors": { - "version": "2.8.19", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", - "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/dotenv": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/@types/dotenv/-/dotenv-6.1.1.tgz", @@ -197,31 +148,6 @@ "@types/node": "*" } }, - "node_modules/@types/express": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", - "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^2" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", - "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, "node_modules/@types/fs-extra": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", @@ -231,33 +157,6 @@ "@types/node": "*" } }, - "node_modules/@types/helmet": { - "version": "0.0.48", - "resolved": "https://registry.npmjs.org/@types/helmet/-/helmet-0.0.48.tgz", - "integrity": "sha512-C7MpnvSDrunS1q2Oy1VWCY7CDWHozqSnM8P4tFeRTuzwqni+PYOjEredwcqWG+kLpYcgLsgcY3orHB54gbx2Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/morgan": { - "version": "1.9.10", - "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz", - "integrity": "sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/node": { "version": "24.0.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", @@ -267,47 +166,12 @@ "undici-types": "~7.8.0" } }, - "node_modules/@types/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", "license": "MIT" }, - "node_modules/@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*" - } - }, "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", @@ -332,19 +196,6 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -374,76 +225,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/body-parser/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/body-parser/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/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -462,44 +243,6 @@ "node": ">=0.10.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/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -623,127 +366,11 @@ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression/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/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -765,23 +392,6 @@ "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==", "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==", - "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/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -803,82 +413,18 @@ "url": "https://dotenvx.com" } }, - "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/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", "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/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -926,15 +472,6 @@ "node": ">=0.10.0" } }, - "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/event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", @@ -950,84 +487,6 @@ "through": "~2.3.1" } }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/express/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/express/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/fast-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", @@ -1040,84 +499,11 @@ "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", "license": "MIT" }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/finalhandler/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/finalhandler/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/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", @@ -1144,52 +530,6 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "license": "ISC" }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -1247,18 +587,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "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/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -1348,59 +676,6 @@ "node": ">=4" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/helmet": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz", - "integrity": "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, - "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/ical-generator": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-1.7.2.tgz", @@ -1415,22 +690,6 @@ "@types/node": ">= 8.0.0" } }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1447,20 +706,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1550,72 +795,17 @@ "version": "11.2.7", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "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": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", + "dev": true, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 0.6" + "node": "20 || >=22" } }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true }, "node_modules/minimatch": { "version": "3.1.5", @@ -1658,22 +848,6 @@ "node": "*" } }, - "node_modules/morgan": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", - "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", - "license": "MIT", - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.1.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -1684,66 +858,12 @@ "node": ">=4" } }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/node-cleanup": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", "integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=", "dev": true }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.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.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1761,15 +881,6 @@ "fn.name": "1.x.x" } }, - "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-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1812,16 +923,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-to-regexp": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", @@ -1843,18 +944,6 @@ "node": ">=10.13.0" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/ps-tree": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", @@ -1870,45 +959,6 @@ "node": ">= 0.10" } }, - "node_modules/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", - "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": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -1970,45 +1020,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/router/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/router/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/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -2023,12 +1034,6 @@ "node": ">=10" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, "node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", @@ -2041,92 +1046,6 @@ "node": ">=10" } }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/send/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "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/send/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "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/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2150,78 +1069,6 @@ "node": ">=8" } }, - "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.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "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/split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -2248,15 +1095,6 @@ "node": "*" } }, - "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/stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", @@ -2296,15 +1134,6 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "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/triple-beam": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", @@ -2513,20 +1342,6 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", @@ -2555,28 +1370,11 @@ "node": ">= 10.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "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": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -2736,103 +1534,19 @@ "text-hex": "1.0.x" } }, - "@types/body-parser": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", - "integrity": "sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/compression": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.0.1.tgz", - "integrity": "sha512-GuoIYzD70h+4JUqUabsm31FGqvpCYHGKcLtor7nQ/YvUyNX0o9SJZ9boFI5HjFfbOda5Oe/XOvNK6FES8Y/79w==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/cors": { - "version": "2.8.19", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", - "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/dotenv": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/dotenv/-/dotenv-6.1.1.tgz", - "integrity": "sha512-ftQl3DtBvqHl9L16tpqqzA4YzCSXZfi7g8cQceTz5rOlYtk/IZbFjAv3mLOQlNIgOaylCQWQoBdDQHPgEBJPHg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", - "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^2" - } - }, - "@types/express-serve-static-core": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", - "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "@types/fs-extra": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", - "integrity": "sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/helmet": { - "version": "0.0.48", - "resolved": "https://registry.npmjs.org/@types/helmet/-/helmet-0.0.48.tgz", - "integrity": "sha512-C7MpnvSDrunS1q2Oy1VWCY7CDWHozqSnM8P4tFeRTuzwqni+PYOjEredwcqWG+kLpYcgLsgcY3orHB54gbx2Jw==", + "resolved": "https://registry.npmjs.org/@types/dotenv/-/dotenv-6.1.1.tgz", + "integrity": "sha512-ftQl3DtBvqHl9L16tpqqzA4YzCSXZfi7g8cQceTz5rOlYtk/IZbFjAv3mLOQlNIgOaylCQWQoBdDQHPgEBJPHg==", "dev": true, "requires": { - "@types/express": "*" + "@types/node": "*" } }, - "@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true - }, - "@types/morgan": { - "version": "1.9.10", - "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz", - "integrity": "sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA==", + "@types/fs-extra": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", + "integrity": "sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==", "dev": true, "requires": { "@types/node": "*" @@ -2846,42 +1560,11 @@ "undici-types": "~7.8.0" } }, - "@types/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true - }, "@types/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==" }, - "@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", - "dev": true, - "requires": { - "@types/http-errors": "*", - "@types/node": "*" - } - }, "@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", @@ -2902,15 +1585,6 @@ } } }, - "accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "requires": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -2935,53 +1609,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "requires": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "dependencies": { - "debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - } - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2997,29 +1624,6 @@ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "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==", - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - } - }, - "call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "requires": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - } - }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -3117,74 +1721,11 @@ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", - "requires": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "dependencies": { - "negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==" - }, - "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==" - } - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==" - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" - }, - "cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" - }, - "cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==" - }, - "cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, "cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -3201,19 +1742,6 @@ "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.2.1.tgz", "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==" }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -3225,60 +1753,17 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==" }, - "dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - } - }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, "enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, - "encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" - }, - "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==" - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" - }, - "es-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==", - "requires": { - "es-errors": "^1.3.0" - } - }, - "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==" - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -3307,11 +1792,6 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, "event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", @@ -3327,64 +1807,6 @@ "through": "~2.3.1" } }, - "express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "requires": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "dependencies": { - "debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - } - } - }, "fast-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", @@ -3396,57 +1818,11 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, - "finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "requires": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "dependencies": { - "debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - } - } - }, "fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==" - }, "from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", @@ -3468,37 +1844,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "requires": { - "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" - } - }, - "get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "requires": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - } - }, "glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -3536,11 +1881,6 @@ } } }, - "gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" - }, "graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -3596,36 +1936,6 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" - }, - "hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "requires": { - "function-bind": "^1.1.2" - } - }, - "helmet": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz", - "integrity": "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==" - }, - "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==", - "requires": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - } - }, "ical-generator": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-1.7.2.tgz", @@ -3634,14 +1944,6 @@ "moment-timezone": "^0.5.26" } }, - "iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3656,16 +1958,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "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==" - }, - "is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3750,34 +2042,6 @@ "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true }, - "math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" - }, - "media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" - }, - "merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==" - }, - "mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==" - }, - "mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "requires": { - "mime-db": "^1.54.0" - } - }, "minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", @@ -3805,63 +2069,18 @@ "moment": ">= 2.9.0" } }, - "morgan": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", - "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", - "requires": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.1.0" - } - }, "mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==" - }, "node-cleanup": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", "integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=", "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==" - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3878,11 +2097,6 @@ "fn.name": "1.x.x" } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3910,11 +2124,6 @@ "minipass": "^7.1.2" } }, - "path-to-regexp": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==" - }, "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", @@ -3930,15 +2139,6 @@ "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", "dev": true }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, "ps-tree": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", @@ -3948,30 +2148,6 @@ "event-stream": "=3.3.4" } }, - "qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", - "requires": { - "side-channel": "^1.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "requires": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - } - }, "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -4019,33 +2195,6 @@ } } }, - "router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "requires": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "dependencies": { - "debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4056,73 +2205,11 @@ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==" }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==" }, - "send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "requires": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "dependencies": { - "debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "requires": { - "ms": "^2.1.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - } - } - }, - "serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "requires": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4138,50 +2225,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "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==", - "requires": { - "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" - } - }, - "side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "requires": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - } - }, - "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==", - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - } - }, - "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==", - "requires": { - "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" - } - }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -4202,11 +2245,6 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, - "statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==" - }, "stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", @@ -4241,11 +2279,6 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, "triple-beam": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", @@ -4379,16 +2412,6 @@ } } }, - "type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "requires": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - } - }, "typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", @@ -4404,21 +2427,11 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 21da1966..91a3ec0a 100644 --- a/package.json +++ b/package.json @@ -19,13 +19,8 @@ "author": "", "license": "MIT", "devDependencies": { - "@types/compression": "1.0.1", - "@types/cors": "2.8.19", "@types/dotenv": "6.1.1", - "@types/express": "5.0.6", "@types/fs-extra": "8.0.0", - "@types/helmet": "0.0.48", - "@types/morgan": "1.9.10", "@types/node": "24.0.3", "camelcase": "5.3.1", "glob": "13.0.6", @@ -36,9 +31,6 @@ "tslint-config-prettier": "1.18.0", "tslint-plugin-prettier": "2.3.0" }, - "resolutions": { - "@types/express": "4.17.9" - }, "repository": { "type": "git", "url": "https://github.com/ReactFinland/graphql-api.git" @@ -47,20 +39,14 @@ "url": "https://github.com/ReactFinland/graphql-api/issues" }, "dependencies": { - "body-parser": "2.2.2", - "compression": "1.8.1", - "cors": "2.8.6", "csv-parse": "6.2.1", "dotenv": "17.4.0", - "express": "5.2.1", "fs-extra": "11.3.4", "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", - "helmet": "8.1.0", "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", - "morgan": "1.10.1", "reflect-metadata": "0.2.2", "rimraf": "3.0.0", "type-graphql": "2.0.0-rc.3", diff --git a/server/app.ts b/server/app.ts index 6df35500..5b6ed662 100644 --- a/server/app.ts +++ b/server/app.ts @@ -1,59 +1,68 @@ -import { json, urlencoded } from "body-parser"; -import compression from "compression"; -import express from "express"; -import helmet from "helmet"; -import morgan from "morgan"; -import logger from "./logger"; +import * as path from "path"; +import generateSchema from "./schema"; +import handleCalendarRequest from "./routes/calendar"; +import createGraphQLRequestHandler from "./routes/graphql"; +import handleMediaRequest from "./routes/media"; +import handlePingRequest from "./routes/ping"; -type CreateRouter = () => Promise; - -interface CreateAppOptions { - createRouter?: CreateRouter; +export interface CreateRequestHandlerOptions { + enableMedia?: boolean; + mediaPath?: string; + mediaUrl?: string; + projectRoot?: string; } -async function createApp(options: CreateAppOptions = {}) { - const app = express(); - const getRouter = - options.createRouter || (await import("./routes")).default; - - // Wear a helmet for extra security. - app.use( - helmet({ - frameguard: false, - }) +async function createRequestHandler(options: CreateRequestHandlerOptions = {}) { + const projectRoot = options.projectRoot || path.resolve(__dirname, "../.."); + const mediaUrl = options.mediaUrl || "/media"; + const mediaPath = options.mediaPath || path.join(projectRoot, "media"); + const enableMedia = options.enableMedia !== false; + const schema = await generateSchema(); + const graphqlHandler = createGraphQLRequestHandler( + schema, + projectRoot, + mediaUrl ); - // Use compression (gzip) for responses. - app.use(compression()); + return async function handleRequest(request: Request): Promise { + if (request.method === "OPTIONS") { + return withDefaultHeaders(new Response(null, { status: 204 })); + } - // Automatically decode json. - app.use( - json({ - limit: "50mb", - }) - ); + const pathname = new URL(request.url).pathname; + let response: Response | null = null; - // Automatically decode POST. - app.use( - urlencoded({ - extended: true, - }) - ); + if (pathname === "/ping") { + response = handlePingRequest(); + } else if (pathname === "/calendar-2026.ics") { + response = handleCalendarRequest(pathname); + } else if (pathname.startsWith("/calendar/")) { + response = handleCalendarRequest(pathname); + } else if (pathname === "/graphql") { + response = await graphqlHandler(request); + } else if (enableMedia && pathname.startsWith(`${mediaUrl}/`)) { + response = await handleMediaRequest(pathname, mediaUrl, mediaPath); + } - // Add custom configured logger (morgan through winston). - app.use( - morgan("combined", { - stream: { - write: message => logger.info(message), - }, - }) - ); + return withDefaultHeaders( + response || new Response("Not found", { status: 404 }) + ); + }; +} - const routes = await getRouter(); +function withDefaultHeaders(response: Response) { + const headers = new Headers(response.headers); - app.use("/", routes); + headers.set("access-control-allow-origin", "*"); + headers.set("access-control-allow-headers", "content-type"); + headers.set("access-control-allow-methods", "GET,POST,OPTIONS"); + headers.set("x-content-type-options", "nosniff"); - return app; + return new Response(response.body, { + headers, + status: response.status, + statusText: response.statusText, + }); } -export default createApp; +export default createRequestHandler; diff --git a/server/routes/calendar.ts b/server/routes/calendar.ts index 2803c2a1..f79f4802 100644 --- a/server/routes/calendar.ts +++ b/server/routes/calendar.ts @@ -2,31 +2,31 @@ import ical from "ical-generator"; import conferences from "../conferences"; import { Schedule } from "../schema/Schedule"; -function routeCalendar(router) { - router.all("/calendar/:id", (req, res) => { - const conference = conferences[req.params.id]; - - if (conference) { - calendar({ - filename: `calendar-${conference.id}`, - title: conference.name, - schedules: conference.schedules, - })(req, res); - } else { - res.status(404).end("Not found"); - } - }); - - // TODO: Make a better abstraction for this - const calendarFile = "calendar-2026.ics"; - router.all( - `/${calendarFile}`, - calendar({ - filename: calendarFile, +function handleCalendarRequest(pathname: string) { + if (pathname === "/calendar-2026.ics") { + return calendar({ + filename: "calendar-2026.ics", title: "Future Frontend 2026", schedules: conferences["future-frontend-2026"].schedules, - }) - ); + }); + } + + if (!pathname.startsWith("/calendar/")) { + return null; + } + + const conferenceId = decodeURIComponent(pathname.replace("/calendar/", "")); + const conference = conferences[conferenceId]; + + if (!conference) { + return new Response("Not found", { status: 404 }); + } + + return calendar({ + filename: `calendar-${conference.id}`, + title: conference.name, + schedules: conference.schedules, + }); } function calendar({ @@ -59,13 +59,13 @@ function calendar({ }); } - return (_, response) => { - response.writeHead(200, { - "Content-Type": "text/calendar; charset=utf-8", - "Content-Disposition": `attachment; filename="${filename}"`, - }); - response.end(cal.toString()); - }; + return new Response(cal.toString(), { + headers: { + "content-disposition": `attachment; filename="${filename}"`, + "content-type": "text/calendar; charset=utf-8", + }, + status: 200, + }); } function resolveLocation(location) { @@ -77,4 +77,4 @@ function resolveLocation(location) { : defaultLocation; } -export default routeCalendar; +export default handleCalendarRequest; diff --git a/server/routes/cloudflare.ts b/server/routes/cloudflare.ts deleted file mode 100644 index 89a743cc..00000000 --- a/server/routes/cloudflare.ts +++ /dev/null @@ -1,22 +0,0 @@ -import cors from "cors"; -import express from "express"; -import generateSchema from "../schema"; -import routeCalendar from "./calendar"; -import routeGraphQL from "./graphql"; -import routePing from "./ping"; - -async function createCloudflareRouter() { - const router = express.Router(); - const schema = await generateSchema(); - const mediaUrl = "/media"; - - router.use(cors()); - - routeCalendar(router); - routeGraphQL(router, schema, "/bundle", mediaUrl); - routePing(router); - - return router; -} - -export default createCloudflareRouter; diff --git a/server/routes/graphql.ts b/server/routes/graphql.ts index 9a03a588..9f73863e 100644 --- a/server/routes/graphql.ts +++ b/server/routes/graphql.ts @@ -1,42 +1,30 @@ // import process from "process"; -import { createHandler as graphql } from "graphql-http/lib/use/express"; +import { createHandler as graphql } from "graphql-http/lib/use/fetch"; import depthLimit from "graphql-depth-limit"; -function routeGraphQL(router, schema, projectRoot, mediaUrl) { - router.all( - "/graphql", - graphql({ - schema, - validationRules: [depthLimit(7)], - context: (req) => { - const rawRequest = req.raw || req; - - return { - hostname: getHostname(rawRequest), - mediaUrl: `${getHostname(rawRequest)}${mediaUrl}`, - projectRoot, - }; - }, - }) - ); +function createGraphQLRequestHandler(schema, projectRoot, mediaUrl) { + return graphql({ + schema, + validationRules: [depthLimit(7)], + context: (request) => { + const rawRequest = request.raw || request; + + return { + hostname: getHostname(rawRequest), + mediaUrl: `${getHostname(rawRequest)}${mediaUrl}`, + projectRoot, + }; + }, + }); } -function getHostname(req) { - const forwardedProtocol = getHeader(req, "x-forwarded-proto"); - const protocol = forwardedProtocol || req.protocol || "http"; - const host = getHeader(req, "host"); +function getHostname(request: { headers: Headers; url: string }) { + const forwardedProtocol = request.headers.get("x-forwarded-proto"); + const protocol = + forwardedProtocol || new URL(request.url).protocol.replace(":", ""); + const host = request.headers.get("host") || new URL(request.url).host; return `${protocol}://${host}`; } -function getHeader(req, name) { - if (typeof req.get === "function") { - return req.get(name); - } - - const value = req.headers?.[name]; - - return Array.isArray(value) ? value[0] : value; -} - -export default routeGraphQL; +export default createGraphQLRequestHandler; diff --git a/server/routes/index.ts b/server/routes/index.ts deleted file mode 100644 index 17844dc2..00000000 --- a/server/routes/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import cors from "cors"; -import express from "express"; -import * as path from "path"; -import generateSchema from "../schema"; -import routeCalendar from "./calendar"; -import routeGraphQL from "./graphql"; -import routeMedia from "./media"; -import routePing from "./ping"; - -// FIXME: Resolve media path against project root, not module as this is brittle -const projectRoot = path.resolve(__dirname, "../../../"); - -async function createRouter() { - const router = express.Router(); - const schema = await generateSchema(); - const mediaUrl = "/media"; - const mediaPath = path.join(projectRoot, "media"); - - router.use(cors()); - - routeCalendar(router); - routeGraphQL(router, schema, projectRoot, mediaUrl); - routeMedia(router, mediaUrl, mediaPath); - routePing(router); - - return router; -} - -export default createRouter; diff --git a/server/routes/media.ts b/server/routes/media.ts index fb07fa2b..2298624e 100644 --- a/server/routes/media.ts +++ b/server/routes/media.ts @@ -1,30 +1,68 @@ import * as path from "path"; +import * as fs from "fs-extra"; import logger from "../logger"; -function routeMedia(router, mediaUrl, mediaPath) { - router.all(`${mediaUrl}/*asset`, async (req, res, next) => { - const asset = Array.isArray(req.params.asset) - ? req.params.asset.join("/") - : req.params.asset; - - if ([".jpg", ".png", ".svg"].includes(path.extname(asset))) { - try { - return res.sendFile(path.join(mediaPath, asset)); - } catch (err) { - logger.error(err); - - next(); - } - } else { - res.sendFile(asset, { root: mediaPath }, (err) => { - res.end(); - - if (err) { - logger.error(err); - } - }); +async function handleMediaRequest( + pathname: string, + mediaUrl: string, + mediaPath: string +) { + const asset = decodeURIComponent(pathname.slice(mediaUrl.length + 1)); + const rootPath = path.resolve(mediaPath); + const filePath = path.resolve(rootPath, asset); + + if (!isInsideRoot(filePath, rootPath)) { + return new Response("Not found", { status: 404 }); + } + + try { + if (!(await fs.pathExists(filePath))) { + return new Response("Not found", { status: 404 }); } - }); + + const body = await fs.readFile(filePath); + + return new Response(body, { + headers: { + "content-type": getContentType(filePath), + }, + status: 200, + }); + } catch (err) { + logger.error(err); + + return new Response("Not found", { status: 404 }); + } +} + +function getContentType(filePath: string) { + switch (path.extname(filePath).toLowerCase()) { + case ".eot": + return "application/vnd.ms-fontobject"; + case ".ico": + return "image/x-icon"; + case ".jpeg": + case ".jpg": + return "image/jpeg"; + case ".md": + return "text/markdown; charset=utf-8"; + case ".png": + return "image/png"; + case ".svg": + return "image/svg+xml"; + case ".ttf": + return "font/ttf"; + case ".woff": + return "font/woff"; + case ".woff2": + return "font/woff2"; + default: + return "application/octet-stream"; + } +} + +function isInsideRoot(filePath: string, rootPath: string) { + return filePath === rootPath || filePath.startsWith(`${rootPath}${path.sep}`); } -export default routeMedia; +export default handleMediaRequest; diff --git a/server/routes/ping.ts b/server/routes/ping.ts index 198bcaec..49a29b9f 100644 --- a/server/routes/ping.ts +++ b/server/routes/ping.ts @@ -1,7 +1,7 @@ -function routePing(router) { - const serverVersion = new Date().toString(); +const serverVersion = new Date().toString(); - router.get("/ping", (req, res) => res.status(200).json({ serverVersion })); +function handlePingRequest() { + return Response.json({ serverVersion }); } -export default routePing; +export default handlePingRequest; diff --git a/server/server.ts b/server/server.ts index 811b3b60..64a42b7b 100644 --- a/server/server.ts +++ b/server/server.ts @@ -1,4 +1,6 @@ -import createApp from "./app"; +import * as http from "http"; +import type { IncomingMessage, ServerResponse } from "http"; +import createRequestHandler from "./app"; import logger from "./logger"; const normalizePort = (value: string) => { @@ -11,27 +13,116 @@ const normalizePort = (value: string) => { return false; }; -async function createServer() { +interface CreateServerOptions { + logRequests?: boolean; + logStartup?: boolean; + port?: number | false; +} + +async function createServer(options: CreateServerOptions = {}) { logger.debug("Starting to boot the server."); - const port = normalizePort(process.env.PORT || "3000"); - const app = await createApp(); - let server; + const port = + options.port === undefined + ? normalizePort(process.env.PORT || "3000") + : options.port; + const handleRequest = await createRequestHandler(); + const server = http.createServer(async (req, res) => { + const request = toRequest(req); + + try { + const response = await handleRequest(request); + + await sendResponse(res, response); + + if (options.logRequests !== false) { + logger.info(`${req.method} ${req.url} ${response.status}`); + } + } catch (err) { + logger.error(err); + res.writeHead(500).end(); + } + }); try { - server = app.listen(port, () => + await new Promise((resolve, reject) => { + server.once("error", reject); + server.listen(port, () => { + server.off("error", reject); + resolve(); + }); + }); + + if (options.logStartup !== false) { + const address = server.address(); + const resolvedPort = + typeof address === "object" && address ? address.port : port; + logger.debug( - `Finished booting the server. The API is reachable at http://localhost:${port.toString()}/graphql.` - ) - ); + `Finished booting the server. The API is reachable at http://localhost:${resolvedPort?.toString()}/graphql.` + ); + } } catch (err) { logger.error(err); - process.exit(1); } - // eslint-disable-line return server; } +function toRequest(req: IncomingMessage): Request { + const protocol = getProtocol(req); + const host = req.headers.host || "localhost"; + const url = new URL(req.url || "/", `${protocol}://${host}`); + const headers = new Headers(); + + Object.entries(req.headers).forEach(([key, value]) => { + if (Array.isArray(value)) { + value.forEach((entry) => headers.append(key, entry)); + } else if (value !== undefined) { + headers.set(key, value); + } + }); + + const init = { + headers, + method: req.method, + }; + + if (req.method === "GET" || req.method === "HEAD") { + return new Request(url, init); + } + + return new Request(url, { + ...init, + body: req as unknown as ReadableStream, + duplex: "half", + } as RequestInit & { duplex: "half" }); +} + +async function sendResponse(res: ServerResponse, response: Response) { + response.headers.forEach((value, key) => { + res.setHeader(key, value); + }); + + res.statusCode = response.status; + res.statusMessage = response.statusText; + + if (!response.body) { + res.end(); + + return; + } + + const body = Buffer.from(await response.arrayBuffer()); + + res.end(body); +} + +function getProtocol(req: IncomingMessage) { + const forwardedProtocol = req.headers["x-forwarded-proto"]; + + return typeof forwardedProtocol === "string" ? forwardedProtocol : "http"; +} + export default createServer; diff --git a/test/api.e2e.test.cjs b/test/api.e2e.test.cjs index 27660cbe..6aec2170 100644 --- a/test/api.e2e.test.cjs +++ b/test/api.e2e.test.cjs @@ -1,22 +1,20 @@ const assert = require("node:assert/strict"); -const { once } = require("node:events"); const test = require("node:test"); require("reflect-metadata"); -const createApp = require("../build/server/app").default; +const createServer = require("../build/server/server").default; let server; let baseUrl; test.before(async () => { process.env.NODE_ENV = "test"; - - const app = await createApp(); - - server = app.listen(0, "127.0.0.1"); - - await once(server, "listening"); + server = await createServer({ + logRequests: false, + logStartup: false, + port: 0, + }); const address = server.address(); diff --git a/worker/index.ts b/worker/index.ts index e2c4397f..5bb74ae3 100644 --- a/worker/index.ts +++ b/worker/index.ts @@ -1,13 +1,13 @@ -import { httpServerHandler } from "cloudflare:node"; import "reflect-metadata"; -import createApp from "../server/app"; -import createCloudflareRouter from "../server/routes/cloudflare"; +import createRequestHandler from "../server/app"; -const port = 3000; -const app = await createApp({ - createRouter: createCloudflareRouter, +const handleRequest = await createRequestHandler({ + enableMedia: false, + projectRoot: "/bundle", }); -app.listen(port); - -export default httpServerHandler({ port }); +export default { + fetch(request) { + return handleRequest(request); + }, +}; From 857d2ca8cc40a29fc8e1644c6e4dc9ff0b6bde0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:28:46 +0300 Subject: [PATCH 15/45] Trim maintenance scripts --- README.md | 5 +- package-lock.json | 1185 +-------------------------------------------- package.json | 21 +- tslint.json | 13 - 4 files changed, 5 insertions(+), 1219 deletions(-) delete mode 100644 tslint.json diff --git a/README.md b/README.md index 0ef20063..b62295dc 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,8 @@ This repository serves conference data over GraphQL and exposes a small set of s Use the original Node.js server for local development: 1. Install dependencies with `npm install`. -2. Start the server with `NODE_ENV=development npm start`. -3. Open `http://localhost:3000/graphql`. -4. Run the API e2e suite with `npm test`. +2. Run the API e2e suite with `npm test`. +3. Open `http://localhost:3000/graphql` while the test server is running, or start the compiled server manually with `node build/server`. Other useful local endpoints: diff --git a/package-lock.json b/package-lock.json index bf908045..b8697ea6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,6 @@ "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", "reflect-metadata": "0.2.2", - "rimraf": "3.0.0", "type-graphql": "2.0.0-rc.3", "typescript": "5.8.3", "winston": "3.19.0" @@ -29,40 +28,9 @@ "@types/node": "24.0.3", "camelcase": "5.3.1", "glob": "13.0.6", - "mri": "1.2.0", - "prettier": "2.3.1", - "tsc-watch": "7.2.0", - "tslint": "6.1.3", - "tslint-config-prettier": "1.18.0", - "tslint-plugin-prettier": "2.3.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.0.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", - "dev": true, - "dependencies": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "mri": "1.2.0" } }, - "node_modules/@babel/highlight/node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, "node_modules/@colors/colors": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", @@ -196,15 +164,6 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -220,29 +179,6 @@ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -252,44 +188,6 @@ "node": ">=6" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/color": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", @@ -303,21 +201,6 @@ "node": ">=18" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/color-string": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", @@ -360,47 +243,12 @@ "node": ">=12.20" } }, - "node_modules/commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/csv-parse": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.2.1.tgz", "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==", "license": "MIT" }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/dotenv": { "version": "17.4.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", @@ -413,86 +261,12 @@ "url": "https://dotenvx.com" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", "license": "MIT" }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz", - "integrity": "sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.1", - "jest-docblock": "^21.0.0" - }, - "engines": { - "node": ">=4.0.0" - }, - "peerDependencies": { - "prettier": ">= 0.11.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", @@ -504,12 +278,6 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, "node_modules/fs-extra": { "version": "11.3.4", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", @@ -524,12 +292,6 @@ "node": ">=14.14" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, "node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -667,15 +429,6 @@ "license": "0BSD", "peer": true }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/ical-generator": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-1.7.2.tgz", @@ -690,48 +443,11 @@ "@types/node": ">= 8.0.0" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/jest-docblock": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", - "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/jsonfile": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", @@ -755,12 +471,6 @@ "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", "license": "MIT" }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -801,24 +511,6 @@ "node": "20 || >=22" } }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", @@ -858,21 +550,6 @@ "node": ">=4" } }, - "node_modules/node-cleanup": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", - "integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/one-time": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", @@ -881,31 +558,6 @@ "fn.name": "1.x.x" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, "node_modules/path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -923,42 +575,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "dev": true, - "dependencies": { - "event-stream": "=3.3.4" - }, - "bin": { - "ps-tree": "bin/ps-tree.js" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -979,47 +595,6 @@ "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, - "node_modules/resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - } - }, - "node_modules/rimraf": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", - "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -1046,47 +621,6 @@ "node": ">=10" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -1095,15 +629,6 @@ "node": "*" } }, - "node_modules/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1" - } - }, "node_modules/string_decoder": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", @@ -1112,28 +637,12 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", "license": "MIT" }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, "node_modules/triple-beam": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", @@ -1143,162 +652,6 @@ "node": ">= 14.0.0" } }, - "node_modules/tsc-watch": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-7.2.0.tgz", - "integrity": "sha512-4gRFawQD1cVSaILvG7wl2x6NtteKbS2dGBMbL7Q6n1ldLIOKXCJUoEwUXdGuee4dp+zcnA6tukBBLz1lZrNI9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.6", - "node-cleanup": "^2.1.2", - "ps-tree": "^1.2.0", - "string-argv": "^0.3.2" - }, - "bin": { - "tsc-watch": "dist/lib/tsc-watch.js" - }, - "engines": { - "node": ">=12.12.0" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "node_modules/tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" - } - }, - "node_modules/tslint-config-prettier": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", - "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", - "dev": true, - "bin": { - "tslint-config-prettier-check": "bin/check.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/tslint-plugin-prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslint-plugin-prettier/-/tslint-plugin-prettier-2.3.0.tgz", - "integrity": "sha512-F9e4K03yc9xuvv+A0v1EmjcnDwpz8SpCD8HzqSDe0eyg34cBinwn9JjmnnRrNAs4HdleRQj7qijp+P/JTxt4vA==", - "dev": true, - "dependencies": { - "eslint-plugin-prettier": "^2.2.0", - "lines-and-columns": "^1.1.6", - "tslib": "^1.7.1" - }, - "engines": { - "node": ">= 4" - }, - "peerDependencies": { - "prettier": "^1.9.0 || ^2.0.0", - "tslint": "^5.0.0 || ^6.0.0" - } - }, - "node_modules/tslint/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tslint/node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/tslint/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/tslint/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/tslint/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" - } - }, "node_modules/type-graphql": { "version": "2.0.0-rc.3", "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", @@ -1375,22 +728,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/winston": { "version": "3.19.0", "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", @@ -1434,43 +771,9 @@ "engines": { "node": ">=8" } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" } }, "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - } - } - }, "@colors/colors": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", @@ -1585,15 +888,6 @@ } } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -1604,63 +898,12 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "color": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", @@ -1685,21 +928,6 @@ } } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "color-string": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", @@ -1715,104 +943,21 @@ } } }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "csv-parse": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.2.1.tgz", "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==" }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, "dotenv": { "version": "17.4.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==" }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, "enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz", - "integrity": "sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA==", - "dev": true, - "requires": { - "fast-diff": "^1.1.1", - "jest-docblock": "^21.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, "fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", @@ -1823,12 +968,6 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, "fs-extra": { "version": "11.3.4", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", @@ -1839,11 +978,6 @@ "universalify": "^2.0.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, "glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -1930,12 +1064,6 @@ } } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "ical-generator": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-1.7.2.tgz", @@ -1944,42 +1072,11 @@ "moment-timezone": "^0.5.26" } }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "jest-docblock": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", - "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "jsonfile": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", @@ -1999,12 +1096,6 @@ "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -2036,20 +1127,6 @@ "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", "dev": true }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, "minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", @@ -2075,20 +1152,6 @@ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true }, - "node-cleanup": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", - "integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, "one-time": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", @@ -2097,23 +1160,6 @@ "fn.name": "1.x.x" } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, "path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -2124,30 +1170,6 @@ "minipass": "^7.1.2" } }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "~2.3" - } - }, - "prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", - "dev": true - }, - "ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "dev": true, - "requires": { - "event-stream": "=3.3.4" - } - }, "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -2163,38 +1185,6 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "rimraf": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", - "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -2210,50 +1200,11 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==" }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "requires": { - "through": "2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "~0.1.1" - } - }, "string_decoder": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", @@ -2262,136 +1213,16 @@ "safe-buffer": "~5.1.0" } }, - "string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true - }, "text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, "triple-beam": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" }, - "tsc-watch": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-7.2.0.tgz", - "integrity": "sha512-4gRFawQD1cVSaILvG7wl2x6NtteKbS2dGBMbL7Q6n1ldLIOKXCJUoEwUXdGuee4dp+zcnA6tukBBLz1lZrNI9w==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.6", - "node-cleanup": "^2.1.2", - "ps-tree": "^1.2.0", - "string-argv": "^0.3.2" - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tslint-config-prettier": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", - "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", - "dev": true - }, - "tslint-plugin-prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslint-plugin-prettier/-/tslint-plugin-prettier-2.3.0.tgz", - "integrity": "sha512-F9e4K03yc9xuvv+A0v1EmjcnDwpz8SpCD8HzqSDe0eyg34cBinwn9JjmnnRrNAs4HdleRQj7qijp+P/JTxt4vA==", - "dev": true, - "requires": { - "eslint-plugin-prettier": "^2.2.0", - "lines-and-columns": "^1.1.6", - "tslib": "^1.7.1" - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, "type-graphql": { "version": "2.0.0-rc.3", "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", @@ -2432,15 +1263,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, "winston": { "version": "3.19.0", "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", @@ -2475,11 +1297,6 @@ "readable-stream": "^3.6.2", "triple-beam": "^1.3.0" } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" } } } diff --git a/package.json b/package.json index 91a3ec0a..fe025be5 100644 --- a/package.json +++ b/package.json @@ -6,14 +6,9 @@ "main": "./build/server", "scripts": { "generate:indices": "node utils/generate-indices.js content --verbose", - "build": "rimraf build && tsc", "cf:deploy": "npx wrangler deploy", "cf:dev": "npx wrangler dev", - "lint": "tslint --config tslint.json content/**/*.ts server/**/*.ts --fix", - "test": "npm run test:e2e", - "test:e2e": "npm run build && node --test test/api.e2e.test.cjs", - "start": "tsc-watch --onSuccess \"node ./build/server\" --onFailure \"echo Beep! Compilation Failed\"", - "format": "prettier content/**/*.ts server/**/*.ts --write" + "test": "tsc && node --test test/api.e2e.test.cjs" }, "keywords": [], "author": "", @@ -24,12 +19,7 @@ "@types/node": "24.0.3", "camelcase": "5.3.1", "glob": "13.0.6", - "mri": "1.2.0", - "prettier": "2.3.1", - "tsc-watch": "7.2.0", - "tslint": "6.1.3", - "tslint-config-prettier": "1.18.0", - "tslint-plugin-prettier": "2.3.0" + "mri": "1.2.0" }, "repository": { "type": "git", @@ -48,15 +38,8 @@ "ical-generator": "1.7.2", "just-kebab-case": "1.1.0", "reflect-metadata": "0.2.2", - "rimraf": "3.0.0", "type-graphql": "2.0.0-rc.3", "typescript": "5.8.3", "winston": "3.19.0" - }, - "lint-staged": { - "*.--write": [ - "prettier --write", - "git add" - ] } } diff --git a/tslint.json b/tslint.json deleted file mode 100644 index b3f0bbfb..00000000 --- a/tslint.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "defaultSeverity": "error", - "extends": ["tslint:recommended", "tslint-config-prettier"], - "rulesDirectory": ["tslint-plugin-prettier"], - "rules": { - "interface-name": false, - "prettier": true, - "no-shadowed-variable": false, - "object-literal-sort-keys": false, - "max-classes-per-file": false, - "no-console": false - } -} From 3af7b9b43341321878c09cc8668370283601ccab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:29:47 +0300 Subject: [PATCH 16/45] Fix TypeScript project config --- tsconfig.json | 2 +- worker/index.ts | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 130b078e..2ca8083a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,5 +20,5 @@ "experimentalDecorators": true, "skipLibCheck": true }, - "include": ["server/**/*.ts"] + "include": ["content/**/*.ts", "server/**/*.ts", "worker/**/*.ts"] } diff --git a/worker/index.ts b/worker/index.ts index 5bb74ae3..cae1524c 100644 --- a/worker/index.ts +++ b/worker/index.ts @@ -1,13 +1,15 @@ import "reflect-metadata"; import createRequestHandler from "../server/app"; -const handleRequest = await createRequestHandler({ +const handleRequestPromise = createRequestHandler({ enableMedia: false, projectRoot: "/bundle", }); export default { - fetch(request) { + async fetch(request) { + const handleRequest = await handleRequestPromise; + return handleRequest(request); }, }; From b1c131e51a3a29f080bc9174901a295539400480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:31:08 +0300 Subject: [PATCH 17/45] Protect API routes with token header --- .env.template | 3 +++ README.md | 3 ++- server/app.ts | 15 ++++++++++++--- test/api.e2e.test.cjs | 23 +++++++++++++++++++++-- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/.env.template b/.env.template index 4df241fb..afe66e44 100644 --- a/.env.template +++ b/.env.template @@ -1,3 +1,6 @@ +# Required API token for all non-media routes. Send it in the `TOKEN` header. +TOKEN= + # Optional token for Tito-related utility scripts. TITO_TOKEN= diff --git a/README.md b/README.md index b62295dc..b538f2bc 100644 --- a/README.md +++ b/README.md @@ -75,10 +75,11 @@ Check these endpoints on the deployed domain: ## Environment variables -The application does not currently require Cloudflare Worker secrets for runtime startup. +The application requires a `TOKEN` value at runtime for all non-media routes. The `.env` file is only relevant for local scripts and the Node.js entrypoint. The example in [.env.template](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.env.template) is: +- `TOKEN` for authenticating all non-media routes through a `TOKEN` request header - `TITO_TOKEN` for Tito-related utility scripts - `REBUILD_SITES` for optional comma-separated webhook URLs that should be `POST`ed once after the Node server starts in production diff --git a/server/app.ts b/server/app.ts index 5b6ed662..86d07afd 100644 --- a/server/app.ts +++ b/server/app.ts @@ -17,6 +17,7 @@ async function createRequestHandler(options: CreateRequestHandlerOptions = {}) { const mediaUrl = options.mediaUrl || "/media"; const mediaPath = options.mediaPath || path.join(projectRoot, "media"); const enableMedia = options.enableMedia !== false; + const expectedToken = process.env.TOKEN; const schema = await generateSchema(); const graphqlHandler = createGraphQLRequestHandler( schema, @@ -32,7 +33,11 @@ async function createRequestHandler(options: CreateRequestHandlerOptions = {}) { const pathname = new URL(request.url).pathname; let response: Response | null = null; - if (pathname === "/ping") { + if (enableMedia && pathname.startsWith(`${mediaUrl}/`)) { + response = await handleMediaRequest(pathname, mediaUrl, mediaPath); + } else if (!hasValidToken(request, expectedToken)) { + response = new Response("Unauthorized", { status: 401 }); + } else if (pathname === "/ping") { response = handlePingRequest(); } else if (pathname === "/calendar-2026.ics") { response = handleCalendarRequest(pathname); @@ -40,8 +45,6 @@ async function createRequestHandler(options: CreateRequestHandlerOptions = {}) { response = handleCalendarRequest(pathname); } else if (pathname === "/graphql") { response = await graphqlHandler(request); - } else if (enableMedia && pathname.startsWith(`${mediaUrl}/`)) { - response = await handleMediaRequest(pathname, mediaUrl, mediaPath); } return withDefaultHeaders( @@ -50,6 +53,12 @@ async function createRequestHandler(options: CreateRequestHandlerOptions = {}) { }; } +function hasValidToken(request: Request, expectedToken?: string) { + return Boolean( + expectedToken && request.headers.get("TOKEN") === expectedToken + ); +} + function withDefaultHeaders(response: Response) { const headers = new Headers(response.headers); diff --git a/test/api.e2e.test.cjs b/test/api.e2e.test.cjs index 6aec2170..040bb3fd 100644 --- a/test/api.e2e.test.cjs +++ b/test/api.e2e.test.cjs @@ -7,9 +7,11 @@ const createServer = require("../build/server/server").default; let server; let baseUrl; +const token = "test-token"; test.before(async () => { process.env.NODE_ENV = "test"; + process.env.TOKEN = token; server = await createServer({ logRequests: false, logStartup: false, @@ -41,7 +43,16 @@ test.after(async () => { }); async function request(pathname, init) { - return fetch(new URL(pathname, baseUrl), init); + const headers = new Headers(init?.headers); + + if (!headers.has("TOKEN")) { + headers.set("TOKEN", token); + } + + return fetch(new URL(pathname, baseUrl), { + ...init, + headers, + }); } test("GET /ping returns server metadata", async () => { @@ -84,7 +95,9 @@ test("GET /calendar/:id returns 404 for an unknown conference", async () => { }); test("GET /media/* serves checked-in assets", async () => { - const response = await request("/media/typeof/logo/logo-white.svg"); + const response = await fetch( + new URL("/media/typeof/logo/logo-white.svg", baseUrl) + ); const body = await response.text(); assert.equal(response.status, 200); @@ -92,6 +105,12 @@ test("GET /media/* serves checked-in assets", async () => { assert.match(body, / { + const response = await fetch(new URL("/ping", baseUrl)); + + assert.equal(response.status, 401); +}); + test("POST /graphql returns conference data", async () => { const response = await request("/graphql", { method: "POST", From e9b4a2f40b61474b8f8a8c67ef11dd78afeeef44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:33:42 +0300 Subject: [PATCH 18/45] Add quality gate script --- README.md | 2 ++ package.json | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b538f2bc..b2e7ea8a 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Use the original Node.js server for local development: 2. Run the API e2e suite with `npm test`. 3. Open `http://localhost:3000/graphql` while the test server is running, or start the compiled server manually with `node build/server`. +Before deploying or after larger refactors, run `npm run quality:gate` to execute both typechecks and the API test suite. + Other useful local endpoints: - `http://localhost:3000/calendar-2026.ics` diff --git a/package.json b/package.json index fe025be5..985528fa 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,9 @@ "generate:indices": "node utils/generate-indices.js content --verbose", "cf:deploy": "npx wrangler deploy", "cf:dev": "npx wrangler dev", - "test": "tsc && node --test test/api.e2e.test.cjs" + "types:check": "tsc --noEmit", + "test": "tsc && node --test test/api.e2e.test.cjs", + "quality:gate": "npm run types:check && npm test" }, "keywords": [], "author": "", From e2ce28ea1e5429d71dcab5aa79eb3736a0ba830e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:36:30 +0300 Subject: [PATCH 19/45] Tighten media access and worker token config --- README.md | 3 +++ server/app.ts | 9 +++++---- server/routes/media.ts | 28 +++++++++++++++++----------- test/api.e2e.test.cjs | 18 ++++++++++++++++++ worker/index.ts | 15 +++++++++------ wrangler.jsonc | 3 +++ 6 files changed, 55 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index b2e7ea8a..8a95a071 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ Wrangler uses [wrangler.jsonc](/Users/juhovepsalainen/Projects/future-frontend/g - Node.js and npm installed - Dependencies installed with `npm install` - Wrangler authenticated with `npx wrangler login` +- A `TOKEN` secret configured for the Worker ### Configure the Worker @@ -55,6 +56,8 @@ The current configuration: - serves `/media/*` from static assets in the repository If you want a different Worker name, change the `name` field in `wrangler.jsonc`. +Set the runtime token before deploy with `npx wrangler secret put TOKEN`. +For local Worker development, provide the same value in `.dev.vars` or `.env` so Wrangler can load it into the Worker `env` bindings. ### Deploy diff --git a/server/app.ts b/server/app.ts index 86d07afd..9b668adf 100644 --- a/server/app.ts +++ b/server/app.ts @@ -2,7 +2,7 @@ import * as path from "path"; import generateSchema from "./schema"; import handleCalendarRequest from "./routes/calendar"; import createGraphQLRequestHandler from "./routes/graphql"; -import handleMediaRequest from "./routes/media"; +import handleMediaRequest, { isPublicImagePath } from "./routes/media"; import handlePingRequest from "./routes/ping"; export interface CreateRequestHandlerOptions { @@ -10,6 +10,7 @@ export interface CreateRequestHandlerOptions { mediaPath?: string; mediaUrl?: string; projectRoot?: string; + expectedToken?: string; } async function createRequestHandler(options: CreateRequestHandlerOptions = {}) { @@ -17,7 +18,7 @@ async function createRequestHandler(options: CreateRequestHandlerOptions = {}) { const mediaUrl = options.mediaUrl || "/media"; const mediaPath = options.mediaPath || path.join(projectRoot, "media"); const enableMedia = options.enableMedia !== false; - const expectedToken = process.env.TOKEN; + const expectedToken = options.expectedToken ?? process.env.TOKEN; const schema = await generateSchema(); const graphqlHandler = createGraphQLRequestHandler( schema, @@ -33,7 +34,7 @@ async function createRequestHandler(options: CreateRequestHandlerOptions = {}) { const pathname = new URL(request.url).pathname; let response: Response | null = null; - if (enableMedia && pathname.startsWith(`${mediaUrl}/`)) { + if (enableMedia && isPublicImagePath(pathname, mediaUrl)) { response = await handleMediaRequest(pathname, mediaUrl, mediaPath); } else if (!hasValidToken(request, expectedToken)) { response = new Response("Unauthorized", { status: 401 }); @@ -63,7 +64,7 @@ function withDefaultHeaders(response: Response) { const headers = new Headers(response.headers); headers.set("access-control-allow-origin", "*"); - headers.set("access-control-allow-headers", "content-type"); + headers.set("access-control-allow-headers", "content-type, TOKEN"); headers.set("access-control-allow-methods", "GET,POST,OPTIONS"); headers.set("x-content-type-options", "nosniff"); diff --git a/server/routes/media.ts b/server/routes/media.ts index 2298624e..3a39d331 100644 --- a/server/routes/media.ts +++ b/server/routes/media.ts @@ -2,6 +2,8 @@ import * as path from "path"; import * as fs from "fs-extra"; import logger from "../logger"; +const publicImageExtensions = new Set([".ico", ".jpeg", ".jpg", ".png", ".svg"]); + async function handleMediaRequest( pathname: string, mediaUrl: string, @@ -11,7 +13,7 @@ async function handleMediaRequest( const rootPath = path.resolve(mediaPath); const filePath = path.resolve(rootPath, asset); - if (!isInsideRoot(filePath, rootPath)) { + if (!isInsideRoot(filePath, rootPath) || !isPublicImageAsset(asset)) { return new Response("Not found", { status: 404 }); } @@ -35,32 +37,36 @@ async function handleMediaRequest( } } +export function isPublicImagePath(pathname: string, mediaUrl: string) { + if (!pathname.startsWith(`${mediaUrl}/`)) { + return false; + } + + const asset = decodeURIComponent(pathname.slice(mediaUrl.length + 1)); + + return isPublicImageAsset(asset); +} + function getContentType(filePath: string) { switch (path.extname(filePath).toLowerCase()) { - case ".eot": - return "application/vnd.ms-fontobject"; case ".ico": return "image/x-icon"; case ".jpeg": case ".jpg": return "image/jpeg"; - case ".md": - return "text/markdown; charset=utf-8"; case ".png": return "image/png"; case ".svg": return "image/svg+xml"; - case ".ttf": - return "font/ttf"; - case ".woff": - return "font/woff"; - case ".woff2": - return "font/woff2"; default: return "application/octet-stream"; } } +function isPublicImageAsset(asset: string) { + return publicImageExtensions.has(path.extname(asset).toLowerCase()); +} + function isInsideRoot(filePath: string, rootPath: string) { return filePath === rootPath || filePath.startsWith(`${rootPath}${path.sep}`); } diff --git a/test/api.e2e.test.cjs b/test/api.e2e.test.cjs index 040bb3fd..2edd4869 100644 --- a/test/api.e2e.test.cjs +++ b/test/api.e2e.test.cjs @@ -105,12 +105,30 @@ test("GET /media/* serves checked-in assets", async () => { assert.match(body, / { + const response = await request("/media/react-finland/logo/v2/README.md"); + + assert.equal(response.status, 404); +}); + test("protected routes reject requests without TOKEN", async () => { const response = await fetch(new URL("/ping", baseUrl)); assert.equal(response.status, 401); }); +test("OPTIONS exposes TOKEN in CORS allow headers", async () => { + const response = await fetch(new URL("/graphql", baseUrl), { + method: "OPTIONS", + }); + + assert.equal(response.status, 204); + assert.match( + response.headers.get("access-control-allow-headers"), + /TOKEN/i + ); +}); + test("POST /graphql returns conference data", async () => { const response = await request("/graphql", { method: "POST", diff --git a/worker/index.ts b/worker/index.ts index cae1524c..df27d125 100644 --- a/worker/index.ts +++ b/worker/index.ts @@ -1,14 +1,17 @@ import "reflect-metadata"; import createRequestHandler from "../server/app"; -const handleRequestPromise = createRequestHandler({ - enableMedia: false, - projectRoot: "/bundle", -}); +interface Env { + TOKEN: string; +} export default { - async fetch(request) { - const handleRequest = await handleRequestPromise; + async fetch(request: Request, env: Env) { + const handleRequest = await createRequestHandler({ + enableMedia: false, + expectedToken: env.TOKEN, + projectRoot: "/bundle", + }); return handleRequest(request); }, diff --git a/wrangler.jsonc b/wrangler.jsonc index 6cf70f9b..c3f5529b 100644 --- a/wrangler.jsonc +++ b/wrangler.jsonc @@ -4,6 +4,9 @@ "main": "./worker/index.ts", "compatibility_date": "2026-04-03", "compatibility_flags": ["nodejs_compat"], + "secrets": { + "required": ["TOKEN"] + }, "assets": { "directory": ".", "run_worker_first": ["/graphql", "/ping", "/calendar/*", "/calendar-2026.ics"] From 27208b0728dea70e5427531c936661b7fe2534e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:38:06 +0300 Subject: [PATCH 20/45] Upgrade to TypeScript 6 --- package-lock.json | 18 ++++++++++-------- package.json | 4 ++-- server/routes/media.ts | 2 +- tsconfig.json | 1 - 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index b8697ea6..354916b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,6 @@ "just-kebab-case": "1.1.0", "reflect-metadata": "0.2.2", "type-graphql": "2.0.0-rc.3", - "typescript": "5.8.3", "winston": "3.19.0" }, "devDependencies": { @@ -28,7 +27,8 @@ "@types/node": "24.0.3", "camelcase": "5.3.1", "glob": "13.0.6", - "mri": "1.2.0" + "mri": "1.2.0", + "typescript": "6.0.2" } }, "node_modules/@colors/colors": { @@ -696,9 +696,10 @@ "license": "0BSD" }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -1244,9 +1245,10 @@ } }, "typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==" + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "dev": true }, "undici-types": { "version": "7.8.0", diff --git a/package.json b/package.json index 985528fa..40b53568 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "@types/node": "24.0.3", "camelcase": "5.3.1", "glob": "13.0.6", - "mri": "1.2.0" + "mri": "1.2.0", + "typescript": "6.0.2" }, "repository": { "type": "git", @@ -41,7 +42,6 @@ "just-kebab-case": "1.1.0", "reflect-metadata": "0.2.2", "type-graphql": "2.0.0-rc.3", - "typescript": "5.8.3", "winston": "3.19.0" } } diff --git a/server/routes/media.ts b/server/routes/media.ts index 3a39d331..fc118d77 100644 --- a/server/routes/media.ts +++ b/server/routes/media.ts @@ -22,7 +22,7 @@ async function handleMediaRequest( return new Response("Not found", { status: 404 }); } - const body = await fs.readFile(filePath); + const body = new Uint8Array(await fs.readFile(filePath)); return new Response(body, { headers: { diff --git a/tsconfig.json b/tsconfig.json index 2ca8083a..cb8eb72b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,6 @@ "outDir": "build", "resolveJsonModule": true, "typeRoots": ["node_modules/@types"], - "downlevelIteration": true, "forceConsistentCasingInFileNames": true, "noImplicitReturns": true, "noImplicitAny": false, From 0ba9fd1b6725e6584683f2b24a6f315e464aeb58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:42:57 +0300 Subject: [PATCH 21/45] Remove redundant helper dependencies --- package-lock.json | 136 ------------------ package.json | 5 - server/routes/media.ts | 8 +- server/schema/resolvers/ConferenceResolver.ts | 12 +- server/schema/resolvers/load-attendees.ts | 7 +- utils/generate-indices.js | 30 +++- 6 files changed, 41 insertions(+), 157 deletions(-) diff --git a/package-lock.json b/package-lock.json index 354916b8..5fb804dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,21 +11,16 @@ "dependencies": { "csv-parse": "6.2.1", "dotenv": "17.4.0", - "fs-extra": "11.3.4", "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", "ical-generator": "1.7.2", - "just-kebab-case": "1.1.0", "reflect-metadata": "0.2.2", "type-graphql": "2.0.0-rc.3", "winston": "3.19.0" }, "devDependencies": { - "@types/dotenv": "6.1.1", - "@types/fs-extra": "8.0.0", "@types/node": "24.0.3", - "camelcase": "5.3.1", "glob": "13.0.6", "mri": "1.2.0", "typescript": "6.0.2" @@ -107,24 +102,6 @@ "text-hex": "1.0.x" } }, - "node_modules/@types/dotenv": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/dotenv/-/dotenv-6.1.1.tgz", - "integrity": "sha512-ftQl3DtBvqHl9L16tpqqzA4YzCSXZfi7g8cQceTz5rOlYtk/IZbFjAv3mLOQlNIgOaylCQWQoBdDQHPgEBJPHg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/fs-extra": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", - "integrity": "sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/node": { "version": "24.0.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", @@ -179,15 +156,6 @@ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/color": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", @@ -278,20 +246,6 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -349,12 +303,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, "node_modules/graphql": { "version": "16.13.2", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", @@ -448,23 +396,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/just-kebab-case": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-kebab-case/-/just-kebab-case-1.1.0.tgz", - "integrity": "sha512-QkuwuBMQ9BQHMUEkAtIA4INLrkmnnveqlFB1oFi09gbU0wBdZo6tTnyxNWMR84zHxBuwK7GLAwqN8nrvVxOLTA==" - }, "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", @@ -715,15 +646,6 @@ "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", "license": "MIT" }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -838,24 +760,6 @@ "text-hex": "1.0.x" } }, - "@types/dotenv": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/dotenv/-/dotenv-6.1.1.tgz", - "integrity": "sha512-ftQl3DtBvqHl9L16tpqqzA4YzCSXZfi7g8cQceTz5rOlYtk/IZbFjAv3mLOQlNIgOaylCQWQoBdDQHPgEBJPHg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/fs-extra": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", - "integrity": "sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/node": { "version": "24.0.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", @@ -899,12 +803,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "color": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", @@ -969,16 +867,6 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, "glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -1016,11 +904,6 @@ } } }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, "graphql": { "version": "16.13.2", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", @@ -1078,20 +961,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "just-kebab-case": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-kebab-case/-/just-kebab-case-1.1.0.tgz", - "integrity": "sha512-QkuwuBMQ9BQHMUEkAtIA4INLrkmnnveqlFB1oFi09gbU0wBdZo6tTnyxNWMR84zHxBuwK7GLAwqN8nrvVxOLTA==" - }, "kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", @@ -1255,11 +1124,6 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==" }, - "universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 40b53568..430659ef 100644 --- a/package.json +++ b/package.json @@ -16,10 +16,7 @@ "author": "", "license": "MIT", "devDependencies": { - "@types/dotenv": "6.1.1", - "@types/fs-extra": "8.0.0", "@types/node": "24.0.3", - "camelcase": "5.3.1", "glob": "13.0.6", "mri": "1.2.0", "typescript": "6.0.2" @@ -34,12 +31,10 @@ "dependencies": { "csv-parse": "6.2.1", "dotenv": "17.4.0", - "fs-extra": "11.3.4", "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", "ical-generator": "1.7.2", - "just-kebab-case": "1.1.0", "reflect-metadata": "0.2.2", "type-graphql": "2.0.0-rc.3", "winston": "3.19.0" diff --git a/server/routes/media.ts b/server/routes/media.ts index fc118d77..f928e0f8 100644 --- a/server/routes/media.ts +++ b/server/routes/media.ts @@ -1,5 +1,5 @@ +import { readFile } from "node:fs/promises"; import * as path from "path"; -import * as fs from "fs-extra"; import logger from "../logger"; const publicImageExtensions = new Set([".ico", ".jpeg", ".jpg", ".png", ".svg"]); @@ -18,11 +18,7 @@ async function handleMediaRequest( } try { - if (!(await fs.pathExists(filePath))) { - return new Response("Not found", { status: 404 }); - } - - const body = new Uint8Array(await fs.readFile(filePath)); + const body = new Uint8Array(await readFile(filePath)); return new Response(body, { headers: { diff --git a/server/schema/resolvers/ConferenceResolver.ts b/server/schema/resolvers/ConferenceResolver.ts index 0731f49f..183f74df 100644 --- a/server/schema/resolvers/ConferenceResolver.ts +++ b/server/schema/resolvers/ConferenceResolver.ts @@ -1,4 +1,3 @@ -import kebabCase from "just-kebab-case"; import * as path from "path"; import { Arg, @@ -91,7 +90,7 @@ class ConferenceResolver { `${path.join( ctx.projectRoot, "attendees", - kebabCase(conference.name) + toKebabCase(conference.name) )}.csv` ) ); @@ -174,4 +173,13 @@ class ConferenceResolver { } } +function toKebabCase(value: string) { + return value + .normalize("NFKD") + .replace(/[\u0300-\u036f]/g, "") + .toLowerCase() + .replace(/[^a-z0-9]+/g, "-") + .replace(/^-+|-+$/g, ""); +} + export default ConferenceResolver; diff --git a/server/schema/resolvers/load-attendees.ts b/server/schema/resolvers/load-attendees.ts index 3c0283c7..5056cf16 100644 --- a/server/schema/resolvers/load-attendees.ts +++ b/server/schema/resolvers/load-attendees.ts @@ -1,13 +1,14 @@ import { parse } from "csv-parse/sync"; // TODO: Use the async version instead? -import * as fs from "fs-extra"; +import { existsSync } from "node:fs"; +import { readFile } from "node:fs/promises"; import { Conference } from "../Conference"; import { Contact, ContactType } from "../Contact"; async function loadAttendees(conference: Conference, csvPath: string) { - if (fs.existsSync(csvPath)) { + if (existsSync(csvPath)) { return convertData( getSponsors(conference), - parse(await fs.readFile(csvPath, { encoding: "utf8" }), { + parse(await readFile(csvPath, { encoding: "utf8" }), { columns: true, skip_empty_lines: true, }) diff --git a/utils/generate-indices.js b/utils/generate-indices.js index fdb72b30..efbf46ee 100644 --- a/utils/generate-indices.js +++ b/utils/generate-indices.js @@ -1,6 +1,5 @@ -const fs = require("fs-extra"); +const fs = require("node:fs"); const path = require("path"); -const camelCase = require("camelcase"); const { globSync } = require("glob"); const mri = require("mri"); const argv = process.argv.slice(2); @@ -70,15 +69,15 @@ function generateIndex(basenames) { basenames .map( basename => - `export { default as ${camelCase(basename)} } from "./${basename}";` + `export { default as ${toCamelCase(basename)} } from "./${basename}";` ) .join("\n") + "\n" ); } function writeFiles(indexFiles, verbose) { - indexFiles.forEach(async file => { - const oldContent = await fs.readFile(file.name, { encoding: "utf8" }); + indexFiles.forEach(file => { + const oldContent = fs.readFileSync(file.name, { encoding: "utf8" }); const contentDiffers = file.content.trim() !== oldContent.trim(); if (contentDiffers) { @@ -90,4 +89,25 @@ function writeFiles(indexFiles, verbose) { }); } +function toCamelCase(value) { + const normalized = value + .replace(/^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$/g, "") + .split(/[^a-zA-Z0-9]+/) + .filter(Boolean); + + if (normalized.length < 1) { + return ""; + } + + return normalized + .map((part, index) => { + const lower = part.toLowerCase(); + + return index === 0 + ? lower + : lower.charAt(0).toUpperCase() + lower.slice(1); + }) + .join(""); +} + main(); From c8da9bd39f726a3ab651fc56271b67e948d7f1ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:44:04 +0300 Subject: [PATCH 22/45] Harden Cloudflare asset and worker handling --- .assetsignore | 7 ++++++- README.md | 5 +++-- worker/index.ts | 18 +++++++++++++++--- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/.assetsignore b/.assetsignore index bea2c265..77a2f7b7 100644 --- a/.assetsignore +++ b/.assetsignore @@ -1,3 +1,8 @@ * !media/ -!media/** +!media/**/ +!media/**/*.ico +!media/**/*.jpeg +!media/**/*.jpg +!media/**/*.png +!media/**/*.svg diff --git a/README.md b/README.md index 8a95a071..d44b5e3e 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Use the Worker runtime when you want to verify the Cloudflare deployment path lo 2. Authenticate Wrangler with `npx wrangler login`. 3. Start the Worker locally with `npm run cf:dev`. -Wrangler uses [wrangler.jsonc](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/wrangler.jsonc) and serves media files from the repository root through the static-assets configuration in [.assetsignore](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.assetsignore). +Wrangler uses [wrangler.jsonc](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/wrangler.jsonc) and serves public image assets from the repository through the static-assets configuration in [.assetsignore](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.assetsignore). ## Deploying to Cloudflare @@ -53,7 +53,8 @@ The current configuration: - runs a fetch-native request handler in Cloudflare Workers - routes `/graphql`, `/ping`, and calendar endpoints through the Worker -- serves `/media/*` from static assets in the repository +- serves only image files under `/media/*` from static assets in the repository +- reuses a cached Worker handler per isolate instead of rebuilding the schema on each request If you want a different Worker name, change the `name` field in `wrangler.jsonc`. Set the runtime token before deploy with `npx wrangler secret put TOKEN`. diff --git a/worker/index.ts b/worker/index.ts index df27d125..289dcf8b 100644 --- a/worker/index.ts +++ b/worker/index.ts @@ -5,13 +5,25 @@ interface Env { TOKEN: string; } -export default { - async fetch(request: Request, env: Env) { - const handleRequest = await createRequestHandler({ +let cachedToken: string | undefined; +let handleRequestPromise: ReturnType | undefined; + +function getHandleRequest(env: Env) { + if (!handleRequestPromise || cachedToken !== env.TOKEN) { + cachedToken = env.TOKEN; + handleRequestPromise = createRequestHandler({ enableMedia: false, expectedToken: env.TOKEN, projectRoot: "/bundle", }); + } + + return handleRequestPromise; +} + +export default { + async fetch(request: Request, env: Env) { + const handleRequest = await getHandleRequest(env); return handleRequest(request); }, From b75371cbb10420c9364f3ab3cdbbd40964002a7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:45:25 +0300 Subject: [PATCH 23/45] Bump project to Node 24 --- .nvmrc | 2 +- README.md | 16 +++++++++------- package.json | 3 +++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/.nvmrc b/.nvmrc index 53d1c14d..a3b7a31e 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22 +v24.14.1 diff --git a/README.md b/README.md index d44b5e3e..4d5cf58e 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,10 @@ This repository serves conference data over GraphQL and exposes a small set of s Use the original Node.js server for local development: -1. Install dependencies with `npm install`. -2. Run the API e2e suite with `npm test`. -3. Open `http://localhost:3000/graphql` while the test server is running, or start the compiled server manually with `node build/server`. +1. Use Node.js 24, for example with `nvm use`. +2. Install dependencies with `npm install`. +3. Run the API e2e suite with `npm test`. +4. Open `http://localhost:3000/graphql` while the test server is running, or start the compiled server manually with `node build/server`. Before deploying or after larger refactors, run `npm run quality:gate` to execute both typechecks and the API test suite. @@ -29,9 +30,10 @@ Other useful local endpoints: Use the Worker runtime when you want to verify the Cloudflare deployment path locally: -1. Install dependencies with `npm install`. -2. Authenticate Wrangler with `npx wrangler login`. -3. Start the Worker locally with `npm run cf:dev`. +1. Use Node.js 24, for example with `nvm use`. +2. Install dependencies with `npm install`. +3. Authenticate Wrangler with `npx wrangler login`. +4. Start the Worker locally with `npm run cf:dev`. Wrangler uses [wrangler.jsonc](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/wrangler.jsonc) and serves public image assets from the repository through the static-assets configuration in [.assetsignore](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.assetsignore). @@ -40,7 +42,7 @@ Wrangler uses [wrangler.jsonc](/Users/juhovepsalainen/Projects/future-frontend/g ### Prerequisites - A Cloudflare account with Workers enabled -- Node.js and npm installed +- Node.js 24 and npm installed - Dependencies installed with `npm install` - Wrangler authenticated with `npx wrangler login` - A `TOKEN` secret configured for the Worker diff --git a/package.json b/package.json index 430659ef..349ac4d6 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,9 @@ "keywords": [], "author": "", "license": "MIT", + "engines": { + "node": "24.x" + }, "devDependencies": { "@types/node": "24.0.3", "glob": "13.0.6", From 5f179c03650adeb544d24da46fb5d0fdc930df23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:46:17 +0300 Subject: [PATCH 24/45] Remove stale package main entry --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 349ac4d6..5ea23654 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "version": "0.0.0", "private": true, "description": "React Finland GraphQL API", - "main": "./build/server", "scripts": { "generate:indices": "node utils/generate-indices.js content --verbose", "cf:deploy": "npx wrangler deploy", From 3d2df76062d2ed58261e215ff31d24022c39402b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:48:16 +0300 Subject: [PATCH 25/45] Update local development documentation --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 4d5cf58e..8aa30c09 100644 --- a/README.md +++ b/README.md @@ -10,32 +10,32 @@ This repository serves conference data over GraphQL and exposes a small set of s ## Local development -### Node.js server +### Cloudflare Worker -Use the original Node.js server for local development: +Use the Worker runtime for local development: 1. Use Node.js 24, for example with `nvm use`. 2. Install dependencies with `npm install`. -3. Run the API e2e suite with `npm test`. -4. Open `http://localhost:3000/graphql` while the test server is running, or start the compiled server manually with `node build/server`. +3. Authenticate Wrangler with `npx wrangler login`. +4. Start the Worker locally with `npm run cf:dev`. + +Wrangler uses [wrangler.jsonc](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/wrangler.jsonc) and serves public image assets from the repository through the static-assets configuration in [.assetsignore](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.assetsignore). Before deploying or after larger refactors, run `npm run quality:gate` to execute both typechecks and the API test suite. Other useful local endpoints: -- `http://localhost:3000/calendar-2026.ics` -- `http://localhost:3000/media/people/kenw.jpg` +- `http://localhost:8787/calendar-2026.ics` +- `http://localhost:8787/media/people/kenw.jpg` -### Cloudflare Worker +### Node.js fallback -Use the Worker runtime when you want to verify the Cloudflare deployment path locally: +If you need to run the old Node entrypoint directly: 1. Use Node.js 24, for example with `nvm use`. 2. Install dependencies with `npm install`. -3. Authenticate Wrangler with `npx wrangler login`. -4. Start the Worker locally with `npm run cf:dev`. - -Wrangler uses [wrangler.jsonc](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/wrangler.jsonc) and serves public image assets from the repository through the static-assets configuration in [.assetsignore](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.assetsignore). +3. Compile the project with `npx tsc`. +4. Start the compiled server with `node build/server`. ## Deploying to Cloudflare From 2a98c3c5b7960f2eff745b8123ff609c9ffd35c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:50:11 +0300 Subject: [PATCH 26/45] Upgrade ical-generator --- package-lock.json | 97 ++++++++++++++++++++------------------- package.json | 2 +- server/routes/calendar.ts | 13 ++++-- 3 files changed, 61 insertions(+), 51 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5fb804dd..e23e31f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", - "ical-generator": "1.7.2", + "ical-generator": "10.1.0", "reflect-metadata": "0.2.2", "type-graphql": "2.0.0-rc.3", "winston": "3.19.0" @@ -24,6 +24,9 @@ "glob": "13.0.6", "mri": "1.2.0", "typescript": "6.0.2" + }, + "engines": { + "node": "24.x" } }, "node_modules/@colors/colors": { @@ -378,17 +381,51 @@ "peer": true }, "node_modules/ical-generator": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-1.7.2.tgz", - "integrity": "sha512-sJyIuCRh/1PSyJtuF0pcE2BHavI6yOzp29RgUMARgjfZ6sLdLpfBaKffydAzu4E4ZYNk6oBanvrt+0WxpEyqcA==", - "dependencies": { - "moment-timezone": "^0.5.26" - }, + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-10.1.0.tgz", + "integrity": "sha512-VgWzox2svupw4HoZo9Ym0pmj50Cr7CO+By/TraNUVTXQL5Qh0p13iGNzizhXd/KDuzOHUSSXwUWIMZmBHQU65Q==", + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": "20 || 22 || >=24" }, "peerDependencies": { - "@types/node": ">= 8.0.0" + "@touch4it/ical-timezones": ">=1.6.0", + "@types/luxon": ">= 1.26.0", + "@types/mocha": ">= 8.2.1", + "dayjs": ">= 1.10.0", + "luxon": ">= 1.26.0", + "moment": ">= 2.29.0", + "moment-timezone": ">= 0.5.33", + "rrule": ">= 2.6.8" + }, + "peerDependenciesMeta": { + "@touch4it/ical-timezones": { + "optional": true + }, + "@types/luxon": { + "optional": true + }, + "@types/mocha": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + }, + "moment-timezone": { + "optional": true + }, + "rrule": { + "optional": true + } } }, "node_modules/inherits": { @@ -452,25 +489,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", - "engines": { - "node": "*" - } - }, - "node_modules/moment-timezone": { - "version": "0.5.26", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.26.tgz", - "integrity": "sha512-sFP4cgEKTCymBBKgoxZjYzlSovC20Y6J7y3nanDc5RoBIXKlZhoYwBoZGe3flwU6A372AcRwScH8KiwV6zjy1g==", - "dependencies": { - "moment": ">= 2.9.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -949,12 +967,10 @@ } }, "ical-generator": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-1.7.2.tgz", - "integrity": "sha512-sJyIuCRh/1PSyJtuF0pcE2BHavI6yOzp29RgUMARgjfZ6sLdLpfBaKffydAzu4E4ZYNk6oBanvrt+0WxpEyqcA==", - "requires": { - "moment-timezone": "^0.5.26" - } + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-10.1.0.tgz", + "integrity": "sha512-VgWzox2svupw4HoZo9Ym0pmj50Cr7CO+By/TraNUVTXQL5Qh0p13iGNzizhXd/KDuzOHUSSXwUWIMZmBHQU65Q==", + "requires": {} }, "inherits": { "version": "2.0.4", @@ -1003,19 +1019,6 @@ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, - "moment-timezone": { - "version": "0.5.26", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.26.tgz", - "integrity": "sha512-sFP4cgEKTCymBBKgoxZjYzlSovC20Y6J7y3nanDc5RoBIXKlZhoYwBoZGe3flwU6A372AcRwScH8KiwV6zjy1g==", - "requires": { - "moment": ">= 2.9.0" - } - }, "mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", diff --git a/package.json b/package.json index 5ea23654..02979802 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", - "ical-generator": "1.7.2", + "ical-generator": "10.1.0", "reflect-metadata": "0.2.2", "type-graphql": "2.0.0-rc.3", "winston": "3.19.0" diff --git a/server/routes/calendar.ts b/server/routes/calendar.ts index f79f4802..d39b5798 100644 --- a/server/routes/calendar.ts +++ b/server/routes/calendar.ts @@ -39,8 +39,15 @@ function calendar({ schedules: Schedule[]; }) { const timezone = "+00:00"; // GMT+0 - const domain = "https://futurefrontend.com"; - const cal = ical({ domain, name: title }); + const domain = "futurefrontend.com"; + const siteUrl = `https://${domain}`; + const cal = ical({ + name: title, + prodId: { + company: domain, + product: title, + }, + }); if (Array.isArray(schedules)) { schedules.forEach(({ day, intervals }) => { @@ -52,7 +59,7 @@ function calendar({ summary, description, location: resolveLocation(location), - url: domain, + url: siteUrl, }); }); }); From 228031a9c40ccd458809a989aa96e55d70316d21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:51:53 +0300 Subject: [PATCH 27/45] Remove Node runtime fallback --- .env.template | 4 -- README.md | 12 +--- package-lock.json | 18 ------ package.json | 1 - server/app.ts | 2 +- server/index.ts | 36 ----------- server/rebuild-sites.ts | 30 ---------- server/server.ts | 128 ---------------------------------------- test/api.e2e.test.cjs | 73 ++++++++++++++++++++--- 9 files changed, 68 insertions(+), 236 deletions(-) delete mode 100644 server/index.ts delete mode 100644 server/rebuild-sites.ts delete mode 100644 server/server.ts diff --git a/.env.template b/.env.template index afe66e44..3f033aa7 100644 --- a/.env.template +++ b/.env.template @@ -3,7 +3,3 @@ TOKEN= # Optional token for Tito-related utility scripts. TITO_TOKEN= - -# Optional comma-separated list of webhook URLs to POST after the Node server -# has started in production. -REBUILD_SITES= diff --git a/README.md b/README.md index 8aa30c09..ab21cf40 100644 --- a/README.md +++ b/README.md @@ -28,15 +28,6 @@ Other useful local endpoints: - `http://localhost:8787/calendar-2026.ics` - `http://localhost:8787/media/people/kenw.jpg` -### Node.js fallback - -If you need to run the old Node entrypoint directly: - -1. Use Node.js 24, for example with `nvm use`. -2. Install dependencies with `npm install`. -3. Compile the project with `npx tsc`. -4. Start the compiled server with `node build/server`. - ## Deploying to Cloudflare ### Prerequisites @@ -85,11 +76,10 @@ Check these endpoints on the deployed domain: The application requires a `TOKEN` value at runtime for all non-media routes. -The `.env` file is only relevant for local scripts and the Node.js entrypoint. The example in [.env.template](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.env.template) is: +For local Wrangler development, provide the values in `.dev.vars` or `.env`. The example in [.env.template](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.env.template) is: - `TOKEN` for authenticating all non-media routes through a `TOKEN` request header - `TITO_TOKEN` for Tito-related utility scripts -- `REBUILD_SITES` for optional comma-separated webhook URLs that should be `POST`ed once after the Node server starts in production ## Notes diff --git a/package-lock.json b/package-lock.json index e23e31f8..47849049 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,6 @@ "license": "MIT", "dependencies": { "csv-parse": "6.2.1", - "dotenv": "17.4.0", "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", @@ -220,18 +219,6 @@ "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==", "license": "MIT" }, - "node_modules/dotenv": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", - "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -865,11 +852,6 @@ "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.2.1.tgz", "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==" }, - "dotenv": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", - "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==" - }, "enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", diff --git a/package.json b/package.json index 02979802..0c5864e7 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,6 @@ }, "dependencies": { "csv-parse": "6.2.1", - "dotenv": "17.4.0", "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", diff --git a/server/app.ts b/server/app.ts index 9b668adf..64bbf62c 100644 --- a/server/app.ts +++ b/server/app.ts @@ -18,7 +18,7 @@ async function createRequestHandler(options: CreateRequestHandlerOptions = {}) { const mediaUrl = options.mediaUrl || "/media"; const mediaPath = options.mediaPath || path.join(projectRoot, "media"); const enableMedia = options.enableMedia !== false; - const expectedToken = options.expectedToken ?? process.env.TOKEN; + const expectedToken = options.expectedToken; const schema = await generateSchema(); const graphqlHandler = createGraphQLRequestHandler( schema, diff --git a/server/index.ts b/server/index.ts deleted file mode 100644 index 624a28f7..00000000 --- a/server/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -import dotenv from "dotenv"; -import * as path from "path"; -import "reflect-metadata"; // Needed by type-graphql - -// FIXME: Resolve against project root, not module as this is brittle -dotenv.config({ - path: path.resolve(__dirname, "../../.env"), -}); - -import logger from "./logger"; -import rebuildSites from "./rebuild-sites"; -import createServer from "./server"; - -process.on("SIGINT", () => { - logger.info("\nGracefully shutting down from SIGINT (Ctrl-C)"); - - process.exit(1); -}); - -(async () => { - logger.debug("Starting application"); - - try { - await createServer(); - - logger.debug("Running"); - - if (process.env.NODE_ENV === "production") { - rebuildSites(process.env.REBUILD_SITES); - } - } catch (e) { - logger.error("Failed to start"); - // @ts-expect-error This is fine - logger.error(e.stack); - } -})(); diff --git a/server/rebuild-sites.ts b/server/rebuild-sites.ts deleted file mode 100644 index e2369170..00000000 --- a/server/rebuild-sites.ts +++ /dev/null @@ -1,30 +0,0 @@ -import logger from "./logger"; - -// Expects a comma separated string -function rebuildSites(urls?: string) { - (urls || "") - .split(",") - .map((url) => url.trim()) - .filter(Boolean) - .forEach((url) => { - void rebuildSite(url); - }); -} - -async function rebuildSite(url: string) { - try { - const response = await fetch(url, { method: "POST" }); - - if (!response.ok) { - logger.error(`failed to rebuild ${url}: ${response.status}`); - - return; - } - - logger.info(`rebuilt ${url}`); - } catch (err) { - logger.error(err); - } -} - -export default rebuildSites; diff --git a/server/server.ts b/server/server.ts deleted file mode 100644 index 64a42b7b..00000000 --- a/server/server.ts +++ /dev/null @@ -1,128 +0,0 @@ -import * as http from "http"; -import type { IncomingMessage, ServerResponse } from "http"; -import createRequestHandler from "./app"; -import logger from "./logger"; - -const normalizePort = (value: string) => { - const port = Number(value); - - if (!isNaN(port) && port > 0) { - return port; - } - - return false; -}; - -interface CreateServerOptions { - logRequests?: boolean; - logStartup?: boolean; - port?: number | false; -} - -async function createServer(options: CreateServerOptions = {}) { - logger.debug("Starting to boot the server."); - - const port = - options.port === undefined - ? normalizePort(process.env.PORT || "3000") - : options.port; - const handleRequest = await createRequestHandler(); - const server = http.createServer(async (req, res) => { - const request = toRequest(req); - - try { - const response = await handleRequest(request); - - await sendResponse(res, response); - - if (options.logRequests !== false) { - logger.info(`${req.method} ${req.url} ${response.status}`); - } - } catch (err) { - logger.error(err); - res.writeHead(500).end(); - } - }); - - try { - await new Promise((resolve, reject) => { - server.once("error", reject); - server.listen(port, () => { - server.off("error", reject); - resolve(); - }); - }); - - if (options.logStartup !== false) { - const address = server.address(); - const resolvedPort = - typeof address === "object" && address ? address.port : port; - - logger.debug( - `Finished booting the server. The API is reachable at http://localhost:${resolvedPort?.toString()}/graphql.` - ); - } - } catch (err) { - logger.error(err); - process.exit(1); - } - - return server; -} - -function toRequest(req: IncomingMessage): Request { - const protocol = getProtocol(req); - const host = req.headers.host || "localhost"; - const url = new URL(req.url || "/", `${protocol}://${host}`); - const headers = new Headers(); - - Object.entries(req.headers).forEach(([key, value]) => { - if (Array.isArray(value)) { - value.forEach((entry) => headers.append(key, entry)); - } else if (value !== undefined) { - headers.set(key, value); - } - }); - - const init = { - headers, - method: req.method, - }; - - if (req.method === "GET" || req.method === "HEAD") { - return new Request(url, init); - } - - return new Request(url, { - ...init, - body: req as unknown as ReadableStream, - duplex: "half", - } as RequestInit & { duplex: "half" }); -} - -async function sendResponse(res: ServerResponse, response: Response) { - response.headers.forEach((value, key) => { - res.setHeader(key, value); - }); - - res.statusCode = response.status; - res.statusMessage = response.statusText; - - if (!response.body) { - res.end(); - - return; - } - - const body = Buffer.from(await response.arrayBuffer()); - - res.end(body); -} - -function getProtocol(req: IncomingMessage) { - const forwardedProtocol = req.headers["x-forwarded-proto"]; - - return typeof forwardedProtocol === "string" ? forwardedProtocol : "http"; -} - -export default createServer; diff --git a/test/api.e2e.test.cjs b/test/api.e2e.test.cjs index 2edd4869..5f2f4d79 100644 --- a/test/api.e2e.test.cjs +++ b/test/api.e2e.test.cjs @@ -1,21 +1,35 @@ const assert = require("node:assert/strict"); +const http = require("node:http"); const test = require("node:test"); require("reflect-metadata"); -const createServer = require("../build/server/server").default; +const createRequestHandler = require("../build/server/app").default; let server; let baseUrl; const token = "test-token"; test.before(async () => { - process.env.NODE_ENV = "test"; - process.env.TOKEN = token; - server = await createServer({ - logRequests: false, - logStartup: false, - port: 0, + const handleRequest = await createRequestHandler({ + expectedToken: token, + }); + server = http.createServer(async (req, res) => { + try { + const response = await handleRequest(toRequest(req)); + + await sendResponse(res, response); + } catch (error) { + res.writeHead(500).end(String(error)); + } + }); + + await new Promise((resolve, reject) => { + server.once("error", reject); + server.listen(0, "127.0.0.1", () => { + server.off("error", reject); + resolve(); + }); }); const address = server.address(); @@ -55,6 +69,51 @@ async function request(pathname, init) { }); } +function toRequest(req) { + const url = new URL(req.url || "/", `http://${req.headers.host || "localhost"}`); + const headers = new Headers(); + + Object.entries(req.headers).forEach(([key, value]) => { + if (Array.isArray(value)) { + value.forEach((entry) => headers.append(key, entry)); + } else if (value !== undefined) { + headers.set(key, value); + } + }); + + const init = { + headers, + method: req.method, + }; + + if (req.method === "GET" || req.method === "HEAD") { + return new Request(url, init); + } + + return new Request(url, { + ...init, + body: req, + duplex: "half", + }); +} + +async function sendResponse(res, response) { + response.headers.forEach((value, key) => { + res.setHeader(key, value); + }); + + res.statusCode = response.status; + res.statusMessage = response.statusText; + + if (!response.body) { + res.end(); + + return; + } + + res.end(Buffer.from(await response.arrayBuffer())); +} + test("GET /ping returns server metadata", async () => { const response = await request("/ping"); From 7414bace3eb89a68425e2c739b10ad2a8e65297f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:52:12 +0300 Subject: [PATCH 28/45] Trim redundant README notes --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index ab21cf40..d0ba460c 100644 --- a/README.md +++ b/README.md @@ -80,9 +80,3 @@ For local Wrangler development, provide the values in `.dev.vars` or `.env`. The - `TOKEN` for authenticating all non-media routes through a `TOKEN` request header - `TITO_TOKEN` for Tito-related utility scripts - -## Notes - -- The old asset designer route has been removed. -- Legacy platform-specific deployment files and workflow have been removed. -- If you rely on attendee CSV files, verify that they are available in the deployment environment before using attendee-related GraphQL queries. From be50972caf94f6b9ca1f0d29c3b7d7b72ecb80d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:58:00 +0300 Subject: [PATCH 29/45] Port index generator to TypeScript --- content/people/index.ts | 12 +-- content/react-finland-2018/talks/index.ts | 2 +- content/react-finland-2020/workshops/index.ts | 2 +- package.json | 2 +- tsconfig.json | 7 +- ...enerate-indices.js => generate-indices.ts} | 82 +++++++++++++------ 6 files changed, 70 insertions(+), 37 deletions(-) rename utils/{generate-indices.js => generate-indices.ts} (51%) diff --git a/content/people/index.ts b/content/people/index.ts index e2803b6e..f8e76db8 100644 --- a/content/people/index.ts +++ b/content/people/index.ts @@ -29,13 +29,13 @@ export { default as charlie } from "./charlie"; export { default as christianAlfoni } from "./christian-alfoni"; export { default as christofferNiska } from "./christoffer-niska"; export { default as danSchafer } from "./dan-schafer"; +export { default as daniel } from "./daniel"; export { default as danielE } from "./daniel-e"; export { default as danielM } from "./daniel-m"; -export { default as daniel } from "./daniel"; export { default as dario } from "./dario"; +export { default as david } from "./david"; export { default as davidC } from "./david-c"; export { default as davidKhourshid } from "./david-khourshid"; -export { default as david } from "./david"; export { default as devlin } from "./devlin"; export { default as diegoHaz } from "./diego-haz"; export { default as dmitriy } from "./dmitriy"; @@ -87,8 +87,8 @@ export { default as jo } from "./jo"; export { default as joe } from "./joe"; export { default as johannesSchickling } from "./johannes-schickling"; export { default as joniNevalainen } from "./joni-nevalainen"; -export { default as joonasP } from "./joonas-p"; export { default as joonas } from "./joonas"; +export { default as joonasP } from "./joonas-p"; export { default as juan } from "./juan"; export { default as juhaLinnanen } from "./juha-linnanen"; export { default as juhani } from "./juhani"; @@ -110,14 +110,14 @@ export { default as kristaJantti } from "./krista-jantti"; export { default as kristopher } from "./kristopher"; export { default as krutie } from "./krutie"; export { default as lainey } from "./lainey"; -export { default as lauraGonzalez } from "./laura-gonzalez"; export { default as laura } from "./laura"; +export { default as lauraGonzalez } from "./laura-gonzalez"; export { default as laurak } from "./laurak"; export { default as laurao } from "./laurao"; export { default as lauri } from "./lauri"; export { default as liran } from "./liran"; -export { default as lucaMatteis } from "./luca-matteis"; export { default as luca } from "./luca"; +export { default as lucaMatteis } from "./luca-matteis"; export { default as lukas } from "./lukas"; export { default as lukeJackson } from "./luke-jackson"; export { default as m4Dz } from "./m4dz"; @@ -134,8 +134,8 @@ export { default as mark } from "./mark"; export { default as matias } from "./matias"; export { default as matt } from "./matt"; export { default as matteo } from "./matteo"; -export { default as matthewM } from "./matthew-m"; export { default as matthew } from "./matthew"; +export { default as matthewM } from "./matthew-m"; export { default as max } from "./max"; export { default as michael } from "./michael"; export { default as michalChudziak } from "./michal-chudziak"; diff --git a/content/react-finland-2018/talks/index.ts b/content/react-finland-2018/talks/index.ts index 9fe1b2eb..27640a30 100644 --- a/content/react-finland-2018/talks/index.ts +++ b/content/react-finland-2018/talks/index.ts @@ -1,8 +1,8 @@ export { default as andreyOkonetchnikov } from "./andrey-okonetchnikov"; export { default as christianAlfoni } from "./christian-alfoni"; export { default as davidKhourshid } from "./david-khourshid"; -export { default as eemeliAro2 } from "./eemeli-aro-2"; export { default as eemeliAro } from "./eemeli-aro"; +export { default as eemeliAro2 } from "./eemeli-aro-2"; export { default as gantLaborde } from "./gant-laborde"; export { default as janiEvakallio } from "./jani-evakallio"; export { default as juhoVepsalainen } from "./juho-vepsalainen"; diff --git a/content/react-finland-2020/workshops/index.ts b/content/react-finland-2020/workshops/index.ts index a77d0d53..f06e3064 100644 --- a/content/react-finland-2020/workshops/index.ts +++ b/content/react-finland-2020/workshops/index.ts @@ -1,6 +1,6 @@ export { default as advancedReact } from "./advanced-react"; -export { default as designSystems101 } from "./design-systems-101"; export { default as designSystems } from "./design-systems"; +export { default as designSystems101 } from "./design-systems-101"; export { default as fromLegacyToReact } from "./from-legacy-to-react"; export { default as fullStack } from "./full-stack"; export { default as modernForms } from "./modern-forms"; diff --git a/package.json b/package.json index 0c5864e7..f5a266f6 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "description": "React Finland GraphQL API", "scripts": { - "generate:indices": "node utils/generate-indices.js content --verbose", + "generate:indices": "tsc && node build/utils/generate-indices.js content --verbose", "cf:deploy": "npx wrangler deploy", "cf:dev": "npx wrangler dev", "types:check": "tsc --noEmit", diff --git a/tsconfig.json b/tsconfig.json index cb8eb72b..7cd44a09 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,5 +19,10 @@ "experimentalDecorators": true, "skipLibCheck": true }, - "include": ["content/**/*.ts", "server/**/*.ts", "worker/**/*.ts"] + "include": [ + "content/**/*.ts", + "server/**/*.ts", + "utils/**/*.ts", + "worker/**/*.ts" + ] } diff --git a/utils/generate-indices.js b/utils/generate-indices.ts similarity index 51% rename from utils/generate-indices.js rename to utils/generate-indices.ts index efbf46ee..e21d7463 100644 --- a/utils/generate-indices.js +++ b/utils/generate-indices.ts @@ -1,11 +1,28 @@ -const fs = require("node:fs"); -const path = require("path"); -const { globSync } = require("glob"); -const mri = require("mri"); -const argv = process.argv.slice(2); +import * as fs from "node:fs"; +import * as path from "node:path"; +import { globSync } from "glob"; +import mri from "mri"; + +interface FileDescriptor { + basename: string; + dirname: string; +} + +interface IndexFile { + content: string; + name: string; +} + +type CategorizedFilenames = Record; + +interface CliOptions { + _: string[]; + format: string; + verbose: boolean; +} function main() { - const args = mri(argv, { + const args = mri(process.argv.slice(2), { default: { format: "ts", verbose: false, @@ -14,27 +31,27 @@ function main() { string: ["format"], }); const { _: rootDirs, format, verbose } = args; - const indexableDirs = rootDirs - .flatMap(dir => globSync(`${dir}/**/.index-modules`)) - .map(p => path.dirname(p)); - const filenames = indexableDirs.flatMap(dir => + .flatMap((dir) => globSync(`${dir}/**/.index-modules`)) + .sort((left, right) => left.localeCompare(right)) + .map((markerPath) => path.dirname(markerPath)); + const filenames = indexableDirs.flatMap((dir) => globSync(`${dir}/**/*.${format}`) - ); + ) + .sort((left, right) => left.localeCompare(right)); const categorizedFilenames = categorize(filenames); const indexFiles = generateIndices(categorizedFilenames, format); writeFiles(indexFiles, verbose); } -function categorize(filenames) { +function categorize(filenames: string[]): CategorizedFilenames { return filenames - .map(filename => ({ + .map((filename) => ({ basename: path.basename(filename, path.extname(filename)), dirname: path.dirname(filename), - extname: path.extname(filename), })) - .reduce((result, file) => { + .reduce((result, file) => { if (!result[file.dirname]) { result[file.dirname] = []; } @@ -45,38 +62,43 @@ function categorize(filenames) { }, {}); } -function generateIndices(categorizedFilenames, format) { +function generateIndices( + categorizedFilenames: CategorizedFilenames, + format: string +): IndexFile[] { return Object.keys(categorizedFilenames) - .map(dirname => { + .sort((left, right) => left.localeCompare(right)) + .map((dirname) => { const files = categorizedFilenames[dirname].filter( - f => f.basename !== "index" - ); + (file) => file.basename !== "index" + ) + .sort((left, right) => left.basename.localeCompare(right.basename)); if (files.length < 1) { return null; } return { + content: generateIndex(files.map((file) => file.basename)), name: path.join(dirname, `index.${format}`), - content: generateIndex(files.map(f => f.basename)), }; }) - .filter(Boolean); + .filter((indexFile): indexFile is IndexFile => indexFile !== null); } -function generateIndex(basenames) { +function generateIndex(basenames: string[]): string { return ( basenames .map( - basename => + (basename) => `export { default as ${toCamelCase(basename)} } from "./${basename}";` ) .join("\n") + "\n" ); } -function writeFiles(indexFiles, verbose) { - indexFiles.forEach(file => { +function writeFiles(indexFiles: IndexFile[], verbose: boolean) { + indexFiles.forEach((file) => { const oldContent = fs.readFileSync(file.name, { encoding: "utf8" }); const contentDiffers = file.content.trim() !== oldContent.trim(); @@ -84,12 +106,13 @@ function writeFiles(indexFiles, verbose) { if (verbose) { console.log(`Writing ${file.name}`); } + fs.writeFileSync(file.name, file.content, "utf8"); } }); } -function toCamelCase(value) { +function toCamelCase(value: string): string { const normalized = value .replace(/^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$/g, "") .split(/[^a-zA-Z0-9]+/) @@ -103,9 +126,14 @@ function toCamelCase(value) { .map((part, index) => { const lower = part.toLowerCase(); - return index === 0 + const camelPart = + index === 0 ? lower : lower.charAt(0).toUpperCase() + lower.slice(1); + + return camelPart.replace(/(\d+)([a-z])/g, (_, digits, character) => { + return `${digits}${character.toUpperCase()}`; + }); }) .join(""); } From 0e145df7dc6c444cbde005995da421ef0aa0dc60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 13:59:16 +0300 Subject: [PATCH 30/45] Align logging with Cloudflare Workers --- README.md | 1 + package-lock.json | 476 +--------------------------------------------- package.json | 3 +- server/logger.ts | 79 ++++++-- wrangler.jsonc | 4 + 5 files changed, 65 insertions(+), 498 deletions(-) diff --git a/README.md b/README.md index d0ba460c..cd1dbcbf 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ The current configuration: - routes `/graphql`, `/ping`, and calendar endpoints through the Worker - serves only image files under `/media/*` from static assets in the repository - reuses a cached Worker handler per isolate instead of rebuilding the schema on each request +- emits structured console logs with Cloudflare Workers observability enabled If you want a different Worker name, change the `name` field in `wrangler.jsonc`. Set the runtime token before deploy with `npx wrangler secret put TOKEN`. diff --git a/package-lock.json b/package-lock.json index 47849049..218a788e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,8 +15,7 @@ "graphql-http": "1.22.4", "ical-generator": "10.1.0", "reflect-metadata": "0.2.2", - "type-graphql": "2.0.0-rc.3", - "winston": "3.19.0" + "type-graphql": "2.0.0-rc.3" }, "devDependencies": { "@types/node": "24.0.3", @@ -28,26 +27,6 @@ "node": "24.x" } }, - "node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", - "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", - "license": "MIT", - "dependencies": { - "@so-ric/colorspace": "^1.1.6", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, "node_modules/@graphql-yoga/subscription": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-5.0.5.tgz", @@ -94,16 +73,6 @@ "integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==", "license": "MIT" }, - "node_modules/@so-ric/colorspace": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", - "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", - "license": "MIT", - "dependencies": { - "color": "^5.0.2", - "text-hex": "1.0.x" - } - }, "node_modules/@types/node": { "version": "24.0.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", @@ -119,12 +88,6 @@ "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", "license": "MIT" }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "license": "MIT" - }, "node_modules/@whatwg-node/events": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.2.tgz", @@ -152,90 +115,12 @@ "node": ">=0.10.0" } }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "license": "MIT" - }, - "node_modules/color": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", - "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", - "license": "MIT", - "dependencies": { - "color-convert": "^3.1.3", - "color-string": "^2.1.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/color-string": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", - "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", - "license": "MIT", - "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/color-string/node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", - "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", - "license": "MIT", - "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=14.6" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, "node_modules/csv-parse": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.2.1.tgz", "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==", "license": "MIT" }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "license": "MIT" - }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "license": "MIT" - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" - }, "node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -415,17 +300,6 @@ } } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "license": "MIT" - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -433,29 +307,6 @@ "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", "license": "MIT" }, - "node_modules/logform": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", - "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "license": "MIT", - "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/logform/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/lru-cache": { "version": "11.2.7", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", @@ -486,14 +337,6 @@ "node": ">=4" } }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dependencies": { - "fn.name": "1.x.x" - } - }, "node_modules/path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -511,40 +354,12 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/reflect-metadata": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", @@ -557,37 +372,6 @@ "node": ">=10" } }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "engines": { - "node": "*" - } - }, - "node_modules/string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "license": "MIT" - }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, "node_modules/type-graphql": { "version": "2.0.0-rc.3", "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", @@ -650,73 +434,9 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", "license": "MIT" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/winston": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", - "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", - "license": "MIT", - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.8", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.7.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.9.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", - "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "license": "MIT", - "dependencies": { - "logform": "^2.7.0", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "engines": { - "node": ">=8" - } } }, "dependencies": { - "@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" - }, - "@dabh/diagnostics": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", - "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", - "requires": { - "@so-ric/colorspace": "^1.1.6", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, "@graphql-yoga/subscription": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-5.0.5.tgz", @@ -756,15 +476,6 @@ "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", "integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==" }, - "@so-ric/colorspace": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", - "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", - "requires": { - "color": "^5.0.2", - "text-hex": "1.0.x" - } - }, "@types/node": { "version": "24.0.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", @@ -778,11 +489,6 @@ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==" }, - "@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" - }, "@whatwg-node/events": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.2.tgz", @@ -803,70 +509,11 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" }, - "async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" - }, - "color": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", - "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", - "requires": { - "color-convert": "^3.1.3", - "color-string": "^2.1.3" - }, - "dependencies": { - "color-convert": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", - "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", - "requires": { - "color-name": "^2.0.0" - } - }, - "color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==" - } - } - }, - "color-string": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", - "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", - "requires": { - "color-name": "^2.0.0" - }, - "dependencies": { - "color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==" - } - } - }, "csv-parse": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.2.1.tgz", "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==" }, - "enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" - }, - "fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" - }, - "fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" - }, "glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -954,41 +601,11 @@ "integrity": "sha512-VgWzox2svupw4HoZo9Ym0pmj50Cr7CO+By/TraNUVTXQL5Qh0p13iGNzizhXd/KDuzOHUSSXwUWIMZmBHQU65Q==", "requires": {} }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, - "logform": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", - "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "requires": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, "lru-cache": { "version": "11.2.7", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", @@ -1007,14 +624,6 @@ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true }, - "one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "requires": { - "fn.name": "1.x.x" - } - }, "path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -1025,59 +634,16 @@ "minipass": "^7.1.2" } }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "reflect-metadata": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, - "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==" - }, - "safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==" - }, "semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==" }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" - }, "type-graphql": { "version": "2.0.0-rc.3", "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", @@ -1108,46 +674,6 @@ "version": "7.8.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "winston": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", - "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", - "requires": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.8", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.7.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.9.0" - }, - "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - } - } - }, - "winston-transport": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", - "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "requires": { - "logform": "^2.7.0", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - } } } } diff --git a/package.json b/package.json index f5a266f6..81a42e7b 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,6 @@ "graphql-http": "1.22.4", "ical-generator": "10.1.0", "reflect-metadata": "0.2.2", - "type-graphql": "2.0.0-rc.3", - "winston": "3.19.0" + "type-graphql": "2.0.0-rc.3" } } diff --git a/server/logger.ts b/server/logger.ts index 9c40520c..1520f0e9 100644 --- a/server/logger.ts +++ b/server/logger.ts @@ -1,27 +1,64 @@ -import { createLogger, format, transports } from "winston"; +type LogLevel = "debug" | "error" | "info" | "warn"; -const ignorePingAndMedia = format((info) => { - const message = info.message; +interface Logger { + debug: (message: unknown) => void; + error: (message: unknown) => void; + info: (message: unknown) => void; + warn: (message: unknown) => void; +} - if ( - typeof message === "string" && - ["GET /ping ", "GET /media"].some((match) => message.includes(match)) - ) { - return false; +const logger: Logger = { + debug: (message) => log("debug", message), + error: (message) => log("error", message), + info: (message) => log("info", message), + warn: (message) => log("warn", message), +}; + +function log(level: LogLevel, message: unknown) { + const normalized = normalizeMessage(level, message); + + if (!normalized || shouldIgnore(normalized.message)) { + return; + } + + console[level](normalized); +} + +function normalizeMessage(level: LogLevel, message: unknown) { + if (message instanceof Error) { + return { + level, + message: message.message, + name: message.name, + stack: message.stack, + }; } - return info; -}); - -const logger = createLogger({ - exitOnError: false, - format: format.combine(ignorePingAndMedia(), format.json()), - transports: [ - new transports.Console({ - level: "debug", - handleExceptions: true, - }), - ], -}); + if (typeof message === "string") { + return { + level, + message, + }; + } + + if (message && typeof message === "object") { + return { + level, + ...message, + }; + } + + return { + level, + message: String(message), + }; +} + +function shouldIgnore(message: unknown) { + return ( + typeof message === "string" && + ["GET /ping ", "GET /media"].some((match) => message.includes(match)) + ); +} export default logger; diff --git a/wrangler.jsonc b/wrangler.jsonc index c3f5529b..15ae75cf 100644 --- a/wrangler.jsonc +++ b/wrangler.jsonc @@ -4,6 +4,10 @@ "main": "./worker/index.ts", "compatibility_date": "2026-04-03", "compatibility_flags": ["nodejs_compat"], + "observability": { + "enabled": true, + "head_sampling_rate": 1 + }, "secrets": { "required": ["TOKEN"] }, From 09176b399b658e363a92f09fc04a2873bee4a211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 14:10:31 +0300 Subject: [PATCH 31/45] Replace generated barrels with content registry --- content/freezing-edge-2020/index.ts | 6 +- content/freezing-edge-2020/schedules.ts | 5 +- .../freezing-edge-2020/talks/.index-modules | 0 content/freezing-edge-2020/talks/index.ts | 7 - content/future-frontend-2023/index.ts | 6 +- content/future-frontend-2023/schedules.ts | 4 +- content/future-frontend-2024/index.ts | 6 +- content/future-frontend-2024/schedules.ts | 4 +- content/future-frontend-2025/index.ts | 6 +- content/future-frontend-2025/schedules.ts | 4 +- content/future-frontend-2026/index.ts | 6 +- content/future-frontend-2026/schedules.ts | 4 +- content/generated.ts | 1288 +++++++++++++++++ content/graphql-finland-2018/index.ts | 6 +- content/graphql-finland-2018/schedules.ts | 6 +- .../graphql-finland-2018/talks/.index-modules | 0 content/graphql-finland-2018/talks/index.ts | 16 - .../workshops/.index-modules | 0 .../graphql-finland-2018/workshops/index.ts | 4 - .../workshops/juho-workshop.ts | 2 +- .../workshops/marc-workshop.ts | 2 +- .../workshops/mikhail-workshop.ts | 2 +- .../workshops/nik-workshop.ts | 2 +- content/graphql-finland-2020/index.ts | 6 +- content/graphql-finland-2020/schedules.ts | 5 - content/halfstack-vienna-2019/index.ts | 6 +- content/locations/.index-modules | 0 content/locations/index.ts | 26 - content/people/.index-modules | 0 content/people/index.ts | 220 --- content/react-finland-2018/index.ts | 6 +- content/react-finland-2018/schedules.ts | 6 +- .../react-finland-2018/talks/.index-modules | 0 content/react-finland-2018/talks/index.ts | 22 - .../workshops/.index-modules | 0 .../workshops/andrey-and-artem-workshop.ts | 2 +- .../workshops/david-khourshid-workshop.ts | 2 +- .../workshops/gant-laborde-workshop.ts | 2 +- content/react-finland-2018/workshops/index.ts | 10 - .../workshops/juho-vepsalainen-workshop.ts | 2 +- .../workshops/michel-weststrate-workshop.ts | 2 +- .../workshops/patrick-and-nik-workshop.ts | 2 +- .../rotem-mizrachi-meidan-workshop.ts | 2 +- .../workshops/sara-vieira-workshop.ts | 2 +- .../workshops/sia-karamalegos-workshop.ts | 2 +- .../workshops/sven-sauleau-workshop.ts | 2 +- content/react-finland-2019/index.ts | 6 +- content/react-finland-2019/schedules.ts | 10 +- .../react-finland-2019/talks/.index-modules | 0 content/react-finland-2019/talks/index.ts | 27 - .../workshops/.index-modules | 0 .../workshops/andrey-and-artem-workshop.ts | 2 +- .../workshops/david-khourshid-workshop.ts | 4 +- .../workshops/glenn-reyes-workshop.ts | 4 +- content/react-finland-2019/workshops/index.ts | 6 - .../workshops/michel-workshop.ts | 4 +- .../workshops/nik-workshop.ts | 4 +- .../workshops/performance-workshop.ts | 4 +- content/react-finland-2020/index.ts | 6 +- content/react-finland-2020/schedules.ts | 4 +- .../react-finland-2020/talks/.index-modules | 0 content/react-finland-2020/talks/index.ts | 29 - .../workshops/.index-modules | 0 .../workshops/advanced-react.ts | 4 +- .../workshops/design-systems-101.ts | 2 +- .../workshops/design-systems.ts | 2 +- .../workshops/from-legacy-to-react.ts | 4 +- .../workshops/full-stack.ts | 4 +- content/react-finland-2020/workshops/index.ts | 11 - .../workshops/modern-forms.ts | 4 +- .../workshops/react-native.ts | 4 +- .../workshops/react-performance.ts | 4 +- .../workshops/resilient-libs.ts | 2 +- .../workshops/statecharts.ts | 4 +- .../workshops/testing-react.ts | 4 +- content/react-finland-2021/index.ts | 6 +- content/react-finland-2021/schedules.ts | 4 +- content/react-finland-2022/index.ts | 6 +- content/react-finland-2022/schedules.ts | 4 +- content/reason-conf-2019/index.ts | 6 +- content/rf2020-01/index.ts | 10 +- content/rf2020-01/talks/.index-modules | 0 content/rf2020-01/talks/index.ts | 3 - content/sponsors/.index-modules | 0 content/sponsors/index.ts | 112 -- content/techmovienight/index.ts | 6 +- content/typeof-2019/index.ts | 4 +- server/schema/resolvers/ContactResolver.ts | 4 +- utils/generate-indices.ts | 205 +-- 89 files changed, 1539 insertions(+), 703 deletions(-) delete mode 100644 content/freezing-edge-2020/talks/.index-modules delete mode 100644 content/freezing-edge-2020/talks/index.ts create mode 100644 content/generated.ts delete mode 100644 content/graphql-finland-2018/talks/.index-modules delete mode 100644 content/graphql-finland-2018/talks/index.ts delete mode 100644 content/graphql-finland-2018/workshops/.index-modules delete mode 100644 content/graphql-finland-2018/workshops/index.ts delete mode 100644 content/locations/.index-modules delete mode 100644 content/locations/index.ts delete mode 100644 content/people/.index-modules delete mode 100644 content/people/index.ts delete mode 100644 content/react-finland-2018/talks/.index-modules delete mode 100644 content/react-finland-2018/talks/index.ts delete mode 100644 content/react-finland-2018/workshops/.index-modules delete mode 100644 content/react-finland-2018/workshops/index.ts delete mode 100644 content/react-finland-2019/talks/.index-modules delete mode 100644 content/react-finland-2019/talks/index.ts delete mode 100644 content/react-finland-2019/workshops/.index-modules delete mode 100644 content/react-finland-2019/workshops/index.ts delete mode 100644 content/react-finland-2020/talks/.index-modules delete mode 100644 content/react-finland-2020/talks/index.ts delete mode 100644 content/react-finland-2020/workshops/.index-modules delete mode 100644 content/react-finland-2020/workshops/index.ts delete mode 100644 content/rf2020-01/talks/.index-modules delete mode 100644 content/rf2020-01/talks/index.ts delete mode 100644 content/sponsors/.index-modules delete mode 100644 content/sponsors/index.ts diff --git a/content/freezing-edge-2020/index.ts b/content/freezing-edge-2020/index.ts index 70667fce..1d415a4c 100644 --- a/content/freezing-edge-2020/index.ts +++ b/content/freezing-edge-2020/index.ts @@ -1,7 +1,7 @@ import { Conference } from "../../server/schema/Conference"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import schedules from "./schedules"; const partners = [allSponsors.reactFinland, allSponsors.survivejs]; diff --git a/content/freezing-edge-2020/schedules.ts b/content/freezing-edge-2020/schedules.ts index 551012a7..51ecbf25 100644 --- a/content/freezing-edge-2020/schedules.ts +++ b/content/freezing-edge-2020/schedules.ts @@ -1,8 +1,7 @@ import { Schedule } from "../../server/schema/Schedule"; import { SessionType } from "../../server/schema/Session"; -import * as locations from "../locations"; -// import * as people from "../people"; -import * as talks from "./talks"; +import { freezingEdge2020Talks as talks, locations } from "../generated"; +// import { people } from "../generated"; const presentationDay: Schedule = { day: "2020-06-01", diff --git a/content/freezing-edge-2020/talks/.index-modules b/content/freezing-edge-2020/talks/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/freezing-edge-2020/talks/index.ts b/content/freezing-edge-2020/talks/index.ts deleted file mode 100644 index d7e4cd5c..00000000 --- a/content/freezing-edge-2020/talks/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { default as bodil } from "./bodil"; -export { default as georgeMandis } from "./george-mandis"; -export { default as kenWheeler } from "./ken-wheeler"; -export { default as kristaJantti } from "./krista-jantti"; -export { default as nataliaTepluhina } from "./natalia-tepluhina"; -export { default as patrickStapfer } from "./patrick-stapfer"; -export { default as teroParviainen } from "./tero-parviainen"; diff --git a/content/future-frontend-2023/index.ts b/content/future-frontend-2023/index.ts index 4e15428a..dbfc2572 100644 --- a/content/future-frontend-2023/index.ts +++ b/content/future-frontend-2023/index.ts @@ -1,7 +1,7 @@ import { Conference } from "../../server/schema/Conference"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import schedules from "./schedules"; const partners = [ diff --git a/content/future-frontend-2023/schedules.ts b/content/future-frontend-2023/schedules.ts index 272a1807..b9445428 100644 --- a/content/future-frontend-2023/schedules.ts +++ b/content/future-frontend-2023/schedules.ts @@ -1,7 +1,7 @@ import { Schedule } from "../../server/schema/Schedule"; import { Level, SessionType } from "../../server/schema/Session"; -import * as locations from "../locations"; -import * as people from "../people"; +import { locations } from "../generated"; +import { people } from "../generated"; const monday: Schedule = { day: "2023-06-05", diff --git a/content/future-frontend-2024/index.ts b/content/future-frontend-2024/index.ts index 83dc596f..258ba782 100644 --- a/content/future-frontend-2024/index.ts +++ b/content/future-frontend-2024/index.ts @@ -1,7 +1,7 @@ import { Conference } from "../../server/schema/Conference"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import schedules from "./schedules"; const partners = [ diff --git a/content/future-frontend-2024/schedules.ts b/content/future-frontend-2024/schedules.ts index 393523f9..48e100ef 100644 --- a/content/future-frontend-2024/schedules.ts +++ b/content/future-frontend-2024/schedules.ts @@ -1,8 +1,8 @@ import { Schedule } from "../../server/schema/Schedule"; import Keyword from "../../server/schema/keywords"; import { Level, SessionType } from "../../server/schema/Session"; -import * as locations from "../locations"; -import * as people from "../people"; +import { locations } from "../generated"; +import { people } from "../generated"; /* const monday: Schedule = { diff --git a/content/future-frontend-2025/index.ts b/content/future-frontend-2025/index.ts index c5004c9c..fc1bd02d 100644 --- a/content/future-frontend-2025/index.ts +++ b/content/future-frontend-2025/index.ts @@ -1,7 +1,7 @@ import { Conference } from "../../server/schema/Conference"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import schedules from "./schedules"; const partners = [ diff --git a/content/future-frontend-2025/schedules.ts b/content/future-frontend-2025/schedules.ts index c5505f9e..f4fe10e7 100644 --- a/content/future-frontend-2025/schedules.ts +++ b/content/future-frontend-2025/schedules.ts @@ -1,8 +1,8 @@ import { Schedule } from "../../server/schema/Schedule"; import Keyword from "../../server/schema/keywords"; import { Level, SessionType } from "../../server/schema/Session"; -import * as locations from "../locations"; -import * as people from "../people"; +import { locations } from "../generated"; +import { people } from "../generated"; // All times are given in GMT+0 (adjusted to GMT+3 at the frontend) const monday: Schedule = { diff --git a/content/future-frontend-2026/index.ts b/content/future-frontend-2026/index.ts index c1f7f5a7..bcf03669 100644 --- a/content/future-frontend-2026/index.ts +++ b/content/future-frontend-2026/index.ts @@ -1,8 +1,8 @@ import { Conference } from "../../server/schema/Conference"; import { Contact } from "../../server/schema/Contact"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import schedules from "./schedules"; const partners: Contact[] = [ diff --git a/content/future-frontend-2026/schedules.ts b/content/future-frontend-2026/schedules.ts index bf17c63a..c32e68b9 100644 --- a/content/future-frontend-2026/schedules.ts +++ b/content/future-frontend-2026/schedules.ts @@ -1,8 +1,8 @@ import { Schedule } from "../../server/schema/Schedule"; import Keyword from "../../server/schema/keywords"; import { Level, SessionType } from "../../server/schema/Session"; -import * as locations from "../locations"; -import * as people from "../people"; +import { locations } from "../generated"; +import { people } from "../generated"; // All times are given in GMT+0 (adjusted to GMT+3 at the frontend) const monday: Schedule = { diff --git a/content/generated.ts b/content/generated.ts new file mode 100644 index 00000000..4c6ae4b9 --- /dev/null +++ b/content/generated.ts @@ -0,0 +1,1288 @@ +// This file is generated by `npm run generate:indices`. +// Do not edit it manually. + +import freezingEdge2020Talks__bodil from "./freezing-edge-2020/talks/bodil"; +import freezingEdge2020Talks__georgeMandis from "./freezing-edge-2020/talks/george-mandis"; +import freezingEdge2020Talks__kenWheeler from "./freezing-edge-2020/talks/ken-wheeler"; +import freezingEdge2020Talks__kristaJantti from "./freezing-edge-2020/talks/krista-jantti"; +import freezingEdge2020Talks__nataliaTepluhina from "./freezing-edge-2020/talks/natalia-tepluhina"; +import freezingEdge2020Talks__patrickStapfer from "./freezing-edge-2020/talks/patrick-stapfer"; +import freezingEdge2020Talks__teroParviainen from "./freezing-edge-2020/talks/tero-parviainen"; + +export const freezingEdge2020Talks = { + bodil: freezingEdge2020Talks__bodil, + georgeMandis: freezingEdge2020Talks__georgeMandis, + kenWheeler: freezingEdge2020Talks__kenWheeler, + kristaJantti: freezingEdge2020Talks__kristaJantti, + nataliaTepluhina: freezingEdge2020Talks__nataliaTepluhina, + patrickStapfer: freezingEdge2020Talks__patrickStapfer, + teroParviainen: freezingEdge2020Talks__teroParviainen, +} as const; + +import graphqlFinland2018Talks__adamMiskiewicz from "./graphql-finland-2018/talks/adam-miskiewicz"; +import graphqlFinland2018Talks__andrewRhyne from "./graphql-finland-2018/talks/andrew-rhyne"; +import graphqlFinland2018Talks__benjieGillam from "./graphql-finland-2018/talks/benjie-gillam"; +import graphqlFinland2018Talks__carolynStransky from "./graphql-finland-2018/talks/carolyn-stransky"; +import graphqlFinland2018Talks__christofferNiska from "./graphql-finland-2018/talks/christoffer-niska"; +import graphqlFinland2018Talks__danSchafer from "./graphql-finland-2018/talks/dan-schafer"; +import graphqlFinland2018Talks__ellieDay from "./graphql-finland-2018/talks/ellie-day"; +import graphqlFinland2018Talks__eloyDuran from "./graphql-finland-2018/talks/eloy-duran"; +import graphqlFinland2018Talks__glennReyes from "./graphql-finland-2018/talks/glenn-reyes"; +import graphqlFinland2018Talks__helenZhukova from "./graphql-finland-2018/talks/helen-zhukova"; +import graphqlFinland2018Talks__ivanGoncharov from "./graphql-finland-2018/talks/ivan-goncharov"; +import graphqlFinland2018Talks__jimmyJia from "./graphql-finland-2018/talks/jimmy-jia"; +import graphqlFinland2018Talks__johannesSchickling from "./graphql-finland-2018/talks/johannes-schickling"; +import graphqlFinland2018Talks__kadiKraman from "./graphql-finland-2018/talks/kadi-kraman"; +import graphqlFinland2018Talks__nikGraf from "./graphql-finland-2018/talks/nik-graf"; +import graphqlFinland2018Talks__tanmaiGopal from "./graphql-finland-2018/talks/tanmai-gopal"; + +export const graphqlFinland2018Talks = { + adamMiskiewicz: graphqlFinland2018Talks__adamMiskiewicz, + andrewRhyne: graphqlFinland2018Talks__andrewRhyne, + benjieGillam: graphqlFinland2018Talks__benjieGillam, + carolynStransky: graphqlFinland2018Talks__carolynStransky, + christofferNiska: graphqlFinland2018Talks__christofferNiska, + danSchafer: graphqlFinland2018Talks__danSchafer, + ellieDay: graphqlFinland2018Talks__ellieDay, + eloyDuran: graphqlFinland2018Talks__eloyDuran, + glennReyes: graphqlFinland2018Talks__glennReyes, + helenZhukova: graphqlFinland2018Talks__helenZhukova, + ivanGoncharov: graphqlFinland2018Talks__ivanGoncharov, + jimmyJia: graphqlFinland2018Talks__jimmyJia, + johannesSchickling: graphqlFinland2018Talks__johannesSchickling, + kadiKraman: graphqlFinland2018Talks__kadiKraman, + nikGraf: graphqlFinland2018Talks__nikGraf, + tanmaiGopal: graphqlFinland2018Talks__tanmaiGopal, +} as const; + +import graphqlFinland2018Workshops__juhoWorkshop from "./graphql-finland-2018/workshops/juho-workshop"; +import graphqlFinland2018Workshops__marcWorkshop from "./graphql-finland-2018/workshops/marc-workshop"; +import graphqlFinland2018Workshops__mikhailWorkshop from "./graphql-finland-2018/workshops/mikhail-workshop"; +import graphqlFinland2018Workshops__nikWorkshop from "./graphql-finland-2018/workshops/nik-workshop"; + +export const graphqlFinland2018Workshops = { + juhoWorkshop: graphqlFinland2018Workshops__juhoWorkshop, + marcWorkshop: graphqlFinland2018Workshops__marcWorkshop, + mikhailWorkshop: graphqlFinland2018Workshops__mikhailWorkshop, + nikWorkshop: graphqlFinland2018Workshops__nikWorkshop, +} as const; + +import locations__alma from "./locations/alma"; +import locations__amanda from "./locations/amanda"; +import locations__ankersaal from "./locations/ankersaal"; +import locations__arkade from "./locations/arkade"; +import locations__babylonHelsinki from "./locations/babylon-helsinki"; +import locations__columbiaroad from "./locations/columbiaroad"; +import locations__dipoli from "./locations/dipoli"; +import locations__elisaAppelsiini from "./locations/elisa-appelsiini"; +import locations__futurice from "./locations/futurice"; +import locations__gofore from "./locations/gofore"; +import locations__hbc from "./locations/hbc"; +import locations__internet from "./locations/internet"; +import locations__loihdefactor from "./locations/loihdefactor"; +import locations__nitor from "./locations/nitor"; +import locations__paasitorni from "./locations/paasitorni"; +import locations__poliisienkesakoti from "./locations/poliisienkesakoti"; +import locations__porssitalo from "./locations/porssitalo"; +import locations__rantasauna from "./locations/rantasauna"; +import locations__rooftopmiami from "./locations/rooftopmiami"; +import locations__saeWien from "./locations/sae-wien"; +import locations__tiivistamo from "./locations/tiivistamo"; +import locations__tuas from "./locations/tuas"; +import locations__upcloud from "./locations/upcloud"; +import locations__valkoinenSali from "./locations/valkoinen-sali"; +import locations__wuWien from "./locations/wu-wien"; +import locations__yle from "./locations/yle"; + +export const locations = { + alma: locations__alma, + amanda: locations__amanda, + ankersaal: locations__ankersaal, + arkade: locations__arkade, + babylonHelsinki: locations__babylonHelsinki, + columbiaroad: locations__columbiaroad, + dipoli: locations__dipoli, + elisaAppelsiini: locations__elisaAppelsiini, + futurice: locations__futurice, + gofore: locations__gofore, + hbc: locations__hbc, + internet: locations__internet, + loihdefactor: locations__loihdefactor, + nitor: locations__nitor, + paasitorni: locations__paasitorni, + poliisienkesakoti: locations__poliisienkesakoti, + porssitalo: locations__porssitalo, + rantasauna: locations__rantasauna, + rooftopmiami: locations__rooftopmiami, + saeWien: locations__saeWien, + tiivistamo: locations__tiivistamo, + tuas: locations__tuas, + upcloud: locations__upcloud, + valkoinenSali: locations__valkoinenSali, + wuWien: locations__wuWien, + yle: locations__yle, +} as const; + +export const alma = locations.alma; +export const amanda = locations.amanda; +export const ankersaal = locations.ankersaal; +export const arkade = locations.arkade; +export const babylonHelsinki = locations.babylonHelsinki; +export const columbiaroad = locations.columbiaroad; +export const dipoli = locations.dipoli; +export const elisaAppelsiini = locations.elisaAppelsiini; +export const futurice = locations.futurice; +export const gofore = locations.gofore; +export const hbc = locations.hbc; +export const internet = locations.internet; +export const loihdefactor = locations.loihdefactor; +export const nitor = locations.nitor; +export const paasitorni = locations.paasitorni; +export const poliisienkesakoti = locations.poliisienkesakoti; +export const porssitalo = locations.porssitalo; +export const rantasauna = locations.rantasauna; +export const rooftopmiami = locations.rooftopmiami; +export const saeWien = locations.saeWien; +export const tiivistamo = locations.tiivistamo; +export const tuas = locations.tuas; +export const upcloud = locations.upcloud; +export const valkoinenSali = locations.valkoinenSali; +export const wuWien = locations.wuWien; +export const yle = locations.yle; + +import people__aapeli from "./people/aapeli"; +import people__aarniKoskela from "./people/aarni-koskela"; +import people__adamMiskiewicz from "./people/adam-miskiewicz"; +import people__aleksandra from "./people/aleksandra"; +import people__aleksiPousar from "./people/aleksi-pousar"; +import people__alexBooker from "./people/alex-booker"; +import people__anastasiia from "./people/anastasiia"; +import people__andreas from "./people/andreas"; +import people__andrei from "./people/andrei"; +import people__andrewRhyne from "./people/andrew-rhyne"; +import people__andreyG from "./people/andrey-g"; +import people__andreyOkonetchnikov from "./people/andrey-okonetchnikov"; +import people__annaDoubkova from "./people/anna-doubkova"; +import people__ante from "./people/ante"; +import people__artemSapegin from "./people/artem-sapegin"; +import people__artemZakharchenko from "./people/artem-zakharchenko"; +import people__aurora from "./people/aurora"; +import people__barry from "./people/barry"; +import people__ben from "./people/ben"; +import people__benjieGillam from "./people/benjie-gillam"; +import people__bodil from "./people/bodil"; +import people__bohdanLiashenko from "./people/bohdan-liashenko"; +import people__brent from "./people/brent"; +import people__brunoLourenco from "./people/bruno-lourenco"; +import people__calin from "./people/calin"; +import people__calinb from "./people/calinb"; +import people__carolynStransky from "./people/carolyn-stransky"; +import people__charlie from "./people/charlie"; +import people__christianAlfoni from "./people/christian-alfoni"; +import people__christofferNiska from "./people/christoffer-niska"; +import people__danSchafer from "./people/dan-schafer"; +import people__danielE from "./people/daniel-e"; +import people__danielM from "./people/daniel-m"; +import people__daniel from "./people/daniel"; +import people__dario from "./people/dario"; +import people__davidC from "./people/david-c"; +import people__davidKhourshid from "./people/david-khourshid"; +import people__david from "./people/david"; +import people__devlin from "./people/devlin"; +import people__diegoHaz from "./people/diego-haz"; +import people__dmitriy from "./people/dmitriy"; +import people__doug from "./people/doug"; +import people__dragos from "./people/dragos"; +import people__dustinSchau from "./people/dustin-schau"; +import people__eemeliAro from "./people/eemeli-aro"; +import people__eevis from "./people/eevis"; +import people__eli from "./people/eli"; +import people__elisa from "./people/elisa"; +import people__ellieDay from "./people/ellie-day"; +import people__eloyDuran from "./people/eloy-duran"; +import people__emilia from "./people/emilia"; +import people__emma from "./people/emma"; +import people__emmi from "./people/emmi"; +import people__erikRasmussen from "./people/erik-rasmussen"; +import people__esaMatti from "./people/esa-matti"; +import people__ewa from "./people/ewa"; +import people__facundo from "./people/facundo"; +import people__farzadYz from "./people/farzad-yz"; +import people__federico from "./people/federico"; +import people__felix from "./people/felix"; +import people__francois from "./people/francois"; +import people__gantLaborde from "./people/gant-laborde"; +import people__georgeMandis from "./people/george-mandis"; +import people__georgios from "./people/georgios"; +import people__gleb from "./people/gleb"; +import people__glennReyes from "./people/glenn-reyes"; +import people__harriMaatta from "./people/harri-maatta"; +import people__helenZhukova from "./people/helen-zhukova"; +import people__henrik from "./people/henrik"; +import people__isaSilveira from "./people/isa-silveira"; +import people__ivanGoncharov from "./people/ivan-goncharov"; +import people__ivanOrlov from "./people/ivan-orlov"; +import people__jamonHolmgren from "./people/jamon-holmgren"; +import people__jan from "./people/jan"; +import people__janiEvakallio from "./people/jani-evakallio"; +import people__janne from "./people/janne"; +import people__jaredPalmer from "./people/jared-palmer"; +import people__jari from "./people/jari"; +import people__jasmin from "./people/jasmin"; +import people__jason from "./people/jason"; +import people__je from "./people/je"; +import people__jec from "./people/jec"; +import people__jen from "./people/jen"; +import people__jeremyWagner from "./people/jeremy-wagner"; +import people__jimmyJia from "./people/jimmy-jia"; +import people__jo from "./people/jo"; +import people__joe from "./people/joe"; +import people__johannesSchickling from "./people/johannes-schickling"; +import people__joniNevalainen from "./people/joni-nevalainen"; +import people__joonasP from "./people/joonas-p"; +import people__joonas from "./people/joonas"; +import people__juan from "./people/juan"; +import people__juhaLinnanen from "./people/juha-linnanen"; +import people__juhani from "./people/juhani"; +import people__juhis from "./people/juhis"; +import people__juhoLehtinen from "./people/juho-lehtinen"; +import people__juhoVepsalainen from "./people/juho-vepsalainen"; +import people__julien from "./people/julien"; +import people__juri from "./people/juri"; +import people__jussi from "./people/jussi"; +import people__kadiKraman from "./people/kadi-kraman"; +import people__kasiaJastrzebska from "./people/kasia-jastrzebska"; +import people__kenWheeler from "./people/ken-wheeler"; +import people__kenigboloMeyaStephen from "./people/kenigbolo-meya-stephen"; +import people__kennethSutherland from "./people/kenneth-sutherland"; +import people__kentCDodds from "./people/kent-c-dodds"; +import people__kevin from "./people/kevin"; +import people__kirsi from "./people/kirsi"; +import people__kristaJantti from "./people/krista-jantti"; +import people__kristopher from "./people/kristopher"; +import people__krutie from "./people/krutie"; +import people__lainey from "./people/lainey"; +import people__lauraGonzalez from "./people/laura-gonzalez"; +import people__laura from "./people/laura"; +import people__laurak from "./people/laurak"; +import people__laurao from "./people/laurao"; +import people__lauri from "./people/lauri"; +import people__liran from "./people/liran"; +import people__lucaMatteis from "./people/luca-matteis"; +import people__luca from "./people/luca"; +import people__lukas from "./people/lukas"; +import people__lukeJackson from "./people/luke-jackson"; +import people__m4Dz from "./people/m4dz"; +import people__maaretPyhajarvi from "./people/maaret-pyhajarvi"; +import people__madalyn from "./people/madalyn"; +import people__maggie from "./people/maggie"; +import people__manjula from "./people/manjula"; +import people__manuelMatuzovic from "./people/manuel-matuzovic"; +import people__marcAndreGiroux from "./people/marc-andre-giroux"; +import people__margarita from "./people/margarita"; +import people__marianna from "./people/marianna"; +import people__mario from "./people/mario"; +import people__mark from "./people/mark"; +import people__matias from "./people/matias"; +import people__matt from "./people/matt"; +import people__matteo from "./people/matteo"; +import people__matthewM from "./people/matthew-m"; +import people__matthew from "./people/matthew"; +import people__max from "./people/max"; +import people__michael from "./people/michael"; +import people__michalChudziak from "./people/michal-chudziak"; +import people__michelWeststrate from "./people/michel-weststrate"; +import people__mika from "./people/mika"; +import people__mikeBerman from "./people/mike-berman"; +import people__mikhailNovikov from "./people/mikhail-novikov"; +import people__milecia from "./people/milecia"; +import people__misko from "./people/misko"; +import people__mo from "./people/mo"; +import people__monicaLent from "./people/monica-lent"; +import people__naderDabit from "./people/nader-dabit"; +import people__naman from "./people/naman"; +import people__nasim from "./people/nasim"; +import people__nataliaTepluhina from "./people/natalia-tepluhina"; +import people__nicola from "./people/nicola"; +import people__nidhi from "./people/nidhi"; +import people__nikGraf from "./people/nik-graf"; +import people__niklas from "./people/niklas"; +import people__norbert from "./people/norbert"; +import people__nur from "./people/nur"; +import people__ohans from "./people/ohans"; +import people__olavi from "./people/olavi"; +import people__pasi from "./people/pasi"; +import people__patrickEcker from "./people/patrick-ecker"; +import people__patrickHund from "./people/patrick-hund"; +import people__paul from "./people/paul"; +import people__pekka from "./people/pekka"; +import people__pete from "./people/pete"; +import people__rachelNabors from "./people/rachel-nabors"; +import people__rami from "./people/rami"; +import people__ramona from "./people/ramona"; +import people__rashmi from "./people/rashmi"; +import people__rebeccaHill from "./people/rebecca-hill"; +import people__rickHanlon from "./people/rick-hanlon"; +import people__rob from "./people/rob"; +import people__roosa from "./people/roosa"; +import people__rotemMizrachiMeidan from "./people/rotem-mizrachi-meidan"; +import people__ryan from "./people/ryan"; +import people__saku from "./people/saku"; +import people__salla from "./people/salla"; +import people__samuel from "./people/samuel"; +import people__samuliHakoniemi from "./people/samuli-hakoniemi"; +import people__saraVieira from "./people/sara-vieira"; +import people__satu from "./people/satu"; +import people__sebastian from "./people/sebastian"; +import people__shane from "./people/shane"; +import people__shayKeinan from "./people/shay-keinan"; +import people__shodipo from "./people/shodipo"; +import people__siaKaramalegos from "./people/sia-karamalegos"; +import people__stephanie from "./people/stephanie"; +import people__steve from "./people/steve"; +import people__sunil from "./people/sunil"; +import people__svenSauleau from "./people/sven-sauleau"; +import people__taelurAlexis from "./people/taelur-alexis"; +import people__tanja from "./people/tanja"; +import people__tanmaiGopal from "./people/tanmai-gopal"; +import people__tejasKumar from "./people/tejas-kumar"; +import people__teroParviainen from "./people/tero-parviainen"; +import people__thaisSantos from "./people/thais-santos"; +import people__thomas from "./people/thomas"; +import people__tobiasTimm from "./people/tobias-timm"; +import people__tomasKonrady from "./people/tomas-konrady"; +import people__toniRistola from "./people/toni-ristola"; +import people__tonyEnnis from "./people/tony-ennis"; +import people__tonyKovanen from "./people/tony-kovanen"; +import people__travis from "./people/travis"; +import people__tuuliTiilikainen from "./people/tuuli-tiilikainen"; +import people__uj from "./people/uj"; +import people__una from "./people/una"; +import people__varyaStepanova from "./people/varya-stepanova"; +import people__villeImmonen from "./people/ville-immonen"; +import people__villePelkonen from "./people/ville-pelkonen"; +import people__vismit from "./people/vismit"; +import people__vivekNayyar from "./people/vivek-nayyar"; +import people__woody from "./people/woody"; +import people__xiaoru from "./people/xiaoru"; +import people__yan from "./people/yan"; +import people__yang from "./people/yang"; +import people__yoav from "./people/yoav"; +import people__yulia from "./people/yulia"; +import people__zak from "./people/zak"; + +export const people = { + aapeli: people__aapeli, + aarniKoskela: people__aarniKoskela, + adamMiskiewicz: people__adamMiskiewicz, + aleksandra: people__aleksandra, + aleksiPousar: people__aleksiPousar, + alexBooker: people__alexBooker, + anastasiia: people__anastasiia, + andreas: people__andreas, + andrei: people__andrei, + andrewRhyne: people__andrewRhyne, + andreyG: people__andreyG, + andreyOkonetchnikov: people__andreyOkonetchnikov, + annaDoubkova: people__annaDoubkova, + ante: people__ante, + artemSapegin: people__artemSapegin, + artemZakharchenko: people__artemZakharchenko, + aurora: people__aurora, + barry: people__barry, + ben: people__ben, + benjieGillam: people__benjieGillam, + bodil: people__bodil, + bohdanLiashenko: people__bohdanLiashenko, + brent: people__brent, + brunoLourenco: people__brunoLourenco, + calin: people__calin, + calinb: people__calinb, + carolynStransky: people__carolynStransky, + charlie: people__charlie, + christianAlfoni: people__christianAlfoni, + christofferNiska: people__christofferNiska, + danSchafer: people__danSchafer, + danielE: people__danielE, + danielM: people__danielM, + daniel: people__daniel, + dario: people__dario, + davidC: people__davidC, + davidKhourshid: people__davidKhourshid, + david: people__david, + devlin: people__devlin, + diegoHaz: people__diegoHaz, + dmitriy: people__dmitriy, + doug: people__doug, + dragos: people__dragos, + dustinSchau: people__dustinSchau, + eemeliAro: people__eemeliAro, + eevis: people__eevis, + eli: people__eli, + elisa: people__elisa, + ellieDay: people__ellieDay, + eloyDuran: people__eloyDuran, + emilia: people__emilia, + emma: people__emma, + emmi: people__emmi, + erikRasmussen: people__erikRasmussen, + esaMatti: people__esaMatti, + ewa: people__ewa, + facundo: people__facundo, + farzadYz: people__farzadYz, + federico: people__federico, + felix: people__felix, + francois: people__francois, + gantLaborde: people__gantLaborde, + georgeMandis: people__georgeMandis, + georgios: people__georgios, + gleb: people__gleb, + glennReyes: people__glennReyes, + harriMaatta: people__harriMaatta, + helenZhukova: people__helenZhukova, + henrik: people__henrik, + isaSilveira: people__isaSilveira, + ivanGoncharov: people__ivanGoncharov, + ivanOrlov: people__ivanOrlov, + jamonHolmgren: people__jamonHolmgren, + jan: people__jan, + janiEvakallio: people__janiEvakallio, + janne: people__janne, + jaredPalmer: people__jaredPalmer, + jari: people__jari, + jasmin: people__jasmin, + jason: people__jason, + je: people__je, + jec: people__jec, + jen: people__jen, + jeremyWagner: people__jeremyWagner, + jimmyJia: people__jimmyJia, + jo: people__jo, + joe: people__joe, + johannesSchickling: people__johannesSchickling, + joniNevalainen: people__joniNevalainen, + joonasP: people__joonasP, + joonas: people__joonas, + juan: people__juan, + juhaLinnanen: people__juhaLinnanen, + juhani: people__juhani, + juhis: people__juhis, + juhoLehtinen: people__juhoLehtinen, + juhoVepsalainen: people__juhoVepsalainen, + julien: people__julien, + juri: people__juri, + jussi: people__jussi, + kadiKraman: people__kadiKraman, + kasiaJastrzebska: people__kasiaJastrzebska, + kenWheeler: people__kenWheeler, + kenigboloMeyaStephen: people__kenigboloMeyaStephen, + kennethSutherland: people__kennethSutherland, + kentCDodds: people__kentCDodds, + kevin: people__kevin, + kirsi: people__kirsi, + kristaJantti: people__kristaJantti, + kristopher: people__kristopher, + krutie: people__krutie, + lainey: people__lainey, + lauraGonzalez: people__lauraGonzalez, + laura: people__laura, + laurak: people__laurak, + laurao: people__laurao, + lauri: people__lauri, + liran: people__liran, + lucaMatteis: people__lucaMatteis, + luca: people__luca, + lukas: people__lukas, + lukeJackson: people__lukeJackson, + m4Dz: people__m4Dz, + maaretPyhajarvi: people__maaretPyhajarvi, + madalyn: people__madalyn, + maggie: people__maggie, + manjula: people__manjula, + manuelMatuzovic: people__manuelMatuzovic, + marcAndreGiroux: people__marcAndreGiroux, + margarita: people__margarita, + marianna: people__marianna, + mario: people__mario, + mark: people__mark, + matias: people__matias, + matt: people__matt, + matteo: people__matteo, + matthewM: people__matthewM, + matthew: people__matthew, + max: people__max, + michael: people__michael, + michalChudziak: people__michalChudziak, + michelWeststrate: people__michelWeststrate, + mika: people__mika, + mikeBerman: people__mikeBerman, + mikhailNovikov: people__mikhailNovikov, + milecia: people__milecia, + misko: people__misko, + mo: people__mo, + monicaLent: people__monicaLent, + naderDabit: people__naderDabit, + naman: people__naman, + nasim: people__nasim, + nataliaTepluhina: people__nataliaTepluhina, + nicola: people__nicola, + nidhi: people__nidhi, + nikGraf: people__nikGraf, + niklas: people__niklas, + norbert: people__norbert, + nur: people__nur, + ohans: people__ohans, + olavi: people__olavi, + pasi: people__pasi, + patrickEcker: people__patrickEcker, + patrickHund: people__patrickHund, + paul: people__paul, + pekka: people__pekka, + pete: people__pete, + rachelNabors: people__rachelNabors, + rami: people__rami, + ramona: people__ramona, + rashmi: people__rashmi, + rebeccaHill: people__rebeccaHill, + rickHanlon: people__rickHanlon, + rob: people__rob, + roosa: people__roosa, + rotemMizrachiMeidan: people__rotemMizrachiMeidan, + ryan: people__ryan, + saku: people__saku, + salla: people__salla, + samuel: people__samuel, + samuliHakoniemi: people__samuliHakoniemi, + saraVieira: people__saraVieira, + satu: people__satu, + sebastian: people__sebastian, + shane: people__shane, + shayKeinan: people__shayKeinan, + shodipo: people__shodipo, + siaKaramalegos: people__siaKaramalegos, + stephanie: people__stephanie, + steve: people__steve, + sunil: people__sunil, + svenSauleau: people__svenSauleau, + taelurAlexis: people__taelurAlexis, + tanja: people__tanja, + tanmaiGopal: people__tanmaiGopal, + tejasKumar: people__tejasKumar, + teroParviainen: people__teroParviainen, + thaisSantos: people__thaisSantos, + thomas: people__thomas, + tobiasTimm: people__tobiasTimm, + tomasKonrady: people__tomasKonrady, + toniRistola: people__toniRistola, + tonyEnnis: people__tonyEnnis, + tonyKovanen: people__tonyKovanen, + travis: people__travis, + tuuliTiilikainen: people__tuuliTiilikainen, + uj: people__uj, + una: people__una, + varyaStepanova: people__varyaStepanova, + villeImmonen: people__villeImmonen, + villePelkonen: people__villePelkonen, + vismit: people__vismit, + vivekNayyar: people__vivekNayyar, + woody: people__woody, + xiaoru: people__xiaoru, + yan: people__yan, + yang: people__yang, + yoav: people__yoav, + yulia: people__yulia, + zak: people__zak, +} as const; + +export const aapeli = people.aapeli; +export const aarniKoskela = people.aarniKoskela; +export const adamMiskiewicz = people.adamMiskiewicz; +export const aleksandra = people.aleksandra; +export const aleksiPousar = people.aleksiPousar; +export const alexBooker = people.alexBooker; +export const anastasiia = people.anastasiia; +export const andreas = people.andreas; +export const andrei = people.andrei; +export const andrewRhyne = people.andrewRhyne; +export const andreyG = people.andreyG; +export const andreyOkonetchnikov = people.andreyOkonetchnikov; +export const annaDoubkova = people.annaDoubkova; +export const ante = people.ante; +export const artemSapegin = people.artemSapegin; +export const artemZakharchenko = people.artemZakharchenko; +export const aurora = people.aurora; +export const barry = people.barry; +export const ben = people.ben; +export const benjieGillam = people.benjieGillam; +export const bodil = people.bodil; +export const bohdanLiashenko = people.bohdanLiashenko; +export const brent = people.brent; +export const brunoLourenco = people.brunoLourenco; +export const calin = people.calin; +export const calinb = people.calinb; +export const carolynStransky = people.carolynStransky; +export const charlie = people.charlie; +export const christianAlfoni = people.christianAlfoni; +export const christofferNiska = people.christofferNiska; +export const danSchafer = people.danSchafer; +export const danielE = people.danielE; +export const danielM = people.danielM; +export const daniel = people.daniel; +export const dario = people.dario; +export const davidC = people.davidC; +export const davidKhourshid = people.davidKhourshid; +export const david = people.david; +export const devlin = people.devlin; +export const diegoHaz = people.diegoHaz; +export const dmitriy = people.dmitriy; +export const doug = people.doug; +export const dragos = people.dragos; +export const dustinSchau = people.dustinSchau; +export const eemeliAro = people.eemeliAro; +export const eevis = people.eevis; +export const eli = people.eli; +export const elisa = people.elisa; +export const ellieDay = people.ellieDay; +export const eloyDuran = people.eloyDuran; +export const emilia = people.emilia; +export const emma = people.emma; +export const emmi = people.emmi; +export const erikRasmussen = people.erikRasmussen; +export const esaMatti = people.esaMatti; +export const ewa = people.ewa; +export const facundo = people.facundo; +export const farzadYz = people.farzadYz; +export const federico = people.federico; +export const felix = people.felix; +export const francois = people.francois; +export const gantLaborde = people.gantLaborde; +export const georgeMandis = people.georgeMandis; +export const georgios = people.georgios; +export const gleb = people.gleb; +export const glennReyes = people.glennReyes; +export const harriMaatta = people.harriMaatta; +export const helenZhukova = people.helenZhukova; +export const henrik = people.henrik; +export const isaSilveira = people.isaSilveira; +export const ivanGoncharov = people.ivanGoncharov; +export const ivanOrlov = people.ivanOrlov; +export const jamonHolmgren = people.jamonHolmgren; +export const jan = people.jan; +export const janiEvakallio = people.janiEvakallio; +export const janne = people.janne; +export const jaredPalmer = people.jaredPalmer; +export const jari = people.jari; +export const jasmin = people.jasmin; +export const jason = people.jason; +export const je = people.je; +export const jec = people.jec; +export const jen = people.jen; +export const jeremyWagner = people.jeremyWagner; +export const jimmyJia = people.jimmyJia; +export const jo = people.jo; +export const joe = people.joe; +export const johannesSchickling = people.johannesSchickling; +export const joniNevalainen = people.joniNevalainen; +export const joonasP = people.joonasP; +export const joonas = people.joonas; +export const juan = people.juan; +export const juhaLinnanen = people.juhaLinnanen; +export const juhani = people.juhani; +export const juhis = people.juhis; +export const juhoLehtinen = people.juhoLehtinen; +export const juhoVepsalainen = people.juhoVepsalainen; +export const julien = people.julien; +export const juri = people.juri; +export const jussi = people.jussi; +export const kadiKraman = people.kadiKraman; +export const kasiaJastrzebska = people.kasiaJastrzebska; +export const kenWheeler = people.kenWheeler; +export const kenigboloMeyaStephen = people.kenigboloMeyaStephen; +export const kennethSutherland = people.kennethSutherland; +export const kentCDodds = people.kentCDodds; +export const kevin = people.kevin; +export const kirsi = people.kirsi; +export const kristaJantti = people.kristaJantti; +export const kristopher = people.kristopher; +export const krutie = people.krutie; +export const lainey = people.lainey; +export const lauraGonzalez = people.lauraGonzalez; +export const laura = people.laura; +export const laurak = people.laurak; +export const laurao = people.laurao; +export const lauri = people.lauri; +export const liran = people.liran; +export const lucaMatteis = people.lucaMatteis; +export const luca = people.luca; +export const lukas = people.lukas; +export const lukeJackson = people.lukeJackson; +export const m4Dz = people.m4Dz; +export const maaretPyhajarvi = people.maaretPyhajarvi; +export const madalyn = people.madalyn; +export const maggie = people.maggie; +export const manjula = people.manjula; +export const manuelMatuzovic = people.manuelMatuzovic; +export const marcAndreGiroux = people.marcAndreGiroux; +export const margarita = people.margarita; +export const marianna = people.marianna; +export const mario = people.mario; +export const mark = people.mark; +export const matias = people.matias; +export const matt = people.matt; +export const matteo = people.matteo; +export const matthewM = people.matthewM; +export const matthew = people.matthew; +export const max = people.max; +export const michael = people.michael; +export const michalChudziak = people.michalChudziak; +export const michelWeststrate = people.michelWeststrate; +export const mika = people.mika; +export const mikeBerman = people.mikeBerman; +export const mikhailNovikov = people.mikhailNovikov; +export const milecia = people.milecia; +export const misko = people.misko; +export const mo = people.mo; +export const monicaLent = people.monicaLent; +export const naderDabit = people.naderDabit; +export const naman = people.naman; +export const nasim = people.nasim; +export const nataliaTepluhina = people.nataliaTepluhina; +export const nicola = people.nicola; +export const nidhi = people.nidhi; +export const nikGraf = people.nikGraf; +export const niklas = people.niklas; +export const norbert = people.norbert; +export const nur = people.nur; +export const ohans = people.ohans; +export const olavi = people.olavi; +export const pasi = people.pasi; +export const patrickEcker = people.patrickEcker; +export const patrickHund = people.patrickHund; +export const paul = people.paul; +export const pekka = people.pekka; +export const pete = people.pete; +export const rachelNabors = people.rachelNabors; +export const rami = people.rami; +export const ramona = people.ramona; +export const rashmi = people.rashmi; +export const rebeccaHill = people.rebeccaHill; +export const rickHanlon = people.rickHanlon; +export const rob = people.rob; +export const roosa = people.roosa; +export const rotemMizrachiMeidan = people.rotemMizrachiMeidan; +export const ryan = people.ryan; +export const saku = people.saku; +export const salla = people.salla; +export const samuel = people.samuel; +export const samuliHakoniemi = people.samuliHakoniemi; +export const saraVieira = people.saraVieira; +export const satu = people.satu; +export const sebastian = people.sebastian; +export const shane = people.shane; +export const shayKeinan = people.shayKeinan; +export const shodipo = people.shodipo; +export const siaKaramalegos = people.siaKaramalegos; +export const stephanie = people.stephanie; +export const steve = people.steve; +export const sunil = people.sunil; +export const svenSauleau = people.svenSauleau; +export const taelurAlexis = people.taelurAlexis; +export const tanja = people.tanja; +export const tanmaiGopal = people.tanmaiGopal; +export const tejasKumar = people.tejasKumar; +export const teroParviainen = people.teroParviainen; +export const thaisSantos = people.thaisSantos; +export const thomas = people.thomas; +export const tobiasTimm = people.tobiasTimm; +export const tomasKonrady = people.tomasKonrady; +export const toniRistola = people.toniRistola; +export const tonyEnnis = people.tonyEnnis; +export const tonyKovanen = people.tonyKovanen; +export const travis = people.travis; +export const tuuliTiilikainen = people.tuuliTiilikainen; +export const uj = people.uj; +export const una = people.una; +export const varyaStepanova = people.varyaStepanova; +export const villeImmonen = people.villeImmonen; +export const villePelkonen = people.villePelkonen; +export const vismit = people.vismit; +export const vivekNayyar = people.vivekNayyar; +export const woody = people.woody; +export const xiaoru = people.xiaoru; +export const yan = people.yan; +export const yang = people.yang; +export const yoav = people.yoav; +export const yulia = people.yulia; +export const zak = people.zak; + +import reactFinland2018Talks__andreyOkonetchnikov from "./react-finland-2018/talks/andrey-okonetchnikov"; +import reactFinland2018Talks__christianAlfoni from "./react-finland-2018/talks/christian-alfoni"; +import reactFinland2018Talks__davidKhourshid from "./react-finland-2018/talks/david-khourshid"; +import reactFinland2018Talks__eemeliAro2 from "./react-finland-2018/talks/eemeli-aro-2"; +import reactFinland2018Talks__eemeliAro from "./react-finland-2018/talks/eemeli-aro"; +import reactFinland2018Talks__gantLaborde from "./react-finland-2018/talks/gant-laborde"; +import reactFinland2018Talks__janiEvakallio from "./react-finland-2018/talks/jani-evakallio"; +import reactFinland2018Talks__juhoVepsalainen from "./react-finland-2018/talks/juho-vepsalainen"; +import reactFinland2018Talks__kasiaJastrzebska from "./react-finland-2018/talks/kasia-jastrzebska"; +import reactFinland2018Talks__kenWheeler from "./react-finland-2018/talks/ken-wheeler"; +import reactFinland2018Talks__michalChudziak from "./react-finland-2018/talks/michal-chudziak"; +import reactFinland2018Talks__michelWeststrate from "./react-finland-2018/talks/michel-weststrate"; +import reactFinland2018Talks__nikGraf from "./react-finland-2018/talks/nik-graf"; +import reactFinland2018Talks__patrickHund from "./react-finland-2018/talks/patrick-hund"; +import reactFinland2018Talks__patrickStapfer from "./react-finland-2018/talks/patrick-stapfer"; +import reactFinland2018Talks__rotemMizrachiMeidan from "./react-finland-2018/talks/rotem-mizrachi-meidan"; +import reactFinland2018Talks__saraVieira from "./react-finland-2018/talks/sara-vieira"; +import reactFinland2018Talks__shayKeinan from "./react-finland-2018/talks/shay-keinan"; +import reactFinland2018Talks__siaKaramalegos from "./react-finland-2018/talks/sia-karamalegos"; +import reactFinland2018Talks__svenSauleau from "./react-finland-2018/talks/sven-sauleau"; +import reactFinland2018Talks__toniRistola from "./react-finland-2018/talks/toni-ristola"; +import reactFinland2018Talks__varyaStepanova from "./react-finland-2018/talks/varya-stepanova"; + +export const reactFinland2018Talks = { + andreyOkonetchnikov: reactFinland2018Talks__andreyOkonetchnikov, + christianAlfoni: reactFinland2018Talks__christianAlfoni, + davidKhourshid: reactFinland2018Talks__davidKhourshid, + eemeliAro2: reactFinland2018Talks__eemeliAro2, + eemeliAro: reactFinland2018Talks__eemeliAro, + gantLaborde: reactFinland2018Talks__gantLaborde, + janiEvakallio: reactFinland2018Talks__janiEvakallio, + juhoVepsalainen: reactFinland2018Talks__juhoVepsalainen, + kasiaJastrzebska: reactFinland2018Talks__kasiaJastrzebska, + kenWheeler: reactFinland2018Talks__kenWheeler, + michalChudziak: reactFinland2018Talks__michalChudziak, + michelWeststrate: reactFinland2018Talks__michelWeststrate, + nikGraf: reactFinland2018Talks__nikGraf, + patrickHund: reactFinland2018Talks__patrickHund, + patrickStapfer: reactFinland2018Talks__patrickStapfer, + rotemMizrachiMeidan: reactFinland2018Talks__rotemMizrachiMeidan, + saraVieira: reactFinland2018Talks__saraVieira, + shayKeinan: reactFinland2018Talks__shayKeinan, + siaKaramalegos: reactFinland2018Talks__siaKaramalegos, + svenSauleau: reactFinland2018Talks__svenSauleau, + toniRistola: reactFinland2018Talks__toniRistola, + varyaStepanova: reactFinland2018Talks__varyaStepanova, +} as const; + +import reactFinland2018Workshops__andreyAndArtemWorkshop from "./react-finland-2018/workshops/andrey-and-artem-workshop"; +import reactFinland2018Workshops__davidKhourshidWorkshop from "./react-finland-2018/workshops/david-khourshid-workshop"; +import reactFinland2018Workshops__gantLabordeWorkshop from "./react-finland-2018/workshops/gant-laborde-workshop"; +import reactFinland2018Workshops__juhoVepsalainenWorkshop from "./react-finland-2018/workshops/juho-vepsalainen-workshop"; +import reactFinland2018Workshops__michelWeststrateWorkshop from "./react-finland-2018/workshops/michel-weststrate-workshop"; +import reactFinland2018Workshops__patrickAndNikWorkshop from "./react-finland-2018/workshops/patrick-and-nik-workshop"; +import reactFinland2018Workshops__rotemMizrachiMeidanWorkshop from "./react-finland-2018/workshops/rotem-mizrachi-meidan-workshop"; +import reactFinland2018Workshops__saraVieiraWorkshop from "./react-finland-2018/workshops/sara-vieira-workshop"; +import reactFinland2018Workshops__siaKaramalegosWorkshop from "./react-finland-2018/workshops/sia-karamalegos-workshop"; +import reactFinland2018Workshops__svenSauleauWorkshop from "./react-finland-2018/workshops/sven-sauleau-workshop"; + +export const reactFinland2018Workshops = { + andreyAndArtemWorkshop: reactFinland2018Workshops__andreyAndArtemWorkshop, + davidKhourshidWorkshop: reactFinland2018Workshops__davidKhourshidWorkshop, + gantLabordeWorkshop: reactFinland2018Workshops__gantLabordeWorkshop, + juhoVepsalainenWorkshop: reactFinland2018Workshops__juhoVepsalainenWorkshop, + michelWeststrateWorkshop: reactFinland2018Workshops__michelWeststrateWorkshop, + patrickAndNikWorkshop: reactFinland2018Workshops__patrickAndNikWorkshop, + rotemMizrachiMeidanWorkshop: reactFinland2018Workshops__rotemMizrachiMeidanWorkshop, + saraVieiraWorkshop: reactFinland2018Workshops__saraVieiraWorkshop, + siaKaramalegosWorkshop: reactFinland2018Workshops__siaKaramalegosWorkshop, + svenSauleauWorkshop: reactFinland2018Workshops__svenSauleauWorkshop, +} as const; + +import reactFinland2019Talks__andreyOkonetchnikov from "./react-finland-2019/talks/andrey-okonetchnikov"; +import reactFinland2019Talks__annaDoubkova from "./react-finland-2019/talks/anna-doubkova"; +import reactFinland2019Talks__artemSapegin from "./react-finland-2019/talks/artem-sapegin"; +import reactFinland2019Talks__artemZakharchenko from "./react-finland-2019/talks/artem-zakharchenko"; +import reactFinland2019Talks__bohdanLiashenko from "./react-finland-2019/talks/bohdan-liashenko"; +import reactFinland2019Talks__brunoLourenco from "./react-finland-2019/talks/bruno-lourenco"; +import reactFinland2019Talks__carolynStransky from "./react-finland-2019/talks/carolyn-stransky"; +import reactFinland2019Talks__christofferNiska from "./react-finland-2019/talks/christoffer-niska"; +import reactFinland2019Talks__davidKhourshid from "./react-finland-2019/talks/david-khourshid"; +import reactFinland2019Talks__dustinSchau from "./react-finland-2019/talks/dustin-schau"; +import reactFinland2019Talks__farzadYz from "./react-finland-2019/talks/farzad-yz"; +import reactFinland2019Talks__glennReyes from "./react-finland-2019/talks/glenn-reyes"; +import reactFinland2019Talks__jamonHolmgren from "./react-finland-2019/talks/jamon-holmgren"; +import reactFinland2019Talks__juhaLinnanen from "./react-finland-2019/talks/juha-linnanen"; +import reactFinland2019Talks__kadiKraman from "./react-finland-2019/talks/kadi-kraman"; +import reactFinland2019Talks__lucaMatteis from "./react-finland-2019/talks/luca-matteis"; +import reactFinland2019Talks__maaretPyhajarvi from "./react-finland-2019/talks/maaret-pyhajarvi"; +import reactFinland2019Talks__manuelMatuzovic from "./react-finland-2019/talks/manuel-matuzovic"; +import reactFinland2019Talks__michelWeststrate from "./react-finland-2019/talks/michel-weststrate"; +import reactFinland2019Talks__monicaLent from "./react-finland-2019/talks/monica-lent"; +import reactFinland2019Talks__nikGraf from "./react-finland-2019/talks/nik-graf"; +import reactFinland2019Talks__rickHanlon from "./react-finland-2019/talks/rick-hanlon"; +import reactFinland2019Talks__svenSauleau from "./react-finland-2019/talks/sven-sauleau"; +import reactFinland2019Talks__tejasKumar from "./react-finland-2019/talks/tejas-kumar"; +import reactFinland2019Talks__tomasKonrady from "./react-finland-2019/talks/tomas-konrady"; +import reactFinland2019Talks__varyaStepanova from "./react-finland-2019/talks/varya-stepanova"; +import reactFinland2019Talks__villeImmonen from "./react-finland-2019/talks/ville-immonen"; + +export const reactFinland2019Talks = { + andreyOkonetchnikov: reactFinland2019Talks__andreyOkonetchnikov, + annaDoubkova: reactFinland2019Talks__annaDoubkova, + artemSapegin: reactFinland2019Talks__artemSapegin, + artemZakharchenko: reactFinland2019Talks__artemZakharchenko, + bohdanLiashenko: reactFinland2019Talks__bohdanLiashenko, + brunoLourenco: reactFinland2019Talks__brunoLourenco, + carolynStransky: reactFinland2019Talks__carolynStransky, + christofferNiska: reactFinland2019Talks__christofferNiska, + davidKhourshid: reactFinland2019Talks__davidKhourshid, + dustinSchau: reactFinland2019Talks__dustinSchau, + farzadYz: reactFinland2019Talks__farzadYz, + glennReyes: reactFinland2019Talks__glennReyes, + jamonHolmgren: reactFinland2019Talks__jamonHolmgren, + juhaLinnanen: reactFinland2019Talks__juhaLinnanen, + kadiKraman: reactFinland2019Talks__kadiKraman, + lucaMatteis: reactFinland2019Talks__lucaMatteis, + maaretPyhajarvi: reactFinland2019Talks__maaretPyhajarvi, + manuelMatuzovic: reactFinland2019Talks__manuelMatuzovic, + michelWeststrate: reactFinland2019Talks__michelWeststrate, + monicaLent: reactFinland2019Talks__monicaLent, + nikGraf: reactFinland2019Talks__nikGraf, + rickHanlon: reactFinland2019Talks__rickHanlon, + svenSauleau: reactFinland2019Talks__svenSauleau, + tejasKumar: reactFinland2019Talks__tejasKumar, + tomasKonrady: reactFinland2019Talks__tomasKonrady, + varyaStepanova: reactFinland2019Talks__varyaStepanova, + villeImmonen: reactFinland2019Talks__villeImmonen, +} as const; + +import reactFinland2019Workshops__andreyAndArtemWorkshop from "./react-finland-2019/workshops/andrey-and-artem-workshop"; +import reactFinland2019Workshops__davidKhourshidWorkshop from "./react-finland-2019/workshops/david-khourshid-workshop"; +import reactFinland2019Workshops__glennReyesWorkshop from "./react-finland-2019/workshops/glenn-reyes-workshop"; +import reactFinland2019Workshops__michelWorkshop from "./react-finland-2019/workshops/michel-workshop"; +import reactFinland2019Workshops__nikWorkshop from "./react-finland-2019/workshops/nik-workshop"; +import reactFinland2019Workshops__performanceWorkshop from "./react-finland-2019/workshops/performance-workshop"; + +export const reactFinland2019Workshops = { + andreyAndArtemWorkshop: reactFinland2019Workshops__andreyAndArtemWorkshop, + davidKhourshidWorkshop: reactFinland2019Workshops__davidKhourshidWorkshop, + glennReyesWorkshop: reactFinland2019Workshops__glennReyesWorkshop, + michelWorkshop: reactFinland2019Workshops__michelWorkshop, + nikWorkshop: reactFinland2019Workshops__nikWorkshop, + performanceWorkshop: reactFinland2019Workshops__performanceWorkshop, +} as const; + +import reactFinland2020Talks__brent from "./react-finland-2020/talks/brent"; +import reactFinland2020Talks__davidKhourshid from "./react-finland-2020/talks/david-khourshid"; +import reactFinland2020Talks__eli from "./react-finland-2020/talks/eli"; +import reactFinland2020Talks__emma from "./react-finland-2020/talks/emma"; +import reactFinland2020Talks__esaMatti from "./react-finland-2020/talks/esa-matti"; +import reactFinland2020Talks__farzadYz from "./react-finland-2020/talks/farzad-yz"; +import reactFinland2020Talks__isaSilveira from "./react-finland-2020/talks/isa-silveira"; +import reactFinland2020Talks__ivanOrlov from "./react-finland-2020/talks/ivan-orlov"; +import reactFinland2020Talks__jaredPalmer from "./react-finland-2020/talks/jared-palmer"; +import reactFinland2020Talks__jeremyWagner from "./react-finland-2020/talks/jeremy-wagner"; +import reactFinland2020Talks__kenigboloMeyaStephen from "./react-finland-2020/talks/kenigbolo-meya-stephen"; +import reactFinland2020Talks__kennethSutherland from "./react-finland-2020/talks/kenneth-sutherland"; +import reactFinland2020Talks__kentCDodds from "./react-finland-2020/talks/kent-c-dodds"; +import reactFinland2020Talks__lauraGonzalez from "./react-finland-2020/talks/laura-gonzalez"; +import reactFinland2020Talks__lauri from "./react-finland-2020/talks/lauri"; +import reactFinland2020Talks__madalyn from "./react-finland-2020/talks/madalyn"; +import reactFinland2020Talks__margarita from "./react-finland-2020/talks/margarita"; +import reactFinland2020Talks__naderDabit from "./react-finland-2020/talks/nader-dabit"; +import reactFinland2020Talks__nikGraf from "./react-finland-2020/talks/nik-graf"; +import reactFinland2020Talks__olavi from "./react-finland-2020/talks/olavi"; +import reactFinland2020Talks__rachelNabors from "./react-finland-2020/talks/rachel-nabors"; +import reactFinland2020Talks__rebeccaHill from "./react-finland-2020/talks/rebecca-hill"; +import reactFinland2020Talks__taelurAlexis from "./react-finland-2020/talks/taelur-alexis"; +import reactFinland2020Talks__tejasKumar from "./react-finland-2020/talks/tejas-kumar"; +import reactFinland2020Talks__tobiasTimm from "./react-finland-2020/talks/tobias-timm"; +import reactFinland2020Talks__villePelkonen from "./react-finland-2020/talks/ville-pelkonen"; +import reactFinland2020Talks__vivekNayyar from "./react-finland-2020/talks/vivek-nayyar"; +import reactFinland2020Talks__xiaoru from "./react-finland-2020/talks/xiaoru"; +import reactFinland2020Talks__yan from "./react-finland-2020/talks/yan"; + +export const reactFinland2020Talks = { + brent: reactFinland2020Talks__brent, + davidKhourshid: reactFinland2020Talks__davidKhourshid, + eli: reactFinland2020Talks__eli, + emma: reactFinland2020Talks__emma, + esaMatti: reactFinland2020Talks__esaMatti, + farzadYz: reactFinland2020Talks__farzadYz, + isaSilveira: reactFinland2020Talks__isaSilveira, + ivanOrlov: reactFinland2020Talks__ivanOrlov, + jaredPalmer: reactFinland2020Talks__jaredPalmer, + jeremyWagner: reactFinland2020Talks__jeremyWagner, + kenigboloMeyaStephen: reactFinland2020Talks__kenigboloMeyaStephen, + kennethSutherland: reactFinland2020Talks__kennethSutherland, + kentCDodds: reactFinland2020Talks__kentCDodds, + lauraGonzalez: reactFinland2020Talks__lauraGonzalez, + lauri: reactFinland2020Talks__lauri, + madalyn: reactFinland2020Talks__madalyn, + margarita: reactFinland2020Talks__margarita, + naderDabit: reactFinland2020Talks__naderDabit, + nikGraf: reactFinland2020Talks__nikGraf, + olavi: reactFinland2020Talks__olavi, + rachelNabors: reactFinland2020Talks__rachelNabors, + rebeccaHill: reactFinland2020Talks__rebeccaHill, + taelurAlexis: reactFinland2020Talks__taelurAlexis, + tejasKumar: reactFinland2020Talks__tejasKumar, + tobiasTimm: reactFinland2020Talks__tobiasTimm, + villePelkonen: reactFinland2020Talks__villePelkonen, + vivekNayyar: reactFinland2020Talks__vivekNayyar, + xiaoru: reactFinland2020Talks__xiaoru, + yan: reactFinland2020Talks__yan, +} as const; + +import reactFinland2020Workshops__advancedReact from "./react-finland-2020/workshops/advanced-react"; +import reactFinland2020Workshops__designSystems101 from "./react-finland-2020/workshops/design-systems-101"; +import reactFinland2020Workshops__designSystems from "./react-finland-2020/workshops/design-systems"; +import reactFinland2020Workshops__fromLegacyToReact from "./react-finland-2020/workshops/from-legacy-to-react"; +import reactFinland2020Workshops__fullStack from "./react-finland-2020/workshops/full-stack"; +import reactFinland2020Workshops__modernForms from "./react-finland-2020/workshops/modern-forms"; +import reactFinland2020Workshops__reactNative from "./react-finland-2020/workshops/react-native"; +import reactFinland2020Workshops__reactPerformance from "./react-finland-2020/workshops/react-performance"; +import reactFinland2020Workshops__resilientLibs from "./react-finland-2020/workshops/resilient-libs"; +import reactFinland2020Workshops__statecharts from "./react-finland-2020/workshops/statecharts"; +import reactFinland2020Workshops__testingReact from "./react-finland-2020/workshops/testing-react"; + +export const reactFinland2020Workshops = { + advancedReact: reactFinland2020Workshops__advancedReact, + designSystems101: reactFinland2020Workshops__designSystems101, + designSystems: reactFinland2020Workshops__designSystems, + fromLegacyToReact: reactFinland2020Workshops__fromLegacyToReact, + fullStack: reactFinland2020Workshops__fullStack, + modernForms: reactFinland2020Workshops__modernForms, + reactNative: reactFinland2020Workshops__reactNative, + reactPerformance: reactFinland2020Workshops__reactPerformance, + resilientLibs: reactFinland2020Workshops__resilientLibs, + statecharts: reactFinland2020Workshops__statecharts, + testingReact: reactFinland2020Workshops__testingReact, +} as const; + +import rf202001Talks__carolyn from "./rf2020-01/talks/carolyn"; +import rf202001Talks__kenigboloMeyaStephen from "./rf2020-01/talks/kenigbolo-meya-stephen"; +import rf202001Talks__margarita from "./rf2020-01/talks/margarita"; + +export const rf202001Talks = { + carolyn: rf202001Talks__carolyn, + kenigboloMeyaStephen: rf202001Talks__kenigboloMeyaStephen, + margarita: rf202001Talks__margarita, +} as const; + +import sponsors__a11Yclub from "./sponsors/a11yclub"; +import sponsors__agentconf from "./sponsors/agentconf"; +import sponsors__alma from "./sponsors/alma"; +import sponsors__amazon from "./sponsors/amazon"; +import sponsors__apidays from "./sponsors/apidays"; +import sponsors__apiops from "./sponsors/apiops"; +import sponsors__apollo from "./sponsors/apollo"; +import sponsors__backscreen from "./sponsors/backscreen"; +import sponsors__bangalore from "./sponsors/bangalore"; +import sponsors__bejs from "./sponsors/bejs"; +import sponsors__brella from "./sponsors/brella"; +import sponsors__cai from "./sponsors/cai"; +import sponsors__codento from "./sponsors/codento"; +import sponsors__columbiaroad from "./sponsors/columbiaroad"; +import sponsors__cybercom from "./sponsors/cybercom"; +import sponsors__designsystemslondon from "./sponsors/designsystemslondon"; +import sponsors__digia from "./sponsors/digia"; +import sponsors__digitalExpert from "./sponsors/digital-expert"; +import sponsors__divriots from "./sponsors/divriots"; +import sponsors__dna325 from "./sponsors/dna325"; +import sponsors__dojs from "./sponsors/dojs"; +import sponsors__dynatrace from "./sponsors/dynatrace"; +import sponsors__elisa from "./sponsors/elisa"; +import sponsors__evitec from "./sponsors/evitec"; +import sponsors__fb from "./sponsors/fb"; +import sponsors__formidable from "./sponsors/formidable"; +import sponsors__frankenjs from "./sponsors/frankenjs"; +import sponsors__friikit from "./sponsors/friikit"; +import sponsors__futurice from "./sponsors/futurice"; +import sponsors__gatsby from "./sponsors/gatsby"; +import sponsors__geekle from "./sponsors/geekle"; +import sponsors__geniem from "./sponsors/geniem"; +import sponsors__ginetta from "./sponsors/ginetta"; +import sponsors__glorium from "./sponsors/glorium"; +import sponsors__gofore from "./sponsors/gofore"; +import sponsors__gqlhongkong from "./sponsors/gqlhongkong"; +import sponsors__graphqlFinland from "./sponsors/graphql-finland"; +import sponsors__grusp from "./sponsors/grusp"; +import sponsors__haagahelia from "./sponsors/haagahelia"; +import sponsors__halfstack from "./sponsors/halfstack"; +import sponsors__hasura from "./sponsors/hasura"; +import sponsors__hbc from "./sponsors/hbc"; +import sponsors__honeypot from "./sponsors/honeypot"; +import sponsors__huuva from "./sponsors/huuva"; +import sponsors__jscamp from "./sponsors/jscamp"; +import sponsors__jsconfbp from "./sponsors/jsconfbp"; +import sponsors__jsday from "./sponsors/jsday"; +import sponsors__jskongress from "./sponsors/jskongress"; +import sponsors__jsn from "./sponsors/jsn"; +import sponsors__knowit from "./sponsors/knowit"; +import sponsors__kongres from "./sponsors/kongres"; +import sponsors__koodiasuomesta from "./sponsors/koodiasuomesta"; +import sponsors__loihdefactor from "./sponsors/loihdefactor"; +import sponsors__meiko from "./sponsors/meiko"; +import sponsors__monolisa from "./sponsors/monolisa"; +import sponsors__moonhighway from "./sponsors/moonhighway"; +import sponsors__motley from "./sponsors/motley"; +import sponsors__netum from "./sponsors/netum"; +import sponsors__nightingale from "./sponsors/nightingale"; +import sponsors__nitor from "./sponsors/nitor"; +import sponsors__nodecongress from "./sponsors/nodecongress"; +import sponsors__ohjelmistofriikit from "./sponsors/ohjelmistofriikit"; +import sponsors__osaango from "./sponsors/osaango"; +import sponsors__postgraphile from "./sponsors/postgraphile"; +import sponsors__prisma from "./sponsors/prisma"; +import sponsors__quentic from "./sponsors/quentic"; +import sponsors__reactFinland from "./sponsors/react-finland"; +import sponsors__reactalicante from "./sponsors/reactalicante"; +import sponsors__reactbrussels from "./sponsors/reactbrussels"; +import sponsors__reactdayberlin from "./sponsors/reactdayberlin"; +import sponsors__reactfest from "./sponsors/reactfest"; +import sponsors__reactindia from "./sponsors/reactindia"; +import sponsors__reactjsday from "./sponsors/reactjsday"; +import sponsors__reactjsgirls from "./sponsors/reactjsgirls"; +import sponsors__reactnativeeu from "./sponsors/reactnativeeu"; +import sponsors__reactnewyork from "./sponsors/reactnewyork"; +import sponsors__reactnorway from "./sponsors/reactnorway"; +import sponsors__reactparis from "./sponsors/reactparis"; +import sponsors__reactsummit from "./sponsors/reactsummit"; +import sponsors__reactweek from "./sponsors/reactweek"; +import sponsors__reaktor from "./sponsors/reaktor"; +import sponsors__reasonconf from "./sponsors/reasonconf"; +import sponsors__relex from "./sponsors/relex"; +import sponsors__rlc from "./sponsors/rlc"; +import sponsors__rohea from "./sponsors/rohea"; +import sponsors__rp from "./sponsors/rp"; +import sponsors__sae from "./sponsors/sae"; +import sponsors__smartly from "./sponsors/smartly"; +import sponsors__solita from "./sponsors/solita"; +import sponsors__stickermule from "./sponsors/stickermule"; +import sponsors__supermetrics from "./sponsors/supermetrics"; +import sponsors__survivejs from "./sponsors/survivejs"; +import sponsors__techEvents from "./sponsors/tech-events"; +import sponsors__toddle from "./sponsors/toddle"; +import sponsors__toska from "./sponsors/toska"; +import sponsors__twir from "./sponsors/twir"; +import sponsors__typeof from "./sponsors/typeof"; +import sponsors__upcloud from "./sponsors/upcloud"; +import sponsors__utopia from "./sponsors/utopia"; +import sponsors__valamis from "./sponsors/valamis"; +import sponsors__verkkokauppa from "./sponsors/verkkokauppa"; +import sponsors__vihat from "./sponsors/vihat"; +import sponsors__vincit from "./sponsors/vincit"; +import sponsors__webexpo from "./sponsors/webexpo"; +import sponsors__wonna from "./sponsors/wonna"; +import sponsors__wunder from "./sponsors/wunder"; +import sponsors__wunderdog from "./sponsors/wunderdog"; +import sponsors__yglfkyiv from "./sponsors/yglfkyiv"; +import sponsors__yle from "./sponsors/yle"; +import sponsors__zapier from "./sponsors/zapier"; +import sponsors__zeroplusx from "./sponsors/zeroplusx"; +import sponsors__zurichjs from "./sponsors/zurichjs"; + +export const sponsors = { + a11Yclub: sponsors__a11Yclub, + agentconf: sponsors__agentconf, + alma: sponsors__alma, + amazon: sponsors__amazon, + apidays: sponsors__apidays, + apiops: sponsors__apiops, + apollo: sponsors__apollo, + backscreen: sponsors__backscreen, + bangalore: sponsors__bangalore, + bejs: sponsors__bejs, + brella: sponsors__brella, + cai: sponsors__cai, + codento: sponsors__codento, + columbiaroad: sponsors__columbiaroad, + cybercom: sponsors__cybercom, + designsystemslondon: sponsors__designsystemslondon, + digia: sponsors__digia, + digitalExpert: sponsors__digitalExpert, + divriots: sponsors__divriots, + dna325: sponsors__dna325, + dojs: sponsors__dojs, + dynatrace: sponsors__dynatrace, + elisa: sponsors__elisa, + evitec: sponsors__evitec, + fb: sponsors__fb, + formidable: sponsors__formidable, + frankenjs: sponsors__frankenjs, + friikit: sponsors__friikit, + futurice: sponsors__futurice, + gatsby: sponsors__gatsby, + geekle: sponsors__geekle, + geniem: sponsors__geniem, + ginetta: sponsors__ginetta, + glorium: sponsors__glorium, + gofore: sponsors__gofore, + gqlhongkong: sponsors__gqlhongkong, + graphqlFinland: sponsors__graphqlFinland, + grusp: sponsors__grusp, + haagahelia: sponsors__haagahelia, + halfstack: sponsors__halfstack, + hasura: sponsors__hasura, + hbc: sponsors__hbc, + honeypot: sponsors__honeypot, + huuva: sponsors__huuva, + jscamp: sponsors__jscamp, + jsconfbp: sponsors__jsconfbp, + jsday: sponsors__jsday, + jskongress: sponsors__jskongress, + jsn: sponsors__jsn, + knowit: sponsors__knowit, + kongres: sponsors__kongres, + koodiasuomesta: sponsors__koodiasuomesta, + loihdefactor: sponsors__loihdefactor, + meiko: sponsors__meiko, + monolisa: sponsors__monolisa, + moonhighway: sponsors__moonhighway, + motley: sponsors__motley, + netum: sponsors__netum, + nightingale: sponsors__nightingale, + nitor: sponsors__nitor, + nodecongress: sponsors__nodecongress, + ohjelmistofriikit: sponsors__ohjelmistofriikit, + osaango: sponsors__osaango, + postgraphile: sponsors__postgraphile, + prisma: sponsors__prisma, + quentic: sponsors__quentic, + reactFinland: sponsors__reactFinland, + reactalicante: sponsors__reactalicante, + reactbrussels: sponsors__reactbrussels, + reactdayberlin: sponsors__reactdayberlin, + reactfest: sponsors__reactfest, + reactindia: sponsors__reactindia, + reactjsday: sponsors__reactjsday, + reactjsgirls: sponsors__reactjsgirls, + reactnativeeu: sponsors__reactnativeeu, + reactnewyork: sponsors__reactnewyork, + reactnorway: sponsors__reactnorway, + reactparis: sponsors__reactparis, + reactsummit: sponsors__reactsummit, + reactweek: sponsors__reactweek, + reaktor: sponsors__reaktor, + reasonconf: sponsors__reasonconf, + relex: sponsors__relex, + rlc: sponsors__rlc, + rohea: sponsors__rohea, + rp: sponsors__rp, + sae: sponsors__sae, + smartly: sponsors__smartly, + solita: sponsors__solita, + stickermule: sponsors__stickermule, + supermetrics: sponsors__supermetrics, + survivejs: sponsors__survivejs, + techEvents: sponsors__techEvents, + toddle: sponsors__toddle, + toska: sponsors__toska, + twir: sponsors__twir, + typeof: sponsors__typeof, + upcloud: sponsors__upcloud, + utopia: sponsors__utopia, + valamis: sponsors__valamis, + verkkokauppa: sponsors__verkkokauppa, + vihat: sponsors__vihat, + vincit: sponsors__vincit, + webexpo: sponsors__webexpo, + wonna: sponsors__wonna, + wunder: sponsors__wunder, + wunderdog: sponsors__wunderdog, + yglfkyiv: sponsors__yglfkyiv, + yle: sponsors__yle, + zapier: sponsors__zapier, + zeroplusx: sponsors__zeroplusx, + zurichjs: sponsors__zurichjs, +} as const; diff --git a/content/graphql-finland-2018/index.ts b/content/graphql-finland-2018/index.ts index 7771037b..b5007233 100644 --- a/content/graphql-finland-2018/index.ts +++ b/content/graphql-finland-2018/index.ts @@ -1,7 +1,7 @@ import { Conference } from "../../server/schema/Conference"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import schedules from "./schedules"; const partners = [ diff --git a/content/graphql-finland-2018/schedules.ts b/content/graphql-finland-2018/schedules.ts index 3dc26ac1..ece7b55f 100644 --- a/content/graphql-finland-2018/schedules.ts +++ b/content/graphql-finland-2018/schedules.ts @@ -1,7 +1,9 @@ import { Schedule } from "../../server/schema/Schedule"; import { SessionType } from "../../server/schema/Session"; -import * as talks from "./talks"; -import * as allWorkshops from "./workshops"; +import { + graphqlFinland2018Talks as talks, + graphqlFinland2018Workshops as allWorkshops, +} from "../generated"; const workshops = Object.values(allWorkshops); diff --git a/content/graphql-finland-2018/talks/.index-modules b/content/graphql-finland-2018/talks/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/graphql-finland-2018/talks/index.ts b/content/graphql-finland-2018/talks/index.ts deleted file mode 100644 index 64660501..00000000 --- a/content/graphql-finland-2018/talks/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -export { default as adamMiskiewicz } from "./adam-miskiewicz"; -export { default as andrewRhyne } from "./andrew-rhyne"; -export { default as benjieGillam } from "./benjie-gillam"; -export { default as carolynStransky } from "./carolyn-stransky"; -export { default as christofferNiska } from "./christoffer-niska"; -export { default as danSchafer } from "./dan-schafer"; -export { default as ellieDay } from "./ellie-day"; -export { default as eloyDuran } from "./eloy-duran"; -export { default as glennReyes } from "./glenn-reyes"; -export { default as helenZhukova } from "./helen-zhukova"; -export { default as ivanGoncharov } from "./ivan-goncharov"; -export { default as jimmyJia } from "./jimmy-jia"; -export { default as johannesSchickling } from "./johannes-schickling"; -export { default as kadiKraman } from "./kadi-kraman"; -export { default as nikGraf } from "./nik-graf"; -export { default as tanmaiGopal } from "./tanmai-gopal"; diff --git a/content/graphql-finland-2018/workshops/.index-modules b/content/graphql-finland-2018/workshops/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/graphql-finland-2018/workshops/index.ts b/content/graphql-finland-2018/workshops/index.ts deleted file mode 100644 index b7644520..00000000 --- a/content/graphql-finland-2018/workshops/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { default as juhoWorkshop } from "./juho-workshop"; -export { default as marcWorkshop } from "./marc-workshop"; -export { default as mikhailWorkshop } from "./mikhail-workshop"; -export { default as nikWorkshop } from "./nik-workshop"; diff --git a/content/graphql-finland-2018/workshops/juho-workshop.ts b/content/graphql-finland-2018/workshops/juho-workshop.ts index f2c3ccf3..db7d8efd 100644 --- a/content/graphql-finland-2018/workshops/juho-workshop.ts +++ b/content/graphql-finland-2018/workshops/juho-workshop.ts @@ -1,6 +1,6 @@ import Keyword from "../../../server/schema/keywords"; import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../locations"; +import { paasitorni } from "../../generated"; import juho from "../../people/juho-vepsalainen"; const workshop: Session = { diff --git a/content/graphql-finland-2018/workshops/marc-workshop.ts b/content/graphql-finland-2018/workshops/marc-workshop.ts index 2317ea90..340c26f2 100644 --- a/content/graphql-finland-2018/workshops/marc-workshop.ts +++ b/content/graphql-finland-2018/workshops/marc-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; import Keyword from "../../../server/schema/keywords"; -import { paasitorni } from "../../locations"; +import { paasitorni } from "../../generated"; import marc from "../../people/marc-andre-giroux"; const workshop: Session = { diff --git a/content/graphql-finland-2018/workshops/mikhail-workshop.ts b/content/graphql-finland-2018/workshops/mikhail-workshop.ts index 98fd8faf..bb5e5519 100644 --- a/content/graphql-finland-2018/workshops/mikhail-workshop.ts +++ b/content/graphql-finland-2018/workshops/mikhail-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; import Keyword from "../../../server/schema/keywords"; -import { paasitorni } from "../../locations"; +import { paasitorni } from "../../generated"; import mikhail from "../../people/mikhail-novikov"; const workshop: Session = { diff --git a/content/graphql-finland-2018/workshops/nik-workshop.ts b/content/graphql-finland-2018/workshops/nik-workshop.ts index 18c061c3..1ced1fb5 100644 --- a/content/graphql-finland-2018/workshops/nik-workshop.ts +++ b/content/graphql-finland-2018/workshops/nik-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; import Keyword from "../../../server/schema/keywords"; -import { paasitorni } from "../../locations"; +import { paasitorni } from "../../generated"; import nik from "../../people/nik-graf"; const workshop: Session = { diff --git a/content/graphql-finland-2020/index.ts b/content/graphql-finland-2020/index.ts index ac8e12e4..93e6de70 100644 --- a/content/graphql-finland-2020/index.ts +++ b/content/graphql-finland-2020/index.ts @@ -1,7 +1,7 @@ import { Conference } from "../../server/schema/Conference"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import schedules from "./schedules"; const partners = [ diff --git a/content/graphql-finland-2020/schedules.ts b/content/graphql-finland-2020/schedules.ts index 315d7af6..94b45dcf 100644 --- a/content/graphql-finland-2020/schedules.ts +++ b/content/graphql-finland-2020/schedules.ts @@ -1,9 +1,4 @@ import { Schedule } from "../../server/schema/Schedule"; -/*import { SessionType } from "../../server/schema/Session"; -import * as talks from "./talks"; -import * as allWorkshops from "./workshops";*/ - -// const workshops = Object.values(allWorkshops); const workshopDay: Schedule = { day: "2020-09-24", diff --git a/content/halfstack-vienna-2019/index.ts b/content/halfstack-vienna-2019/index.ts index 12dae79f..4ebd6ebe 100644 --- a/content/halfstack-vienna-2019/index.ts +++ b/content/halfstack-vienna-2019/index.ts @@ -1,8 +1,8 @@ import { Conference } from "../../server/schema/Conference"; import { Schedule } from "../../server/schema/Schedule"; -import * as locations from "../locations"; -// import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +// import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; const sponsors = []; const partners = []; diff --git a/content/locations/.index-modules b/content/locations/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/locations/index.ts b/content/locations/index.ts deleted file mode 100644 index 71dd04ba..00000000 --- a/content/locations/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -export { default as alma } from "./alma"; -export { default as amanda } from "./amanda"; -export { default as ankersaal } from "./ankersaal"; -export { default as arkade } from "./arkade"; -export { default as babylonHelsinki } from "./babylon-helsinki"; -export { default as columbiaroad } from "./columbiaroad"; -export { default as dipoli } from "./dipoli"; -export { default as elisaAppelsiini } from "./elisa-appelsiini"; -export { default as futurice } from "./futurice"; -export { default as gofore } from "./gofore"; -export { default as hbc } from "./hbc"; -export { default as internet } from "./internet"; -export { default as loihdefactor } from "./loihdefactor"; -export { default as nitor } from "./nitor"; -export { default as paasitorni } from "./paasitorni"; -export { default as poliisienkesakoti } from "./poliisienkesakoti"; -export { default as porssitalo } from "./porssitalo"; -export { default as rantasauna } from "./rantasauna"; -export { default as rooftopmiami } from "./rooftopmiami"; -export { default as saeWien } from "./sae-wien"; -export { default as tiivistamo } from "./tiivistamo"; -export { default as tuas } from "./tuas"; -export { default as upcloud } from "./upcloud"; -export { default as valkoinenSali } from "./valkoinen-sali"; -export { default as wuWien } from "./wu-wien"; -export { default as yle } from "./yle"; diff --git a/content/people/.index-modules b/content/people/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/people/index.ts b/content/people/index.ts deleted file mode 100644 index f8e76db8..00000000 --- a/content/people/index.ts +++ /dev/null @@ -1,220 +0,0 @@ -export { default as aapeli } from "./aapeli"; -export { default as aarniKoskela } from "./aarni-koskela"; -export { default as adamMiskiewicz } from "./adam-miskiewicz"; -export { default as aleksandra } from "./aleksandra"; -export { default as aleksiPousar } from "./aleksi-pousar"; -export { default as alexBooker } from "./alex-booker"; -export { default as anastasiia } from "./anastasiia"; -export { default as andreas } from "./andreas"; -export { default as andrei } from "./andrei"; -export { default as andrewRhyne } from "./andrew-rhyne"; -export { default as andreyG } from "./andrey-g"; -export { default as andreyOkonetchnikov } from "./andrey-okonetchnikov"; -export { default as annaDoubkova } from "./anna-doubkova"; -export { default as ante } from "./ante"; -export { default as artemSapegin } from "./artem-sapegin"; -export { default as artemZakharchenko } from "./artem-zakharchenko"; -export { default as aurora } from "./aurora"; -export { default as barry } from "./barry"; -export { default as ben } from "./ben"; -export { default as benjieGillam } from "./benjie-gillam"; -export { default as bodil } from "./bodil"; -export { default as bohdanLiashenko } from "./bohdan-liashenko"; -export { default as brent } from "./brent"; -export { default as brunoLourenco } from "./bruno-lourenco"; -export { default as calin } from "./calin"; -export { default as calinb } from "./calinb"; -export { default as carolynStransky } from "./carolyn-stransky"; -export { default as charlie } from "./charlie"; -export { default as christianAlfoni } from "./christian-alfoni"; -export { default as christofferNiska } from "./christoffer-niska"; -export { default as danSchafer } from "./dan-schafer"; -export { default as daniel } from "./daniel"; -export { default as danielE } from "./daniel-e"; -export { default as danielM } from "./daniel-m"; -export { default as dario } from "./dario"; -export { default as david } from "./david"; -export { default as davidC } from "./david-c"; -export { default as davidKhourshid } from "./david-khourshid"; -export { default as devlin } from "./devlin"; -export { default as diegoHaz } from "./diego-haz"; -export { default as dmitriy } from "./dmitriy"; -export { default as doug } from "./doug"; -export { default as dragos } from "./dragos"; -export { default as dustinSchau } from "./dustin-schau"; -export { default as eemeliAro } from "./eemeli-aro"; -export { default as eevis } from "./eevis"; -export { default as eli } from "./eli"; -export { default as elisa } from "./elisa"; -export { default as ellieDay } from "./ellie-day"; -export { default as eloyDuran } from "./eloy-duran"; -export { default as emilia } from "./emilia"; -export { default as emma } from "./emma"; -export { default as emmi } from "./emmi"; -export { default as erikRasmussen } from "./erik-rasmussen"; -export { default as esaMatti } from "./esa-matti"; -export { default as ewa } from "./ewa"; -export { default as facundo } from "./facundo"; -export { default as farzadYz } from "./farzad-yz"; -export { default as federico } from "./federico"; -export { default as felix } from "./felix"; -export { default as francois } from "./francois"; -export { default as gantLaborde } from "./gant-laborde"; -export { default as georgeMandis } from "./george-mandis"; -export { default as georgios } from "./georgios"; -export { default as gleb } from "./gleb"; -export { default as glennReyes } from "./glenn-reyes"; -export { default as harriMaatta } from "./harri-maatta"; -export { default as helenZhukova } from "./helen-zhukova"; -export { default as henrik } from "./henrik"; -export { default as isaSilveira } from "./isa-silveira"; -export { default as ivanGoncharov } from "./ivan-goncharov"; -export { default as ivanOrlov } from "./ivan-orlov"; -export { default as jamonHolmgren } from "./jamon-holmgren"; -export { default as jan } from "./jan"; -export { default as janiEvakallio } from "./jani-evakallio"; -export { default as janne } from "./janne"; -export { default as jaredPalmer } from "./jared-palmer"; -export { default as jari } from "./jari"; -export { default as jasmin } from "./jasmin"; -export { default as jason } from "./jason"; -export { default as je } from "./je"; -export { default as jec } from "./jec"; -export { default as jen } from "./jen"; -export { default as jeremyWagner } from "./jeremy-wagner"; -export { default as jimmyJia } from "./jimmy-jia"; -export { default as jo } from "./jo"; -export { default as joe } from "./joe"; -export { default as johannesSchickling } from "./johannes-schickling"; -export { default as joniNevalainen } from "./joni-nevalainen"; -export { default as joonas } from "./joonas"; -export { default as joonasP } from "./joonas-p"; -export { default as juan } from "./juan"; -export { default as juhaLinnanen } from "./juha-linnanen"; -export { default as juhani } from "./juhani"; -export { default as juhis } from "./juhis"; -export { default as juhoLehtinen } from "./juho-lehtinen"; -export { default as juhoVepsalainen } from "./juho-vepsalainen"; -export { default as julien } from "./julien"; -export { default as juri } from "./juri"; -export { default as jussi } from "./jussi"; -export { default as kadiKraman } from "./kadi-kraman"; -export { default as kasiaJastrzebska } from "./kasia-jastrzebska"; -export { default as kenWheeler } from "./ken-wheeler"; -export { default as kenigboloMeyaStephen } from "./kenigbolo-meya-stephen"; -export { default as kennethSutherland } from "./kenneth-sutherland"; -export { default as kentCDodds } from "./kent-c-dodds"; -export { default as kevin } from "./kevin"; -export { default as kirsi } from "./kirsi"; -export { default as kristaJantti } from "./krista-jantti"; -export { default as kristopher } from "./kristopher"; -export { default as krutie } from "./krutie"; -export { default as lainey } from "./lainey"; -export { default as laura } from "./laura"; -export { default as lauraGonzalez } from "./laura-gonzalez"; -export { default as laurak } from "./laurak"; -export { default as laurao } from "./laurao"; -export { default as lauri } from "./lauri"; -export { default as liran } from "./liran"; -export { default as luca } from "./luca"; -export { default as lucaMatteis } from "./luca-matteis"; -export { default as lukas } from "./lukas"; -export { default as lukeJackson } from "./luke-jackson"; -export { default as m4Dz } from "./m4dz"; -export { default as maaretPyhajarvi } from "./maaret-pyhajarvi"; -export { default as madalyn } from "./madalyn"; -export { default as maggie } from "./maggie"; -export { default as manjula } from "./manjula"; -export { default as manuelMatuzovic } from "./manuel-matuzovic"; -export { default as marcAndreGiroux } from "./marc-andre-giroux"; -export { default as margarita } from "./margarita"; -export { default as marianna } from "./marianna"; -export { default as mario } from "./mario"; -export { default as mark } from "./mark"; -export { default as matias } from "./matias"; -export { default as matt } from "./matt"; -export { default as matteo } from "./matteo"; -export { default as matthew } from "./matthew"; -export { default as matthewM } from "./matthew-m"; -export { default as max } from "./max"; -export { default as michael } from "./michael"; -export { default as michalChudziak } from "./michal-chudziak"; -export { default as michelWeststrate } from "./michel-weststrate"; -export { default as mika } from "./mika"; -export { default as mikeBerman } from "./mike-berman"; -export { default as mikhailNovikov } from "./mikhail-novikov"; -export { default as milecia } from "./milecia"; -export { default as misko } from "./misko"; -export { default as mo } from "./mo"; -export { default as monicaLent } from "./monica-lent"; -export { default as naderDabit } from "./nader-dabit"; -export { default as naman } from "./naman"; -export { default as nasim } from "./nasim"; -export { default as nataliaTepluhina } from "./natalia-tepluhina"; -export { default as nicola } from "./nicola"; -export { default as nidhi } from "./nidhi"; -export { default as nikGraf } from "./nik-graf"; -export { default as niklas } from "./niklas"; -export { default as norbert } from "./norbert"; -export { default as nur } from "./nur"; -export { default as ohans } from "./ohans"; -export { default as olavi } from "./olavi"; -export { default as pasi } from "./pasi"; -export { default as patrickEcker } from "./patrick-ecker"; -export { default as patrickHund } from "./patrick-hund"; -export { default as paul } from "./paul"; -export { default as pekka } from "./pekka"; -export { default as pete } from "./pete"; -export { default as rachelNabors } from "./rachel-nabors"; -export { default as rami } from "./rami"; -export { default as ramona } from "./ramona"; -export { default as rashmi } from "./rashmi"; -export { default as rebeccaHill } from "./rebecca-hill"; -export { default as rickHanlon } from "./rick-hanlon"; -export { default as rob } from "./rob"; -export { default as roosa } from "./roosa"; -export { default as rotemMizrachiMeidan } from "./rotem-mizrachi-meidan"; -export { default as ryan } from "./ryan"; -export { default as saku } from "./saku"; -export { default as salla } from "./salla"; -export { default as samuel } from "./samuel"; -export { default as samuliHakoniemi } from "./samuli-hakoniemi"; -export { default as saraVieira } from "./sara-vieira"; -export { default as satu } from "./satu"; -export { default as sebastian } from "./sebastian"; -export { default as shane } from "./shane"; -export { default as shayKeinan } from "./shay-keinan"; -export { default as shodipo } from "./shodipo"; -export { default as siaKaramalegos } from "./sia-karamalegos"; -export { default as stephanie } from "./stephanie"; -export { default as steve } from "./steve"; -export { default as sunil } from "./sunil"; -export { default as svenSauleau } from "./sven-sauleau"; -export { default as taelurAlexis } from "./taelur-alexis"; -export { default as tanja } from "./tanja"; -export { default as tanmaiGopal } from "./tanmai-gopal"; -export { default as tejasKumar } from "./tejas-kumar"; -export { default as teroParviainen } from "./tero-parviainen"; -export { default as thaisSantos } from "./thais-santos"; -export { default as thomas } from "./thomas"; -export { default as tobiasTimm } from "./tobias-timm"; -export { default as tomasKonrady } from "./tomas-konrady"; -export { default as toniRistola } from "./toni-ristola"; -export { default as tonyEnnis } from "./tony-ennis"; -export { default as tonyKovanen } from "./tony-kovanen"; -export { default as travis } from "./travis"; -export { default as tuuliTiilikainen } from "./tuuli-tiilikainen"; -export { default as uj } from "./uj"; -export { default as una } from "./una"; -export { default as varyaStepanova } from "./varya-stepanova"; -export { default as villeImmonen } from "./ville-immonen"; -export { default as villePelkonen } from "./ville-pelkonen"; -export { default as vismit } from "./vismit"; -export { default as vivekNayyar } from "./vivek-nayyar"; -export { default as woody } from "./woody"; -export { default as xiaoru } from "./xiaoru"; -export { default as yan } from "./yan"; -export { default as yang } from "./yang"; -export { default as yoav } from "./yoav"; -export { default as yulia } from "./yulia"; -export { default as zak } from "./zak"; diff --git a/content/react-finland-2018/index.ts b/content/react-finland-2018/index.ts index 83339347..f04e48c7 100644 --- a/content/react-finland-2018/index.ts +++ b/content/react-finland-2018/index.ts @@ -1,7 +1,7 @@ import { Conference } from "../../server/schema/Conference"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import schedules from "./schedules"; const partners = [ diff --git a/content/react-finland-2018/schedules.ts b/content/react-finland-2018/schedules.ts index 959c90c9..dd7cf70b 100644 --- a/content/react-finland-2018/schedules.ts +++ b/content/react-finland-2018/schedules.ts @@ -1,7 +1,9 @@ import { Schedule } from "../../server/schema/Schedule"; import { SessionType } from "../../server/schema/Session"; -import * as talks from "./talks"; -import * as workshops from "./workshops"; +import { + reactFinland2018Talks as talks, + reactFinland2018Workshops as workshops, +} from "../generated"; const workshopDay: Schedule = { day: "2018-04-24", diff --git a/content/react-finland-2018/talks/.index-modules b/content/react-finland-2018/talks/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/react-finland-2018/talks/index.ts b/content/react-finland-2018/talks/index.ts deleted file mode 100644 index 27640a30..00000000 --- a/content/react-finland-2018/talks/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -export { default as andreyOkonetchnikov } from "./andrey-okonetchnikov"; -export { default as christianAlfoni } from "./christian-alfoni"; -export { default as davidKhourshid } from "./david-khourshid"; -export { default as eemeliAro } from "./eemeli-aro"; -export { default as eemeliAro2 } from "./eemeli-aro-2"; -export { default as gantLaborde } from "./gant-laborde"; -export { default as janiEvakallio } from "./jani-evakallio"; -export { default as juhoVepsalainen } from "./juho-vepsalainen"; -export { default as kasiaJastrzebska } from "./kasia-jastrzebska"; -export { default as kenWheeler } from "./ken-wheeler"; -export { default as michalChudziak } from "./michal-chudziak"; -export { default as michelWeststrate } from "./michel-weststrate"; -export { default as nikGraf } from "./nik-graf"; -export { default as patrickHund } from "./patrick-hund"; -export { default as patrickStapfer } from "./patrick-stapfer"; -export { default as rotemMizrachiMeidan } from "./rotem-mizrachi-meidan"; -export { default as saraVieira } from "./sara-vieira"; -export { default as shayKeinan } from "./shay-keinan"; -export { default as siaKaramalegos } from "./sia-karamalegos"; -export { default as svenSauleau } from "./sven-sauleau"; -export { default as toniRistola } from "./toni-ristola"; -export { default as varyaStepanova } from "./varya-stepanova"; diff --git a/content/react-finland-2018/workshops/.index-modules b/content/react-finland-2018/workshops/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/react-finland-2018/workshops/andrey-and-artem-workshop.ts b/content/react-finland-2018/workshops/andrey-and-artem-workshop.ts index c6f8e23a..82387bce 100644 --- a/content/react-finland-2018/workshops/andrey-and-artem-workshop.ts +++ b/content/react-finland-2018/workshops/andrey-and-artem-workshop.ts @@ -1,6 +1,6 @@ import Keyword from "../../../server/schema/keywords"; import { Session, SessionType } from "../../../server/schema/Session"; -import { valkoinenSali } from "../../locations"; +import { valkoinenSali } from "../../generated"; import andrey from "../../people/andrey-okonetchnikov"; import artem from "../../people/artem-sapegin"; diff --git a/content/react-finland-2018/workshops/david-khourshid-workshop.ts b/content/react-finland-2018/workshops/david-khourshid-workshop.ts index 7f4d041b..73c0869d 100644 --- a/content/react-finland-2018/workshops/david-khourshid-workshop.ts +++ b/content/react-finland-2018/workshops/david-khourshid-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { elisaAppelsiini } from "../../locations"; +import { elisaAppelsiini } from "../../generated"; import david from "../../people/david-khourshid"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/gant-laborde-workshop.ts b/content/react-finland-2018/workshops/gant-laborde-workshop.ts index dfe3532c..aa664190 100644 --- a/content/react-finland-2018/workshops/gant-laborde-workshop.ts +++ b/content/react-finland-2018/workshops/gant-laborde-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { valkoinenSali } from "../../locations"; +import { valkoinenSali } from "../../generated"; import gant from "../../people/gant-laborde"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/index.ts b/content/react-finland-2018/workshops/index.ts deleted file mode 100644 index 287c3fb0..00000000 --- a/content/react-finland-2018/workshops/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -export { default as andreyAndArtemWorkshop } from "./andrey-and-artem-workshop"; -export { default as davidKhourshidWorkshop } from "./david-khourshid-workshop"; -export { default as gantLabordeWorkshop } from "./gant-laborde-workshop"; -export { default as juhoVepsalainenWorkshop } from "./juho-vepsalainen-workshop"; -export { default as michelWeststrateWorkshop } from "./michel-weststrate-workshop"; -export { default as patrickAndNikWorkshop } from "./patrick-and-nik-workshop"; -export { default as rotemMizrachiMeidanWorkshop } from "./rotem-mizrachi-meidan-workshop"; -export { default as saraVieiraWorkshop } from "./sara-vieira-workshop"; -export { default as siaKaramalegosWorkshop } from "./sia-karamalegos-workshop"; -export { default as svenSauleauWorkshop } from "./sven-sauleau-workshop"; diff --git a/content/react-finland-2018/workshops/juho-vepsalainen-workshop.ts b/content/react-finland-2018/workshops/juho-vepsalainen-workshop.ts index 349bbfe0..9854708a 100644 --- a/content/react-finland-2018/workshops/juho-vepsalainen-workshop.ts +++ b/content/react-finland-2018/workshops/juho-vepsalainen-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { elisaAppelsiini } from "../../locations"; +import { elisaAppelsiini } from "../../generated"; import juho from "../../people/juho-vepsalainen"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/michel-weststrate-workshop.ts b/content/react-finland-2018/workshops/michel-weststrate-workshop.ts index d4627aa4..5f9d4317 100644 --- a/content/react-finland-2018/workshops/michel-weststrate-workshop.ts +++ b/content/react-finland-2018/workshops/michel-weststrate-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { valkoinenSali } from "../../locations"; +import { valkoinenSali } from "../../generated"; import michel from "../../people/michel-weststrate"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/patrick-and-nik-workshop.ts b/content/react-finland-2018/workshops/patrick-and-nik-workshop.ts index 4d89cbe2..a9540070 100644 --- a/content/react-finland-2018/workshops/patrick-and-nik-workshop.ts +++ b/content/react-finland-2018/workshops/patrick-and-nik-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { elisaAppelsiini } from "../../locations"; +import { elisaAppelsiini } from "../../generated"; import nik from "../../people/nik-graf"; import patrick from "../../people/patrick-ecker"; diff --git a/content/react-finland-2018/workshops/rotem-mizrachi-meidan-workshop.ts b/content/react-finland-2018/workshops/rotem-mizrachi-meidan-workshop.ts index d4e90ef4..24707ca1 100644 --- a/content/react-finland-2018/workshops/rotem-mizrachi-meidan-workshop.ts +++ b/content/react-finland-2018/workshops/rotem-mizrachi-meidan-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { valkoinenSali } from "../../locations"; +import { valkoinenSali } from "../../generated"; import rotem from "../../people/rotem-mizrachi-meidan"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/sara-vieira-workshop.ts b/content/react-finland-2018/workshops/sara-vieira-workshop.ts index 59ad728f..bfc0b3c3 100644 --- a/content/react-finland-2018/workshops/sara-vieira-workshop.ts +++ b/content/react-finland-2018/workshops/sara-vieira-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { valkoinenSali } from "../../locations"; +import { valkoinenSali } from "../../generated"; import sara from "../../people/sara-vieira"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/sia-karamalegos-workshop.ts b/content/react-finland-2018/workshops/sia-karamalegos-workshop.ts index 77583aa6..61db409b 100644 --- a/content/react-finland-2018/workshops/sia-karamalegos-workshop.ts +++ b/content/react-finland-2018/workshops/sia-karamalegos-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { elisaAppelsiini } from "../../locations"; +import { elisaAppelsiini } from "../../generated"; import sia from "../../people/sia-karamalegos"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/sven-sauleau-workshop.ts b/content/react-finland-2018/workshops/sven-sauleau-workshop.ts index b29cee97..c9c5bd8b 100644 --- a/content/react-finland-2018/workshops/sven-sauleau-workshop.ts +++ b/content/react-finland-2018/workshops/sven-sauleau-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { elisaAppelsiini } from "../../locations"; +import { elisaAppelsiini } from "../../generated"; import sven from "../../people/sven-sauleau"; const workshop: Session = { diff --git a/content/react-finland-2019/index.ts b/content/react-finland-2019/index.ts index 208b9b6f..6aaf52ab 100644 --- a/content/react-finland-2019/index.ts +++ b/content/react-finland-2019/index.ts @@ -1,7 +1,7 @@ import { Conference } from "../../server/schema/Conference"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import schedules from "./schedules"; const partners = [ diff --git a/content/react-finland-2019/schedules.ts b/content/react-finland-2019/schedules.ts index c5e544aa..bbf20cea 100644 --- a/content/react-finland-2019/schedules.ts +++ b/content/react-finland-2019/schedules.ts @@ -1,9 +1,11 @@ import { Schedule } from "../../server/schema/Schedule"; import { SessionType } from "../../server/schema/Session"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as talks from "./talks"; -import * as allWorkshops from "./workshops"; +import { + locations, + people, + reactFinland2019Talks as talks, + reactFinland2019Workshops as allWorkshops, +} from "../generated"; const workshops = Object.values(allWorkshops); diff --git a/content/react-finland-2019/talks/.index-modules b/content/react-finland-2019/talks/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/react-finland-2019/talks/index.ts b/content/react-finland-2019/talks/index.ts deleted file mode 100644 index 8722e196..00000000 --- a/content/react-finland-2019/talks/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -export { default as andreyOkonetchnikov } from "./andrey-okonetchnikov"; -export { default as annaDoubkova } from "./anna-doubkova"; -export { default as artemSapegin } from "./artem-sapegin"; -export { default as artemZakharchenko } from "./artem-zakharchenko"; -export { default as bohdanLiashenko } from "./bohdan-liashenko"; -export { default as brunoLourenco } from "./bruno-lourenco"; -export { default as carolynStransky } from "./carolyn-stransky"; -export { default as christofferNiska } from "./christoffer-niska"; -export { default as davidKhourshid } from "./david-khourshid"; -export { default as dustinSchau } from "./dustin-schau"; -export { default as farzadYz } from "./farzad-yz"; -export { default as glennReyes } from "./glenn-reyes"; -export { default as jamonHolmgren } from "./jamon-holmgren"; -export { default as juhaLinnanen } from "./juha-linnanen"; -export { default as kadiKraman } from "./kadi-kraman"; -export { default as lucaMatteis } from "./luca-matteis"; -export { default as maaretPyhajarvi } from "./maaret-pyhajarvi"; -export { default as manuelMatuzovic } from "./manuel-matuzovic"; -export { default as michelWeststrate } from "./michel-weststrate"; -export { default as monicaLent } from "./monica-lent"; -export { default as nikGraf } from "./nik-graf"; -export { default as rickHanlon } from "./rick-hanlon"; -export { default as svenSauleau } from "./sven-sauleau"; -export { default as tejasKumar } from "./tejas-kumar"; -export { default as tomasKonrady } from "./tomas-konrady"; -export { default as varyaStepanova } from "./varya-stepanova"; -export { default as villeImmonen } from "./ville-immonen"; diff --git a/content/react-finland-2019/workshops/.index-modules b/content/react-finland-2019/workshops/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/react-finland-2019/workshops/andrey-and-artem-workshop.ts b/content/react-finland-2019/workshops/andrey-and-artem-workshop.ts index 0bc8ed45..9424425d 100644 --- a/content/react-finland-2019/workshops/andrey-and-artem-workshop.ts +++ b/content/react-finland-2019/workshops/andrey-and-artem-workshop.ts @@ -1,6 +1,6 @@ import Keyword from "../../../server/schema/keywords"; import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../locations"; +import { paasitorni } from "../../generated"; import andrey from "../../people/andrey-okonetchnikov"; import artem from "../../people/artem-sapegin"; diff --git a/content/react-finland-2019/workshops/david-khourshid-workshop.ts b/content/react-finland-2019/workshops/david-khourshid-workshop.ts index 1fe287df..4a47fd58 100644 --- a/content/react-finland-2019/workshops/david-khourshid-workshop.ts +++ b/content/react-finland-2019/workshops/david-khourshid-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../locations"; -import { davidKhourshid } from "../../people"; +import { paasitorni } from "../../generated"; +import { davidKhourshid } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2019/workshops/glenn-reyes-workshop.ts b/content/react-finland-2019/workshops/glenn-reyes-workshop.ts index 0474676d..cd33a202 100644 --- a/content/react-finland-2019/workshops/glenn-reyes-workshop.ts +++ b/content/react-finland-2019/workshops/glenn-reyes-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../locations"; -import { glennReyes } from "../../people"; +import { paasitorni } from "../../generated"; +import { glennReyes } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2019/workshops/index.ts b/content/react-finland-2019/workshops/index.ts deleted file mode 100644 index 0d612ed1..00000000 --- a/content/react-finland-2019/workshops/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { default as andreyAndArtemWorkshop } from "./andrey-and-artem-workshop"; -export { default as davidKhourshidWorkshop } from "./david-khourshid-workshop"; -export { default as glennReyesWorkshop } from "./glenn-reyes-workshop"; -export { default as michelWorkshop } from "./michel-workshop"; -export { default as nikWorkshop } from "./nik-workshop"; -export { default as performanceWorkshop } from "./performance-workshop"; diff --git a/content/react-finland-2019/workshops/michel-workshop.ts b/content/react-finland-2019/workshops/michel-workshop.ts index 3cf5a451..8e13cf66 100644 --- a/content/react-finland-2019/workshops/michel-workshop.ts +++ b/content/react-finland-2019/workshops/michel-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../locations"; -import { michelWeststrate } from "../../people"; +import { paasitorni } from "../../generated"; +import { michelWeststrate } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2019/workshops/nik-workshop.ts b/content/react-finland-2019/workshops/nik-workshop.ts index d12de98f..01473620 100644 --- a/content/react-finland-2019/workshops/nik-workshop.ts +++ b/content/react-finland-2019/workshops/nik-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../locations"; -import { nikGraf } from "../../people"; +import { paasitorni } from "../../generated"; +import { nikGraf } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2019/workshops/performance-workshop.ts b/content/react-finland-2019/workshops/performance-workshop.ts index 7aa6e97a..263d5dfb 100644 --- a/content/react-finland-2019/workshops/performance-workshop.ts +++ b/content/react-finland-2019/workshops/performance-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../locations"; -import { saraVieira } from "../../people"; +import { paasitorni } from "../../generated"; +import { saraVieira } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/index.ts b/content/react-finland-2020/index.ts index be27da55..ff4aefd9 100644 --- a/content/react-finland-2020/index.ts +++ b/content/react-finland-2020/index.ts @@ -1,7 +1,7 @@ import { Conference } from "../../server/schema/Conference"; -// import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +// import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import schedules from "./schedules"; const partners = [ diff --git a/content/react-finland-2020/schedules.ts b/content/react-finland-2020/schedules.ts index a8c6e830..084dcc74 100644 --- a/content/react-finland-2020/schedules.ts +++ b/content/react-finland-2020/schedules.ts @@ -1,7 +1,7 @@ import { Schedule } from "../../server/schema/Schedule"; // import { SessionType } from "../../server/schema/Session"; -import * as locations from "../locations"; -// import * as people from "../people"; +import { locations } from "../generated"; +// import { people } from "../generated"; /* const mc = people.juhoVepsalainen; diff --git a/content/react-finland-2020/talks/.index-modules b/content/react-finland-2020/talks/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/react-finland-2020/talks/index.ts b/content/react-finland-2020/talks/index.ts deleted file mode 100644 index 57e699cc..00000000 --- a/content/react-finland-2020/talks/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -export { default as brent } from "./brent"; -export { default as davidKhourshid } from "./david-khourshid"; -export { default as eli } from "./eli"; -export { default as emma } from "./emma"; -export { default as esaMatti } from "./esa-matti"; -export { default as farzadYz } from "./farzad-yz"; -export { default as isaSilveira } from "./isa-silveira"; -export { default as ivanOrlov } from "./ivan-orlov"; -export { default as jaredPalmer } from "./jared-palmer"; -export { default as jeremyWagner } from "./jeremy-wagner"; -export { default as kenigboloMeyaStephen } from "./kenigbolo-meya-stephen"; -export { default as kennethSutherland } from "./kenneth-sutherland"; -export { default as kentCDodds } from "./kent-c-dodds"; -export { default as lauraGonzalez } from "./laura-gonzalez"; -export { default as lauri } from "./lauri"; -export { default as madalyn } from "./madalyn"; -export { default as margarita } from "./margarita"; -export { default as naderDabit } from "./nader-dabit"; -export { default as nikGraf } from "./nik-graf"; -export { default as olavi } from "./olavi"; -export { default as rachelNabors } from "./rachel-nabors"; -export { default as rebeccaHill } from "./rebecca-hill"; -export { default as taelurAlexis } from "./taelur-alexis"; -export { default as tejasKumar } from "./tejas-kumar"; -export { default as tobiasTimm } from "./tobias-timm"; -export { default as villePelkonen } from "./ville-pelkonen"; -export { default as vivekNayyar } from "./vivek-nayyar"; -export { default as xiaoru } from "./xiaoru"; -export { default as yan } from "./yan"; diff --git a/content/react-finland-2020/workshops/.index-modules b/content/react-finland-2020/workshops/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/react-finland-2020/workshops/advanced-react.ts b/content/react-finland-2020/workshops/advanced-react.ts index 7691d027..15f3124f 100644 --- a/content/react-finland-2020/workshops/advanced-react.ts +++ b/content/react-finland-2020/workshops/advanced-react.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../locations"; -import { nikGraf } from "../../people"; +import { internet } from "../../generated"; +import { nikGraf } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/design-systems-101.ts b/content/react-finland-2020/workshops/design-systems-101.ts index a6f632b5..6e9ccd5a 100644 --- a/content/react-finland-2020/workshops/design-systems-101.ts +++ b/content/react-finland-2020/workshops/design-systems-101.ts @@ -1,6 +1,6 @@ import Keyword from "../../../server/schema/keywords"; import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../locations"; +import { internet } from "../../generated"; import andrey from "../../people/andrey-okonetchnikov"; import varya from "../../people/varya-stepanova"; diff --git a/content/react-finland-2020/workshops/design-systems.ts b/content/react-finland-2020/workshops/design-systems.ts index 777d2a84..39a241f7 100644 --- a/content/react-finland-2020/workshops/design-systems.ts +++ b/content/react-finland-2020/workshops/design-systems.ts @@ -1,6 +1,6 @@ import Keyword from "../../../server/schema/keywords"; import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../locations"; +import { internet } from "../../generated"; import andrey from "../../people/andrey-okonetchnikov"; const workshop: Session = { diff --git a/content/react-finland-2020/workshops/from-legacy-to-react.ts b/content/react-finland-2020/workshops/from-legacy-to-react.ts index 2519e390..5450bce0 100644 --- a/content/react-finland-2020/workshops/from-legacy-to-react.ts +++ b/content/react-finland-2020/workshops/from-legacy-to-react.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../locations"; -import { kenigboloMeyaStephen } from "../../people"; +import { internet } from "../../generated"; +import { kenigboloMeyaStephen } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/full-stack.ts b/content/react-finland-2020/workshops/full-stack.ts index d4364125..300f29fb 100644 --- a/content/react-finland-2020/workshops/full-stack.ts +++ b/content/react-finland-2020/workshops/full-stack.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../locations"; -import { naderDabit } from "../../people"; +import { internet } from "../../generated"; +import { naderDabit } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/index.ts b/content/react-finland-2020/workshops/index.ts deleted file mode 100644 index f06e3064..00000000 --- a/content/react-finland-2020/workshops/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export { default as advancedReact } from "./advanced-react"; -export { default as designSystems } from "./design-systems"; -export { default as designSystems101 } from "./design-systems-101"; -export { default as fromLegacyToReact } from "./from-legacy-to-react"; -export { default as fullStack } from "./full-stack"; -export { default as modernForms } from "./modern-forms"; -export { default as reactNative } from "./react-native"; -export { default as reactPerformance } from "./react-performance"; -export { default as resilientLibs } from "./resilient-libs"; -export { default as statecharts } from "./statecharts"; -export { default as testingReact } from "./testing-react"; diff --git a/content/react-finland-2020/workshops/modern-forms.ts b/content/react-finland-2020/workshops/modern-forms.ts index bfe2c272..a77d0192 100644 --- a/content/react-finland-2020/workshops/modern-forms.ts +++ b/content/react-finland-2020/workshops/modern-forms.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../locations"; -import { erikRasmussen } from "../../people"; +import { internet } from "../../generated"; +import { erikRasmussen } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/react-native.ts b/content/react-finland-2020/workshops/react-native.ts index ee0c2cab..e47b3b21 100644 --- a/content/react-finland-2020/workshops/react-native.ts +++ b/content/react-finland-2020/workshops/react-native.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../locations"; -import { juhaLinnanen, naderDabit } from "../../people"; +import { internet } from "../../generated"; +import { juhaLinnanen, naderDabit } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/react-performance.ts b/content/react-finland-2020/workshops/react-performance.ts index fb19e585..e3a0dc59 100644 --- a/content/react-finland-2020/workshops/react-performance.ts +++ b/content/react-finland-2020/workshops/react-performance.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../locations"; -import { kentCDodds } from "../../people"; +import { internet } from "../../generated"; +import { kentCDodds } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/resilient-libs.ts b/content/react-finland-2020/workshops/resilient-libs.ts index 4a2f5314..6b0637aa 100644 --- a/content/react-finland-2020/workshops/resilient-libs.ts +++ b/content/react-finland-2020/workshops/resilient-libs.ts @@ -1,6 +1,6 @@ import Keyword from "../../../server/schema/keywords"; import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../locations"; +import { internet } from "../../generated"; import andrey from "../../people/andrey-okonetchnikov"; import artem from "../../people/artem-sapegin"; diff --git a/content/react-finland-2020/workshops/statecharts.ts b/content/react-finland-2020/workshops/statecharts.ts index 54f6e2c0..fc5e2973 100644 --- a/content/react-finland-2020/workshops/statecharts.ts +++ b/content/react-finland-2020/workshops/statecharts.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../locations"; -import { davidKhourshid } from "../../people"; +import { internet } from "../../generated"; +import { davidKhourshid } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/testing-react.ts b/content/react-finland-2020/workshops/testing-react.ts index bcaec386..4d5d41e3 100644 --- a/content/react-finland-2020/workshops/testing-react.ts +++ b/content/react-finland-2020/workshops/testing-react.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../locations"; -import { kentCDodds } from "../../people"; +import { internet } from "../../generated"; +import { kentCDodds } from "../../generated"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2021/index.ts b/content/react-finland-2021/index.ts index 0a033c06..256ad54d 100644 --- a/content/react-finland-2021/index.ts +++ b/content/react-finland-2021/index.ts @@ -1,7 +1,7 @@ import { Conference } from "../../server/schema/Conference"; -// import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +// import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import schedules from "./schedules"; const partners = [ diff --git a/content/react-finland-2021/schedules.ts b/content/react-finland-2021/schedules.ts index e83dac92..882447aa 100644 --- a/content/react-finland-2021/schedules.ts +++ b/content/react-finland-2021/schedules.ts @@ -1,7 +1,7 @@ import { Schedule } from "../../server/schema/Schedule"; import { Level, SessionType } from "../../server/schema/Session"; -import * as locations from "../locations"; -import * as people from "../people"; +import { locations } from "../generated"; +import { people } from "../generated"; // All times are given in GMT+0 const monday: Schedule = { diff --git a/content/react-finland-2022/index.ts b/content/react-finland-2022/index.ts index 555bf421..1164b31f 100644 --- a/content/react-finland-2022/index.ts +++ b/content/react-finland-2022/index.ts @@ -1,8 +1,8 @@ import { Conference } from "../../server/schema/Conference"; import { Contact } from "../../server/schema/Contact"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import schedules from "./schedules"; const partners = [ diff --git a/content/react-finland-2022/schedules.ts b/content/react-finland-2022/schedules.ts index d829a069..f4bea67c 100644 --- a/content/react-finland-2022/schedules.ts +++ b/content/react-finland-2022/schedules.ts @@ -1,7 +1,7 @@ import { Schedule } from "../../server/schema/Schedule"; import { Level, SessionType } from "../../server/schema/Session"; -import * as locations from "../locations"; -import * as people from "../people"; +import { locations } from "../generated"; +import { people } from "../generated"; // All times are given in GMT+0 const monday: Schedule = { diff --git a/content/reason-conf-2019/index.ts b/content/reason-conf-2019/index.ts index 17e97dcf..9adb6520 100644 --- a/content/reason-conf-2019/index.ts +++ b/content/reason-conf-2019/index.ts @@ -1,8 +1,8 @@ import { Conference } from "../../server/schema/Conference"; import { SessionType } from "../../server/schema/Session"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import scheduleData from "./data.json"; const sponsors = []; diff --git a/content/rf2020-01/index.ts b/content/rf2020-01/index.ts index 0ab6c732..7cd65655 100644 --- a/content/rf2020-01/index.ts +++ b/content/rf2020-01/index.ts @@ -1,9 +1,11 @@ import { Conference } from "../../server/schema/Conference"; import { SessionType } from "../../server/schema/Session"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; -import * as talks from "./talks"; +import { + locations, + people, + rf202001Talks as talks, + sponsors as allSponsors, +} from "../generated"; const partners = [ allSponsors.agentconf, diff --git a/content/rf2020-01/talks/.index-modules b/content/rf2020-01/talks/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/rf2020-01/talks/index.ts b/content/rf2020-01/talks/index.ts deleted file mode 100644 index 2c8097a8..00000000 --- a/content/rf2020-01/talks/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { default as carolyn } from "./carolyn"; -export { default as kenigboloMeyaStephen } from "./kenigbolo-meya-stephen"; -export { default as margarita } from "./margarita"; diff --git a/content/sponsors/.index-modules b/content/sponsors/.index-modules deleted file mode 100644 index e69de29b..00000000 diff --git a/content/sponsors/index.ts b/content/sponsors/index.ts deleted file mode 100644 index 497af255..00000000 --- a/content/sponsors/index.ts +++ /dev/null @@ -1,112 +0,0 @@ -export { default as a11Yclub } from "./a11yclub"; -export { default as agentconf } from "./agentconf"; -export { default as alma } from "./alma"; -export { default as amazon } from "./amazon"; -export { default as apidays } from "./apidays"; -export { default as apiops } from "./apiops"; -export { default as apollo } from "./apollo"; -export { default as backscreen } from "./backscreen"; -export { default as bangalore } from "./bangalore"; -export { default as bejs } from "./bejs"; -export { default as brella } from "./brella"; -export { default as cai } from "./cai"; -export { default as codento } from "./codento"; -export { default as columbiaroad } from "./columbiaroad"; -export { default as cybercom } from "./cybercom"; -export { default as designsystemslondon } from "./designsystemslondon"; -export { default as digia } from "./digia"; -export { default as digitalExpert } from "./digital-expert"; -export { default as divriots } from "./divriots"; -export { default as dna325 } from "./dna325"; -export { default as dojs } from "./dojs"; -export { default as dynatrace } from "./dynatrace"; -export { default as elisa } from "./elisa"; -export { default as evitec } from "./evitec"; -export { default as fb } from "./fb"; -export { default as formidable } from "./formidable"; -export { default as frankenjs } from "./frankenjs"; -export { default as friikit } from "./friikit"; -export { default as futurice } from "./futurice"; -export { default as gatsby } from "./gatsby"; -export { default as geekle } from "./geekle"; -export { default as geniem } from "./geniem"; -export { default as ginetta } from "./ginetta"; -export { default as glorium } from "./glorium"; -export { default as gofore } from "./gofore"; -export { default as gqlhongkong } from "./gqlhongkong"; -export { default as graphqlFinland } from "./graphql-finland"; -export { default as grusp } from "./grusp"; -export { default as haagahelia } from "./haagahelia"; -export { default as halfstack } from "./halfstack"; -export { default as hasura } from "./hasura"; -export { default as hbc } from "./hbc"; -export { default as honeypot } from "./honeypot"; -export { default as huuva } from "./huuva"; -export { default as jscamp } from "./jscamp"; -export { default as jsconfbp } from "./jsconfbp"; -export { default as jsday } from "./jsday"; -export { default as jskongress } from "./jskongress"; -export { default as jsn } from "./jsn"; -export { default as knowit } from "./knowit"; -export { default as kongres } from "./kongres"; -export { default as koodiasuomesta } from "./koodiasuomesta"; -export { default as loihdefactor } from "./loihdefactor"; -export { default as meiko } from "./meiko"; -export { default as monolisa } from "./monolisa"; -export { default as moonhighway } from "./moonhighway"; -export { default as motley } from "./motley"; -export { default as netum } from "./netum"; -export { default as nightingale } from "./nightingale"; -export { default as nitor } from "./nitor"; -export { default as nodecongress } from "./nodecongress"; -export { default as ohjelmistofriikit } from "./ohjelmistofriikit"; -export { default as osaango } from "./osaango"; -export { default as postgraphile } from "./postgraphile"; -export { default as prisma } from "./prisma"; -export { default as quentic } from "./quentic"; -export { default as reactFinland } from "./react-finland"; -export { default as reactalicante } from "./reactalicante"; -export { default as reactbrussels } from "./reactbrussels"; -export { default as reactdayberlin } from "./reactdayberlin"; -export { default as reactfest } from "./reactfest"; -export { default as reactindia } from "./reactindia"; -export { default as reactjsday } from "./reactjsday"; -export { default as reactjsgirls } from "./reactjsgirls"; -export { default as reactnativeeu } from "./reactnativeeu"; -export { default as reactnewyork } from "./reactnewyork"; -export { default as reactnorway } from "./reactnorway"; -export { default as reactparis } from "./reactparis"; -export { default as reactsummit } from "./reactsummit"; -export { default as reactweek } from "./reactweek"; -export { default as reaktor } from "./reaktor"; -export { default as reasonconf } from "./reasonconf"; -export { default as relex } from "./relex"; -export { default as rlc } from "./rlc"; -export { default as rohea } from "./rohea"; -export { default as rp } from "./rp"; -export { default as sae } from "./sae"; -export { default as smartly } from "./smartly"; -export { default as solita } from "./solita"; -export { default as stickermule } from "./stickermule"; -export { default as supermetrics } from "./supermetrics"; -export { default as survivejs } from "./survivejs"; -export { default as techEvents } from "./tech-events"; -export { default as toddle } from "./toddle"; -export { default as toska } from "./toska"; -export { default as twir } from "./twir"; -export { default as typeof } from "./typeof"; -export { default as upcloud } from "./upcloud"; -export { default as utopia } from "./utopia"; -export { default as valamis } from "./valamis"; -export { default as verkkokauppa } from "./verkkokauppa"; -export { default as vihat } from "./vihat"; -export { default as vincit } from "./vincit"; -export { default as webexpo } from "./webexpo"; -export { default as wonna } from "./wonna"; -export { default as wunder } from "./wunder"; -export { default as wunderdog } from "./wunderdog"; -export { default as yglfkyiv } from "./yglfkyiv"; -export { default as yle } from "./yle"; -export { default as zapier } from "./zapier"; -export { default as zeroplusx } from "./zeroplusx"; -export { default as zurichjs } from "./zurichjs"; diff --git a/content/techmovienight/index.ts b/content/techmovienight/index.ts index 5df3fdc3..124d933c 100644 --- a/content/techmovienight/index.ts +++ b/content/techmovienight/index.ts @@ -1,8 +1,8 @@ import { Conference } from "../../server/schema/Conference"; import { Schedule } from "../../server/schema/Schedule"; -import * as locations from "../locations"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { locations } from "../generated"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; const latestMeetupDate = "2019-06-22"; diff --git a/content/typeof-2019/index.ts b/content/typeof-2019/index.ts index 773873a4..7c61e270 100644 --- a/content/typeof-2019/index.ts +++ b/content/typeof-2019/index.ts @@ -1,8 +1,8 @@ import { Conference } from "../../server/schema/Conference"; import { ContactType } from "../../server/schema/Contact"; import { SessionType } from "../../server/schema/Session"; -import * as people from "../people"; -import * as allSponsors from "../sponsors"; +import { people } from "../generated"; +import { sponsors as allSponsors } from "../generated"; import scheduleData from "./data.json"; const sponsors = []; diff --git a/server/schema/resolvers/ContactResolver.ts b/server/schema/resolvers/ContactResolver.ts index 8fbade7e..58a13f9c 100644 --- a/server/schema/resolvers/ContactResolver.ts +++ b/server/schema/resolvers/ContactResolver.ts @@ -7,9 +7,7 @@ import { Resolver, Root, } from "type-graphql"; -import * as locations from "../../../content/locations"; -import * as people from "../../../content/people"; -import * as sponsors from "../../../content/sponsors"; +import { locations, people, sponsors } from "../../../content/generated"; import { getConference } from "../Conference"; import { Contact, ContactType, getSessionSpeakers } from "../Contact"; import { Location } from "../Location"; diff --git a/utils/generate-indices.ts b/utils/generate-indices.ts index e21d7463..f3a10b0e 100644 --- a/utils/generate-indices.ts +++ b/utils/generate-indices.ts @@ -3,113 +3,151 @@ import * as path from "node:path"; import { globSync } from "glob"; import mri from "mri"; -interface FileDescriptor { - basename: string; - dirname: string; +interface CliOptions { + _: string[]; + verbose: boolean; } -interface IndexFile { - content: string; - name: string; +interface Registry { + directory: string; + entries: RegistryEntry[]; + exportName: string; } -type CategorizedFilenames = Record; - -interface CliOptions { - _: string[]; - format: string; - verbose: boolean; +interface RegistryEntry { + exportName: string; + importName: string; + importPath: string; } function main() { const args = mri(process.argv.slice(2), { + boolean: ["verbose"], default: { - format: "ts", verbose: false, }, - boolean: ["verbose"], - string: ["format"], }); - const { _: rootDirs, format, verbose } = args; - const indexableDirs = rootDirs - .flatMap((dir) => globSync(`${dir}/**/.index-modules`)) - .sort((left, right) => left.localeCompare(right)) - .map((markerPath) => path.dirname(markerPath)); - const filenames = indexableDirs.flatMap((dir) => - globSync(`${dir}/**/*.${format}`) - ) - .sort((left, right) => left.localeCompare(right)); - const categorizedFilenames = categorize(filenames); - const indexFiles = generateIndices(categorizedFilenames, format); + const contentRoot = path.resolve(args._[0] || "content"); + const outputPath = path.join(contentRoot, "generated.ts"); + const registries = discoverRegistries(contentRoot); + const content = renderGeneratedModule(registries); + + writeFile(outputPath, content, args.verbose); +} + +function discoverRegistries(contentRoot: string): Registry[] { + const directories = discoverRegistryDirectories(contentRoot); - writeFiles(indexFiles, verbose); + return directories.map((directory) => ({ + directory, + entries: discoverEntries(contentRoot, directory), + exportName: toRegistryName(directory), + })); } -function categorize(filenames: string[]): CategorizedFilenames { - return filenames - .map((filename) => ({ - basename: path.basename(filename, path.extname(filename)), - dirname: path.dirname(filename), - })) - .reduce((result, file) => { - if (!result[file.dirname]) { - result[file.dirname] = []; - } - - result[file.dirname].push(file); - - return result; - }, {}); +function discoverRegistryDirectories(contentRoot: string): string[] { + const topLevelDirectories = ["locations", "people", "sponsors"].filter((dir) => + fs.existsSync(path.join(contentRoot, dir)) + ); + const sessionDirectories = globSync("**/{talks,workshops}", { + cwd: contentRoot, + }); + + return topLevelDirectories + .concat(sessionDirectories) + .map(normalizePath) + .sort((left, right) => left.localeCompare(right)); } -function generateIndices( - categorizedFilenames: CategorizedFilenames, - format: string -): IndexFile[] { - return Object.keys(categorizedFilenames) - .sort((left, right) => left.localeCompare(right)) - .map((dirname) => { - const files = categorizedFilenames[dirname].filter( - (file) => file.basename !== "index" - ) - .sort((left, right) => left.basename.localeCompare(right.basename)); +function discoverEntries( + contentRoot: string, + directory: string +): RegistryEntry[] { + const registryName = toRegistryName(directory); - if (files.length < 1) { - return null; - } + return globSync(`${directory}/*.ts`, { cwd: contentRoot }) + .map(normalizePath) + .filter((entryPath) => path.basename(entryPath, ".ts") !== "index") + .sort((left, right) => left.localeCompare(right)) + .map((entryPath) => { + const exportName = toCamelCase(path.basename(entryPath, ".ts")); + const importName = `${registryName}__${exportName}`; + const importPath = `./${entryPath.replace(/\.ts$/, "")}`; return { - content: generateIndex(files.map((file) => file.basename)), - name: path.join(dirname, `index.${format}`), + exportName, + importName, + importPath, }; - }) - .filter((indexFile): indexFile is IndexFile => indexFile !== null); + }); } -function generateIndex(basenames: string[]): string { - return ( - basenames - .map( - (basename) => - `export { default as ${toCamelCase(basename)} } from "./${basename}";` - ) - .join("\n") + "\n" - ); -} +function renderGeneratedModule(registries: Registry[]): string { + const lines = [ + "// This file is generated by `npm run generate:indices`.", + "// Do not edit it manually.", + "", + ]; -function writeFiles(indexFiles: IndexFile[], verbose: boolean) { - indexFiles.forEach((file) => { - const oldContent = fs.readFileSync(file.name, { encoding: "utf8" }); - const contentDiffers = file.content.trim() !== oldContent.trim(); + registries.forEach((registry, index) => { + registry.entries.forEach((entry) => { + lines.push(`import ${entry.importName} from "${entry.importPath}";`); + }); - if (contentDiffers) { - if (verbose) { - console.log(`Writing ${file.name}`); - } + if (registry.entries.length > 0) { + lines.push(""); + } - fs.writeFileSync(file.name, file.content, "utf8"); + lines.push(`export const ${registry.exportName} = {`); + + registry.entries.forEach((entry) => { + lines.push(` ${entry.exportName}: ${entry.importName},`); + }); + + lines.push("} as const;"); + + if (["locations", "people"].includes(registry.exportName)) { + lines.push(""); + + registry.entries.forEach((entry) => { + lines.push( + `export const ${entry.exportName} = ${registry.exportName}.${entry.exportName};` + ); + }); + } + + if (index < registries.length - 1) { + lines.push(""); } }); + + lines.push(""); + + return lines.join("\n"); +} + +function writeFile(filePath: string, content: string, verbose: boolean) { + const oldContent = fs.existsSync(filePath) + ? fs.readFileSync(filePath, { encoding: "utf8" }) + : ""; + + if (content.trim() === oldContent.trim()) { + return; + } + + if (verbose) { + console.log(`Writing ${filePath}`); + } + + fs.writeFileSync(filePath, content, "utf8"); +} + +function toRegistryName(directory: string): string { + if (["locations", "people", "sponsors"].includes(directory)) { + return directory; + } + + return toCamelCase(directory.split("/").join("-")); } function toCamelCase(value: string): string { @@ -125,11 +163,10 @@ function toCamelCase(value: string): string { return normalized .map((part, index) => { const lower = part.toLowerCase(); - const camelPart = index === 0 - ? lower - : lower.charAt(0).toUpperCase() + lower.slice(1); + ? lower + : lower.charAt(0).toUpperCase() + lower.slice(1); return camelPart.replace(/(\d+)([a-z])/g, (_, digits, character) => { return `${digits}${character.toUpperCase()}`; @@ -138,4 +175,8 @@ function toCamelCase(value: string): string { .join(""); } +function normalizePath(filePath: string): string { + return filePath.split(path.sep).join("/"); +} + main(); From 6dda8631b67b80b9886ce93fdcc17cd00cc1c370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 14:12:13 +0300 Subject: [PATCH 32/45] Remove attendee CSV support --- package-lock.json | 12 -- package.json | 1 - server/schema/resolvers/ConferenceResolver.ts | 38 ---- server/schema/resolvers/load-attendees.ts | 165 ------------------ tsconfig.json | 5 +- 5 files changed, 3 insertions(+), 218 deletions(-) delete mode 100644 server/schema/resolvers/load-attendees.ts diff --git a/package-lock.json b/package-lock.json index 218a788e..18a65348 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,6 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "csv-parse": "6.2.1", "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", @@ -115,12 +114,6 @@ "node": ">=0.10.0" } }, - "node_modules/csv-parse": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.2.1.tgz", - "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==", - "license": "MIT" - }, "node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -509,11 +502,6 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" }, - "csv-parse": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.2.1.tgz", - "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==" - }, "glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", diff --git a/package.json b/package.json index 81a42e7b..4b148a2f 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,6 @@ "url": "https://github.com/ReactFinland/graphql-api/issues" }, "dependencies": { - "csv-parse": "6.2.1", "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", diff --git a/server/schema/resolvers/ConferenceResolver.ts b/server/schema/resolvers/ConferenceResolver.ts index 183f74df..fd57cfde 100644 --- a/server/schema/resolvers/ConferenceResolver.ts +++ b/server/schema/resolvers/ConferenceResolver.ts @@ -1,7 +1,5 @@ -import * as path from "path"; import { Arg, - Ctx, FieldResolver, ID, Query, @@ -11,12 +9,10 @@ import { import conferences from "../../conferences"; import { Conference, getConference } from "../Conference"; import { Contact, getSessionSpeakers } from "../Contact"; -import { IContext } from "../Context"; import { resolveSessions } from "../Schedule"; import { Series } from "../Series"; import { Session, SessionType } from "../Session"; import series from "./conferenceSeries"; -import loadAttendees from "./load-attendees"; @Resolver((_) => Conference) class ConferenceResolver { @@ -71,31 +67,6 @@ class ConferenceResolver { return getSessionSpeakers(conference, talks); } - @FieldResolver((_) => [Contact]) - public async attendees(@Root() conference: Conference, @Ctx() ctx: IContext) { - const speakers = getSessionSpeakers( - conference, - resolveSessions(conference.schedules, [ - SessionType.KEYNOTE, - SessionType.LIGHTNING_TALK, - SessionType.TALK, - SessionType.WORKSHOP, - ]) - ); - - return conference.organizers.concat( - speakers, - await loadAttendees( - conference, - `${path.join( - ctx.projectRoot, - "attendees", - toKebabCase(conference.name) - )}.csv` - ) - ); - } - @FieldResolver((_) => [Session], { deprecationReason: "Use `keynotes`,s `fullTalks` and `lightningTalks` instead", @@ -173,13 +144,4 @@ class ConferenceResolver { } } -function toKebabCase(value: string) { - return value - .normalize("NFKD") - .replace(/[\u0300-\u036f]/g, "") - .toLowerCase() - .replace(/[^a-z0-9]+/g, "-") - .replace(/^-+|-+$/g, ""); -} - export default ConferenceResolver; diff --git a/server/schema/resolvers/load-attendees.ts b/server/schema/resolvers/load-attendees.ts deleted file mode 100644 index 5056cf16..00000000 --- a/server/schema/resolvers/load-attendees.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { parse } from "csv-parse/sync"; // TODO: Use the async version instead? -import { existsSync } from "node:fs"; -import { readFile } from "node:fs/promises"; -import { Conference } from "../Conference"; -import { Contact, ContactType } from "../Contact"; - -async function loadAttendees(conference: Conference, csvPath: string) { - if (existsSync(csvPath)) { - return convertData( - getSponsors(conference), - parse(await readFile(csvPath, { encoding: "utf8" }), { - columns: true, - skip_empty_lines: true, - }) - ); - } - - return []; -} - -function getSponsors(conference: Conference): Contact[] { - return conference.sponsors.filter( - sponsor => !sponsor.type.includes(ContactType.PARTNER) - ); -} - -function convertData(sponsors: Contact[], tickets): Contact[] { - return tickets - .map(row => mapObjectValues(row, v => (v === "-" ? null : v))) - .filter((ticket) => !ticket["Void Status"] && !ticket.Ticket.startsWith("Workshop only")) - .map((row) => ({ - name: getName(row), - firstName: getFirstName(row), - lastName: getLastName(row), - company: getCompany(row), - about: "", // TODO - image: { url: "" }, // TODO - location: {}, // TODO - type: [ - getType( - sponsors, - row.Ticket || row["Ticket Type"], - getCompany(row), - row.Email - ), - ], - social: { - twitter: getTwitter(row.Twitter || row["What's your Twitter handle?"]), - }, - })); -} - -function getName(row) { - return `${getFirstName(row)} ${getLastName(row)}`; -} - -function getFirstName(row) { - return upperFirst(row["Ticket First Name"] || row["First Name"]); -} - -function getLastName(row) { - return upperFirst(row["Ticket Last Name"] || row["Last Name"]); -} - -function getCompany(row): string { - const name = getName(row); - const companyName = row["Ticket Company Name"] || row["Order Company Name"]; - - // Remove company if it's same as the name - if (name === companyName || !companyName) { - return ""; - } - - return companyName - .split(". z o.o.")[0] - .replace(/[ ]+/g, " ") - .trim(); -} - -function getType( - sponsors: Contact[], - type: string, - company: string, - email: string -) { - if (isSponsor(sponsors, type, company, email)) { - return ContactType.SPONSOR; - } - - switch (type) { - case "Press": { - return ContactType.PRESS; - } - case "Organizer": { - return ContactType.ORGANIZER; - } - case "Volunteer": { - return ContactType.ORGANIZER; - } - case "Sponsor": { - return ContactType.SPONSOR; - } - case "Speaker": { - return ContactType.SPEAKER; - } - default: - return ContactType.ATTENDEE; - } -} -function isSponsor( - sponsors: Contact[], - type: string, - company: string, - email: string -) { - return sponsors.some(({ name, social: { homepage } }) => { - if (name === company.split(" ")[0]) { - return true; - } - - if (email && homepage && homepage.includes(email.split("@")[1])) { - return true; - } - - if (company && type.includes(company.split(" ")[0])) { - return true; - } - - return type.includes(name); - }); -} - -function getTwitter(twitter): string { - if (twitter && twitter.split(" ").length > 1) { - return ""; - } - - return trimPrefix(twitter || "", "'@"); -} - -function mapObjectValues(row, mapValue) { - return Object.fromEntries( - Object.entries(row).map(([key, value]) => [key, mapValue(value)]) - ); -} - -function upperFirst(value = ""): string { - if (!value) { - return ""; - } - - return value.charAt(0).toUpperCase() + value.slice(1); -} - -function trimPrefix(value: string, characters: string): string { - let index = 0; - - while (index < value.length && characters.includes(value[index])) { - index += 1; - } - - return value.slice(index); -} - -export default loadAttendees; diff --git a/tsconfig.json b/tsconfig.json index 7cd44a09..07b7c92e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,12 +3,13 @@ "incremental": true, "module": "commonjs", "jsx": "react", - "lib": ["dom", "es2017", "esnext.asynciterable"], - "target": "es2017", + "lib": ["dom", "es2021", "esnext.asynciterable"], + "target": "es2021", "strict": true, "sourceMap": true, "outDir": "build", "resolveJsonModule": true, + "types": ["node"], "typeRoots": ["node_modules/@types"], "forceConsistentCasingInFileNames": true, "noImplicitReturns": true, From 5a207668a6be306c2c004e25ae5f7f0d53cf0669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 14:17:22 +0300 Subject: [PATCH 33/45] Pin Wrangler as a local dev dependency --- package-lock.json | 2892 +++++++++++++++++++++++++++++++++++++++------ package.json | 7 +- 2 files changed, 2545 insertions(+), 354 deletions(-) diff --git a/package-lock.json b/package-lock.json index 18a65348..34a3330b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,242 +20,1508 @@ "@types/node": "24.0.3", "glob": "13.0.6", "mri": "1.2.0", - "typescript": "6.0.2" + "typescript": "6.0.2", + "wrangler": "4.80.0" }, "engines": { "node": "24.x" } }, - "node_modules/@graphql-yoga/subscription": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-5.0.5.tgz", - "integrity": "sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==", - "license": "MIT", - "dependencies": { - "@graphql-yoga/typed-event-target": "^3.0.2", - "@repeaterjs/repeater": "^3.0.4", - "@whatwg-node/events": "^0.1.0", - "tslib": "^2.8.1" - }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.2.tgz", + "integrity": "sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==", + "dev": true, + "license": "MIT OR Apache-2.0", "engines": { "node": ">=18.0.0" } }, - "node_modules/@graphql-yoga/subscription/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "node_modules/@cloudflare/unenv-preset": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.16.0.tgz", + "integrity": "sha512-8ovsRpwzPoEqPUzoErAYVv8l3FMZNeBVQfJTvtzP4AgLSRGZISRfuChFxHWUQd3n6cnrwkuTGxT+2cGo8EsyYg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "peerDependencies": { + "unenv": "2.0.0-rc.24", + "workerd": "1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0" + }, + "peerDependenciesMeta": { + "workerd": { + "optional": true + } + } }, - "node_modules/@graphql-yoga/typed-event-target": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.2.tgz", - "integrity": "sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==", + "node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20260401.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260401.1.tgz", + "integrity": "sha512-ZSmceM70jH6k+/62VkEcmMNzrpr4kSctkX5Lsgqv38KktfhPY/hsh75y1lRoPWS3H3kgMa4p2pUSlidZR1u2hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20260401.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260401.1.tgz", + "integrity": "sha512-7UKWF+IUZ3NXMVPsDg8Cjg0r58b+uYlfvs5Yt8bvtU+geCtW4P2MxRHmRSEo8SryckXOJjb/b8tcncgCykFu8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20260401.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260401.1.tgz", + "integrity": "sha512-MDWUH/0bvL/l9aauN8zEddyYOXId1OueqrUCXXENNJ95R/lSmF6OgGVuXaYhoIhxQkNiEJ/0NOlnVYj9mJq4dw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20260401.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260401.1.tgz", + "integrity": "sha512-UgkzpMzVWM/bwbo3vjCTg2aoKfGcUhiEoQoDdo6RGWvbHRJyLVZ4VQCG9ZcISiztkiS2ICCoYOtPy6M/lV6Gcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20260401.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260401.1.tgz", + "integrity": "sha512-HBLzcQF5iF4Qv20tQ++pG7xs3OsCnaIbc+GAi6fmhUKZhvmzvml/jwrQzLJ+MPm0cQo41K5OO/U3T4S8tvJetQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, "license": "MIT", "dependencies": { - "@repeaterjs/repeater": "^3.0.4", - "tslib": "^2.8.1" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=18.0.0" + "node": ">=12" } }, - "node_modules/@graphql-yoga/typed-event-target/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/@repeaterjs/repeater": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", - "integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.0.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", - "integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==", + "node_modules/@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "undici-types": "~7.8.0" + "tslib": "^2.4.0" } }, - "node_modules/@types/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", - "license": "MIT" + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@whatwg-node/events": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.2.tgz", - "integrity": "sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==", + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "tslib": "^2.6.3" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=18.0.0" + "node": ">=18" } }, - "node_modules/@whatwg-node/events/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, - "node_modules/glob/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "18 || 20 || >=22" + "node": ">=18" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "18 || 20 || >=22" + "node": ">=18" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, - "node_modules/graphql": { - "version": "16.13.2", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", - "integrity": "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==", + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + "node": ">=18" } }, - "node_modules/graphql-depth-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/graphql-depth-limit/-/graphql-depth-limit-1.1.0.tgz", - "integrity": "sha512-+3B2BaG8qQ8E18kzk9yiSdAa75i/hnnOwgSeAxVJctGQPvmeiLtqKOYF6HETCyRjiF7Xfsyal0HbLlxCQkgkrw==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "arrify": "^1.0.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "graphql": "*" + "node": ">=18" } }, - "node_modules/graphql-http": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/graphql-http/-/graphql-http-1.22.4.tgz", - "integrity": "sha512-OC3ucK988teMf+Ak/O+ZJ0N2ukcgrEurypp8ePyJFWq83VzwRAmHxxr+XxrMpxO/FIwI4a7m/Fzv3tWGJv0wPA==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "dev": true, "license": "MIT", - "workspaces": [ - "implementations/**/*" + "optional": true, + "os": [ + "linux" ], "engines": { - "node": ">=12" - }, - "peerDependencies": { - "graphql": ">=0.11 <=16" + "node": ">=18" } }, - "node_modules/graphql-query-complexity": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/graphql-query-complexity/-/graphql-query-complexity-1.1.0.tgz", - "integrity": "sha512-6sfAX+9CgkcPeZ7UiuBwgTGA+M1FYgHrQOXvORhQGd6SiaXbNVkLDcJ9ZSvNgzyChIfH0uPFFOY3Jm4wFZ4qEA==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "lodash.get": "^4.4.2" - }, - "peerDependencies": { - "graphql": "^15.0.0 || ^16.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/graphql-scalars": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.25.0.tgz", - "integrity": "sha512-b0xyXZeRFkne4Eq7NAnL400gStGqG/Sx9VqX0A05nHyEbv57UJnWKsjNnrpVqv5e/8N1MUxkt0wwcRXbiyKcFg==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.5.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "node": ">=18" } }, - "node_modules/graphql-scalars/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/ical-generator": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-10.1.0.tgz", - "integrity": "sha512-VgWzox2svupw4HoZo9Ym0pmj50Cr7CO+By/TraNUVTXQL5Qh0p13iGNzizhXd/KDuzOHUSSXwUWIMZmBHQU65Q==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "20 || 22 || >=24" - }, - "peerDependencies": { - "@touch4it/ical-timezones": ">=1.6.0", - "@types/luxon": ">= 1.26.0", + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@graphql-yoga/subscription": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-5.0.5.tgz", + "integrity": "sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==", + "license": "MIT", + "dependencies": { + "@graphql-yoga/typed-event-target": "^3.0.2", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/events": "^0.1.0", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@graphql-yoga/typed-event-target": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.2.tgz", + "integrity": "sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==", + "license": "MIT", + "dependencies": { + "@repeaterjs/repeater": "^3.0.4", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@poppinss/colors": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^4.1.5" + } + }, + "node_modules/@poppinss/dumper": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz", + "integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/exception": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@repeaterjs/repeater": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", + "integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==", + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@speed-highlight/core": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.15.tgz", + "integrity": "sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/@types/node": { + "version": "24.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", + "integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/@types/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", + "license": "MIT" + }, + "node_modules/@whatwg-node/events": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.2.tgz", + "integrity": "sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graphql": { + "version": "16.13.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", + "integrity": "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-depth-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/graphql-depth-limit/-/graphql-depth-limit-1.1.0.tgz", + "integrity": "sha512-+3B2BaG8qQ8E18kzk9yiSdAa75i/hnnOwgSeAxVJctGQPvmeiLtqKOYF6HETCyRjiF7Xfsyal0HbLlxCQkgkrw==", + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "graphql": "*" + } + }, + "node_modules/graphql-http": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/graphql-http/-/graphql-http-1.22.4.tgz", + "integrity": "sha512-OC3ucK988teMf+Ak/O+ZJ0N2ukcgrEurypp8ePyJFWq83VzwRAmHxxr+XxrMpxO/FIwI4a7m/Fzv3tWGJv0wPA==", + "license": "MIT", + "workspaces": [ + "implementations/**/*" + ], + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "graphql": ">=0.11 <=16" + } + }, + "node_modules/graphql-query-complexity": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/graphql-query-complexity/-/graphql-query-complexity-1.1.0.tgz", + "integrity": "sha512-6sfAX+9CgkcPeZ7UiuBwgTGA+M1FYgHrQOXvORhQGd6SiaXbNVkLDcJ9ZSvNgzyChIfH0uPFFOY3Jm4wFZ4qEA==", + "license": "MIT", + "dependencies": { + "lodash.get": "^4.4.2" + }, + "peerDependencies": { + "graphql": "^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-scalars": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.25.0.tgz", + "integrity": "sha512-b0xyXZeRFkne4Eq7NAnL400gStGqG/Sx9VqX0A05nHyEbv57UJnWKsjNnrpVqv5e/8N1MUxkt0wwcRXbiyKcFg==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/ical-generator": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-10.1.0.tgz", + "integrity": "sha512-VgWzox2svupw4HoZo9Ym0pmj50Cr7CO+By/TraNUVTXQL5Qh0p13iGNzizhXd/KDuzOHUSSXwUWIMZmBHQU65Q==", + "license": "MIT", + "engines": { + "node": "20 || 22 || >=24" + }, + "peerDependencies": { + "@touch4it/ical-timezones": ">=1.6.0", + "@types/luxon": ">= 1.26.0", "@types/mocha": ">= 8.2.1", "dayjs": ">= 1.10.0", "luxon": ">= 1.26.0", @@ -263,212 +1529,940 @@ "moment-timezone": ">= 0.5.33", "rrule": ">= 2.6.8" }, - "peerDependenciesMeta": { - "@touch4it/ical-timezones": { - "optional": true - }, - "@types/luxon": { - "optional": true - }, - "@types/mocha": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "dayjs": { - "optional": true + "peerDependenciesMeta": { + "@touch4it/ical-timezones": { + "optional": true + }, + "@types/luxon": { + "optional": true + }, + "@types/mocha": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + }, + "moment-timezone": { + "optional": true + }, + "rrule": { + "optional": true + } + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/miniflare": { + "version": "4.20260401.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260401.0.tgz", + "integrity": "sha512-lngHPzZFN9sxYG/mhzvnWiBMNVAN5MsO/7g32ttJ07rymtiK/ZBalODTKb8Od+BQdlU5DOR4CjVt9NydjnUyYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "0.8.1", + "sharp": "^0.34.5", + "undici": "7.24.4", + "workerd": "1.20260401.1", + "ws": "8.18.0", + "youch": "4.1.0-beta.10" + }, + "bin": { + "miniflare": "bootstrap.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-graphql": { + "version": "2.0.0-rc.3", + "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", + "integrity": "sha512-o01aQg5/PWvd6nmZ55H1C74ROc9q0uNIAU2o65sbBailLmeG20LvkUuuYYA/E6fNoGABYFQlCVrIzlZlrSRDgQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/TypeGraphQL" }, - "luxon": { + { + "type": "opencollective", + "url": "https://opencollective.com/typegraphql" + } + ], + "license": "MIT", + "dependencies": { + "@graphql-yoga/subscription": "^5.0.5", + "@types/node": "*", + "@types/semver": "^7.7.1", + "graphql-query-complexity": "^1.1.0", + "semver": "^7.7.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">= 20.11.1" + }, + "peerDependencies": { + "class-validator": ">=0.14.3", + "graphql": "^16.12.0", + "graphql-scalars": "^1.25.0" + }, + "peerDependenciesMeta": { + "class-validator": { "optional": true - }, - "moment": { + } + } + }, + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.4.tgz", + "integrity": "sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "license": "MIT" + }, + "node_modules/unenv": { + "version": "2.0.0-rc.24", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3" + } + }, + "node_modules/workerd": { + "version": "1.20260401.1", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260401.1.tgz", + "integrity": "sha512-mUYCd+ohaWJWF5nhDzxugWaAD/DM8Dw0ze3B7bu8JaA7S70+XQJXcvcvwE8C4qGcxSdCyqjsrFzqxKubECDwzg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20260401.1", + "@cloudflare/workerd-darwin-arm64": "1.20260401.1", + "@cloudflare/workerd-linux-64": "1.20260401.1", + "@cloudflare/workerd-linux-arm64": "1.20260401.1", + "@cloudflare/workerd-windows-64": "1.20260401.1" + } + }, + "node_modules/wrangler": { + "version": "4.80.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.80.0.tgz", + "integrity": "sha512-2ZKF7uPeOZy65BGk3YfvqBCPo/xH1MrAlMmH9mVP+tCNBrTUMnwOHSj1HrZHgR8LttkAqhko0fGz+I4ax1rzyQ==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "@cloudflare/kv-asset-handler": "0.4.2", + "@cloudflare/unenv-preset": "2.16.0", + "blake3-wasm": "2.1.5", + "esbuild": "0.27.3", + "miniflare": "4.20260401.0", + "path-to-regexp": "6.3.0", + "unenv": "2.0.0-rc.24", + "workerd": "1.20260401.1" + }, + "bin": { + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, + "engines": { + "node": ">=20.3.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@cloudflare/workers-types": "^4.20260401.1" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { "optional": true - }, - "moment-timezone": { + } + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { "optional": true }, - "rrule": { + "utf-8-validate": { "optional": true } } }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", - "license": "MIT" + "node_modules/youch": { + "version": "4.1.0-beta.10", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz", + "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@poppinss/dumper": "^0.6.4", + "@speed-highlight/core": "^1.2.7", + "cookie": "^1.0.2", + "youch-core": "^0.3.3" + } + }, + "node_modules/youch-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" + } + } + }, + "dependencies": { + "@cloudflare/kv-asset-handler": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.2.tgz", + "integrity": "sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==", + "dev": true + }, + "@cloudflare/unenv-preset": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.16.0.tgz", + "integrity": "sha512-8ovsRpwzPoEqPUzoErAYVv8l3FMZNeBVQfJTvtzP4AgLSRGZISRfuChFxHWUQd3n6cnrwkuTGxT+2cGo8EsyYg==", + "dev": true, + "requires": {} + }, + "@cloudflare/workerd-darwin-64": { + "version": "1.20260401.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260401.1.tgz", + "integrity": "sha512-ZSmceM70jH6k+/62VkEcmMNzrpr4kSctkX5Lsgqv38KktfhPY/hsh75y1lRoPWS3H3kgMa4p2pUSlidZR1u2hw==", + "dev": true, + "optional": true + }, + "@cloudflare/workerd-darwin-arm64": { + "version": "1.20260401.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260401.1.tgz", + "integrity": "sha512-7UKWF+IUZ3NXMVPsDg8Cjg0r58b+uYlfvs5Yt8bvtU+geCtW4P2MxRHmRSEo8SryckXOJjb/b8tcncgCykFu8g==", + "dev": true, + "optional": true + }, + "@cloudflare/workerd-linux-64": { + "version": "1.20260401.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260401.1.tgz", + "integrity": "sha512-MDWUH/0bvL/l9aauN8zEddyYOXId1OueqrUCXXENNJ95R/lSmF6OgGVuXaYhoIhxQkNiEJ/0NOlnVYj9mJq4dw==", + "dev": true, + "optional": true + }, + "@cloudflare/workerd-linux-arm64": { + "version": "1.20260401.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260401.1.tgz", + "integrity": "sha512-UgkzpMzVWM/bwbo3vjCTg2aoKfGcUhiEoQoDdo6RGWvbHRJyLVZ4VQCG9ZcISiztkiS2ICCoYOtPy6M/lV6Gcw==", + "dev": true, + "optional": true + }, + "@cloudflare/workerd-windows-64": { + "version": "1.20260401.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260401.1.tgz", + "integrity": "sha512-HBLzcQF5iF4Qv20tQ++pG7xs3OsCnaIbc+GAi6fmhUKZhvmzvml/jwrQzLJ+MPm0cQo41K5OO/U3T4S8tvJetQ==", + "dev": true, + "optional": true + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "dev": true, + "optional": true + }, + "@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "dev": true, + "optional": true + }, + "@graphql-yoga/subscription": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-5.0.5.tgz", + "integrity": "sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==", + "requires": { + "@graphql-yoga/typed-event-target": "^3.0.2", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/events": "^0.1.0", + "tslib": "^2.8.1" + } + }, + "@graphql-yoga/typed-event-target": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.2.tgz", + "integrity": "sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==", + "requires": { + "@repeaterjs/repeater": "^3.0.4", + "tslib": "^2.8.1" + } + }, + "@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "dev": true + }, + "@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "dev": true, + "optional": true, + "requires": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "dev": true, + "optional": true, + "requires": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "dev": true, + "optional": true + }, + "@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "dev": true, + "optional": true + }, + "@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "dev": true, + "optional": true + }, + "@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "dev": true, + "optional": true + }, + "@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "dev": true, + "optional": true + }, + "@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "dev": true, + "optional": true + }, + "@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "dev": true, + "optional": true + }, + "@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "dev": true, + "optional": true + }, + "@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "dev": true, + "optional": true + }, + "@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "dev": true, + "optional": true + }, + "@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "dev": true, + "optional": true, + "requires": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "dev": true, + "optional": true, + "requires": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } }, - "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" + "optional": true, + "requires": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" } }, - "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" + "optional": true, + "requires": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "optional": true, + "requires": { + "@img/sharp-libvips-linux-s390x": "1.2.4" } }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "optional": true, + "requires": { + "@img/sharp-libvips-linux-x64": "1.2.4" } }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0" + "@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "dev": true, + "optional": true, + "requires": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "dev": true, + "optional": true, + "requires": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" } }, - "node_modules/type-graphql": { - "version": "2.0.0-rc.3", - "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", - "integrity": "sha512-o01aQg5/PWvd6nmZ55H1C74ROc9q0uNIAU2o65sbBailLmeG20LvkUuuYYA/E6fNoGABYFQlCVrIzlZlrSRDgQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/TypeGraphQL" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/typegraphql" - } - ], - "license": "MIT", - "dependencies": { - "@graphql-yoga/subscription": "^5.0.5", - "@types/node": "*", - "@types/semver": "^7.7.1", - "graphql-query-complexity": "^1.1.0", - "semver": "^7.7.3", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">= 20.11.1" - }, - "peerDependencies": { - "class-validator": ">=0.14.3", - "graphql": "^16.12.0", - "graphql-scalars": "^1.25.0" - }, - "peerDependenciesMeta": { - "class-validator": { - "optional": true - } + "@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "dev": true, + "optional": true, + "requires": { + "@emnapi/runtime": "^1.7.0" } }, - "node_modules/type-graphql/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "dev": true, + "optional": true }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" + "optional": true + }, + "@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "dev": true, + "optional": true + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/undici-types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", - "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", - "license": "MIT" - } - }, - "dependencies": { - "@graphql-yoga/subscription": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-5.0.5.tgz", - "integrity": "sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==", + "@poppinss/colors": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", + "dev": true, "requires": { - "@graphql-yoga/typed-event-target": "^3.0.2", - "@repeaterjs/repeater": "^3.0.4", - "@whatwg-node/events": "^0.1.0", - "tslib": "^2.8.1" - }, - "dependencies": { - "tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" - } + "kleur": "^4.1.5" } }, - "@graphql-yoga/typed-event-target": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.2.tgz", - "integrity": "sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==", + "@poppinss/dumper": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz", + "integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==", + "dev": true, "requires": { - "@repeaterjs/repeater": "^3.0.4", - "tslib": "^2.8.1" - }, - "dependencies": { - "tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" - } + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" } }, + "@poppinss/exception": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", + "dev": true + }, "@repeaterjs/repeater": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", "integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==" }, + "@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "dev": true + }, + "@speed-highlight/core": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.15.tgz", + "integrity": "sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==", + "dev": true + }, "@types/node": { "version": "24.0.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", @@ -488,13 +2482,6 @@ "integrity": "sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==", "requires": { "tslib": "^2.6.3" - }, - "dependencies": { - "tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" - } } }, "arrify": { @@ -502,6 +2489,71 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" }, + "blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true + }, + "cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "dev": true + }, + "detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true + }, + "error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "dev": true + }, + "esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, "glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -573,14 +2625,6 @@ "peer": true, "requires": { "tslib": "^2.5.0" - }, - "dependencies": { - "tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "peer": true - } } }, "ical-generator": { @@ -589,6 +2633,12 @@ "integrity": "sha512-VgWzox2svupw4HoZo9Ym0pmj50Cr7CO+By/TraNUVTXQL5Qh0p13iGNzizhXd/KDuzOHUSSXwUWIMZmBHQU65Q==", "requires": {} }, + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -600,6 +2650,20 @@ "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", "dev": true }, + "miniflare": { + "version": "4.20260401.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260401.0.tgz", + "integrity": "sha512-lngHPzZFN9sxYG/mhzvnWiBMNVAN5MsO/7g32ttJ07rymtiK/ZBalODTKb8Od+BQdlU5DOR4CjVt9NydjnUyYg==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.8.1", + "sharp": "^0.34.5", + "undici": "7.24.4", + "workerd": "1.20260401.1", + "ws": "8.18.0", + "youch": "4.1.0-beta.10" + } + }, "minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", @@ -622,6 +2686,18 @@ "minipass": "^7.1.2" } }, + "path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true + }, + "pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true + }, "reflect-metadata": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", @@ -632,6 +2708,52 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==" }, + "sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "dev": true, + "requires": { + "@img/colour": "^1.0.0", + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + } + }, + "supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true + }, + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, "type-graphql": { "version": "2.0.0-rc.3", "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", @@ -643,13 +2765,6 @@ "graphql-query-complexity": "^1.1.0", "semver": "^7.7.3", "tslib": "^2.8.1" - }, - "dependencies": { - "tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" - } } }, "typescript": { @@ -658,10 +2773,85 @@ "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true }, + "undici": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.4.tgz", + "integrity": "sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==", + "dev": true + }, "undici-types": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==" + }, + "unenv": { + "version": "2.0.0-rc.24", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", + "dev": true, + "requires": { + "pathe": "^2.0.3" + } + }, + "workerd": { + "version": "1.20260401.1", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260401.1.tgz", + "integrity": "sha512-mUYCd+ohaWJWF5nhDzxugWaAD/DM8Dw0ze3B7bu8JaA7S70+XQJXcvcvwE8C4qGcxSdCyqjsrFzqxKubECDwzg==", + "dev": true, + "requires": { + "@cloudflare/workerd-darwin-64": "1.20260401.1", + "@cloudflare/workerd-darwin-arm64": "1.20260401.1", + "@cloudflare/workerd-linux-64": "1.20260401.1", + "@cloudflare/workerd-linux-arm64": "1.20260401.1", + "@cloudflare/workerd-windows-64": "1.20260401.1" + } + }, + "wrangler": { + "version": "4.80.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.80.0.tgz", + "integrity": "sha512-2ZKF7uPeOZy65BGk3YfvqBCPo/xH1MrAlMmH9mVP+tCNBrTUMnwOHSj1HrZHgR8LttkAqhko0fGz+I4ax1rzyQ==", + "dev": true, + "requires": { + "@cloudflare/kv-asset-handler": "0.4.2", + "@cloudflare/unenv-preset": "2.16.0", + "blake3-wasm": "2.1.5", + "esbuild": "0.27.3", + "fsevents": "~2.3.2", + "miniflare": "4.20260401.0", + "path-to-regexp": "6.3.0", + "unenv": "2.0.0-rc.24", + "workerd": "1.20260401.1" + } + }, + "ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "requires": {} + }, + "youch": { + "version": "4.1.0-beta.10", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz", + "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==", + "dev": true, + "requires": { + "@poppinss/colors": "^4.1.5", + "@poppinss/dumper": "^0.6.4", + "@speed-highlight/core": "^1.2.7", + "cookie": "^1.0.2", + "youch-core": "^0.3.3" + } + }, + "youch-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", + "dev": true, + "requires": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" + } } } } diff --git a/package.json b/package.json index 4b148a2f..baaccaa0 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "description": "React Finland GraphQL API", "scripts": { "generate:indices": "tsc && node build/utils/generate-indices.js content --verbose", - "cf:deploy": "npx wrangler deploy", - "cf:dev": "npx wrangler dev", + "cf:deploy": "wrangler deploy", + "cf:dev": "wrangler dev", "types:check": "tsc --noEmit", "test": "tsc && node --test test/api.e2e.test.cjs", "quality:gate": "npm run types:check && npm test" @@ -21,7 +21,8 @@ "@types/node": "24.0.3", "glob": "13.0.6", "mri": "1.2.0", - "typescript": "6.0.2" + "typescript": "6.0.2", + "wrangler": "4.80.0" }, "repository": { "type": "git", From 4abc28b0db40ea2f6ad161b00dc2d7dc9b843778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 14:17:54 +0300 Subject: [PATCH 34/45] Remove stale Tito configuration mentions --- .env.template | 3 --- README.md | 1 - 2 files changed, 4 deletions(-) diff --git a/.env.template b/.env.template index 3f033aa7..ed19ebaf 100644 --- a/.env.template +++ b/.env.template @@ -1,5 +1,2 @@ # Required API token for all non-media routes. Send it in the `TOKEN` header. TOKEN= - -# Optional token for Tito-related utility scripts. -TITO_TOKEN= diff --git a/README.md b/README.md index cd1dbcbf..5ad4ea39 100644 --- a/README.md +++ b/README.md @@ -80,4 +80,3 @@ The application requires a `TOKEN` value at runtime for all non-media routes. For local Wrangler development, provide the values in `.dev.vars` or `.env`. The example in [.env.template](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.env.template) is: - `TOKEN` for authenticating all non-media routes through a `TOKEN` request header -- `TITO_TOKEN` for Tito-related utility scripts From 6cbaf4a1b954ef3d88f367329b5911dd1b834630 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 14:18:52 +0300 Subject: [PATCH 35/45] Drop legacy calendar route and stale config docs --- README.md | 3 +-- server/app.ts | 4 +--- server/routes/calendar.ts | 27 ++++----------------------- test/api.e2e.test.cjs | 15 +++------------ wrangler.jsonc | 2 +- 5 files changed, 10 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 5ad4ea39..c4ead9fb 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ This repository serves conference data over GraphQL and exposes a small set of s - `/graphql` - `/ping` -- `/calendar/:id` - `/calendar-2026.ics` - `/media/*` @@ -45,7 +44,7 @@ The project already includes a Worker entrypoint at [worker/index.ts](/Users/juh The current configuration: - runs a fetch-native request handler in Cloudflare Workers -- routes `/graphql`, `/ping`, and calendar endpoints through the Worker +- routes `/graphql`, `/ping`, and `/calendar-2026.ics` through the Worker - serves only image files under `/media/*` from static assets in the repository - reuses a cached Worker handler per isolate instead of rebuilding the schema on each request - emits structured console logs with Cloudflare Workers observability enabled diff --git a/server/app.ts b/server/app.ts index 64bbf62c..b68b72d3 100644 --- a/server/app.ts +++ b/server/app.ts @@ -41,9 +41,7 @@ async function createRequestHandler(options: CreateRequestHandlerOptions = {}) { } else if (pathname === "/ping") { response = handlePingRequest(); } else if (pathname === "/calendar-2026.ics") { - response = handleCalendarRequest(pathname); - } else if (pathname.startsWith("/calendar/")) { - response = handleCalendarRequest(pathname); + response = handleCalendarRequest(); } else if (pathname === "/graphql") { response = await graphqlHandler(request); } diff --git a/server/routes/calendar.ts b/server/routes/calendar.ts index d39b5798..24e1a1d7 100644 --- a/server/routes/calendar.ts +++ b/server/routes/calendar.ts @@ -2,30 +2,11 @@ import ical from "ical-generator"; import conferences from "../conferences"; import { Schedule } from "../schema/Schedule"; -function handleCalendarRequest(pathname: string) { - if (pathname === "/calendar-2026.ics") { - return calendar({ - filename: "calendar-2026.ics", - title: "Future Frontend 2026", - schedules: conferences["future-frontend-2026"].schedules, - }); - } - - if (!pathname.startsWith("/calendar/")) { - return null; - } - - const conferenceId = decodeURIComponent(pathname.replace("/calendar/", "")); - const conference = conferences[conferenceId]; - - if (!conference) { - return new Response("Not found", { status: 404 }); - } - +function handleCalendarRequest() { return calendar({ - filename: `calendar-${conference.id}`, - title: conference.name, - schedules: conference.schedules, + filename: "calendar-2026.ics", + title: "Future Frontend 2026", + schedules: conferences["future-frontend-2026"].schedules, }); } diff --git a/test/api.e2e.test.cjs b/test/api.e2e.test.cjs index 5f2f4d79..157d6230 100644 --- a/test/api.e2e.test.cjs +++ b/test/api.e2e.test.cjs @@ -126,16 +126,6 @@ test("GET /ping returns server metadata", async () => { assert.ok(payload.serverVersion.length > 0); }); -test("GET /calendar/future-frontend-2026 returns an ICS calendar", async () => { - const response = await request("/calendar/future-frontend-2026"); - const body = await response.text(); - - assert.equal(response.status, 200); - assert.match(response.headers.get("content-type"), /text\/calendar/i); - assert.match(body, /BEGIN:VCALENDAR/); - assert.match(body, /futurefrontend\.com/i); -}); - test("GET /calendar-2026.ics returns the published calendar file", async () => { const response = await request("/calendar-2026.ics"); const body = await response.text(); @@ -143,10 +133,11 @@ test("GET /calendar-2026.ics returns the published calendar file", async () => { assert.equal(response.status, 200); assert.match(response.headers.get("content-type"), /text\/calendar/i); assert.match(body, /BEGIN:VCALENDAR/); + assert.match(body, /futurefrontend\.com/i); }); -test("GET /calendar/:id returns 404 for an unknown conference", async () => { - const response = await request("/calendar/does-not-exist"); +test("GET /calendar/:id is no longer exposed", async () => { + const response = await request("/calendar/future-frontend-2026"); const body = await response.text(); assert.equal(response.status, 404); diff --git a/wrangler.jsonc b/wrangler.jsonc index 15ae75cf..70906daa 100644 --- a/wrangler.jsonc +++ b/wrangler.jsonc @@ -13,6 +13,6 @@ }, "assets": { "directory": ".", - "run_worker_first": ["/graphql", "/ping", "/calendar/*", "/calendar-2026.ics"] + "run_worker_first": ["/graphql", "/ping", "/calendar-2026.ics"] } } From b446f38446b29e9cf59c09c69e2fea1f94135417 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 15:50:07 +0300 Subject: [PATCH 36/45] Harden Worker validation and local CI --- .github/workflows/ci.yml | 34 + .gitignore | 2 + README.md | 2 +- content/generated-core.ts | 979 +++++ content/generated.ts | 979 +---- .../workshops/juho-workshop.ts | 2 +- .../workshops/marc-workshop.ts | 2 +- .../workshops/mikhail-workshop.ts | 2 +- .../workshops/nik-workshop.ts | 2 +- .../workshops/andrey-and-artem-workshop.ts | 2 +- .../workshops/david-khourshid-workshop.ts | 2 +- .../workshops/gant-laborde-workshop.ts | 2 +- .../workshops/juho-vepsalainen-workshop.ts | 2 +- .../workshops/michel-weststrate-workshop.ts | 2 +- .../workshops/patrick-and-nik-workshop.ts | 2 +- .../rotem-mizrachi-meidan-workshop.ts | 2 +- .../workshops/sara-vieira-workshop.ts | 2 +- .../workshops/sia-karamalegos-workshop.ts | 2 +- .../workshops/sven-sauleau-workshop.ts | 2 +- .../workshops/andrey-and-artem-workshop.ts | 2 +- .../workshops/david-khourshid-workshop.ts | 4 +- .../workshops/glenn-reyes-workshop.ts | 4 +- .../workshops/michel-workshop.ts | 4 +- .../workshops/nik-workshop.ts | 4 +- .../workshops/performance-workshop.ts | 4 +- .../workshops/advanced-react.ts | 4 +- .../workshops/design-systems-101.ts | 2 +- .../workshops/design-systems.ts | 2 +- .../workshops/from-legacy-to-react.ts | 4 +- .../workshops/full-stack.ts | 4 +- .../workshops/modern-forms.ts | 4 +- .../workshops/react-native.ts | 4 +- .../workshops/react-performance.ts | 4 +- .../workshops/resilient-libs.ts | 2 +- .../workshops/statecharts.ts | 4 +- .../workshops/testing-react.ts | 4 +- package-lock.json | 3231 ++++++++++++++++- package.json | 11 +- scripts/patch-agent-ci.mjs | 49 + scripts/run-agent-ci.mjs | 47 + server/schema/index.ts | 7 +- utils/generate-indices.ts | 47 +- worker/shims/class-validator.ts | 3 + wrangler.jsonc | 3 + 44 files changed, 4270 insertions(+), 1212 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 content/generated-core.ts create mode 100644 scripts/patch-agent-ci.mjs create mode 100644 scripts/run-agent-ci.mjs create mode 100644 worker/shims/class-validator.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..f60f0c03 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,34 @@ +name: CI + +on: + pull_request: + push: + branches: + - main + +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + quality-fast: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version-file: package.json + cache: npm + + - name: Install dependencies + shell: bash + run: npm ci + + - name: Run fast quality gate + shell: bash + run: npm run quality:gate:fast diff --git a/.gitignore b/.gitignore index 9e35f401..ff00f109 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ logs/ attendees/ build/ .wrangler/ +.wrangler-dry-run/ +.npm/ server/types/ media/scripts/ utils/*.csv diff --git a/README.md b/README.md index c4ead9fb..27b1f282 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Use the Worker runtime for local development: Wrangler uses [wrangler.jsonc](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/wrangler.jsonc) and serves public image assets from the repository through the static-assets configuration in [.assetsignore](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.assetsignore). -Before deploying or after larger refactors, run `npm run quality:gate` to execute both typechecks and the API test suite. +Before deploying or after larger refactors, run `npm run quality:gate` to execute the checked-in CI workflow locally through `agent-ci`. The direct checks that workflow runs are also available as `npm run quality:gate:fast`. Other useful local endpoints: diff --git a/content/generated-core.ts b/content/generated-core.ts new file mode 100644 index 00000000..6e8c6bef --- /dev/null +++ b/content/generated-core.ts @@ -0,0 +1,979 @@ +// This file is generated by `npm run generate:indices`. +// Do not edit it manually. + + +import locations__alma from "./locations/alma"; +import locations__amanda from "./locations/amanda"; +import locations__ankersaal from "./locations/ankersaal"; +import locations__arkade from "./locations/arkade"; +import locations__babylonHelsinki from "./locations/babylon-helsinki"; +import locations__columbiaroad from "./locations/columbiaroad"; +import locations__dipoli from "./locations/dipoli"; +import locations__elisaAppelsiini from "./locations/elisa-appelsiini"; +import locations__futurice from "./locations/futurice"; +import locations__gofore from "./locations/gofore"; +import locations__hbc from "./locations/hbc"; +import locations__internet from "./locations/internet"; +import locations__loihdefactor from "./locations/loihdefactor"; +import locations__nitor from "./locations/nitor"; +import locations__paasitorni from "./locations/paasitorni"; +import locations__poliisienkesakoti from "./locations/poliisienkesakoti"; +import locations__porssitalo from "./locations/porssitalo"; +import locations__rantasauna from "./locations/rantasauna"; +import locations__rooftopmiami from "./locations/rooftopmiami"; +import locations__saeWien from "./locations/sae-wien"; +import locations__tiivistamo from "./locations/tiivistamo"; +import locations__tuas from "./locations/tuas"; +import locations__upcloud from "./locations/upcloud"; +import locations__valkoinenSali from "./locations/valkoinen-sali"; +import locations__wuWien from "./locations/wu-wien"; +import locations__yle from "./locations/yle"; + +export const locations = { + alma: locations__alma, + amanda: locations__amanda, + ankersaal: locations__ankersaal, + arkade: locations__arkade, + babylonHelsinki: locations__babylonHelsinki, + columbiaroad: locations__columbiaroad, + dipoli: locations__dipoli, + elisaAppelsiini: locations__elisaAppelsiini, + futurice: locations__futurice, + gofore: locations__gofore, + hbc: locations__hbc, + internet: locations__internet, + loihdefactor: locations__loihdefactor, + nitor: locations__nitor, + paasitorni: locations__paasitorni, + poliisienkesakoti: locations__poliisienkesakoti, + porssitalo: locations__porssitalo, + rantasauna: locations__rantasauna, + rooftopmiami: locations__rooftopmiami, + saeWien: locations__saeWien, + tiivistamo: locations__tiivistamo, + tuas: locations__tuas, + upcloud: locations__upcloud, + valkoinenSali: locations__valkoinenSali, + wuWien: locations__wuWien, + yle: locations__yle, +} as const; + +export const alma = locations.alma; +export const amanda = locations.amanda; +export const ankersaal = locations.ankersaal; +export const arkade = locations.arkade; +export const babylonHelsinki = locations.babylonHelsinki; +export const columbiaroad = locations.columbiaroad; +export const dipoli = locations.dipoli; +export const elisaAppelsiini = locations.elisaAppelsiini; +export const futurice = locations.futurice; +export const gofore = locations.gofore; +export const hbc = locations.hbc; +export const internet = locations.internet; +export const loihdefactor = locations.loihdefactor; +export const nitor = locations.nitor; +export const paasitorni = locations.paasitorni; +export const poliisienkesakoti = locations.poliisienkesakoti; +export const porssitalo = locations.porssitalo; +export const rantasauna = locations.rantasauna; +export const rooftopmiami = locations.rooftopmiami; +export const saeWien = locations.saeWien; +export const tiivistamo = locations.tiivistamo; +export const tuas = locations.tuas; +export const upcloud = locations.upcloud; +export const valkoinenSali = locations.valkoinenSali; +export const wuWien = locations.wuWien; +export const yle = locations.yle; + +import people__aapeli from "./people/aapeli"; +import people__aarniKoskela from "./people/aarni-koskela"; +import people__adamMiskiewicz from "./people/adam-miskiewicz"; +import people__aleksandra from "./people/aleksandra"; +import people__aleksiPousar from "./people/aleksi-pousar"; +import people__alexBooker from "./people/alex-booker"; +import people__anastasiia from "./people/anastasiia"; +import people__andreas from "./people/andreas"; +import people__andrei from "./people/andrei"; +import people__andrewRhyne from "./people/andrew-rhyne"; +import people__andreyG from "./people/andrey-g"; +import people__andreyOkonetchnikov from "./people/andrey-okonetchnikov"; +import people__annaDoubkova from "./people/anna-doubkova"; +import people__ante from "./people/ante"; +import people__artemSapegin from "./people/artem-sapegin"; +import people__artemZakharchenko from "./people/artem-zakharchenko"; +import people__aurora from "./people/aurora"; +import people__barry from "./people/barry"; +import people__ben from "./people/ben"; +import people__benjieGillam from "./people/benjie-gillam"; +import people__bodil from "./people/bodil"; +import people__bohdanLiashenko from "./people/bohdan-liashenko"; +import people__brent from "./people/brent"; +import people__brunoLourenco from "./people/bruno-lourenco"; +import people__calin from "./people/calin"; +import people__calinb from "./people/calinb"; +import people__carolynStransky from "./people/carolyn-stransky"; +import people__charlie from "./people/charlie"; +import people__christianAlfoni from "./people/christian-alfoni"; +import people__christofferNiska from "./people/christoffer-niska"; +import people__danSchafer from "./people/dan-schafer"; +import people__danielE from "./people/daniel-e"; +import people__danielM from "./people/daniel-m"; +import people__daniel from "./people/daniel"; +import people__dario from "./people/dario"; +import people__davidC from "./people/david-c"; +import people__davidKhourshid from "./people/david-khourshid"; +import people__david from "./people/david"; +import people__devlin from "./people/devlin"; +import people__diegoHaz from "./people/diego-haz"; +import people__dmitriy from "./people/dmitriy"; +import people__doug from "./people/doug"; +import people__dragos from "./people/dragos"; +import people__dustinSchau from "./people/dustin-schau"; +import people__eemeliAro from "./people/eemeli-aro"; +import people__eevis from "./people/eevis"; +import people__eli from "./people/eli"; +import people__elisa from "./people/elisa"; +import people__ellieDay from "./people/ellie-day"; +import people__eloyDuran from "./people/eloy-duran"; +import people__emilia from "./people/emilia"; +import people__emma from "./people/emma"; +import people__emmi from "./people/emmi"; +import people__erikRasmussen from "./people/erik-rasmussen"; +import people__esaMatti from "./people/esa-matti"; +import people__ewa from "./people/ewa"; +import people__facundo from "./people/facundo"; +import people__farzadYz from "./people/farzad-yz"; +import people__federico from "./people/federico"; +import people__felix from "./people/felix"; +import people__francois from "./people/francois"; +import people__gantLaborde from "./people/gant-laborde"; +import people__georgeMandis from "./people/george-mandis"; +import people__georgios from "./people/georgios"; +import people__gleb from "./people/gleb"; +import people__glennReyes from "./people/glenn-reyes"; +import people__harriMaatta from "./people/harri-maatta"; +import people__helenZhukova from "./people/helen-zhukova"; +import people__henrik from "./people/henrik"; +import people__isaSilveira from "./people/isa-silveira"; +import people__ivanGoncharov from "./people/ivan-goncharov"; +import people__ivanOrlov from "./people/ivan-orlov"; +import people__jamonHolmgren from "./people/jamon-holmgren"; +import people__jan from "./people/jan"; +import people__janiEvakallio from "./people/jani-evakallio"; +import people__janne from "./people/janne"; +import people__jaredPalmer from "./people/jared-palmer"; +import people__jari from "./people/jari"; +import people__jasmin from "./people/jasmin"; +import people__jason from "./people/jason"; +import people__je from "./people/je"; +import people__jec from "./people/jec"; +import people__jen from "./people/jen"; +import people__jeremyWagner from "./people/jeremy-wagner"; +import people__jimmyJia from "./people/jimmy-jia"; +import people__jo from "./people/jo"; +import people__joe from "./people/joe"; +import people__johannesSchickling from "./people/johannes-schickling"; +import people__joniNevalainen from "./people/joni-nevalainen"; +import people__joonasP from "./people/joonas-p"; +import people__joonas from "./people/joonas"; +import people__juan from "./people/juan"; +import people__juhaLinnanen from "./people/juha-linnanen"; +import people__juhani from "./people/juhani"; +import people__juhis from "./people/juhis"; +import people__juhoLehtinen from "./people/juho-lehtinen"; +import people__juhoVepsalainen from "./people/juho-vepsalainen"; +import people__julien from "./people/julien"; +import people__juri from "./people/juri"; +import people__jussi from "./people/jussi"; +import people__kadiKraman from "./people/kadi-kraman"; +import people__kasiaJastrzebska from "./people/kasia-jastrzebska"; +import people__kenWheeler from "./people/ken-wheeler"; +import people__kenigboloMeyaStephen from "./people/kenigbolo-meya-stephen"; +import people__kennethSutherland from "./people/kenneth-sutherland"; +import people__kentCDodds from "./people/kent-c-dodds"; +import people__kevin from "./people/kevin"; +import people__kirsi from "./people/kirsi"; +import people__kristaJantti from "./people/krista-jantti"; +import people__kristopher from "./people/kristopher"; +import people__krutie from "./people/krutie"; +import people__lainey from "./people/lainey"; +import people__lauraGonzalez from "./people/laura-gonzalez"; +import people__laura from "./people/laura"; +import people__laurak from "./people/laurak"; +import people__laurao from "./people/laurao"; +import people__lauri from "./people/lauri"; +import people__liran from "./people/liran"; +import people__lucaMatteis from "./people/luca-matteis"; +import people__luca from "./people/luca"; +import people__lukas from "./people/lukas"; +import people__lukeJackson from "./people/luke-jackson"; +import people__m4Dz from "./people/m4dz"; +import people__maaretPyhajarvi from "./people/maaret-pyhajarvi"; +import people__madalyn from "./people/madalyn"; +import people__maggie from "./people/maggie"; +import people__manjula from "./people/manjula"; +import people__manuelMatuzovic from "./people/manuel-matuzovic"; +import people__marcAndreGiroux from "./people/marc-andre-giroux"; +import people__margarita from "./people/margarita"; +import people__marianna from "./people/marianna"; +import people__mario from "./people/mario"; +import people__mark from "./people/mark"; +import people__matias from "./people/matias"; +import people__matt from "./people/matt"; +import people__matteo from "./people/matteo"; +import people__matthewM from "./people/matthew-m"; +import people__matthew from "./people/matthew"; +import people__max from "./people/max"; +import people__michael from "./people/michael"; +import people__michalChudziak from "./people/michal-chudziak"; +import people__michelWeststrate from "./people/michel-weststrate"; +import people__mika from "./people/mika"; +import people__mikeBerman from "./people/mike-berman"; +import people__mikhailNovikov from "./people/mikhail-novikov"; +import people__milecia from "./people/milecia"; +import people__misko from "./people/misko"; +import people__mo from "./people/mo"; +import people__monicaLent from "./people/monica-lent"; +import people__naderDabit from "./people/nader-dabit"; +import people__naman from "./people/naman"; +import people__nasim from "./people/nasim"; +import people__nataliaTepluhina from "./people/natalia-tepluhina"; +import people__nicola from "./people/nicola"; +import people__nidhi from "./people/nidhi"; +import people__nikGraf from "./people/nik-graf"; +import people__niklas from "./people/niklas"; +import people__norbert from "./people/norbert"; +import people__nur from "./people/nur"; +import people__ohans from "./people/ohans"; +import people__olavi from "./people/olavi"; +import people__pasi from "./people/pasi"; +import people__patrickEcker from "./people/patrick-ecker"; +import people__patrickHund from "./people/patrick-hund"; +import people__paul from "./people/paul"; +import people__pekka from "./people/pekka"; +import people__pete from "./people/pete"; +import people__rachelNabors from "./people/rachel-nabors"; +import people__rami from "./people/rami"; +import people__ramona from "./people/ramona"; +import people__rashmi from "./people/rashmi"; +import people__rebeccaHill from "./people/rebecca-hill"; +import people__rickHanlon from "./people/rick-hanlon"; +import people__rob from "./people/rob"; +import people__roosa from "./people/roosa"; +import people__rotemMizrachiMeidan from "./people/rotem-mizrachi-meidan"; +import people__ryan from "./people/ryan"; +import people__saku from "./people/saku"; +import people__salla from "./people/salla"; +import people__samuel from "./people/samuel"; +import people__samuliHakoniemi from "./people/samuli-hakoniemi"; +import people__saraVieira from "./people/sara-vieira"; +import people__satu from "./people/satu"; +import people__sebastian from "./people/sebastian"; +import people__shane from "./people/shane"; +import people__shayKeinan from "./people/shay-keinan"; +import people__shodipo from "./people/shodipo"; +import people__siaKaramalegos from "./people/sia-karamalegos"; +import people__stephanie from "./people/stephanie"; +import people__steve from "./people/steve"; +import people__sunil from "./people/sunil"; +import people__svenSauleau from "./people/sven-sauleau"; +import people__taelurAlexis from "./people/taelur-alexis"; +import people__tanja from "./people/tanja"; +import people__tanmaiGopal from "./people/tanmai-gopal"; +import people__tejasKumar from "./people/tejas-kumar"; +import people__teroParviainen from "./people/tero-parviainen"; +import people__thaisSantos from "./people/thais-santos"; +import people__thomas from "./people/thomas"; +import people__tobiasTimm from "./people/tobias-timm"; +import people__tomasKonrady from "./people/tomas-konrady"; +import people__toniRistola from "./people/toni-ristola"; +import people__tonyEnnis from "./people/tony-ennis"; +import people__tonyKovanen from "./people/tony-kovanen"; +import people__travis from "./people/travis"; +import people__tuuliTiilikainen from "./people/tuuli-tiilikainen"; +import people__uj from "./people/uj"; +import people__una from "./people/una"; +import people__varyaStepanova from "./people/varya-stepanova"; +import people__villeImmonen from "./people/ville-immonen"; +import people__villePelkonen from "./people/ville-pelkonen"; +import people__vismit from "./people/vismit"; +import people__vivekNayyar from "./people/vivek-nayyar"; +import people__woody from "./people/woody"; +import people__xiaoru from "./people/xiaoru"; +import people__yan from "./people/yan"; +import people__yang from "./people/yang"; +import people__yoav from "./people/yoav"; +import people__yulia from "./people/yulia"; +import people__zak from "./people/zak"; + +export const people = { + aapeli: people__aapeli, + aarniKoskela: people__aarniKoskela, + adamMiskiewicz: people__adamMiskiewicz, + aleksandra: people__aleksandra, + aleksiPousar: people__aleksiPousar, + alexBooker: people__alexBooker, + anastasiia: people__anastasiia, + andreas: people__andreas, + andrei: people__andrei, + andrewRhyne: people__andrewRhyne, + andreyG: people__andreyG, + andreyOkonetchnikov: people__andreyOkonetchnikov, + annaDoubkova: people__annaDoubkova, + ante: people__ante, + artemSapegin: people__artemSapegin, + artemZakharchenko: people__artemZakharchenko, + aurora: people__aurora, + barry: people__barry, + ben: people__ben, + benjieGillam: people__benjieGillam, + bodil: people__bodil, + bohdanLiashenko: people__bohdanLiashenko, + brent: people__brent, + brunoLourenco: people__brunoLourenco, + calin: people__calin, + calinb: people__calinb, + carolynStransky: people__carolynStransky, + charlie: people__charlie, + christianAlfoni: people__christianAlfoni, + christofferNiska: people__christofferNiska, + danSchafer: people__danSchafer, + danielE: people__danielE, + danielM: people__danielM, + daniel: people__daniel, + dario: people__dario, + davidC: people__davidC, + davidKhourshid: people__davidKhourshid, + david: people__david, + devlin: people__devlin, + diegoHaz: people__diegoHaz, + dmitriy: people__dmitriy, + doug: people__doug, + dragos: people__dragos, + dustinSchau: people__dustinSchau, + eemeliAro: people__eemeliAro, + eevis: people__eevis, + eli: people__eli, + elisa: people__elisa, + ellieDay: people__ellieDay, + eloyDuran: people__eloyDuran, + emilia: people__emilia, + emma: people__emma, + emmi: people__emmi, + erikRasmussen: people__erikRasmussen, + esaMatti: people__esaMatti, + ewa: people__ewa, + facundo: people__facundo, + farzadYz: people__farzadYz, + federico: people__federico, + felix: people__felix, + francois: people__francois, + gantLaborde: people__gantLaborde, + georgeMandis: people__georgeMandis, + georgios: people__georgios, + gleb: people__gleb, + glennReyes: people__glennReyes, + harriMaatta: people__harriMaatta, + helenZhukova: people__helenZhukova, + henrik: people__henrik, + isaSilveira: people__isaSilveira, + ivanGoncharov: people__ivanGoncharov, + ivanOrlov: people__ivanOrlov, + jamonHolmgren: people__jamonHolmgren, + jan: people__jan, + janiEvakallio: people__janiEvakallio, + janne: people__janne, + jaredPalmer: people__jaredPalmer, + jari: people__jari, + jasmin: people__jasmin, + jason: people__jason, + je: people__je, + jec: people__jec, + jen: people__jen, + jeremyWagner: people__jeremyWagner, + jimmyJia: people__jimmyJia, + jo: people__jo, + joe: people__joe, + johannesSchickling: people__johannesSchickling, + joniNevalainen: people__joniNevalainen, + joonasP: people__joonasP, + joonas: people__joonas, + juan: people__juan, + juhaLinnanen: people__juhaLinnanen, + juhani: people__juhani, + juhis: people__juhis, + juhoLehtinen: people__juhoLehtinen, + juhoVepsalainen: people__juhoVepsalainen, + julien: people__julien, + juri: people__juri, + jussi: people__jussi, + kadiKraman: people__kadiKraman, + kasiaJastrzebska: people__kasiaJastrzebska, + kenWheeler: people__kenWheeler, + kenigboloMeyaStephen: people__kenigboloMeyaStephen, + kennethSutherland: people__kennethSutherland, + kentCDodds: people__kentCDodds, + kevin: people__kevin, + kirsi: people__kirsi, + kristaJantti: people__kristaJantti, + kristopher: people__kristopher, + krutie: people__krutie, + lainey: people__lainey, + lauraGonzalez: people__lauraGonzalez, + laura: people__laura, + laurak: people__laurak, + laurao: people__laurao, + lauri: people__lauri, + liran: people__liran, + lucaMatteis: people__lucaMatteis, + luca: people__luca, + lukas: people__lukas, + lukeJackson: people__lukeJackson, + m4Dz: people__m4Dz, + maaretPyhajarvi: people__maaretPyhajarvi, + madalyn: people__madalyn, + maggie: people__maggie, + manjula: people__manjula, + manuelMatuzovic: people__manuelMatuzovic, + marcAndreGiroux: people__marcAndreGiroux, + margarita: people__margarita, + marianna: people__marianna, + mario: people__mario, + mark: people__mark, + matias: people__matias, + matt: people__matt, + matteo: people__matteo, + matthewM: people__matthewM, + matthew: people__matthew, + max: people__max, + michael: people__michael, + michalChudziak: people__michalChudziak, + michelWeststrate: people__michelWeststrate, + mika: people__mika, + mikeBerman: people__mikeBerman, + mikhailNovikov: people__mikhailNovikov, + milecia: people__milecia, + misko: people__misko, + mo: people__mo, + monicaLent: people__monicaLent, + naderDabit: people__naderDabit, + naman: people__naman, + nasim: people__nasim, + nataliaTepluhina: people__nataliaTepluhina, + nicola: people__nicola, + nidhi: people__nidhi, + nikGraf: people__nikGraf, + niklas: people__niklas, + norbert: people__norbert, + nur: people__nur, + ohans: people__ohans, + olavi: people__olavi, + pasi: people__pasi, + patrickEcker: people__patrickEcker, + patrickHund: people__patrickHund, + paul: people__paul, + pekka: people__pekka, + pete: people__pete, + rachelNabors: people__rachelNabors, + rami: people__rami, + ramona: people__ramona, + rashmi: people__rashmi, + rebeccaHill: people__rebeccaHill, + rickHanlon: people__rickHanlon, + rob: people__rob, + roosa: people__roosa, + rotemMizrachiMeidan: people__rotemMizrachiMeidan, + ryan: people__ryan, + saku: people__saku, + salla: people__salla, + samuel: people__samuel, + samuliHakoniemi: people__samuliHakoniemi, + saraVieira: people__saraVieira, + satu: people__satu, + sebastian: people__sebastian, + shane: people__shane, + shayKeinan: people__shayKeinan, + shodipo: people__shodipo, + siaKaramalegos: people__siaKaramalegos, + stephanie: people__stephanie, + steve: people__steve, + sunil: people__sunil, + svenSauleau: people__svenSauleau, + taelurAlexis: people__taelurAlexis, + tanja: people__tanja, + tanmaiGopal: people__tanmaiGopal, + tejasKumar: people__tejasKumar, + teroParviainen: people__teroParviainen, + thaisSantos: people__thaisSantos, + thomas: people__thomas, + tobiasTimm: people__tobiasTimm, + tomasKonrady: people__tomasKonrady, + toniRistola: people__toniRistola, + tonyEnnis: people__tonyEnnis, + tonyKovanen: people__tonyKovanen, + travis: people__travis, + tuuliTiilikainen: people__tuuliTiilikainen, + uj: people__uj, + una: people__una, + varyaStepanova: people__varyaStepanova, + villeImmonen: people__villeImmonen, + villePelkonen: people__villePelkonen, + vismit: people__vismit, + vivekNayyar: people__vivekNayyar, + woody: people__woody, + xiaoru: people__xiaoru, + yan: people__yan, + yang: people__yang, + yoav: people__yoav, + yulia: people__yulia, + zak: people__zak, +} as const; + +export const aapeli = people.aapeli; +export const aarniKoskela = people.aarniKoskela; +export const adamMiskiewicz = people.adamMiskiewicz; +export const aleksandra = people.aleksandra; +export const aleksiPousar = people.aleksiPousar; +export const alexBooker = people.alexBooker; +export const anastasiia = people.anastasiia; +export const andreas = people.andreas; +export const andrei = people.andrei; +export const andrewRhyne = people.andrewRhyne; +export const andreyG = people.andreyG; +export const andreyOkonetchnikov = people.andreyOkonetchnikov; +export const annaDoubkova = people.annaDoubkova; +export const ante = people.ante; +export const artemSapegin = people.artemSapegin; +export const artemZakharchenko = people.artemZakharchenko; +export const aurora = people.aurora; +export const barry = people.barry; +export const ben = people.ben; +export const benjieGillam = people.benjieGillam; +export const bodil = people.bodil; +export const bohdanLiashenko = people.bohdanLiashenko; +export const brent = people.brent; +export const brunoLourenco = people.brunoLourenco; +export const calin = people.calin; +export const calinb = people.calinb; +export const carolynStransky = people.carolynStransky; +export const charlie = people.charlie; +export const christianAlfoni = people.christianAlfoni; +export const christofferNiska = people.christofferNiska; +export const danSchafer = people.danSchafer; +export const danielE = people.danielE; +export const danielM = people.danielM; +export const daniel = people.daniel; +export const dario = people.dario; +export const davidC = people.davidC; +export const davidKhourshid = people.davidKhourshid; +export const david = people.david; +export const devlin = people.devlin; +export const diegoHaz = people.diegoHaz; +export const dmitriy = people.dmitriy; +export const doug = people.doug; +export const dragos = people.dragos; +export const dustinSchau = people.dustinSchau; +export const eemeliAro = people.eemeliAro; +export const eevis = people.eevis; +export const eli = people.eli; +export const elisa = people.elisa; +export const ellieDay = people.ellieDay; +export const eloyDuran = people.eloyDuran; +export const emilia = people.emilia; +export const emma = people.emma; +export const emmi = people.emmi; +export const erikRasmussen = people.erikRasmussen; +export const esaMatti = people.esaMatti; +export const ewa = people.ewa; +export const facundo = people.facundo; +export const farzadYz = people.farzadYz; +export const federico = people.federico; +export const felix = people.felix; +export const francois = people.francois; +export const gantLaborde = people.gantLaborde; +export const georgeMandis = people.georgeMandis; +export const georgios = people.georgios; +export const gleb = people.gleb; +export const glennReyes = people.glennReyes; +export const harriMaatta = people.harriMaatta; +export const helenZhukova = people.helenZhukova; +export const henrik = people.henrik; +export const isaSilveira = people.isaSilveira; +export const ivanGoncharov = people.ivanGoncharov; +export const ivanOrlov = people.ivanOrlov; +export const jamonHolmgren = people.jamonHolmgren; +export const jan = people.jan; +export const janiEvakallio = people.janiEvakallio; +export const janne = people.janne; +export const jaredPalmer = people.jaredPalmer; +export const jari = people.jari; +export const jasmin = people.jasmin; +export const jason = people.jason; +export const je = people.je; +export const jec = people.jec; +export const jen = people.jen; +export const jeremyWagner = people.jeremyWagner; +export const jimmyJia = people.jimmyJia; +export const jo = people.jo; +export const joe = people.joe; +export const johannesSchickling = people.johannesSchickling; +export const joniNevalainen = people.joniNevalainen; +export const joonasP = people.joonasP; +export const joonas = people.joonas; +export const juan = people.juan; +export const juhaLinnanen = people.juhaLinnanen; +export const juhani = people.juhani; +export const juhis = people.juhis; +export const juhoLehtinen = people.juhoLehtinen; +export const juhoVepsalainen = people.juhoVepsalainen; +export const julien = people.julien; +export const juri = people.juri; +export const jussi = people.jussi; +export const kadiKraman = people.kadiKraman; +export const kasiaJastrzebska = people.kasiaJastrzebska; +export const kenWheeler = people.kenWheeler; +export const kenigboloMeyaStephen = people.kenigboloMeyaStephen; +export const kennethSutherland = people.kennethSutherland; +export const kentCDodds = people.kentCDodds; +export const kevin = people.kevin; +export const kirsi = people.kirsi; +export const kristaJantti = people.kristaJantti; +export const kristopher = people.kristopher; +export const krutie = people.krutie; +export const lainey = people.lainey; +export const lauraGonzalez = people.lauraGonzalez; +export const laura = people.laura; +export const laurak = people.laurak; +export const laurao = people.laurao; +export const lauri = people.lauri; +export const liran = people.liran; +export const lucaMatteis = people.lucaMatteis; +export const luca = people.luca; +export const lukas = people.lukas; +export const lukeJackson = people.lukeJackson; +export const m4Dz = people.m4Dz; +export const maaretPyhajarvi = people.maaretPyhajarvi; +export const madalyn = people.madalyn; +export const maggie = people.maggie; +export const manjula = people.manjula; +export const manuelMatuzovic = people.manuelMatuzovic; +export const marcAndreGiroux = people.marcAndreGiroux; +export const margarita = people.margarita; +export const marianna = people.marianna; +export const mario = people.mario; +export const mark = people.mark; +export const matias = people.matias; +export const matt = people.matt; +export const matteo = people.matteo; +export const matthewM = people.matthewM; +export const matthew = people.matthew; +export const max = people.max; +export const michael = people.michael; +export const michalChudziak = people.michalChudziak; +export const michelWeststrate = people.michelWeststrate; +export const mika = people.mika; +export const mikeBerman = people.mikeBerman; +export const mikhailNovikov = people.mikhailNovikov; +export const milecia = people.milecia; +export const misko = people.misko; +export const mo = people.mo; +export const monicaLent = people.monicaLent; +export const naderDabit = people.naderDabit; +export const naman = people.naman; +export const nasim = people.nasim; +export const nataliaTepluhina = people.nataliaTepluhina; +export const nicola = people.nicola; +export const nidhi = people.nidhi; +export const nikGraf = people.nikGraf; +export const niklas = people.niklas; +export const norbert = people.norbert; +export const nur = people.nur; +export const ohans = people.ohans; +export const olavi = people.olavi; +export const pasi = people.pasi; +export const patrickEcker = people.patrickEcker; +export const patrickHund = people.patrickHund; +export const paul = people.paul; +export const pekka = people.pekka; +export const pete = people.pete; +export const rachelNabors = people.rachelNabors; +export const rami = people.rami; +export const ramona = people.ramona; +export const rashmi = people.rashmi; +export const rebeccaHill = people.rebeccaHill; +export const rickHanlon = people.rickHanlon; +export const rob = people.rob; +export const roosa = people.roosa; +export const rotemMizrachiMeidan = people.rotemMizrachiMeidan; +export const ryan = people.ryan; +export const saku = people.saku; +export const salla = people.salla; +export const samuel = people.samuel; +export const samuliHakoniemi = people.samuliHakoniemi; +export const saraVieira = people.saraVieira; +export const satu = people.satu; +export const sebastian = people.sebastian; +export const shane = people.shane; +export const shayKeinan = people.shayKeinan; +export const shodipo = people.shodipo; +export const siaKaramalegos = people.siaKaramalegos; +export const stephanie = people.stephanie; +export const steve = people.steve; +export const sunil = people.sunil; +export const svenSauleau = people.svenSauleau; +export const taelurAlexis = people.taelurAlexis; +export const tanja = people.tanja; +export const tanmaiGopal = people.tanmaiGopal; +export const tejasKumar = people.tejasKumar; +export const teroParviainen = people.teroParviainen; +export const thaisSantos = people.thaisSantos; +export const thomas = people.thomas; +export const tobiasTimm = people.tobiasTimm; +export const tomasKonrady = people.tomasKonrady; +export const toniRistola = people.toniRistola; +export const tonyEnnis = people.tonyEnnis; +export const tonyKovanen = people.tonyKovanen; +export const travis = people.travis; +export const tuuliTiilikainen = people.tuuliTiilikainen; +export const uj = people.uj; +export const una = people.una; +export const varyaStepanova = people.varyaStepanova; +export const villeImmonen = people.villeImmonen; +export const villePelkonen = people.villePelkonen; +export const vismit = people.vismit; +export const vivekNayyar = people.vivekNayyar; +export const woody = people.woody; +export const xiaoru = people.xiaoru; +export const yan = people.yan; +export const yang = people.yang; +export const yoav = people.yoav; +export const yulia = people.yulia; +export const zak = people.zak; + +import sponsors__a11Yclub from "./sponsors/a11yclub"; +import sponsors__agentconf from "./sponsors/agentconf"; +import sponsors__alma from "./sponsors/alma"; +import sponsors__amazon from "./sponsors/amazon"; +import sponsors__apidays from "./sponsors/apidays"; +import sponsors__apiops from "./sponsors/apiops"; +import sponsors__apollo from "./sponsors/apollo"; +import sponsors__backscreen from "./sponsors/backscreen"; +import sponsors__bangalore from "./sponsors/bangalore"; +import sponsors__bejs from "./sponsors/bejs"; +import sponsors__brella from "./sponsors/brella"; +import sponsors__cai from "./sponsors/cai"; +import sponsors__codento from "./sponsors/codento"; +import sponsors__columbiaroad from "./sponsors/columbiaroad"; +import sponsors__cybercom from "./sponsors/cybercom"; +import sponsors__designsystemslondon from "./sponsors/designsystemslondon"; +import sponsors__digia from "./sponsors/digia"; +import sponsors__digitalExpert from "./sponsors/digital-expert"; +import sponsors__divriots from "./sponsors/divriots"; +import sponsors__dna325 from "./sponsors/dna325"; +import sponsors__dojs from "./sponsors/dojs"; +import sponsors__dynatrace from "./sponsors/dynatrace"; +import sponsors__elisa from "./sponsors/elisa"; +import sponsors__evitec from "./sponsors/evitec"; +import sponsors__fb from "./sponsors/fb"; +import sponsors__formidable from "./sponsors/formidable"; +import sponsors__frankenjs from "./sponsors/frankenjs"; +import sponsors__friikit from "./sponsors/friikit"; +import sponsors__futurice from "./sponsors/futurice"; +import sponsors__gatsby from "./sponsors/gatsby"; +import sponsors__geekle from "./sponsors/geekle"; +import sponsors__geniem from "./sponsors/geniem"; +import sponsors__ginetta from "./sponsors/ginetta"; +import sponsors__glorium from "./sponsors/glorium"; +import sponsors__gofore from "./sponsors/gofore"; +import sponsors__gqlhongkong from "./sponsors/gqlhongkong"; +import sponsors__graphqlFinland from "./sponsors/graphql-finland"; +import sponsors__grusp from "./sponsors/grusp"; +import sponsors__haagahelia from "./sponsors/haagahelia"; +import sponsors__halfstack from "./sponsors/halfstack"; +import sponsors__hasura from "./sponsors/hasura"; +import sponsors__hbc from "./sponsors/hbc"; +import sponsors__honeypot from "./sponsors/honeypot"; +import sponsors__huuva from "./sponsors/huuva"; +import sponsors__jscamp from "./sponsors/jscamp"; +import sponsors__jsconfbp from "./sponsors/jsconfbp"; +import sponsors__jsday from "./sponsors/jsday"; +import sponsors__jskongress from "./sponsors/jskongress"; +import sponsors__jsn from "./sponsors/jsn"; +import sponsors__knowit from "./sponsors/knowit"; +import sponsors__kongres from "./sponsors/kongres"; +import sponsors__koodiasuomesta from "./sponsors/koodiasuomesta"; +import sponsors__loihdefactor from "./sponsors/loihdefactor"; +import sponsors__meiko from "./sponsors/meiko"; +import sponsors__monolisa from "./sponsors/monolisa"; +import sponsors__moonhighway from "./sponsors/moonhighway"; +import sponsors__motley from "./sponsors/motley"; +import sponsors__netum from "./sponsors/netum"; +import sponsors__nightingale from "./sponsors/nightingale"; +import sponsors__nitor from "./sponsors/nitor"; +import sponsors__nodecongress from "./sponsors/nodecongress"; +import sponsors__ohjelmistofriikit from "./sponsors/ohjelmistofriikit"; +import sponsors__osaango from "./sponsors/osaango"; +import sponsors__postgraphile from "./sponsors/postgraphile"; +import sponsors__prisma from "./sponsors/prisma"; +import sponsors__quentic from "./sponsors/quentic"; +import sponsors__reactFinland from "./sponsors/react-finland"; +import sponsors__reactalicante from "./sponsors/reactalicante"; +import sponsors__reactbrussels from "./sponsors/reactbrussels"; +import sponsors__reactdayberlin from "./sponsors/reactdayberlin"; +import sponsors__reactfest from "./sponsors/reactfest"; +import sponsors__reactindia from "./sponsors/reactindia"; +import sponsors__reactjsday from "./sponsors/reactjsday"; +import sponsors__reactjsgirls from "./sponsors/reactjsgirls"; +import sponsors__reactnativeeu from "./sponsors/reactnativeeu"; +import sponsors__reactnewyork from "./sponsors/reactnewyork"; +import sponsors__reactnorway from "./sponsors/reactnorway"; +import sponsors__reactparis from "./sponsors/reactparis"; +import sponsors__reactsummit from "./sponsors/reactsummit"; +import sponsors__reactweek from "./sponsors/reactweek"; +import sponsors__reaktor from "./sponsors/reaktor"; +import sponsors__reasonconf from "./sponsors/reasonconf"; +import sponsors__relex from "./sponsors/relex"; +import sponsors__rlc from "./sponsors/rlc"; +import sponsors__rohea from "./sponsors/rohea"; +import sponsors__rp from "./sponsors/rp"; +import sponsors__sae from "./sponsors/sae"; +import sponsors__smartly from "./sponsors/smartly"; +import sponsors__solita from "./sponsors/solita"; +import sponsors__stickermule from "./sponsors/stickermule"; +import sponsors__supermetrics from "./sponsors/supermetrics"; +import sponsors__survivejs from "./sponsors/survivejs"; +import sponsors__techEvents from "./sponsors/tech-events"; +import sponsors__toddle from "./sponsors/toddle"; +import sponsors__toska from "./sponsors/toska"; +import sponsors__twir from "./sponsors/twir"; +import sponsors__typeof from "./sponsors/typeof"; +import sponsors__upcloud from "./sponsors/upcloud"; +import sponsors__utopia from "./sponsors/utopia"; +import sponsors__valamis from "./sponsors/valamis"; +import sponsors__verkkokauppa from "./sponsors/verkkokauppa"; +import sponsors__vihat from "./sponsors/vihat"; +import sponsors__vincit from "./sponsors/vincit"; +import sponsors__webexpo from "./sponsors/webexpo"; +import sponsors__wonna from "./sponsors/wonna"; +import sponsors__wunder from "./sponsors/wunder"; +import sponsors__wunderdog from "./sponsors/wunderdog"; +import sponsors__yglfkyiv from "./sponsors/yglfkyiv"; +import sponsors__yle from "./sponsors/yle"; +import sponsors__zapier from "./sponsors/zapier"; +import sponsors__zeroplusx from "./sponsors/zeroplusx"; +import sponsors__zurichjs from "./sponsors/zurichjs"; + +export const sponsors = { + a11Yclub: sponsors__a11Yclub, + agentconf: sponsors__agentconf, + alma: sponsors__alma, + amazon: sponsors__amazon, + apidays: sponsors__apidays, + apiops: sponsors__apiops, + apollo: sponsors__apollo, + backscreen: sponsors__backscreen, + bangalore: sponsors__bangalore, + bejs: sponsors__bejs, + brella: sponsors__brella, + cai: sponsors__cai, + codento: sponsors__codento, + columbiaroad: sponsors__columbiaroad, + cybercom: sponsors__cybercom, + designsystemslondon: sponsors__designsystemslondon, + digia: sponsors__digia, + digitalExpert: sponsors__digitalExpert, + divriots: sponsors__divriots, + dna325: sponsors__dna325, + dojs: sponsors__dojs, + dynatrace: sponsors__dynatrace, + elisa: sponsors__elisa, + evitec: sponsors__evitec, + fb: sponsors__fb, + formidable: sponsors__formidable, + frankenjs: sponsors__frankenjs, + friikit: sponsors__friikit, + futurice: sponsors__futurice, + gatsby: sponsors__gatsby, + geekle: sponsors__geekle, + geniem: sponsors__geniem, + ginetta: sponsors__ginetta, + glorium: sponsors__glorium, + gofore: sponsors__gofore, + gqlhongkong: sponsors__gqlhongkong, + graphqlFinland: sponsors__graphqlFinland, + grusp: sponsors__grusp, + haagahelia: sponsors__haagahelia, + halfstack: sponsors__halfstack, + hasura: sponsors__hasura, + hbc: sponsors__hbc, + honeypot: sponsors__honeypot, + huuva: sponsors__huuva, + jscamp: sponsors__jscamp, + jsconfbp: sponsors__jsconfbp, + jsday: sponsors__jsday, + jskongress: sponsors__jskongress, + jsn: sponsors__jsn, + knowit: sponsors__knowit, + kongres: sponsors__kongres, + koodiasuomesta: sponsors__koodiasuomesta, + loihdefactor: sponsors__loihdefactor, + meiko: sponsors__meiko, + monolisa: sponsors__monolisa, + moonhighway: sponsors__moonhighway, + motley: sponsors__motley, + netum: sponsors__netum, + nightingale: sponsors__nightingale, + nitor: sponsors__nitor, + nodecongress: sponsors__nodecongress, + ohjelmistofriikit: sponsors__ohjelmistofriikit, + osaango: sponsors__osaango, + postgraphile: sponsors__postgraphile, + prisma: sponsors__prisma, + quentic: sponsors__quentic, + reactFinland: sponsors__reactFinland, + reactalicante: sponsors__reactalicante, + reactbrussels: sponsors__reactbrussels, + reactdayberlin: sponsors__reactdayberlin, + reactfest: sponsors__reactfest, + reactindia: sponsors__reactindia, + reactjsday: sponsors__reactjsday, + reactjsgirls: sponsors__reactjsgirls, + reactnativeeu: sponsors__reactnativeeu, + reactnewyork: sponsors__reactnewyork, + reactnorway: sponsors__reactnorway, + reactparis: sponsors__reactparis, + reactsummit: sponsors__reactsummit, + reactweek: sponsors__reactweek, + reaktor: sponsors__reaktor, + reasonconf: sponsors__reasonconf, + relex: sponsors__relex, + rlc: sponsors__rlc, + rohea: sponsors__rohea, + rp: sponsors__rp, + sae: sponsors__sae, + smartly: sponsors__smartly, + solita: sponsors__solita, + stickermule: sponsors__stickermule, + supermetrics: sponsors__supermetrics, + survivejs: sponsors__survivejs, + techEvents: sponsors__techEvents, + toddle: sponsors__toddle, + toska: sponsors__toska, + twir: sponsors__twir, + typeof: sponsors__typeof, + upcloud: sponsors__upcloud, + utopia: sponsors__utopia, + valamis: sponsors__valamis, + verkkokauppa: sponsors__verkkokauppa, + vihat: sponsors__vihat, + vincit: sponsors__vincit, + webexpo: sponsors__webexpo, + wonna: sponsors__wonna, + wunder: sponsors__wunder, + wunderdog: sponsors__wunderdog, + yglfkyiv: sponsors__yglfkyiv, + yle: sponsors__yle, + zapier: sponsors__zapier, + zeroplusx: sponsors__zeroplusx, + zurichjs: sponsors__zurichjs, +} as const; diff --git a/content/generated.ts b/content/generated.ts index 4c6ae4b9..a6133533 100644 --- a/content/generated.ts +++ b/content/generated.ts @@ -1,6 +1,9 @@ // This file is generated by `npm run generate:indices`. // Do not edit it manually. +export * from "./generated-core"; + + import freezingEdge2020Talks__bodil from "./freezing-edge-2020/talks/bodil"; import freezingEdge2020Talks__georgeMandis from "./freezing-edge-2020/talks/george-mandis"; import freezingEdge2020Talks__kenWheeler from "./freezing-edge-2020/talks/ken-wheeler"; @@ -67,754 +70,6 @@ export const graphqlFinland2018Workshops = { nikWorkshop: graphqlFinland2018Workshops__nikWorkshop, } as const; -import locations__alma from "./locations/alma"; -import locations__amanda from "./locations/amanda"; -import locations__ankersaal from "./locations/ankersaal"; -import locations__arkade from "./locations/arkade"; -import locations__babylonHelsinki from "./locations/babylon-helsinki"; -import locations__columbiaroad from "./locations/columbiaroad"; -import locations__dipoli from "./locations/dipoli"; -import locations__elisaAppelsiini from "./locations/elisa-appelsiini"; -import locations__futurice from "./locations/futurice"; -import locations__gofore from "./locations/gofore"; -import locations__hbc from "./locations/hbc"; -import locations__internet from "./locations/internet"; -import locations__loihdefactor from "./locations/loihdefactor"; -import locations__nitor from "./locations/nitor"; -import locations__paasitorni from "./locations/paasitorni"; -import locations__poliisienkesakoti from "./locations/poliisienkesakoti"; -import locations__porssitalo from "./locations/porssitalo"; -import locations__rantasauna from "./locations/rantasauna"; -import locations__rooftopmiami from "./locations/rooftopmiami"; -import locations__saeWien from "./locations/sae-wien"; -import locations__tiivistamo from "./locations/tiivistamo"; -import locations__tuas from "./locations/tuas"; -import locations__upcloud from "./locations/upcloud"; -import locations__valkoinenSali from "./locations/valkoinen-sali"; -import locations__wuWien from "./locations/wu-wien"; -import locations__yle from "./locations/yle"; - -export const locations = { - alma: locations__alma, - amanda: locations__amanda, - ankersaal: locations__ankersaal, - arkade: locations__arkade, - babylonHelsinki: locations__babylonHelsinki, - columbiaroad: locations__columbiaroad, - dipoli: locations__dipoli, - elisaAppelsiini: locations__elisaAppelsiini, - futurice: locations__futurice, - gofore: locations__gofore, - hbc: locations__hbc, - internet: locations__internet, - loihdefactor: locations__loihdefactor, - nitor: locations__nitor, - paasitorni: locations__paasitorni, - poliisienkesakoti: locations__poliisienkesakoti, - porssitalo: locations__porssitalo, - rantasauna: locations__rantasauna, - rooftopmiami: locations__rooftopmiami, - saeWien: locations__saeWien, - tiivistamo: locations__tiivistamo, - tuas: locations__tuas, - upcloud: locations__upcloud, - valkoinenSali: locations__valkoinenSali, - wuWien: locations__wuWien, - yle: locations__yle, -} as const; - -export const alma = locations.alma; -export const amanda = locations.amanda; -export const ankersaal = locations.ankersaal; -export const arkade = locations.arkade; -export const babylonHelsinki = locations.babylonHelsinki; -export const columbiaroad = locations.columbiaroad; -export const dipoli = locations.dipoli; -export const elisaAppelsiini = locations.elisaAppelsiini; -export const futurice = locations.futurice; -export const gofore = locations.gofore; -export const hbc = locations.hbc; -export const internet = locations.internet; -export const loihdefactor = locations.loihdefactor; -export const nitor = locations.nitor; -export const paasitorni = locations.paasitorni; -export const poliisienkesakoti = locations.poliisienkesakoti; -export const porssitalo = locations.porssitalo; -export const rantasauna = locations.rantasauna; -export const rooftopmiami = locations.rooftopmiami; -export const saeWien = locations.saeWien; -export const tiivistamo = locations.tiivistamo; -export const tuas = locations.tuas; -export const upcloud = locations.upcloud; -export const valkoinenSali = locations.valkoinenSali; -export const wuWien = locations.wuWien; -export const yle = locations.yle; - -import people__aapeli from "./people/aapeli"; -import people__aarniKoskela from "./people/aarni-koskela"; -import people__adamMiskiewicz from "./people/adam-miskiewicz"; -import people__aleksandra from "./people/aleksandra"; -import people__aleksiPousar from "./people/aleksi-pousar"; -import people__alexBooker from "./people/alex-booker"; -import people__anastasiia from "./people/anastasiia"; -import people__andreas from "./people/andreas"; -import people__andrei from "./people/andrei"; -import people__andrewRhyne from "./people/andrew-rhyne"; -import people__andreyG from "./people/andrey-g"; -import people__andreyOkonetchnikov from "./people/andrey-okonetchnikov"; -import people__annaDoubkova from "./people/anna-doubkova"; -import people__ante from "./people/ante"; -import people__artemSapegin from "./people/artem-sapegin"; -import people__artemZakharchenko from "./people/artem-zakharchenko"; -import people__aurora from "./people/aurora"; -import people__barry from "./people/barry"; -import people__ben from "./people/ben"; -import people__benjieGillam from "./people/benjie-gillam"; -import people__bodil from "./people/bodil"; -import people__bohdanLiashenko from "./people/bohdan-liashenko"; -import people__brent from "./people/brent"; -import people__brunoLourenco from "./people/bruno-lourenco"; -import people__calin from "./people/calin"; -import people__calinb from "./people/calinb"; -import people__carolynStransky from "./people/carolyn-stransky"; -import people__charlie from "./people/charlie"; -import people__christianAlfoni from "./people/christian-alfoni"; -import people__christofferNiska from "./people/christoffer-niska"; -import people__danSchafer from "./people/dan-schafer"; -import people__danielE from "./people/daniel-e"; -import people__danielM from "./people/daniel-m"; -import people__daniel from "./people/daniel"; -import people__dario from "./people/dario"; -import people__davidC from "./people/david-c"; -import people__davidKhourshid from "./people/david-khourshid"; -import people__david from "./people/david"; -import people__devlin from "./people/devlin"; -import people__diegoHaz from "./people/diego-haz"; -import people__dmitriy from "./people/dmitriy"; -import people__doug from "./people/doug"; -import people__dragos from "./people/dragos"; -import people__dustinSchau from "./people/dustin-schau"; -import people__eemeliAro from "./people/eemeli-aro"; -import people__eevis from "./people/eevis"; -import people__eli from "./people/eli"; -import people__elisa from "./people/elisa"; -import people__ellieDay from "./people/ellie-day"; -import people__eloyDuran from "./people/eloy-duran"; -import people__emilia from "./people/emilia"; -import people__emma from "./people/emma"; -import people__emmi from "./people/emmi"; -import people__erikRasmussen from "./people/erik-rasmussen"; -import people__esaMatti from "./people/esa-matti"; -import people__ewa from "./people/ewa"; -import people__facundo from "./people/facundo"; -import people__farzadYz from "./people/farzad-yz"; -import people__federico from "./people/federico"; -import people__felix from "./people/felix"; -import people__francois from "./people/francois"; -import people__gantLaborde from "./people/gant-laborde"; -import people__georgeMandis from "./people/george-mandis"; -import people__georgios from "./people/georgios"; -import people__gleb from "./people/gleb"; -import people__glennReyes from "./people/glenn-reyes"; -import people__harriMaatta from "./people/harri-maatta"; -import people__helenZhukova from "./people/helen-zhukova"; -import people__henrik from "./people/henrik"; -import people__isaSilveira from "./people/isa-silveira"; -import people__ivanGoncharov from "./people/ivan-goncharov"; -import people__ivanOrlov from "./people/ivan-orlov"; -import people__jamonHolmgren from "./people/jamon-holmgren"; -import people__jan from "./people/jan"; -import people__janiEvakallio from "./people/jani-evakallio"; -import people__janne from "./people/janne"; -import people__jaredPalmer from "./people/jared-palmer"; -import people__jari from "./people/jari"; -import people__jasmin from "./people/jasmin"; -import people__jason from "./people/jason"; -import people__je from "./people/je"; -import people__jec from "./people/jec"; -import people__jen from "./people/jen"; -import people__jeremyWagner from "./people/jeremy-wagner"; -import people__jimmyJia from "./people/jimmy-jia"; -import people__jo from "./people/jo"; -import people__joe from "./people/joe"; -import people__johannesSchickling from "./people/johannes-schickling"; -import people__joniNevalainen from "./people/joni-nevalainen"; -import people__joonasP from "./people/joonas-p"; -import people__joonas from "./people/joonas"; -import people__juan from "./people/juan"; -import people__juhaLinnanen from "./people/juha-linnanen"; -import people__juhani from "./people/juhani"; -import people__juhis from "./people/juhis"; -import people__juhoLehtinen from "./people/juho-lehtinen"; -import people__juhoVepsalainen from "./people/juho-vepsalainen"; -import people__julien from "./people/julien"; -import people__juri from "./people/juri"; -import people__jussi from "./people/jussi"; -import people__kadiKraman from "./people/kadi-kraman"; -import people__kasiaJastrzebska from "./people/kasia-jastrzebska"; -import people__kenWheeler from "./people/ken-wheeler"; -import people__kenigboloMeyaStephen from "./people/kenigbolo-meya-stephen"; -import people__kennethSutherland from "./people/kenneth-sutherland"; -import people__kentCDodds from "./people/kent-c-dodds"; -import people__kevin from "./people/kevin"; -import people__kirsi from "./people/kirsi"; -import people__kristaJantti from "./people/krista-jantti"; -import people__kristopher from "./people/kristopher"; -import people__krutie from "./people/krutie"; -import people__lainey from "./people/lainey"; -import people__lauraGonzalez from "./people/laura-gonzalez"; -import people__laura from "./people/laura"; -import people__laurak from "./people/laurak"; -import people__laurao from "./people/laurao"; -import people__lauri from "./people/lauri"; -import people__liran from "./people/liran"; -import people__lucaMatteis from "./people/luca-matteis"; -import people__luca from "./people/luca"; -import people__lukas from "./people/lukas"; -import people__lukeJackson from "./people/luke-jackson"; -import people__m4Dz from "./people/m4dz"; -import people__maaretPyhajarvi from "./people/maaret-pyhajarvi"; -import people__madalyn from "./people/madalyn"; -import people__maggie from "./people/maggie"; -import people__manjula from "./people/manjula"; -import people__manuelMatuzovic from "./people/manuel-matuzovic"; -import people__marcAndreGiroux from "./people/marc-andre-giroux"; -import people__margarita from "./people/margarita"; -import people__marianna from "./people/marianna"; -import people__mario from "./people/mario"; -import people__mark from "./people/mark"; -import people__matias from "./people/matias"; -import people__matt from "./people/matt"; -import people__matteo from "./people/matteo"; -import people__matthewM from "./people/matthew-m"; -import people__matthew from "./people/matthew"; -import people__max from "./people/max"; -import people__michael from "./people/michael"; -import people__michalChudziak from "./people/michal-chudziak"; -import people__michelWeststrate from "./people/michel-weststrate"; -import people__mika from "./people/mika"; -import people__mikeBerman from "./people/mike-berman"; -import people__mikhailNovikov from "./people/mikhail-novikov"; -import people__milecia from "./people/milecia"; -import people__misko from "./people/misko"; -import people__mo from "./people/mo"; -import people__monicaLent from "./people/monica-lent"; -import people__naderDabit from "./people/nader-dabit"; -import people__naman from "./people/naman"; -import people__nasim from "./people/nasim"; -import people__nataliaTepluhina from "./people/natalia-tepluhina"; -import people__nicola from "./people/nicola"; -import people__nidhi from "./people/nidhi"; -import people__nikGraf from "./people/nik-graf"; -import people__niklas from "./people/niklas"; -import people__norbert from "./people/norbert"; -import people__nur from "./people/nur"; -import people__ohans from "./people/ohans"; -import people__olavi from "./people/olavi"; -import people__pasi from "./people/pasi"; -import people__patrickEcker from "./people/patrick-ecker"; -import people__patrickHund from "./people/patrick-hund"; -import people__paul from "./people/paul"; -import people__pekka from "./people/pekka"; -import people__pete from "./people/pete"; -import people__rachelNabors from "./people/rachel-nabors"; -import people__rami from "./people/rami"; -import people__ramona from "./people/ramona"; -import people__rashmi from "./people/rashmi"; -import people__rebeccaHill from "./people/rebecca-hill"; -import people__rickHanlon from "./people/rick-hanlon"; -import people__rob from "./people/rob"; -import people__roosa from "./people/roosa"; -import people__rotemMizrachiMeidan from "./people/rotem-mizrachi-meidan"; -import people__ryan from "./people/ryan"; -import people__saku from "./people/saku"; -import people__salla from "./people/salla"; -import people__samuel from "./people/samuel"; -import people__samuliHakoniemi from "./people/samuli-hakoniemi"; -import people__saraVieira from "./people/sara-vieira"; -import people__satu from "./people/satu"; -import people__sebastian from "./people/sebastian"; -import people__shane from "./people/shane"; -import people__shayKeinan from "./people/shay-keinan"; -import people__shodipo from "./people/shodipo"; -import people__siaKaramalegos from "./people/sia-karamalegos"; -import people__stephanie from "./people/stephanie"; -import people__steve from "./people/steve"; -import people__sunil from "./people/sunil"; -import people__svenSauleau from "./people/sven-sauleau"; -import people__taelurAlexis from "./people/taelur-alexis"; -import people__tanja from "./people/tanja"; -import people__tanmaiGopal from "./people/tanmai-gopal"; -import people__tejasKumar from "./people/tejas-kumar"; -import people__teroParviainen from "./people/tero-parviainen"; -import people__thaisSantos from "./people/thais-santos"; -import people__thomas from "./people/thomas"; -import people__tobiasTimm from "./people/tobias-timm"; -import people__tomasKonrady from "./people/tomas-konrady"; -import people__toniRistola from "./people/toni-ristola"; -import people__tonyEnnis from "./people/tony-ennis"; -import people__tonyKovanen from "./people/tony-kovanen"; -import people__travis from "./people/travis"; -import people__tuuliTiilikainen from "./people/tuuli-tiilikainen"; -import people__uj from "./people/uj"; -import people__una from "./people/una"; -import people__varyaStepanova from "./people/varya-stepanova"; -import people__villeImmonen from "./people/ville-immonen"; -import people__villePelkonen from "./people/ville-pelkonen"; -import people__vismit from "./people/vismit"; -import people__vivekNayyar from "./people/vivek-nayyar"; -import people__woody from "./people/woody"; -import people__xiaoru from "./people/xiaoru"; -import people__yan from "./people/yan"; -import people__yang from "./people/yang"; -import people__yoav from "./people/yoav"; -import people__yulia from "./people/yulia"; -import people__zak from "./people/zak"; - -export const people = { - aapeli: people__aapeli, - aarniKoskela: people__aarniKoskela, - adamMiskiewicz: people__adamMiskiewicz, - aleksandra: people__aleksandra, - aleksiPousar: people__aleksiPousar, - alexBooker: people__alexBooker, - anastasiia: people__anastasiia, - andreas: people__andreas, - andrei: people__andrei, - andrewRhyne: people__andrewRhyne, - andreyG: people__andreyG, - andreyOkonetchnikov: people__andreyOkonetchnikov, - annaDoubkova: people__annaDoubkova, - ante: people__ante, - artemSapegin: people__artemSapegin, - artemZakharchenko: people__artemZakharchenko, - aurora: people__aurora, - barry: people__barry, - ben: people__ben, - benjieGillam: people__benjieGillam, - bodil: people__bodil, - bohdanLiashenko: people__bohdanLiashenko, - brent: people__brent, - brunoLourenco: people__brunoLourenco, - calin: people__calin, - calinb: people__calinb, - carolynStransky: people__carolynStransky, - charlie: people__charlie, - christianAlfoni: people__christianAlfoni, - christofferNiska: people__christofferNiska, - danSchafer: people__danSchafer, - danielE: people__danielE, - danielM: people__danielM, - daniel: people__daniel, - dario: people__dario, - davidC: people__davidC, - davidKhourshid: people__davidKhourshid, - david: people__david, - devlin: people__devlin, - diegoHaz: people__diegoHaz, - dmitriy: people__dmitriy, - doug: people__doug, - dragos: people__dragos, - dustinSchau: people__dustinSchau, - eemeliAro: people__eemeliAro, - eevis: people__eevis, - eli: people__eli, - elisa: people__elisa, - ellieDay: people__ellieDay, - eloyDuran: people__eloyDuran, - emilia: people__emilia, - emma: people__emma, - emmi: people__emmi, - erikRasmussen: people__erikRasmussen, - esaMatti: people__esaMatti, - ewa: people__ewa, - facundo: people__facundo, - farzadYz: people__farzadYz, - federico: people__federico, - felix: people__felix, - francois: people__francois, - gantLaborde: people__gantLaborde, - georgeMandis: people__georgeMandis, - georgios: people__georgios, - gleb: people__gleb, - glennReyes: people__glennReyes, - harriMaatta: people__harriMaatta, - helenZhukova: people__helenZhukova, - henrik: people__henrik, - isaSilveira: people__isaSilveira, - ivanGoncharov: people__ivanGoncharov, - ivanOrlov: people__ivanOrlov, - jamonHolmgren: people__jamonHolmgren, - jan: people__jan, - janiEvakallio: people__janiEvakallio, - janne: people__janne, - jaredPalmer: people__jaredPalmer, - jari: people__jari, - jasmin: people__jasmin, - jason: people__jason, - je: people__je, - jec: people__jec, - jen: people__jen, - jeremyWagner: people__jeremyWagner, - jimmyJia: people__jimmyJia, - jo: people__jo, - joe: people__joe, - johannesSchickling: people__johannesSchickling, - joniNevalainen: people__joniNevalainen, - joonasP: people__joonasP, - joonas: people__joonas, - juan: people__juan, - juhaLinnanen: people__juhaLinnanen, - juhani: people__juhani, - juhis: people__juhis, - juhoLehtinen: people__juhoLehtinen, - juhoVepsalainen: people__juhoVepsalainen, - julien: people__julien, - juri: people__juri, - jussi: people__jussi, - kadiKraman: people__kadiKraman, - kasiaJastrzebska: people__kasiaJastrzebska, - kenWheeler: people__kenWheeler, - kenigboloMeyaStephen: people__kenigboloMeyaStephen, - kennethSutherland: people__kennethSutherland, - kentCDodds: people__kentCDodds, - kevin: people__kevin, - kirsi: people__kirsi, - kristaJantti: people__kristaJantti, - kristopher: people__kristopher, - krutie: people__krutie, - lainey: people__lainey, - lauraGonzalez: people__lauraGonzalez, - laura: people__laura, - laurak: people__laurak, - laurao: people__laurao, - lauri: people__lauri, - liran: people__liran, - lucaMatteis: people__lucaMatteis, - luca: people__luca, - lukas: people__lukas, - lukeJackson: people__lukeJackson, - m4Dz: people__m4Dz, - maaretPyhajarvi: people__maaretPyhajarvi, - madalyn: people__madalyn, - maggie: people__maggie, - manjula: people__manjula, - manuelMatuzovic: people__manuelMatuzovic, - marcAndreGiroux: people__marcAndreGiroux, - margarita: people__margarita, - marianna: people__marianna, - mario: people__mario, - mark: people__mark, - matias: people__matias, - matt: people__matt, - matteo: people__matteo, - matthewM: people__matthewM, - matthew: people__matthew, - max: people__max, - michael: people__michael, - michalChudziak: people__michalChudziak, - michelWeststrate: people__michelWeststrate, - mika: people__mika, - mikeBerman: people__mikeBerman, - mikhailNovikov: people__mikhailNovikov, - milecia: people__milecia, - misko: people__misko, - mo: people__mo, - monicaLent: people__monicaLent, - naderDabit: people__naderDabit, - naman: people__naman, - nasim: people__nasim, - nataliaTepluhina: people__nataliaTepluhina, - nicola: people__nicola, - nidhi: people__nidhi, - nikGraf: people__nikGraf, - niklas: people__niklas, - norbert: people__norbert, - nur: people__nur, - ohans: people__ohans, - olavi: people__olavi, - pasi: people__pasi, - patrickEcker: people__patrickEcker, - patrickHund: people__patrickHund, - paul: people__paul, - pekka: people__pekka, - pete: people__pete, - rachelNabors: people__rachelNabors, - rami: people__rami, - ramona: people__ramona, - rashmi: people__rashmi, - rebeccaHill: people__rebeccaHill, - rickHanlon: people__rickHanlon, - rob: people__rob, - roosa: people__roosa, - rotemMizrachiMeidan: people__rotemMizrachiMeidan, - ryan: people__ryan, - saku: people__saku, - salla: people__salla, - samuel: people__samuel, - samuliHakoniemi: people__samuliHakoniemi, - saraVieira: people__saraVieira, - satu: people__satu, - sebastian: people__sebastian, - shane: people__shane, - shayKeinan: people__shayKeinan, - shodipo: people__shodipo, - siaKaramalegos: people__siaKaramalegos, - stephanie: people__stephanie, - steve: people__steve, - sunil: people__sunil, - svenSauleau: people__svenSauleau, - taelurAlexis: people__taelurAlexis, - tanja: people__tanja, - tanmaiGopal: people__tanmaiGopal, - tejasKumar: people__tejasKumar, - teroParviainen: people__teroParviainen, - thaisSantos: people__thaisSantos, - thomas: people__thomas, - tobiasTimm: people__tobiasTimm, - tomasKonrady: people__tomasKonrady, - toniRistola: people__toniRistola, - tonyEnnis: people__tonyEnnis, - tonyKovanen: people__tonyKovanen, - travis: people__travis, - tuuliTiilikainen: people__tuuliTiilikainen, - uj: people__uj, - una: people__una, - varyaStepanova: people__varyaStepanova, - villeImmonen: people__villeImmonen, - villePelkonen: people__villePelkonen, - vismit: people__vismit, - vivekNayyar: people__vivekNayyar, - woody: people__woody, - xiaoru: people__xiaoru, - yan: people__yan, - yang: people__yang, - yoav: people__yoav, - yulia: people__yulia, - zak: people__zak, -} as const; - -export const aapeli = people.aapeli; -export const aarniKoskela = people.aarniKoskela; -export const adamMiskiewicz = people.adamMiskiewicz; -export const aleksandra = people.aleksandra; -export const aleksiPousar = people.aleksiPousar; -export const alexBooker = people.alexBooker; -export const anastasiia = people.anastasiia; -export const andreas = people.andreas; -export const andrei = people.andrei; -export const andrewRhyne = people.andrewRhyne; -export const andreyG = people.andreyG; -export const andreyOkonetchnikov = people.andreyOkonetchnikov; -export const annaDoubkova = people.annaDoubkova; -export const ante = people.ante; -export const artemSapegin = people.artemSapegin; -export const artemZakharchenko = people.artemZakharchenko; -export const aurora = people.aurora; -export const barry = people.barry; -export const ben = people.ben; -export const benjieGillam = people.benjieGillam; -export const bodil = people.bodil; -export const bohdanLiashenko = people.bohdanLiashenko; -export const brent = people.brent; -export const brunoLourenco = people.brunoLourenco; -export const calin = people.calin; -export const calinb = people.calinb; -export const carolynStransky = people.carolynStransky; -export const charlie = people.charlie; -export const christianAlfoni = people.christianAlfoni; -export const christofferNiska = people.christofferNiska; -export const danSchafer = people.danSchafer; -export const danielE = people.danielE; -export const danielM = people.danielM; -export const daniel = people.daniel; -export const dario = people.dario; -export const davidC = people.davidC; -export const davidKhourshid = people.davidKhourshid; -export const david = people.david; -export const devlin = people.devlin; -export const diegoHaz = people.diegoHaz; -export const dmitriy = people.dmitriy; -export const doug = people.doug; -export const dragos = people.dragos; -export const dustinSchau = people.dustinSchau; -export const eemeliAro = people.eemeliAro; -export const eevis = people.eevis; -export const eli = people.eli; -export const elisa = people.elisa; -export const ellieDay = people.ellieDay; -export const eloyDuran = people.eloyDuran; -export const emilia = people.emilia; -export const emma = people.emma; -export const emmi = people.emmi; -export const erikRasmussen = people.erikRasmussen; -export const esaMatti = people.esaMatti; -export const ewa = people.ewa; -export const facundo = people.facundo; -export const farzadYz = people.farzadYz; -export const federico = people.federico; -export const felix = people.felix; -export const francois = people.francois; -export const gantLaborde = people.gantLaborde; -export const georgeMandis = people.georgeMandis; -export const georgios = people.georgios; -export const gleb = people.gleb; -export const glennReyes = people.glennReyes; -export const harriMaatta = people.harriMaatta; -export const helenZhukova = people.helenZhukova; -export const henrik = people.henrik; -export const isaSilveira = people.isaSilveira; -export const ivanGoncharov = people.ivanGoncharov; -export const ivanOrlov = people.ivanOrlov; -export const jamonHolmgren = people.jamonHolmgren; -export const jan = people.jan; -export const janiEvakallio = people.janiEvakallio; -export const janne = people.janne; -export const jaredPalmer = people.jaredPalmer; -export const jari = people.jari; -export const jasmin = people.jasmin; -export const jason = people.jason; -export const je = people.je; -export const jec = people.jec; -export const jen = people.jen; -export const jeremyWagner = people.jeremyWagner; -export const jimmyJia = people.jimmyJia; -export const jo = people.jo; -export const joe = people.joe; -export const johannesSchickling = people.johannesSchickling; -export const joniNevalainen = people.joniNevalainen; -export const joonasP = people.joonasP; -export const joonas = people.joonas; -export const juan = people.juan; -export const juhaLinnanen = people.juhaLinnanen; -export const juhani = people.juhani; -export const juhis = people.juhis; -export const juhoLehtinen = people.juhoLehtinen; -export const juhoVepsalainen = people.juhoVepsalainen; -export const julien = people.julien; -export const juri = people.juri; -export const jussi = people.jussi; -export const kadiKraman = people.kadiKraman; -export const kasiaJastrzebska = people.kasiaJastrzebska; -export const kenWheeler = people.kenWheeler; -export const kenigboloMeyaStephen = people.kenigboloMeyaStephen; -export const kennethSutherland = people.kennethSutherland; -export const kentCDodds = people.kentCDodds; -export const kevin = people.kevin; -export const kirsi = people.kirsi; -export const kristaJantti = people.kristaJantti; -export const kristopher = people.kristopher; -export const krutie = people.krutie; -export const lainey = people.lainey; -export const lauraGonzalez = people.lauraGonzalez; -export const laura = people.laura; -export const laurak = people.laurak; -export const laurao = people.laurao; -export const lauri = people.lauri; -export const liran = people.liran; -export const lucaMatteis = people.lucaMatteis; -export const luca = people.luca; -export const lukas = people.lukas; -export const lukeJackson = people.lukeJackson; -export const m4Dz = people.m4Dz; -export const maaretPyhajarvi = people.maaretPyhajarvi; -export const madalyn = people.madalyn; -export const maggie = people.maggie; -export const manjula = people.manjula; -export const manuelMatuzovic = people.manuelMatuzovic; -export const marcAndreGiroux = people.marcAndreGiroux; -export const margarita = people.margarita; -export const marianna = people.marianna; -export const mario = people.mario; -export const mark = people.mark; -export const matias = people.matias; -export const matt = people.matt; -export const matteo = people.matteo; -export const matthewM = people.matthewM; -export const matthew = people.matthew; -export const max = people.max; -export const michael = people.michael; -export const michalChudziak = people.michalChudziak; -export const michelWeststrate = people.michelWeststrate; -export const mika = people.mika; -export const mikeBerman = people.mikeBerman; -export const mikhailNovikov = people.mikhailNovikov; -export const milecia = people.milecia; -export const misko = people.misko; -export const mo = people.mo; -export const monicaLent = people.monicaLent; -export const naderDabit = people.naderDabit; -export const naman = people.naman; -export const nasim = people.nasim; -export const nataliaTepluhina = people.nataliaTepluhina; -export const nicola = people.nicola; -export const nidhi = people.nidhi; -export const nikGraf = people.nikGraf; -export const niklas = people.niklas; -export const norbert = people.norbert; -export const nur = people.nur; -export const ohans = people.ohans; -export const olavi = people.olavi; -export const pasi = people.pasi; -export const patrickEcker = people.patrickEcker; -export const patrickHund = people.patrickHund; -export const paul = people.paul; -export const pekka = people.pekka; -export const pete = people.pete; -export const rachelNabors = people.rachelNabors; -export const rami = people.rami; -export const ramona = people.ramona; -export const rashmi = people.rashmi; -export const rebeccaHill = people.rebeccaHill; -export const rickHanlon = people.rickHanlon; -export const rob = people.rob; -export const roosa = people.roosa; -export const rotemMizrachiMeidan = people.rotemMizrachiMeidan; -export const ryan = people.ryan; -export const saku = people.saku; -export const salla = people.salla; -export const samuel = people.samuel; -export const samuliHakoniemi = people.samuliHakoniemi; -export const saraVieira = people.saraVieira; -export const satu = people.satu; -export const sebastian = people.sebastian; -export const shane = people.shane; -export const shayKeinan = people.shayKeinan; -export const shodipo = people.shodipo; -export const siaKaramalegos = people.siaKaramalegos; -export const stephanie = people.stephanie; -export const steve = people.steve; -export const sunil = people.sunil; -export const svenSauleau = people.svenSauleau; -export const taelurAlexis = people.taelurAlexis; -export const tanja = people.tanja; -export const tanmaiGopal = people.tanmaiGopal; -export const tejasKumar = people.tejasKumar; -export const teroParviainen = people.teroParviainen; -export const thaisSantos = people.thaisSantos; -export const thomas = people.thomas; -export const tobiasTimm = people.tobiasTimm; -export const tomasKonrady = people.tomasKonrady; -export const toniRistola = people.toniRistola; -export const tonyEnnis = people.tonyEnnis; -export const tonyKovanen = people.tonyKovanen; -export const travis = people.travis; -export const tuuliTiilikainen = people.tuuliTiilikainen; -export const uj = people.uj; -export const una = people.una; -export const varyaStepanova = people.varyaStepanova; -export const villeImmonen = people.villeImmonen; -export const villePelkonen = people.villePelkonen; -export const vismit = people.vismit; -export const vivekNayyar = people.vivekNayyar; -export const woody = people.woody; -export const xiaoru = people.xiaoru; -export const yan = people.yan; -export const yang = people.yang; -export const yoav = people.yoav; -export const yulia = people.yulia; -export const zak = people.zak; - import reactFinland2018Talks__andreyOkonetchnikov from "./react-finland-2018/talks/andrey-okonetchnikov"; import reactFinland2018Talks__christianAlfoni from "./react-finland-2018/talks/christian-alfoni"; import reactFinland2018Talks__davidKhourshid from "./react-finland-2018/talks/david-khourshid"; @@ -1058,231 +313,3 @@ export const rf202001Talks = { kenigboloMeyaStephen: rf202001Talks__kenigboloMeyaStephen, margarita: rf202001Talks__margarita, } as const; - -import sponsors__a11Yclub from "./sponsors/a11yclub"; -import sponsors__agentconf from "./sponsors/agentconf"; -import sponsors__alma from "./sponsors/alma"; -import sponsors__amazon from "./sponsors/amazon"; -import sponsors__apidays from "./sponsors/apidays"; -import sponsors__apiops from "./sponsors/apiops"; -import sponsors__apollo from "./sponsors/apollo"; -import sponsors__backscreen from "./sponsors/backscreen"; -import sponsors__bangalore from "./sponsors/bangalore"; -import sponsors__bejs from "./sponsors/bejs"; -import sponsors__brella from "./sponsors/brella"; -import sponsors__cai from "./sponsors/cai"; -import sponsors__codento from "./sponsors/codento"; -import sponsors__columbiaroad from "./sponsors/columbiaroad"; -import sponsors__cybercom from "./sponsors/cybercom"; -import sponsors__designsystemslondon from "./sponsors/designsystemslondon"; -import sponsors__digia from "./sponsors/digia"; -import sponsors__digitalExpert from "./sponsors/digital-expert"; -import sponsors__divriots from "./sponsors/divriots"; -import sponsors__dna325 from "./sponsors/dna325"; -import sponsors__dojs from "./sponsors/dojs"; -import sponsors__dynatrace from "./sponsors/dynatrace"; -import sponsors__elisa from "./sponsors/elisa"; -import sponsors__evitec from "./sponsors/evitec"; -import sponsors__fb from "./sponsors/fb"; -import sponsors__formidable from "./sponsors/formidable"; -import sponsors__frankenjs from "./sponsors/frankenjs"; -import sponsors__friikit from "./sponsors/friikit"; -import sponsors__futurice from "./sponsors/futurice"; -import sponsors__gatsby from "./sponsors/gatsby"; -import sponsors__geekle from "./sponsors/geekle"; -import sponsors__geniem from "./sponsors/geniem"; -import sponsors__ginetta from "./sponsors/ginetta"; -import sponsors__glorium from "./sponsors/glorium"; -import sponsors__gofore from "./sponsors/gofore"; -import sponsors__gqlhongkong from "./sponsors/gqlhongkong"; -import sponsors__graphqlFinland from "./sponsors/graphql-finland"; -import sponsors__grusp from "./sponsors/grusp"; -import sponsors__haagahelia from "./sponsors/haagahelia"; -import sponsors__halfstack from "./sponsors/halfstack"; -import sponsors__hasura from "./sponsors/hasura"; -import sponsors__hbc from "./sponsors/hbc"; -import sponsors__honeypot from "./sponsors/honeypot"; -import sponsors__huuva from "./sponsors/huuva"; -import sponsors__jscamp from "./sponsors/jscamp"; -import sponsors__jsconfbp from "./sponsors/jsconfbp"; -import sponsors__jsday from "./sponsors/jsday"; -import sponsors__jskongress from "./sponsors/jskongress"; -import sponsors__jsn from "./sponsors/jsn"; -import sponsors__knowit from "./sponsors/knowit"; -import sponsors__kongres from "./sponsors/kongres"; -import sponsors__koodiasuomesta from "./sponsors/koodiasuomesta"; -import sponsors__loihdefactor from "./sponsors/loihdefactor"; -import sponsors__meiko from "./sponsors/meiko"; -import sponsors__monolisa from "./sponsors/monolisa"; -import sponsors__moonhighway from "./sponsors/moonhighway"; -import sponsors__motley from "./sponsors/motley"; -import sponsors__netum from "./sponsors/netum"; -import sponsors__nightingale from "./sponsors/nightingale"; -import sponsors__nitor from "./sponsors/nitor"; -import sponsors__nodecongress from "./sponsors/nodecongress"; -import sponsors__ohjelmistofriikit from "./sponsors/ohjelmistofriikit"; -import sponsors__osaango from "./sponsors/osaango"; -import sponsors__postgraphile from "./sponsors/postgraphile"; -import sponsors__prisma from "./sponsors/prisma"; -import sponsors__quentic from "./sponsors/quentic"; -import sponsors__reactFinland from "./sponsors/react-finland"; -import sponsors__reactalicante from "./sponsors/reactalicante"; -import sponsors__reactbrussels from "./sponsors/reactbrussels"; -import sponsors__reactdayberlin from "./sponsors/reactdayberlin"; -import sponsors__reactfest from "./sponsors/reactfest"; -import sponsors__reactindia from "./sponsors/reactindia"; -import sponsors__reactjsday from "./sponsors/reactjsday"; -import sponsors__reactjsgirls from "./sponsors/reactjsgirls"; -import sponsors__reactnativeeu from "./sponsors/reactnativeeu"; -import sponsors__reactnewyork from "./sponsors/reactnewyork"; -import sponsors__reactnorway from "./sponsors/reactnorway"; -import sponsors__reactparis from "./sponsors/reactparis"; -import sponsors__reactsummit from "./sponsors/reactsummit"; -import sponsors__reactweek from "./sponsors/reactweek"; -import sponsors__reaktor from "./sponsors/reaktor"; -import sponsors__reasonconf from "./sponsors/reasonconf"; -import sponsors__relex from "./sponsors/relex"; -import sponsors__rlc from "./sponsors/rlc"; -import sponsors__rohea from "./sponsors/rohea"; -import sponsors__rp from "./sponsors/rp"; -import sponsors__sae from "./sponsors/sae"; -import sponsors__smartly from "./sponsors/smartly"; -import sponsors__solita from "./sponsors/solita"; -import sponsors__stickermule from "./sponsors/stickermule"; -import sponsors__supermetrics from "./sponsors/supermetrics"; -import sponsors__survivejs from "./sponsors/survivejs"; -import sponsors__techEvents from "./sponsors/tech-events"; -import sponsors__toddle from "./sponsors/toddle"; -import sponsors__toska from "./sponsors/toska"; -import sponsors__twir from "./sponsors/twir"; -import sponsors__typeof from "./sponsors/typeof"; -import sponsors__upcloud from "./sponsors/upcloud"; -import sponsors__utopia from "./sponsors/utopia"; -import sponsors__valamis from "./sponsors/valamis"; -import sponsors__verkkokauppa from "./sponsors/verkkokauppa"; -import sponsors__vihat from "./sponsors/vihat"; -import sponsors__vincit from "./sponsors/vincit"; -import sponsors__webexpo from "./sponsors/webexpo"; -import sponsors__wonna from "./sponsors/wonna"; -import sponsors__wunder from "./sponsors/wunder"; -import sponsors__wunderdog from "./sponsors/wunderdog"; -import sponsors__yglfkyiv from "./sponsors/yglfkyiv"; -import sponsors__yle from "./sponsors/yle"; -import sponsors__zapier from "./sponsors/zapier"; -import sponsors__zeroplusx from "./sponsors/zeroplusx"; -import sponsors__zurichjs from "./sponsors/zurichjs"; - -export const sponsors = { - a11Yclub: sponsors__a11Yclub, - agentconf: sponsors__agentconf, - alma: sponsors__alma, - amazon: sponsors__amazon, - apidays: sponsors__apidays, - apiops: sponsors__apiops, - apollo: sponsors__apollo, - backscreen: sponsors__backscreen, - bangalore: sponsors__bangalore, - bejs: sponsors__bejs, - brella: sponsors__brella, - cai: sponsors__cai, - codento: sponsors__codento, - columbiaroad: sponsors__columbiaroad, - cybercom: sponsors__cybercom, - designsystemslondon: sponsors__designsystemslondon, - digia: sponsors__digia, - digitalExpert: sponsors__digitalExpert, - divriots: sponsors__divriots, - dna325: sponsors__dna325, - dojs: sponsors__dojs, - dynatrace: sponsors__dynatrace, - elisa: sponsors__elisa, - evitec: sponsors__evitec, - fb: sponsors__fb, - formidable: sponsors__formidable, - frankenjs: sponsors__frankenjs, - friikit: sponsors__friikit, - futurice: sponsors__futurice, - gatsby: sponsors__gatsby, - geekle: sponsors__geekle, - geniem: sponsors__geniem, - ginetta: sponsors__ginetta, - glorium: sponsors__glorium, - gofore: sponsors__gofore, - gqlhongkong: sponsors__gqlhongkong, - graphqlFinland: sponsors__graphqlFinland, - grusp: sponsors__grusp, - haagahelia: sponsors__haagahelia, - halfstack: sponsors__halfstack, - hasura: sponsors__hasura, - hbc: sponsors__hbc, - honeypot: sponsors__honeypot, - huuva: sponsors__huuva, - jscamp: sponsors__jscamp, - jsconfbp: sponsors__jsconfbp, - jsday: sponsors__jsday, - jskongress: sponsors__jskongress, - jsn: sponsors__jsn, - knowit: sponsors__knowit, - kongres: sponsors__kongres, - koodiasuomesta: sponsors__koodiasuomesta, - loihdefactor: sponsors__loihdefactor, - meiko: sponsors__meiko, - monolisa: sponsors__monolisa, - moonhighway: sponsors__moonhighway, - motley: sponsors__motley, - netum: sponsors__netum, - nightingale: sponsors__nightingale, - nitor: sponsors__nitor, - nodecongress: sponsors__nodecongress, - ohjelmistofriikit: sponsors__ohjelmistofriikit, - osaango: sponsors__osaango, - postgraphile: sponsors__postgraphile, - prisma: sponsors__prisma, - quentic: sponsors__quentic, - reactFinland: sponsors__reactFinland, - reactalicante: sponsors__reactalicante, - reactbrussels: sponsors__reactbrussels, - reactdayberlin: sponsors__reactdayberlin, - reactfest: sponsors__reactfest, - reactindia: sponsors__reactindia, - reactjsday: sponsors__reactjsday, - reactjsgirls: sponsors__reactjsgirls, - reactnativeeu: sponsors__reactnativeeu, - reactnewyork: sponsors__reactnewyork, - reactnorway: sponsors__reactnorway, - reactparis: sponsors__reactparis, - reactsummit: sponsors__reactsummit, - reactweek: sponsors__reactweek, - reaktor: sponsors__reaktor, - reasonconf: sponsors__reasonconf, - relex: sponsors__relex, - rlc: sponsors__rlc, - rohea: sponsors__rohea, - rp: sponsors__rp, - sae: sponsors__sae, - smartly: sponsors__smartly, - solita: sponsors__solita, - stickermule: sponsors__stickermule, - supermetrics: sponsors__supermetrics, - survivejs: sponsors__survivejs, - techEvents: sponsors__techEvents, - toddle: sponsors__toddle, - toska: sponsors__toska, - twir: sponsors__twir, - typeof: sponsors__typeof, - upcloud: sponsors__upcloud, - utopia: sponsors__utopia, - valamis: sponsors__valamis, - verkkokauppa: sponsors__verkkokauppa, - vihat: sponsors__vihat, - vincit: sponsors__vincit, - webexpo: sponsors__webexpo, - wonna: sponsors__wonna, - wunder: sponsors__wunder, - wunderdog: sponsors__wunderdog, - yglfkyiv: sponsors__yglfkyiv, - yle: sponsors__yle, - zapier: sponsors__zapier, - zeroplusx: sponsors__zeroplusx, - zurichjs: sponsors__zurichjs, -} as const; diff --git a/content/graphql-finland-2018/workshops/juho-workshop.ts b/content/graphql-finland-2018/workshops/juho-workshop.ts index db7d8efd..b1e1b27b 100644 --- a/content/graphql-finland-2018/workshops/juho-workshop.ts +++ b/content/graphql-finland-2018/workshops/juho-workshop.ts @@ -1,6 +1,6 @@ import Keyword from "../../../server/schema/keywords"; import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../generated"; +import { paasitorni } from "../../generated-core"; import juho from "../../people/juho-vepsalainen"; const workshop: Session = { diff --git a/content/graphql-finland-2018/workshops/marc-workshop.ts b/content/graphql-finland-2018/workshops/marc-workshop.ts index 340c26f2..415ac570 100644 --- a/content/graphql-finland-2018/workshops/marc-workshop.ts +++ b/content/graphql-finland-2018/workshops/marc-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; import Keyword from "../../../server/schema/keywords"; -import { paasitorni } from "../../generated"; +import { paasitorni } from "../../generated-core"; import marc from "../../people/marc-andre-giroux"; const workshop: Session = { diff --git a/content/graphql-finland-2018/workshops/mikhail-workshop.ts b/content/graphql-finland-2018/workshops/mikhail-workshop.ts index bb5e5519..700f2b32 100644 --- a/content/graphql-finland-2018/workshops/mikhail-workshop.ts +++ b/content/graphql-finland-2018/workshops/mikhail-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; import Keyword from "../../../server/schema/keywords"; -import { paasitorni } from "../../generated"; +import { paasitorni } from "../../generated-core"; import mikhail from "../../people/mikhail-novikov"; const workshop: Session = { diff --git a/content/graphql-finland-2018/workshops/nik-workshop.ts b/content/graphql-finland-2018/workshops/nik-workshop.ts index 1ced1fb5..5a6cb16a 100644 --- a/content/graphql-finland-2018/workshops/nik-workshop.ts +++ b/content/graphql-finland-2018/workshops/nik-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; import Keyword from "../../../server/schema/keywords"; -import { paasitorni } from "../../generated"; +import { paasitorni } from "../../generated-core"; import nik from "../../people/nik-graf"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/andrey-and-artem-workshop.ts b/content/react-finland-2018/workshops/andrey-and-artem-workshop.ts index 82387bce..e99b7d60 100644 --- a/content/react-finland-2018/workshops/andrey-and-artem-workshop.ts +++ b/content/react-finland-2018/workshops/andrey-and-artem-workshop.ts @@ -1,6 +1,6 @@ import Keyword from "../../../server/schema/keywords"; import { Session, SessionType } from "../../../server/schema/Session"; -import { valkoinenSali } from "../../generated"; +import { valkoinenSali } from "../../generated-core"; import andrey from "../../people/andrey-okonetchnikov"; import artem from "../../people/artem-sapegin"; diff --git a/content/react-finland-2018/workshops/david-khourshid-workshop.ts b/content/react-finland-2018/workshops/david-khourshid-workshop.ts index 73c0869d..478d05e8 100644 --- a/content/react-finland-2018/workshops/david-khourshid-workshop.ts +++ b/content/react-finland-2018/workshops/david-khourshid-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { elisaAppelsiini } from "../../generated"; +import { elisaAppelsiini } from "../../generated-core"; import david from "../../people/david-khourshid"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/gant-laborde-workshop.ts b/content/react-finland-2018/workshops/gant-laborde-workshop.ts index aa664190..181aa190 100644 --- a/content/react-finland-2018/workshops/gant-laborde-workshop.ts +++ b/content/react-finland-2018/workshops/gant-laborde-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { valkoinenSali } from "../../generated"; +import { valkoinenSali } from "../../generated-core"; import gant from "../../people/gant-laborde"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/juho-vepsalainen-workshop.ts b/content/react-finland-2018/workshops/juho-vepsalainen-workshop.ts index 9854708a..288551e0 100644 --- a/content/react-finland-2018/workshops/juho-vepsalainen-workshop.ts +++ b/content/react-finland-2018/workshops/juho-vepsalainen-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { elisaAppelsiini } from "../../generated"; +import { elisaAppelsiini } from "../../generated-core"; import juho from "../../people/juho-vepsalainen"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/michel-weststrate-workshop.ts b/content/react-finland-2018/workshops/michel-weststrate-workshop.ts index 5f9d4317..7a1ec27e 100644 --- a/content/react-finland-2018/workshops/michel-weststrate-workshop.ts +++ b/content/react-finland-2018/workshops/michel-weststrate-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { valkoinenSali } from "../../generated"; +import { valkoinenSali } from "../../generated-core"; import michel from "../../people/michel-weststrate"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/patrick-and-nik-workshop.ts b/content/react-finland-2018/workshops/patrick-and-nik-workshop.ts index a9540070..8cc9617d 100644 --- a/content/react-finland-2018/workshops/patrick-and-nik-workshop.ts +++ b/content/react-finland-2018/workshops/patrick-and-nik-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { elisaAppelsiini } from "../../generated"; +import { elisaAppelsiini } from "../../generated-core"; import nik from "../../people/nik-graf"; import patrick from "../../people/patrick-ecker"; diff --git a/content/react-finland-2018/workshops/rotem-mizrachi-meidan-workshop.ts b/content/react-finland-2018/workshops/rotem-mizrachi-meidan-workshop.ts index 24707ca1..892287c1 100644 --- a/content/react-finland-2018/workshops/rotem-mizrachi-meidan-workshop.ts +++ b/content/react-finland-2018/workshops/rotem-mizrachi-meidan-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { valkoinenSali } from "../../generated"; +import { valkoinenSali } from "../../generated-core"; import rotem from "../../people/rotem-mizrachi-meidan"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/sara-vieira-workshop.ts b/content/react-finland-2018/workshops/sara-vieira-workshop.ts index bfc0b3c3..92865a74 100644 --- a/content/react-finland-2018/workshops/sara-vieira-workshop.ts +++ b/content/react-finland-2018/workshops/sara-vieira-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { valkoinenSali } from "../../generated"; +import { valkoinenSali } from "../../generated-core"; import sara from "../../people/sara-vieira"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/sia-karamalegos-workshop.ts b/content/react-finland-2018/workshops/sia-karamalegos-workshop.ts index 61db409b..dd03cd51 100644 --- a/content/react-finland-2018/workshops/sia-karamalegos-workshop.ts +++ b/content/react-finland-2018/workshops/sia-karamalegos-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { elisaAppelsiini } from "../../generated"; +import { elisaAppelsiini } from "../../generated-core"; import sia from "../../people/sia-karamalegos"; const workshop: Session = { diff --git a/content/react-finland-2018/workshops/sven-sauleau-workshop.ts b/content/react-finland-2018/workshops/sven-sauleau-workshop.ts index c9c5bd8b..ccddccf2 100644 --- a/content/react-finland-2018/workshops/sven-sauleau-workshop.ts +++ b/content/react-finland-2018/workshops/sven-sauleau-workshop.ts @@ -1,5 +1,5 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { elisaAppelsiini } from "../../generated"; +import { elisaAppelsiini } from "../../generated-core"; import sven from "../../people/sven-sauleau"; const workshop: Session = { diff --git a/content/react-finland-2019/workshops/andrey-and-artem-workshop.ts b/content/react-finland-2019/workshops/andrey-and-artem-workshop.ts index 9424425d..dd58dfaf 100644 --- a/content/react-finland-2019/workshops/andrey-and-artem-workshop.ts +++ b/content/react-finland-2019/workshops/andrey-and-artem-workshop.ts @@ -1,6 +1,6 @@ import Keyword from "../../../server/schema/keywords"; import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../generated"; +import { paasitorni } from "../../generated-core"; import andrey from "../../people/andrey-okonetchnikov"; import artem from "../../people/artem-sapegin"; diff --git a/content/react-finland-2019/workshops/david-khourshid-workshop.ts b/content/react-finland-2019/workshops/david-khourshid-workshop.ts index 4a47fd58..24a23c35 100644 --- a/content/react-finland-2019/workshops/david-khourshid-workshop.ts +++ b/content/react-finland-2019/workshops/david-khourshid-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../generated"; -import { davidKhourshid } from "../../generated"; +import { paasitorni } from "../../generated-core"; +import { davidKhourshid } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2019/workshops/glenn-reyes-workshop.ts b/content/react-finland-2019/workshops/glenn-reyes-workshop.ts index cd33a202..7893ade9 100644 --- a/content/react-finland-2019/workshops/glenn-reyes-workshop.ts +++ b/content/react-finland-2019/workshops/glenn-reyes-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../generated"; -import { glennReyes } from "../../generated"; +import { paasitorni } from "../../generated-core"; +import { glennReyes } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2019/workshops/michel-workshop.ts b/content/react-finland-2019/workshops/michel-workshop.ts index 8e13cf66..c25cda86 100644 --- a/content/react-finland-2019/workshops/michel-workshop.ts +++ b/content/react-finland-2019/workshops/michel-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../generated"; -import { michelWeststrate } from "../../generated"; +import { paasitorni } from "../../generated-core"; +import { michelWeststrate } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2019/workshops/nik-workshop.ts b/content/react-finland-2019/workshops/nik-workshop.ts index 01473620..2072187f 100644 --- a/content/react-finland-2019/workshops/nik-workshop.ts +++ b/content/react-finland-2019/workshops/nik-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../generated"; -import { nikGraf } from "../../generated"; +import { paasitorni } from "../../generated-core"; +import { nikGraf } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2019/workshops/performance-workshop.ts b/content/react-finland-2019/workshops/performance-workshop.ts index 263d5dfb..30d4b8d7 100644 --- a/content/react-finland-2019/workshops/performance-workshop.ts +++ b/content/react-finland-2019/workshops/performance-workshop.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { paasitorni } from "../../generated"; -import { saraVieira } from "../../generated"; +import { paasitorni } from "../../generated-core"; +import { saraVieira } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/advanced-react.ts b/content/react-finland-2020/workshops/advanced-react.ts index 15f3124f..ade1abf6 100644 --- a/content/react-finland-2020/workshops/advanced-react.ts +++ b/content/react-finland-2020/workshops/advanced-react.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../generated"; -import { nikGraf } from "../../generated"; +import { internet } from "../../generated-core"; +import { nikGraf } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/design-systems-101.ts b/content/react-finland-2020/workshops/design-systems-101.ts index 6e9ccd5a..1ef47aac 100644 --- a/content/react-finland-2020/workshops/design-systems-101.ts +++ b/content/react-finland-2020/workshops/design-systems-101.ts @@ -1,6 +1,6 @@ import Keyword from "../../../server/schema/keywords"; import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../generated"; +import { internet } from "../../generated-core"; import andrey from "../../people/andrey-okonetchnikov"; import varya from "../../people/varya-stepanova"; diff --git a/content/react-finland-2020/workshops/design-systems.ts b/content/react-finland-2020/workshops/design-systems.ts index 39a241f7..59cc75a8 100644 --- a/content/react-finland-2020/workshops/design-systems.ts +++ b/content/react-finland-2020/workshops/design-systems.ts @@ -1,6 +1,6 @@ import Keyword from "../../../server/schema/keywords"; import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../generated"; +import { internet } from "../../generated-core"; import andrey from "../../people/andrey-okonetchnikov"; const workshop: Session = { diff --git a/content/react-finland-2020/workshops/from-legacy-to-react.ts b/content/react-finland-2020/workshops/from-legacy-to-react.ts index 5450bce0..e8b1b21b 100644 --- a/content/react-finland-2020/workshops/from-legacy-to-react.ts +++ b/content/react-finland-2020/workshops/from-legacy-to-react.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../generated"; -import { kenigboloMeyaStephen } from "../../generated"; +import { internet } from "../../generated-core"; +import { kenigboloMeyaStephen } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/full-stack.ts b/content/react-finland-2020/workshops/full-stack.ts index 300f29fb..d459884c 100644 --- a/content/react-finland-2020/workshops/full-stack.ts +++ b/content/react-finland-2020/workshops/full-stack.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../generated"; -import { naderDabit } from "../../generated"; +import { internet } from "../../generated-core"; +import { naderDabit } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/modern-forms.ts b/content/react-finland-2020/workshops/modern-forms.ts index a77d0192..2b037a42 100644 --- a/content/react-finland-2020/workshops/modern-forms.ts +++ b/content/react-finland-2020/workshops/modern-forms.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../generated"; -import { erikRasmussen } from "../../generated"; +import { internet } from "../../generated-core"; +import { erikRasmussen } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/react-native.ts b/content/react-finland-2020/workshops/react-native.ts index e47b3b21..e7a86906 100644 --- a/content/react-finland-2020/workshops/react-native.ts +++ b/content/react-finland-2020/workshops/react-native.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../generated"; -import { juhaLinnanen, naderDabit } from "../../generated"; +import { internet } from "../../generated-core"; +import { juhaLinnanen, naderDabit } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/react-performance.ts b/content/react-finland-2020/workshops/react-performance.ts index e3a0dc59..d1c742bc 100644 --- a/content/react-finland-2020/workshops/react-performance.ts +++ b/content/react-finland-2020/workshops/react-performance.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../generated"; -import { kentCDodds } from "../../generated"; +import { internet } from "../../generated-core"; +import { kentCDodds } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/resilient-libs.ts b/content/react-finland-2020/workshops/resilient-libs.ts index 6b0637aa..f298de74 100644 --- a/content/react-finland-2020/workshops/resilient-libs.ts +++ b/content/react-finland-2020/workshops/resilient-libs.ts @@ -1,6 +1,6 @@ import Keyword from "../../../server/schema/keywords"; import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../generated"; +import { internet } from "../../generated-core"; import andrey from "../../people/andrey-okonetchnikov"; import artem from "../../people/artem-sapegin"; diff --git a/content/react-finland-2020/workshops/statecharts.ts b/content/react-finland-2020/workshops/statecharts.ts index fc5e2973..5e39546b 100644 --- a/content/react-finland-2020/workshops/statecharts.ts +++ b/content/react-finland-2020/workshops/statecharts.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../generated"; -import { davidKhourshid } from "../../generated"; +import { internet } from "../../generated-core"; +import { davidKhourshid } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/content/react-finland-2020/workshops/testing-react.ts b/content/react-finland-2020/workshops/testing-react.ts index 4d5d41e3..269a8961 100644 --- a/content/react-finland-2020/workshops/testing-react.ts +++ b/content/react-finland-2020/workshops/testing-react.ts @@ -1,6 +1,6 @@ import { Session, SessionType } from "../../../server/schema/Session"; -import { internet } from "../../generated"; -import { kentCDodds } from "../../generated"; +import { internet } from "../../generated-core"; +import { kentCDodds } from "../../generated-core"; const workshop: Session = { type: SessionType.WORKSHOP, diff --git a/package-lock.json b/package-lock.json index 34a3330b..6a2ff35f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "type-graphql": "2.0.0-rc.3" }, "devDependencies": { + "@redwoodjs/agent-ci": "0.6.0", "@types/node": "24.0.3", "glob": "13.0.6", "mri": "1.2.0", @@ -27,6 +28,48 @@ "node": "24.x" } }, + "node_modules/@actions/expressions": { + "version": "0.3.50", + "resolved": "https://registry.npmjs.org/@actions/expressions/-/expressions-0.3.50.tgz", + "integrity": "sha512-raRCCUiRlNYzqyM4d4DGOZ54U1lBtfyEnmB22Br44SRPR9K4Tb/me27xabKBORK1ycJXh93qXhkxx774+6a7tA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@actions/workflow-parser": { + "version": "0.3.43", + "resolved": "https://registry.npmjs.org/@actions/workflow-parser/-/workflow-parser-0.3.43.tgz", + "integrity": "sha512-hghYVU7h//IGf+NaQgZrO7SI2Pre88ZKZQ8sM/1CBx1bEIJM9t9MMAeTCnKOknNaxBScbDPmmpwil26DxKgMwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@actions/expressions": "^0.3.43", + "cronstrue": "^2.21.0", + "yaml": "^2.0.0-8" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@arr/every": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@arr/every/-/every-1.0.1.tgz", + "integrity": "sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/@cloudflare/kv-asset-handler": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.2.tgz", @@ -632,6 +675,58 @@ "node": ">=18.0.0" } }, + "node_modules/@grpc/grpc-js": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.3.tgz", + "integrity": "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", + "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@img/colour": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", @@ -1198,6 +1293,24 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@polka/url": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz", + "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==", + "dev": true, + "license": "MIT" + }, "node_modules/@poppinss/colors": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", @@ -1227,6 +1340,101 @@ "dev": true, "license": "MIT" }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@redwoodjs/agent-ci": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@redwoodjs/agent-ci/-/agent-ci-0.6.0.tgz", + "integrity": "sha512-sZDtLNPA5knljlm/XxqdKtQH48XlrZEv5nk8vORL4FkklRdzULx81QjsVWpixBNrK/qYZt7y1QMw/ANl7lqxlg==", + "dev": true, + "license": "FSL-1.1-MIT", + "dependencies": { + "@actions/workflow-parser": "0.3.43", + "dockerode": "^4.0.2", + "dtu-github-actions": "0.6.0", + "log-update": "^7.2.0", + "minimatch": "^10.2.1", + "yaml": "^2.8.2" + }, + "bin": { + "agent-ci": "dist/cli.js" + }, + "engines": { + "node": ">=22" + } + }, "node_modules/@repeaterjs/repeater": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", @@ -1280,142 +1488,153 @@ "node": ">=18.0.0" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/blake3-wasm": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", - "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/error-stack-parser-es": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", - "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" + "dependencies": { + "safer-buffer": "~2.1.0" } }, - "node_modules/esbuild": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", - "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.3", - "@esbuild/android-arm": "0.27.3", - "@esbuild/android-arm64": "0.27.3", - "@esbuild/android-x64": "0.27.3", - "@esbuild/darwin-arm64": "0.27.3", - "@esbuild/darwin-x64": "0.27.3", - "@esbuild/freebsd-arm64": "0.27.3", - "@esbuild/freebsd-x64": "0.27.3", - "@esbuild/linux-arm": "0.27.3", - "@esbuild/linux-arm64": "0.27.3", - "@esbuild/linux-ia32": "0.27.3", - "@esbuild/linux-loong64": "0.27.3", - "@esbuild/linux-mips64el": "0.27.3", - "@esbuild/linux-ppc64": "0.27.3", - "@esbuild/linux-riscv64": "0.27.3", - "@esbuild/linux-s390x": "0.27.3", - "@esbuild/linux-x64": "0.27.3", - "@esbuild/netbsd-arm64": "0.27.3", - "@esbuild/netbsd-x64": "0.27.3", - "@esbuild/openbsd-arm64": "0.27.3", - "@esbuild/openbsd-x64": "0.27.3", - "@esbuild/openharmony-arm64": "0.27.3", - "@esbuild/sunos-x64": "0.27.3", - "@esbuild/win32-arm64": "0.27.3", - "@esbuild/win32-ia32": "0.27.3", - "@esbuild/win32-x64": "0.27.3" + "node": "18 || 20 || >=22" } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" } }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/glob/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "node_modules/blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "dev": true, "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/glob/node_modules/brace-expansion": { + "node_modules/brace-expansion": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", @@ -1428,14 +1647,612 @@ "node": "18 || 20 || >=22" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, - "license": "BlueOak-1.0.0", + "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", "dependencies": { - "brace-expansion": "^5.0.5" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buildcheck": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.7.tgz", + "integrity": "sha512-lHblz4ahamxpTmnsk+MNTRWsjYKv965MwOrSJyeD588rR3Jcu7swE+0wN5F+PbL5cjgu/9ObkhfzEPuofEMwLA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "license": "ISC" + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cpu-features": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "~0.0.6", + "nan": "^2.19.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/cronstrue": { + "version": "2.59.0", + "resolved": "https://registry.npmjs.org/cronstrue/-/cronstrue-2.59.0.tgz", + "integrity": "sha512-YKGmAy84hKH+hHIIER07VCAHf9u0Ldelx1uU6EBxsRPDXIA1m5fsKmJfyC3xBhw6cVC/1i83VdbL4PvepTrt8A==", + "dev": true, + "license": "MIT", + "bin": { + "cronstrue": "bin/cli.js" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/docker-modem": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.7.tgz", + "integrity": "sha512-XJgGhoR/CLpqshm4d3L7rzH6t8NgDFUIIpztYlLHIApeJjMZKYJMz2zxPsYxnejq5h3ELYSw/RBsi3t5h7gNTA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.15.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/dockerode": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.10.tgz", + "integrity": "sha512-8L/P9JynLBiG7/coiA4FlQXegHltRqS0a+KqI44P1zgQh8QLHTg7FKOwhkBgSJwZTeHsq30WRoVFLuwkfK0YFg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@balena/dockerignore": "^1.0.2", + "@grpc/grpc-js": "^1.11.1", + "@grpc/proto-loader": "^0.7.13", + "docker-modem": "^5.0.7", + "protobufjs": "^7.3.2", + "tar-fs": "^2.1.4", + "uuid": "^10.0.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/dtu-github-actions": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/dtu-github-actions/-/dtu-github-actions-0.6.0.tgz", + "integrity": "sha512-DZF1vpph3/3ZBa57tBLbkVw4Q35AfHGp481Gu8AlxJm4Q6BSfZgEQE0fUW5uFzBoalj28EmXb8urn8fBo6Ro/g==", + "dev": true, + "license": "FSL-1.1-MIT", + "dependencies": { + "body-parser": "^2.2.2", + "jsonc-parser": "^3.3.1", + "minimatch": "^10.2.4", + "polka": "^0.5.2", + "zod": "^3.24.1" + }, + "engines": { + "node": ">=22" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { "node": "18 || 20 || >=22" @@ -1444,6 +2261,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graphql": { "version": "16.13.2", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", @@ -1489,26 +2319,73 @@ "integrity": "sha512-6sfAX+9CgkcPeZ7UiuBwgTGA+M1FYgHrQOXvORhQGd6SiaXbNVkLDcJ9ZSvNgzyChIfH0uPFFOY3Jm4wFZ4qEA==", "license": "MIT", "dependencies": { - "lodash.get": "^4.4.2" + "lodash.get": "^4.4.2" + }, + "peerDependencies": { + "graphql": "^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-scalars": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.25.0.tgz", + "integrity": "sha512-b0xyXZeRFkne4Eq7NAnL400gStGqG/Sx9VqX0A05nHyEbv57UJnWKsjNnrpVqv5e/8N1MUxkt0wwcRXbiyKcFg==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" }, - "peerDependencies": { - "graphql": "^15.0.0 || ^16.0.0" + "engines": { + "node": ">= 0.4" } }, - "node_modules/graphql-scalars": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.25.0.tgz", - "integrity": "sha512-b0xyXZeRFkne4Eq7NAnL400gStGqG/Sx9VqX0A05nHyEbv57UJnWKsjNnrpVqv5e/8N1MUxkt0wwcRXbiyKcFg==", + "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==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "tslib": "^2.5.0" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.8" }, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ical-generator": { @@ -1559,6 +2436,74 @@ } } }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, "node_modules/kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", @@ -1569,6 +2514,13 @@ "node": ">=6" } }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -1576,6 +2528,33 @@ "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", "license": "MIT" }, + "node_modules/log-update": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-7.2.0.tgz", + "integrity": "sha512-iLs7dGSyjZiUgvrUvuD3FndAxVJk+TywBkkkwUSm9HdYoskJalWg5qVsEiXeufPvRVPbCUmNQewg798rx+sPXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.3.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^8.0.0", + "strip-ansi": "^7.2.0", + "wrap-ansi": "^10.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/lru-cache": { "version": "11.2.7", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", @@ -1586,6 +2565,79 @@ "node": "20 || >=22" } }, + "node_modules/matchit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/matchit/-/matchit-1.1.0.tgz", + "integrity": "sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@arr/every": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/miniflare": { "version": "4.20260401.0", "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260401.0.tgz", @@ -1607,6 +2659,22 @@ "node": ">=18.0.0" } }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", @@ -1617,53 +2685,276 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nan": { + "version": "2.26.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.26.2.tgz", + "integrity": "sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/polka": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/polka/-/polka-0.5.2.tgz", + "integrity": "sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^0.5.0", + "trouter": "^2.0.1" + } + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "dev": true, + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "license": "MIT" }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0" - }, "node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", @@ -1676,6 +2967,13 @@ "node": ">=10" } }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, "node_modules/sharp": { "version": "0.34.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", @@ -1721,6 +3019,190 @@ "@img/sharp-win32-x64": "0.34.5" } }, + "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==", + "dev": true, + "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.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ssh2": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.17.0.tgz", + "integrity": "sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.10", + "nan": "^2.23.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/supports-color": { "version": "10.2.2", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", @@ -1734,12 +3216,72 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/trouter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/trouter/-/trouter-2.0.1.tgz", + "integrity": "sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "matchit": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "license": "Unlicense" + }, "node_modules/type-graphql": { "version": "2.0.0-rc.3", "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", @@ -1777,6 +3319,21 @@ } } }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typescript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", @@ -1817,6 +3374,37 @@ "pathe": "^2.0.3" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/workerd": { "version": "1.20260401.1", "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260401.1.tgz", @@ -1873,26 +3461,154 @@ } } }, - "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "node_modules/wrap-ansi": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", + "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "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/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=8" } }, "node_modules/youch": { @@ -1919,9 +3635,48 @@ "@poppinss/exception": "^1.2.2", "error-stack-parser-es": "^1.0.5" } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } }, "dependencies": { + "@actions/expressions": { + "version": "0.3.50", + "resolved": "https://registry.npmjs.org/@actions/expressions/-/expressions-0.3.50.tgz", + "integrity": "sha512-raRCCUiRlNYzqyM4d4DGOZ54U1lBtfyEnmB22Br44SRPR9K4Tb/me27xabKBORK1ycJXh93qXhkxx774+6a7tA==", + "dev": true + }, + "@actions/workflow-parser": { + "version": "0.3.43", + "resolved": "https://registry.npmjs.org/@actions/workflow-parser/-/workflow-parser-0.3.43.tgz", + "integrity": "sha512-hghYVU7h//IGf+NaQgZrO7SI2Pre88ZKZQ8sM/1CBx1bEIJM9t9MMAeTCnKOknNaxBScbDPmmpwil26DxKgMwA==", + "dev": true, + "requires": { + "@actions/expressions": "^0.3.43", + "cronstrue": "^2.21.0", + "yaml": "^2.0.0-8" + } + }, + "@arr/every": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@arr/every/-/every-1.0.1.tgz", + "integrity": "sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==", + "dev": true + }, + "@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "dev": true + }, "@cloudflare/kv-asset-handler": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.2.tgz", @@ -2191,6 +3946,42 @@ "tslib": "^2.8.1" } }, + "@grpc/grpc-js": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.3.tgz", + "integrity": "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==", + "dev": true, + "requires": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "dependencies": { + "@grpc/proto-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", + "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "dev": true, + "requires": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + } + } + } + }, + "@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "dev": true, + "requires": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + } + }, "@img/colour": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", @@ -2420,6 +4211,18 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "dev": true + }, + "@polka/url": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz", + "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==", + "dev": true + }, "@poppinss/colors": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", @@ -2446,6 +4249,84 @@ "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", "dev": true }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "dev": true + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "dev": true + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "dev": true + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "dev": true + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dev": true, + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "dev": true + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "dev": true + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "dev": true + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "dev": true + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "dev": true + }, + "@redwoodjs/agent-ci": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@redwoodjs/agent-ci/-/agent-ci-0.6.0.tgz", + "integrity": "sha512-sZDtLNPA5knljlm/XxqdKtQH48XlrZEv5nk8vORL4FkklRdzULx81QjsVWpixBNrK/qYZt7y1QMw/ANl7lqxlg==", + "dev": true, + "requires": { + "@actions/workflow-parser": "0.3.43", + "dockerode": "^4.0.2", + "dtu-github-actions": "0.6.0", + "log-update": "^7.2.0", + "minimatch": "^10.2.1", + "yaml": "^2.8.2" + } + }, "@repeaterjs/repeater": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", @@ -2484,35 +4365,398 @@ "tslib": "^2.6.3" } }, + "ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "requires": { + "environment": "^1.0.0" + } + }, + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "blake3-wasm": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", "dev": true }, + "body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "dev": true, + "requires": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + } + }, + "brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "requires": { + "balanced-match": "^4.0.2" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buildcheck": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.7.tgz", + "integrity": "sha512-lHblz4ahamxpTmnsk+MNTRWsjYKv965MwOrSJyeD588rR3Jcu7swE+0wN5F+PbL5cjgu/9ObkhfzEPuofEMwLA==", + "dev": true, + "optional": true + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "requires": { + "restore-cursor": "^5.0.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, "cookie": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", "dev": true }, + "cpu-features": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", + "dev": true, + "optional": true, + "requires": { + "buildcheck": "~0.0.6", + "nan": "^2.19.0" + } + }, + "cronstrue": { + "version": "2.59.0", + "resolved": "https://registry.npmjs.org/cronstrue/-/cronstrue-2.59.0.tgz", + "integrity": "sha512-YKGmAy84hKH+hHIIER07VCAHf9u0Ldelx1uU6EBxsRPDXIA1m5fsKmJfyC3xBhw6cVC/1i83VdbL4PvepTrt8A==", + "dev": true + }, + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, "detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true }, + "docker-modem": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.7.tgz", + "integrity": "sha512-XJgGhoR/CLpqshm4d3L7rzH6t8NgDFUIIpztYlLHIApeJjMZKYJMz2zxPsYxnejq5h3ELYSw/RBsi3t5h7gNTA==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.15.0" + } + }, + "dockerode": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.10.tgz", + "integrity": "sha512-8L/P9JynLBiG7/coiA4FlQXegHltRqS0a+KqI44P1zgQh8QLHTg7FKOwhkBgSJwZTeHsq30WRoVFLuwkfK0YFg==", + "dev": true, + "requires": { + "@balena/dockerignore": "^1.0.2", + "@grpc/grpc-js": "^1.11.1", + "@grpc/proto-loader": "^0.7.13", + "docker-modem": "^5.0.7", + "protobufjs": "^7.3.2", + "tar-fs": "^2.1.4", + "uuid": "^10.0.0" + } + }, + "dtu-github-actions": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/dtu-github-actions/-/dtu-github-actions-0.6.0.tgz", + "integrity": "sha512-DZF1vpph3/3ZBa57tBLbkVw4Q35AfHGp481Gu8AlxJm4Q6BSfZgEQE0fUW5uFzBoalj28EmXb8urn8fBo6Ro/g==", + "dev": true, + "requires": { + "body-parser": "^2.2.2", + "jsonc-parser": "^3.3.1", + "minimatch": "^10.2.4", + "polka": "^0.5.2", + "zod": "^3.24.1" + } + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "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==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true + }, "error-stack-parser-es": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", "dev": true }, + "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==", + "dev": true + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, "esbuild": { "version": "0.27.3", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", @@ -2547,6 +4791,18 @@ "@esbuild/win32-x64": "0.27.3" } }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2554,6 +4810,52 @@ "dev": true, "optional": true }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "requires": { + "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" + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, "glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -2563,34 +4865,14 @@ "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" - }, - "dependencies": { - "balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true - }, - "brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "requires": { - "balanced-match": "^4.0.2" - } - }, - "minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "requires": { - "brace-expansion": "^5.0.5" - } - } } }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true + }, "graphql": { "version": "16.13.2", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", @@ -2627,29 +4909,160 @@ "tslib": "^2.5.0" } }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "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==", + "dev": true, + "requires": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + } + }, "ical-generator": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-10.1.0.tgz", "integrity": "sha512-VgWzox2svupw4HoZo9Ym0pmj50Cr7CO+By/TraNUVTXQL5Qh0p13iGNzizhXd/KDuzOHUSSXwUWIMZmBHQU65Q==", "requires": {} }, + "iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "requires": { + "get-east-asian-width": "^1.3.1" + } + }, + "jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true + }, "kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, + "log-update": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-7.2.0.tgz", + "integrity": "sha512-iLs7dGSyjZiUgvrUvuD3FndAxVJk+TywBkkkwUSm9HdYoskJalWg5qVsEiXeufPvRVPbCUmNQewg798rx+sPXg==", + "dev": true, + "requires": { + "ansi-escapes": "^7.3.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^8.0.0", + "strip-ansi": "^7.2.0", + "wrap-ansi": "^10.0.0" + } + }, + "long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "dev": true + }, "lru-cache": { "version": "11.2.7", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", "dev": true }, + "matchit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/matchit/-/matchit-1.1.0.tgz", + "integrity": "sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==", + "dev": true, + "requires": { + "@arr/every": "^1.0.0" + } + }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true + }, + "media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true + }, + "mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true + }, + "mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "requires": { + "mime-db": "^1.54.0" + } + }, + "mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true + }, "miniflare": { "version": "4.20260401.0", "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260401.0.tgz", @@ -2664,18 +5077,79 @@ "youch": "4.1.0-beta.10" } }, + "minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "requires": { + "brace-expansion": "^5.0.5" + } + }, "minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nan": { + "version": "2.26.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.26.2.tgz", + "integrity": "sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==", + "dev": true, + "optional": true + }, + "object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "requires": { + "mimic-function": "^5.0.0" + } + }, "path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -2698,16 +5172,122 @@ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true }, + "polka": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/polka/-/polka-0.5.2.tgz", + "integrity": "sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==", + "dev": true, + "requires": { + "@polka/url": "^0.5.0", + "trouter": "^2.0.1" + } + }, + "protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "dev": true, + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + } + }, + "pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "dev": true, + "requires": { + "side-channel": "^1.1.0" + } + }, + "raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "dev": true, + "requires": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "reflect-metadata": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "requires": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==" }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, "sharp": { "version": "0.34.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", @@ -2743,17 +5323,179 @@ "semver": "^7.7.3" } }, + "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==", + "dev": true, + "requires": { + "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" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "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==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "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==", + "dev": true, + "requires": { + "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" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "dev": true, + "requires": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + } + }, + "split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", + "dev": true + }, + "ssh2": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.17.0.tgz", + "integrity": "sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==", + "dev": true, + "requires": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2", + "cpu-features": "~0.0.10", + "nan": "^2.23.0" + } + }, + "statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", + "dev": true, + "requires": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + } + }, + "strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "requires": { + "ansi-regex": "^6.2.2" + } + }, "supports-color": { "version": "10.2.2", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", "dev": true }, + "tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "trouter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/trouter/-/trouter-2.0.1.tgz", + "integrity": "sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==", + "dev": true, + "requires": { + "matchit": "^1.0.0" + } + }, "tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, "type-graphql": { "version": "2.0.0-rc.3", "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", @@ -2767,6 +5509,17 @@ "tslib": "^2.8.1" } }, + "type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "requires": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + } + }, "typescript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", @@ -2793,6 +5546,24 @@ "pathe": "^2.0.3" } }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "dev": true + }, "workerd": { "version": "1.20260401.1", "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260401.1.tgz", @@ -2823,6 +5594,23 @@ "workerd": "1.20260401.1" } }, + "wrap-ansi": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", + "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0", + "strip-ansi": "^7.1.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, "ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", @@ -2830,6 +5618,73 @@ "dev": true, "requires": {} }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, "youch": { "version": "4.1.0-beta.10", "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz", @@ -2852,6 +5707,12 @@ "@poppinss/exception": "^1.2.2", "error-stack-parser-es": "^1.0.5" } + }, + "zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true } } } diff --git a/package.json b/package.json index baaccaa0..a7b35da3 100644 --- a/package.json +++ b/package.json @@ -3,13 +3,21 @@ "version": "0.0.0", "private": true, "description": "React Finland GraphQL API", + "packageManager": "npm@11.11.0", "scripts": { + "agent-ci:patch": "node ./scripts/patch-agent-ci.mjs", "generate:indices": "tsc && node build/utils/generate-indices.js content --verbose", + "cf:check": "TOKEN=test-token HOME=$PWD wrangler deploy --dry-run --outdir .wrangler-dry-run", "cf:deploy": "wrangler deploy", "cf:dev": "wrangler dev", + "ci:local": "npm run agent-ci:patch && node ./scripts/run-agent-ci.mjs run --workflow .github/workflows/ci.yml", + "ci:local:quiet": "npm run agent-ci:patch && node ./scripts/run-agent-ci.mjs run --quiet --workflow .github/workflows/ci.yml", + "ci:local:all": "npm run agent-ci:patch && node ./scripts/run-agent-ci.mjs run --all", + "ci:local:retry": "npm run agent-ci:patch && node ./scripts/run-agent-ci.mjs retry", "types:check": "tsc --noEmit", "test": "tsc && node --test test/api.e2e.test.cjs", - "quality:gate": "npm run types:check && npm test" + "quality:gate:fast": "npm run types:check && npm test && npm run cf:check", + "quality:gate": "npm run ci:local:quiet" }, "keywords": [], "author": "", @@ -18,6 +26,7 @@ "node": "24.x" }, "devDependencies": { + "@redwoodjs/agent-ci": "0.6.0", "@types/node": "24.0.3", "glob": "13.0.6", "mri": "1.2.0", diff --git a/scripts/patch-agent-ci.mjs b/scripts/patch-agent-ci.mjs new file mode 100644 index 00000000..aec6b13c --- /dev/null +++ b/scripts/patch-agent-ci.mjs @@ -0,0 +1,49 @@ +import fs from "node:fs"; +import path from "node:path"; + +const repoRoot = process.cwd(); +const packageJsonPath = path.join(repoRoot, "package.json"); +const agentCiConfigPath = path.join( + repoRoot, + "node_modules", + "@redwoodjs", + "agent-ci", + "dist", + "docker", + "container-config.js" +); + +const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8")); +const packageManager = String(packageJson.packageManager ?? ""); + +if (!packageManager.startsWith("npm@")) { + process.exit(0); +} + +if (!fs.existsSync(agentCiConfigPath)) { + console.error(`[agent-ci patch] Missing ${agentCiConfigPath}`); + process.exit(1); +} + +const pnpmMountLine = + " `${h(pnpmStoreDir)}:/home/runner/_work/.pnpm-store`,\n"; +const patchComment = + " // graphql-api patch: disable the pnpm store mount for npm-based local CI\n"; + +const source = fs.readFileSync(agentCiConfigPath, "utf8"); + +if (source.includes(patchComment)) { + process.exit(0); +} + +if (!source.includes(pnpmMountLine)) { + console.error( + "[agent-ci patch] Expected pnpm store mount line was not found." + ); + process.exit(1); +} + +fs.writeFileSync( + agentCiConfigPath, + source.replace(pnpmMountLine, patchComment) +); diff --git a/scripts/run-agent-ci.mjs b/scripts/run-agent-ci.mjs new file mode 100644 index 00000000..10d6b802 --- /dev/null +++ b/scripts/run-agent-ci.mjs @@ -0,0 +1,47 @@ +import { execFileSync, spawnSync } from "node:child_process"; +import path from "node:path"; +import { createRequire } from "node:module"; + +const args = process.argv.slice(2); +const dockerHost = process.env.DOCKER_HOST || resolveDockerHost(); +const require = createRequire(import.meta.url); +const agentCiPackagePath = require.resolve("@redwoodjs/agent-ci/package.json"); +const { bin } = require(agentCiPackagePath); +const agentCiEntrypoint = path.join( + path.dirname(agentCiPackagePath), + bin["agent-ci"] +); +const result = spawnSync(process.execPath, [agentCiEntrypoint, ...args], { + env: { + ...process.env, + DOCKER_HOST: dockerHost, + }, + stdio: ["ignore", "inherit", "inherit"], +}); + +if (result.error) { + throw result.error; +} + +process.exit(result.status ?? 1); + +function resolveDockerHost() { + try { + const context = execFileSync("docker", ["context", "show"], { + encoding: "utf8", + }).trim(); + const inspected = execFileSync("docker", ["context", "inspect", context], { + encoding: "utf8", + }); + const [definition] = JSON.parse(inspected); + const host = definition?.Endpoints?.docker?.Host; + + if (typeof host === "string" && host.length > 0) { + return host; + } + } catch { + // Fall back to the default Docker socket below. + } + + return "unix:///var/run/docker.sock"; +} diff --git a/server/schema/index.ts b/server/schema/index.ts index dcfeaa3f..d70a3329 100644 --- a/server/schema/index.ts +++ b/server/schema/index.ts @@ -1,4 +1,8 @@ -import { buildSchema, registerEnumType, type NonEmptyArray } from "type-graphql"; +import { + buildSchema, + registerEnumType, + type NonEmptyArray, +} from "type-graphql"; import { ContactType } from "./Contact"; import * as resolvers from "./resolvers"; import { Level, SessionType } from "./Session"; @@ -25,6 +29,7 @@ export default async function generateSchema() { return await buildSchema({ resolvers: schemaResolvers, + validate: false, // scalarsMap: [{ type: Url, scalar: UrlScalar }], // TODO: Emitting the schema could be useful for query checks. // emitSchemaFile: true, // use path for a specific location diff --git a/utils/generate-indices.ts b/utils/generate-indices.ts index f3a10b0e..9b67dbed 100644 --- a/utils/generate-indices.ts +++ b/utils/generate-indices.ts @@ -28,10 +28,19 @@ function main() { }, }); const contentRoot = path.resolve(args._[0] || "content"); - const outputPath = path.join(contentRoot, "generated.ts"); const registries = discoverRegistries(contentRoot); - const content = renderGeneratedModule(registries); + const coreRegistries = registries.filter((registry) => + isCoreRegistry(registry.exportName) + ); + const sessionRegistries = registries.filter( + (registry) => !isCoreRegistry(registry.exportName) + ); + const coreOutputPath = path.join(contentRoot, "generated-core.ts"); + const outputPath = path.join(contentRoot, "generated.ts"); + const coreContent = renderRegistries(coreRegistries); + const content = renderGeneratedModule(sessionRegistries); + writeFile(coreOutputPath, coreContent, args.verbose); writeFile(outputPath, content, args.verbose); } @@ -87,6 +96,34 @@ function renderGeneratedModule(registries: Registry[]): string { "// This file is generated by `npm run generate:indices`.", "// Do not edit it manually.", "", + 'export * from "./generated-core";', + ]; + + if (registries.length > 0) { + lines.push(""); + lines.push(...renderRegistryLines(registries)); + } + + lines.push(""); + + return lines.join("\n"); +} + +function renderRegistries(registries: Registry[]): string { + const lines = [ + "// This file is generated by `npm run generate:indices`.", + "// Do not edit it manually.", + "", + ...renderRegistryLines(registries), + "", + ]; + + return lines.join("\n"); +} + +function renderRegistryLines(registries: Registry[]): string[] { + const lines = [ + "", ]; registries.forEach((registry, index) => { @@ -121,9 +158,11 @@ function renderGeneratedModule(registries: Registry[]): string { } }); - lines.push(""); + return lines; +} - return lines.join("\n"); +function isCoreRegistry(exportName: string) { + return ["locations", "people", "sponsors"].includes(exportName); } function writeFile(filePath: string, content: string, verbose: boolean) { diff --git a/worker/shims/class-validator.ts b/worker/shims/class-validator.ts new file mode 100644 index 00000000..4a9e08df --- /dev/null +++ b/worker/shims/class-validator.ts @@ -0,0 +1,3 @@ +export async function validateOrReject() { + return; +} diff --git a/wrangler.jsonc b/wrangler.jsonc index 70906daa..f3ea5425 100644 --- a/wrangler.jsonc +++ b/wrangler.jsonc @@ -4,6 +4,9 @@ "main": "./worker/index.ts", "compatibility_date": "2026-04-03", "compatibility_flags": ["nodejs_compat"], + "alias": { + "class-validator": "./worker/shims/class-validator.ts" + }, "observability": { "enabled": true, "head_sampling_rate": 1 From f0436f4ff9bd627074f3d6ceaf29ced6d75b9eab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 16:19:36 +0300 Subject: [PATCH 37/45] Replace type-graphql runtime schema --- README.md | 4 +- server/{app.ts => create-request-handler.ts} | 19 +- server/routes/media.ts | 70 -- server/schema/graphql-schema.ts | 728 +++++++++++++++++++ server/schema/index.ts | 38 +- test/api.e2e.test.cjs | 19 +- worker/index.ts | 3 +- 7 files changed, 740 insertions(+), 141 deletions(-) rename server/{app.ts => create-request-handler.ts} (74%) delete mode 100644 server/routes/media.ts create mode 100644 server/schema/graphql-schema.ts diff --git a/README.md b/README.md index 27b1f282..96f3cbd8 100644 --- a/README.md +++ b/README.md @@ -74,8 +74,8 @@ Check these endpoints on the deployed domain: ## Environment variables -The application requires a `TOKEN` value at runtime for all non-media routes. +The application requires a `TOKEN` value at runtime for all Worker-handled routes. For local Wrangler development, provide the values in `.dev.vars` or `.env`. The example in [.env.template](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.env.template) is: -- `TOKEN` for authenticating all non-media routes through a `TOKEN` request header +- `TOKEN` for authenticating all Worker-handled routes through a `TOKEN` request header diff --git a/server/app.ts b/server/create-request-handler.ts similarity index 74% rename from server/app.ts rename to server/create-request-handler.ts index b68b72d3..1f4e62f0 100644 --- a/server/app.ts +++ b/server/create-request-handler.ts @@ -1,28 +1,21 @@ -import * as path from "path"; import generateSchema from "./schema"; import handleCalendarRequest from "./routes/calendar"; import createGraphQLRequestHandler from "./routes/graphql"; -import handleMediaRequest, { isPublicImagePath } from "./routes/media"; import handlePingRequest from "./routes/ping"; export interface CreateRequestHandlerOptions { - enableMedia?: boolean; - mediaPath?: string; mediaUrl?: string; - projectRoot?: string; + projectRoot: string; expectedToken?: string; } -async function createRequestHandler(options: CreateRequestHandlerOptions = {}) { - const projectRoot = options.projectRoot || path.resolve(__dirname, "../.."); +async function createRequestHandler(options: CreateRequestHandlerOptions) { const mediaUrl = options.mediaUrl || "/media"; - const mediaPath = options.mediaPath || path.join(projectRoot, "media"); - const enableMedia = options.enableMedia !== false; const expectedToken = options.expectedToken; const schema = await generateSchema(); const graphqlHandler = createGraphQLRequestHandler( schema, - projectRoot, + options.projectRoot, mediaUrl ); @@ -34,9 +27,7 @@ async function createRequestHandler(options: CreateRequestHandlerOptions = {}) { const pathname = new URL(request.url).pathname; let response: Response | null = null; - if (enableMedia && isPublicImagePath(pathname, mediaUrl)) { - response = await handleMediaRequest(pathname, mediaUrl, mediaPath); - } else if (!hasValidToken(request, expectedToken)) { + if (!hasValidToken(request, expectedToken)) { response = new Response("Unauthorized", { status: 401 }); } else if (pathname === "/ping") { response = handlePingRequest(); @@ -58,7 +49,7 @@ function hasValidToken(request: Request, expectedToken?: string) { ); } -function withDefaultHeaders(response: Response) { +export function withDefaultHeaders(response: Response) { const headers = new Headers(response.headers); headers.set("access-control-allow-origin", "*"); diff --git a/server/routes/media.ts b/server/routes/media.ts deleted file mode 100644 index f928e0f8..00000000 --- a/server/routes/media.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { readFile } from "node:fs/promises"; -import * as path from "path"; -import logger from "../logger"; - -const publicImageExtensions = new Set([".ico", ".jpeg", ".jpg", ".png", ".svg"]); - -async function handleMediaRequest( - pathname: string, - mediaUrl: string, - mediaPath: string -) { - const asset = decodeURIComponent(pathname.slice(mediaUrl.length + 1)); - const rootPath = path.resolve(mediaPath); - const filePath = path.resolve(rootPath, asset); - - if (!isInsideRoot(filePath, rootPath) || !isPublicImageAsset(asset)) { - return new Response("Not found", { status: 404 }); - } - - try { - const body = new Uint8Array(await readFile(filePath)); - - return new Response(body, { - headers: { - "content-type": getContentType(filePath), - }, - status: 200, - }); - } catch (err) { - logger.error(err); - - return new Response("Not found", { status: 404 }); - } -} - -export function isPublicImagePath(pathname: string, mediaUrl: string) { - if (!pathname.startsWith(`${mediaUrl}/`)) { - return false; - } - - const asset = decodeURIComponent(pathname.slice(mediaUrl.length + 1)); - - return isPublicImageAsset(asset); -} - -function getContentType(filePath: string) { - switch (path.extname(filePath).toLowerCase()) { - case ".ico": - return "image/x-icon"; - case ".jpeg": - case ".jpg": - return "image/jpeg"; - case ".png": - return "image/png"; - case ".svg": - return "image/svg+xml"; - default: - return "application/octet-stream"; - } -} - -function isPublicImageAsset(asset: string) { - return publicImageExtensions.has(path.extname(asset).toLowerCase()); -} - -function isInsideRoot(filePath: string, rootPath: string) { - return filePath === rootPath || filePath.startsWith(`${rootPath}${path.sep}`); -} - -export default handleMediaRequest; diff --git a/server/schema/graphql-schema.ts b/server/schema/graphql-schema.ts new file mode 100644 index 00000000..9a0ccf4d --- /dev/null +++ b/server/schema/graphql-schema.ts @@ -0,0 +1,728 @@ +import { + GraphQLBoolean, + GraphQLEnumType, + GraphQLID, + GraphQLList, + GraphQLNonNull, + GraphQLObjectType, + GraphQLSchema, + GraphQLString, +} from "graphql"; +import conferences from "../conferences"; +import { locations, people, sponsors } from "../../content/generated"; +import { Conference, getConference } from "./Conference"; +import { Contact, ContactType, getSessionSpeakers } from "./Contact"; +import { IContext } from "./Context"; +import Level from "./Level"; +import { Location } from "./Location"; +import { resolveSessions } from "./Schedule"; +import { Session, SessionType } from "./Session"; +import conferenceSeries from "./resolvers/conferenceSeries"; + +const ContactTypeEnum = createEnumType("ContactType", ContactType); +const SessionTypeEnum = createEnumType("SessionType", SessionType); +const LevelEnum = createEnumType("Level", Level); + +const StyleType = new GraphQLObjectType({ + name: "Style", + fields: { + backgroundSize: { type: new GraphQLNonNull(GraphQLString) }, + }, +}); + +const ImageType = new GraphQLObjectType({ + name: "Image", + fields: { + url: { type: new GraphQLNonNull(GraphQLString) }, + title: { type: GraphQLString }, + style: { type: StyleType }, + }, +}); + +const CountryType = new GraphQLObjectType({ + name: "Country", + fields: { + name: { type: GraphQLString }, + code: { type: GraphQLString }, + }, +}); + +const SocialType = new GraphQLObjectType({ + name: "Social", + fields: { + homepage: { type: GraphQLString }, + mastodon: { type: GraphQLString }, + bluesky: { type: GraphQLString }, + twitter: { type: GraphQLString }, + github: { type: GraphQLString }, + facebook: { type: GraphQLString }, + googleMaps: { type: GraphQLString }, + medium: { type: GraphQLString }, + instagram: { type: GraphQLString }, + linkedin: { type: GraphQLString }, + youtube: { type: GraphQLString }, + vk: { type: GraphQLString }, + pinterest: { type: GraphQLString }, + vimeo: { type: GraphQLString }, + dribble: { type: GraphQLString }, + devto: { type: GraphQLString }, + tiktok: { type: GraphQLString }, + twitch: { type: GraphQLString }, + }, +}); + +const LocationType = new GraphQLObjectType({ + name: "Location", + fields: () => ({ + name: { type: GraphQLString }, + about: { type: GraphQLString }, + image: { + type: ImageType, + resolve(location, _args, ctx) { + if (!location.image) { + return null; + } + + return { + ...location.image, + url: `${ctx.mediaUrl}/${location.image.url}`, + }; + }, + }, + social: { type: SocialType }, + country: { type: CountryType }, + city: { type: GraphQLString }, + address: { type: GraphQLString }, + }), +}); + +const SessionUrlsType = new GraphQLObjectType, IContext>({ + name: "SessionUrls", + fields: { + web: { type: GraphQLString }, + slides: { type: GraphQLString }, + video: { type: GraphQLString }, + demo: { type: GraphQLString }, + drawing: { + type: GraphQLString, + resolve(root, _args, ctx) { + if (!root.drawing) { + return null; + } + + return `${ctx.mediaUrl}/${root.drawing}`; + }, + }, + }, +}); + +const IntervalType = new GraphQLObjectType({ + name: "Interval", + fields: () => ({ + begin: { type: new GraphQLNonNull(GraphQLString) }, + end: { type: new GraphQLNonNull(GraphQLString) }, + title: { type: GraphQLString }, + sessions: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(SessionTypeObject))), + resolve(interval: { sessions: Session[] }) { + return interval.sessions.map((session) => ({ + ...session, + interval, + })); + }, + }, + location: { type: LocationType }, + mc: { type: ContactObjectType }, + urls: { type: SessionUrlsType }, + drawing: { type: GraphQLString }, + }), +}); + +const ScheduleType = new GraphQLObjectType({ + name: "Schedule", + fields: () => ({ + day: { type: new GraphQLNonNull(GraphQLString) }, + location: { type: LocationType }, + description: { type: GraphQLString }, + intervals: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(IntervalType))), + }, + }), +}); + +const SessionTypeObject = new GraphQLObjectType({ + name: "Session", + fields: () => ({ + type: { type: new GraphQLNonNull(SessionTypeEnum) }, + level: { type: LevelEnum }, + title: { + type: new GraphQLNonNull(GraphQLString), + resolve(session) { + return session.title || "Mysterious talk"; + }, + }, + hasTitle: { + type: GraphQLBoolean, + resolve(session) { + return Boolean(session.title); + }, + }, + description: { type: GraphQLString }, + keywords: { type: new GraphQLList(GraphQLString) }, + location: { type: LocationType }, + people: { type: new GraphQLList(ContactObjectType) }, + speakers: { + type: new GraphQLList(ContactObjectType), + deprecationReason: "Use `people` instead", + resolve(session) { + return session.people || []; + }, + }, + urls: { type: SessionUrlsType }, + sessions: { type: new GraphQLList(SessionTypeObject) }, + parent: { type: IntervalType }, + day: { type: GraphQLString }, + begin: { type: GraphQLString }, + end: { type: GraphQLString }, + }), +}); + +const ContactObjectType = new GraphQLObjectType({ + name: "Contact", + fields: () => ({ + firstName: { + type: new GraphQLNonNull(GraphQLString), + resolve(contact) { + return contact.firstName || contact.name.split(" ")[0]; + }, + }, + lastName: { + type: new GraphQLNonNull(GraphQLString), + resolve(contact) { + return contact.lastName || contact.name.split(" ").slice(1).join(" "); + }, + }, + name: { type: new GraphQLNonNull(GraphQLString) }, + about: { type: new GraphQLNonNull(GraphQLString) }, + aboutShort: { + type: GraphQLString, + resolve(contact) { + if (contact.aboutShort) { + return contact.aboutShort; + } + + return contact.about ? `${contact.about.split(".")[0]}.` : ""; + }, + }, + company: { type: GraphQLString }, + tagline: { type: GraphQLString }, + image: { + type: new GraphQLNonNull(ImageType), + resolve(contact, _args, ctx) { + if (!contact.image) { + return { url: "" }; + } + + if (contact.image.url.startsWith("http")) { + return contact.image; + } + + return { + ...contact.image, + url: `${ctx.mediaUrl}/${contact.image.url}`, + }; + }, + }, + type: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(ContactTypeEnum))), + resolve(contact) { + return contact.type || []; + }, + }, + social: { + type: new GraphQLNonNull(SocialType), + resolve(contact) { + const social = contact.social; + + if (!social) { + return {}; + } + + const rules: Record = { + homepage: social.homepage, + mastodon: social.mastodon, + bluesky: social.bluesky && `https://bsky.app/profile/${social.bluesky}`, + facebook: social.facebook && `https://facebook.com/${social.facebook}`, + github: social.github && `https://github.com/${social.github}`, + linkedin: resolveLinkedin(social.linkedin), + medium: social.medium && `https:// medium.com/${social.medium}`, + instagram: + social.instagram && `https://instagram.com/${social.instagram}`, + twitter: social.twitter && `https://twitter.com/${social.twitter}`, + youtube: social.youtube && `https://www.youtube.com/${social.youtube}`, + vk: social.vk && `https://vk.com/${social.vk}`, + }; + const result: Record = {}; + + Object.keys(social).forEach((media) => { + const value = rules[media]; + + if (value) { + result[media] = value; + } + }); + + return result; + }, + }, + keywords: { type: new GraphQLList(GraphQLString) }, + location: { type: new GraphQLNonNull(LocationType) }, + talks: { type: new GraphQLList(SessionTypeObject) }, + workshops: { type: new GraphQLList(SessionTypeObject) }, + noPhotography: { type: GraphQLBoolean }, + country: { + type: CountryType, + deprecationReason: "Use `location` instead", + resolve(contact) { + return contact.location.country; + }, + }, + }), +}); + +const SeriesType = new GraphQLObjectType({ + name: "Series", + fields: () => ({ + id: { type: new GraphQLNonNull(GraphQLID) }, + name: { type: new GraphQLNonNull(GraphQLString) }, + conferences: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(ConferenceType))), + resolve(series: { name: string }) { + return Object.values(conferences).filter( + (conference) => series.name === conference.series + ); + }, + }, + }), +}); + +const ColorsType = new GraphQLObjectType({ + name: "Colors", + fields: { + primary: { type: new GraphQLNonNull(GraphQLString) }, + secondary: { type: new GraphQLNonNull(GraphQLString) }, + text: { type: new GraphQLNonNull(GraphQLString) }, + background: { type: new GraphQLNonNull(GraphQLString) }, + }, +}); + +const FontType = new GraphQLObjectType({ + name: "Font", + fields: { + family: { type: GraphQLString }, + weight: { type: GraphQLString }, + style: { type: GraphQLString }, + fileName: { type: GraphQLString }, + formats: { type: new GraphQLList(GraphQLString) }, + href: { type: GraphQLString }, + }, +}); + +const FontsType = new GraphQLObjectType({ + name: "Fonts", + fields: { + primary: { type: new GraphQLNonNull(GraphQLString) }, + secondary: { type: new GraphQLNonNull(GraphQLString) }, + variants: { type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(FontType))) }, + }, +}); + +const WithWithoutTextType = new GraphQLObjectType({ + name: "WithWithoutText", + fields: { + withoutText: { type: new GraphQLNonNull(ImageType) }, + withText: { type: new GraphQLNonNull(ImageType) }, + }, +}); + +const LogosType = new GraphQLObjectType({ + name: "Logos", + fields: { + black: { type: new GraphQLNonNull(WithWithoutTextType) }, + colored: { type: new GraphQLNonNull(WithWithoutTextType) }, + white: { type: new GraphQLNonNull(WithWithoutTextType) }, + }, +}); + +const ThemeType = new GraphQLObjectType({ + name: "Theme", + fields: { + id: { type: new GraphQLNonNull(GraphQLID) }, + fonts: { type: new GraphQLNonNull(FontsType) }, + textures: { type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(ImageType))) }, + colors: { type: new GraphQLNonNull(ColorsType) }, + logos: { type: new GraphQLNonNull(LogosType) }, + }, +}); + +const ConferenceType = new GraphQLObjectType({ + name: "Conference", + fields: () => ({ + id: { type: new GraphQLNonNull(GraphQLID) }, + series: { + type: SeriesType, + resolve(conference) { + for (const seriesId of Object.keys(conferenceSeries)) { + const oneSeries = conferenceSeries[seriesId]; + + if (oneSeries.conferences.includes(conference.id)) { + return oneSeries; + } + } + + return null; + }, + }, + name: { type: new GraphQLNonNull(GraphQLString) }, + organizer: { type: new GraphQLNonNull(ContactObjectType) }, + year: { type: new GraphQLNonNull(GraphQLString) }, + startDate: { type: new GraphQLNonNull(GraphQLString) }, + endDate: { type: new GraphQLNonNull(GraphQLString) }, + slogan: { type: new GraphQLNonNull(GraphQLString) }, + websiteUrl: { type: new GraphQLNonNull(GraphQLString) }, + locations: { type: new GraphQLList(LocationType) }, + organizers: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(ContactObjectType))), + }, + mcs: { type: new GraphQLList(ContactObjectType) }, + partners: { type: new GraphQLList(ContactObjectType) }, + sponsors: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(ContactObjectType))), + }, + goldSponsors: { type: new GraphQLList(ContactObjectType) }, + silverSponsors: { type: new GraphQLList(ContactObjectType) }, + bronzeSponsors: { type: new GraphQLList(ContactObjectType) }, + platformSponsors: { type: new GraphQLList(ContactObjectType) }, + schedules: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(ScheduleType))), + }, + allSpeakers: { + type: new GraphQLList(ContactObjectType), + resolve(conference) { + const talks = resolveSessions(conference.schedules, [ + SessionType.TALK, + SessionType.KEYNOTE, + SessionType.LIGHTNING_TALK, + SessionType.PANEL, + SessionType.WORKSHOP, + ]); + + return getSessionSpeakers(conference, talks); + }, + }, + speakers: { + type: new GraphQLList(ContactObjectType), + resolve(conference) { + return getSessionSpeakers( + conference, + resolveSessions(conference.schedules, [SessionType.TALK]) + ); + }, + }, + keynotes: { + type: new GraphQLList(SessionTypeObject), + resolve(conference) { + return resolveSessions(conference.schedules, [SessionType.KEYNOTE]); + }, + }, + keynoteSpeakers: { + type: new GraphQLList(ContactObjectType), + resolve(conference) { + return getSessionSpeakers( + conference, + resolveSessions(conference.schedules, [SessionType.KEYNOTE]) + ); + }, + }, + fullTalks: { + type: new GraphQLList(SessionTypeObject), + resolve(conference) { + return resolveSessions(conference.schedules, [SessionType.TALK]); + }, + }, + fullTalkSpeakers: { + type: new GraphQLList(ContactObjectType), + resolve(conference) { + return getSessionSpeakers( + conference, + resolveSessions(conference.schedules, [SessionType.TALK]) + ); + }, + }, + lightningTalks: { + type: new GraphQLList(SessionTypeObject), + resolve(conference) { + return resolveSessions(conference.schedules, [ + SessionType.LIGHTNING_TALK, + ]); + }, + }, + lightningTalkSpeakers: { + type: new GraphQLList(ContactObjectType), + resolve(conference) { + return getSessionSpeakers( + conference, + resolveSessions(conference.schedules, [SessionType.LIGHTNING_TALK]) + ); + }, + }, + panelOnlySpeakers: { + type: new GraphQLList(ContactObjectType), + resolve(conference) { + const talks = resolveSessions(conference.schedules, [SessionType.TALK]); + const talkSpeakers = getSessionSpeakers(conference, talks); + const panels = resolveSessions(conference.schedules, [SessionType.PANEL]); + const panelSpeakers = getSessionSpeakers(conference, panels); + + return panelSpeakers.filter( + (speaker) => + !talkSpeakers.map((talkSpeaker) => talkSpeaker.name).includes(speaker.name) + ); + }, + }, + talks: { + type: new GraphQLList(SessionTypeObject), + deprecationReason: + "Use `keynotes`,s `fullTalks` and `lightningTalks` instead", + resolve(conference) { + return resolveSessions(conference.schedules, [ + SessionType.LIGHTNING_TALK, + SessionType.TALK, + SessionType.KEYNOTE, + ]); + }, + }, + workshops: { + type: new GraphQLList(SessionTypeObject), + resolve(conference) { + return resolveSessions(conference.schedules, [SessionType.WORKSHOP]); + }, + }, + workshopInstructors: { + type: new GraphQLList(ContactObjectType), + resolve(conference) { + return getSessionSpeakers( + conference, + resolveSessions(conference.schedules, [SessionType.WORKSHOP]) + ); + }, + }, + }), +}); + +const QueryType = new GraphQLObjectType({ + name: "Query", + fields: { + conference: { + type: ConferenceType, + args: { + id: { type: new GraphQLNonNull(GraphQLID) }, + }, + resolve(_source, { id }: { id: string }) { + return getConference(id); + }, + }, + conferences: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(ConferenceType))), + resolve() { + return Object.values(conferences); + }, + }, + allConferences: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(ConferenceType))), + deprecationReason: "Use `conferences` instead", + resolve() { + return Object.values(conferences); + }, + }, + series: { + type: SeriesType, + args: { + id: { type: new GraphQLNonNull(GraphQLID) }, + }, + resolve(_source, { id }: { id: string }) { + const match = conferenceSeries[id]; + + if (!match) { + throw new Error("Unknown conference"); + } + + return match; + }, + }, + allSeries: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(SeriesType))), + resolve() { + return Object.values(conferenceSeries); + }, + }, + interval: { + type: IntervalType, + args: { + conferenceId: { type: new GraphQLNonNull(GraphQLID) }, + intervalTitle: { type: new GraphQLNonNull(GraphQLString) }, + }, + resolve(_source, args: { conferenceId: string; intervalTitle: string }) { + const conference = getConference(args.conferenceId); + let result: unknown; + + conference.schedules.forEach(({ intervals }) => { + const found = intervals.find(({ title }) => title === args.intervalTitle); + + if (found) { + result = found; + } + }); + + return result ?? null; + }, + }, + schedule: { + type: ScheduleType, + args: { + conferenceId: { type: new GraphQLNonNull(GraphQLID) }, + day: { type: new GraphQLNonNull(GraphQLString) }, + }, + resolve(_source, args: { conferenceId: string; day: string }) { + return getSchedule(args.conferenceId, args.day); + }, + }, + theme: { + type: ThemeType, + args: { + conferenceId: { type: new GraphQLNonNull(GraphQLID) }, + }, + resolve(_source, { conferenceId }: { conferenceId: string }) { + const series = conferenceSeries[conferenceId]; + + if (!series) { + throw new Error("Conference id did not match series"); + } + + return series.theme; + }, + }, + themes: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(ThemeType))), + resolve() { + return Object.values(conferenceSeries).map(({ theme }) => theme); + }, + }, + contact: { + type: ContactObjectType, + args: { + contactName: { type: new GraphQLNonNull(GraphQLString) }, + conferenceId: { type: new GraphQLNonNull(GraphQLID) }, + }, + resolve( + _source, + args: { contactName: string; conferenceId: string } + ) { + const conference = getConference(args.conferenceId); + const sponsor = conference.sponsors.find( + ({ name }) => name === args.contactName + ); + const organizer = Object.values(conference.organizers).find( + ({ name }) => name === args.contactName + ); + const talks = resolveSessions(conference.schedules, [ + SessionType.LIGHTNING_TALK, + SessionType.TALK, + SessionType.KEYNOTE, + SessionType.PANEL, + ]); + const speaker = getSessionSpeakers(conference, talks).find( + ({ name }) => name === args.contactName + ); + const workshops = resolveSessions(conference.schedules, [ + SessionType.WORKSHOP, + ]); + const workshopInstructor = getSessionSpeakers(conference, workshops).find( + ({ name }) => name === args.contactName + ); + const mc = + conference.mcs && + conference.mcs.find(({ name }) => name === args.contactName); + const contact = + sponsor || organizer || speaker || workshopInstructor || mc; + + if (!contact) { + throw new Error(`Contact ${args.contactName} wasn't found!`); + } + + return contact; + }, + }, + locations: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(LocationType))), + resolve() { + return Object.values(locations); + }, + }, + people: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(ContactObjectType))), + resolve() { + return Object.values(people); + }, + }, + sponsors: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(ContactObjectType))), + resolve() { + return Object.values(sponsors); + }, + }, + }, +}); + +export default function generateSchema() { + return new GraphQLSchema({ + query: QueryType, + }); +} + +function createEnumType(name: string, values: Record) { + return new GraphQLEnumType({ + name, + values: Object.fromEntries( + Object.entries(values).map(([key, value]) => [ + key, + { + value, + }, + ]) + ), + }); +} + +function getSchedule(id: string, day: string) { + const conference = getConference(id); + const schedule = conference.schedules.find((entry) => entry.day === day); + + if (schedule) { + return schedule; + } + + throw new Error("Invalid date"); +} + +function resolveLinkedin(linkedin?: string) { + if (!linkedin) { + return ""; + } + + if (linkedin.startsWith("company")) { + return `https://linkedin.com/${linkedin}`; + } + + return `https://linkedin.com/in/${linkedin}`; +} diff --git a/server/schema/index.ts b/server/schema/index.ts index d70a3329..20c11312 100644 --- a/server/schema/index.ts +++ b/server/schema/index.ts @@ -1,37 +1,5 @@ -import { - buildSchema, - registerEnumType, - type NonEmptyArray, -} from "type-graphql"; -import { ContactType } from "./Contact"; -import * as resolvers from "./resolvers"; -import { Level, SessionType } from "./Session"; +import generateSchema from "./graphql-schema"; -registerEnumType(ContactType, { - name: "ContactType", - description: "Type of the contact", -}); - -registerEnumType(SessionType, { - name: "SessionType", - description: "Type of the session", -}); - -registerEnumType(Level, { - name: "Level", - description: "Level of the session", -}); - -export default async function generateSchema() { - const schemaResolvers = Object.values( - resolvers - ) as unknown as NonEmptyArray; - - return await buildSchema({ - resolvers: schemaResolvers, - validate: false, - // scalarsMap: [{ type: Url, scalar: UrlScalar }], - // TODO: Emitting the schema could be useful for query checks. - // emitSchemaFile: true, // use path for a specific location - }); +export default async function createSchema() { + return generateSchema(); } diff --git a/test/api.e2e.test.cjs b/test/api.e2e.test.cjs index 157d6230..d9d45cb6 100644 --- a/test/api.e2e.test.cjs +++ b/test/api.e2e.test.cjs @@ -4,7 +4,7 @@ const test = require("node:test"); require("reflect-metadata"); -const createRequestHandler = require("../build/server/app").default; +const createRequestHandler = require("../build/server/create-request-handler").default; let server; let baseUrl; @@ -144,23 +144,6 @@ test("GET /calendar/:id is no longer exposed", async () => { assert.match(body, /Not found/i); }); -test("GET /media/* serves checked-in assets", async () => { - const response = await fetch( - new URL("/media/typeof/logo/logo-white.svg", baseUrl) - ); - const body = await response.text(); - - assert.equal(response.status, 200); - assert.match(response.headers.get("content-type"), /image\/svg\+xml/i); - assert.match(body, / { - const response = await request("/media/react-finland/logo/v2/README.md"); - - assert.equal(response.status, 404); -}); - test("protected routes reject requests without TOKEN", async () => { const response = await fetch(new URL("/ping", baseUrl)); diff --git a/worker/index.ts b/worker/index.ts index 289dcf8b..38958d13 100644 --- a/worker/index.ts +++ b/worker/index.ts @@ -1,5 +1,5 @@ import "reflect-metadata"; -import createRequestHandler from "../server/app"; +import createRequestHandler from "../server/create-request-handler"; interface Env { TOKEN: string; @@ -12,7 +12,6 @@ function getHandleRequest(env: Env) { if (!handleRequestPromise || cachedToken !== env.TOKEN) { cachedToken = env.TOKEN; handleRequestPromise = createRequestHandler({ - enableMedia: false, expectedToken: env.TOKEN, projectRoot: "/bundle", }); From 1ae53dba79dd1cfe1c77535626fb0a60c065faff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 16:22:20 +0300 Subject: [PATCH 38/45] Remove type-graphql and reflection stack --- package-lock.json | 230 ++---------------- package.json | 4 +- server/schema/Conference.ts | 151 ++++-------- server/schema/Contact.ts | 75 ++---- server/schema/Country.ts | 12 +- server/schema/Image.ts | 22 +- server/schema/Interval.ts | 35 +-- server/schema/Location.ts | 49 +--- server/schema/Schedule.ts | 19 +- server/schema/Series.ts | 15 +- server/schema/Session.ts | 87 ++----- server/schema/Social.ts | 76 ++---- server/schema/Theme.ts | 108 +++----- server/schema/resolvers/ConferenceResolver.ts | 147 ----------- server/schema/resolvers/ContactResolver.ts | 180 -------------- server/schema/resolvers/IntervalResolver.ts | 37 --- server/schema/resolvers/ScheduleResolver.ts | 26 -- server/schema/resolvers/SeriesResolver.ts | 31 --- server/schema/resolvers/SessionResolver.ts | 25 -- .../schema/resolvers/SessionUrlsResolver.ts | 18 -- server/schema/resolvers/ThemeResolver.ts | 24 -- server/schema/resolvers/index.ts | 19 -- server/schema/scalars.ts | 1 - test/api.e2e.test.cjs | 2 - tsconfig.json | 2 - worker/index.ts | 1 - worker/shims/class-validator.ts | 3 - wrangler.jsonc | 3 - 28 files changed, 184 insertions(+), 1218 deletions(-) delete mode 100644 server/schema/resolvers/ConferenceResolver.ts delete mode 100644 server/schema/resolvers/ContactResolver.ts delete mode 100644 server/schema/resolvers/IntervalResolver.ts delete mode 100644 server/schema/resolvers/ScheduleResolver.ts delete mode 100644 server/schema/resolvers/SeriesResolver.ts delete mode 100644 server/schema/resolvers/SessionResolver.ts delete mode 100644 server/schema/resolvers/SessionUrlsResolver.ts delete mode 100644 server/schema/resolvers/ThemeResolver.ts delete mode 100644 server/schema/resolvers/index.ts delete mode 100644 server/schema/scalars.ts delete mode 100644 worker/shims/class-validator.ts diff --git a/package-lock.json b/package-lock.json index 6a2ff35f..949f77aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,7 @@ "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", - "ical-generator": "10.1.0", - "reflect-metadata": "0.2.2", - "type-graphql": "2.0.0-rc.3" + "ical-generator": "10.1.0" }, "devDependencies": { "@redwoodjs/agent-ci": "0.6.0", @@ -647,34 +645,6 @@ "node": ">=18" } }, - "node_modules/@graphql-yoga/subscription": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-5.0.5.tgz", - "integrity": "sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==", - "license": "MIT", - "dependencies": { - "@graphql-yoga/typed-event-target": "^3.0.2", - "@repeaterjs/repeater": "^3.0.4", - "@whatwg-node/events": "^0.1.0", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@graphql-yoga/typed-event-target": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.2.tgz", - "integrity": "sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==", - "license": "MIT", - "dependencies": { - "@repeaterjs/repeater": "^3.0.4", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@grpc/grpc-js": { "version": "1.14.3", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.3.tgz", @@ -1435,12 +1405,6 @@ "node": ">=22" } }, - "node_modules/@repeaterjs/repeater": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", - "integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==", - "license": "MIT" - }, "node_modules/@sindresorhus/is": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", @@ -1465,29 +1429,12 @@ "version": "24.0.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", "integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==", + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~7.8.0" } }, - "node_modules/@types/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", - "license": "MIT" - }, - "node_modules/@whatwg-node/events": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.2.tgz", - "integrity": "sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.3" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/ansi-escapes": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", @@ -2313,34 +2260,6 @@ "graphql": ">=0.11 <=16" } }, - "node_modules/graphql-query-complexity": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/graphql-query-complexity/-/graphql-query-complexity-1.1.0.tgz", - "integrity": "sha512-6sfAX+9CgkcPeZ7UiuBwgTGA+M1FYgHrQOXvORhQGd6SiaXbNVkLDcJ9ZSvNgzyChIfH0uPFFOY3Jm4wFZ4qEA==", - "license": "MIT", - "dependencies": { - "lodash.get": "^4.4.2" - }, - "peerDependencies": { - "graphql": "^15.0.0 || ^16.0.0" - } - }, - "node_modules/graphql-scalars": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.25.0.tgz", - "integrity": "sha512-b0xyXZeRFkne4Eq7NAnL400gStGqG/Sx9VqX0A05nHyEbv57UJnWKsjNnrpVqv5e/8N1MUxkt0wwcRXbiyKcFg==", - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -2521,13 +2440,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", - "license": "MIT" - }, "node_modules/log-update": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-7.2.0.tgz", @@ -2894,12 +2806,6 @@ "node": ">= 6" } }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0" - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2959,6 +2865,7 @@ "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3273,7 +3180,9 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "dev": true, + "license": "0BSD", + "optional": true }, "node_modules/tweetnacl": { "version": "0.14.5", @@ -3282,43 +3191,6 @@ "dev": true, "license": "Unlicense" }, - "node_modules/type-graphql": { - "version": "2.0.0-rc.3", - "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", - "integrity": "sha512-o01aQg5/PWvd6nmZ55H1C74ROc9q0uNIAU2o65sbBailLmeG20LvkUuuYYA/E6fNoGABYFQlCVrIzlZlrSRDgQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/TypeGraphQL" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/typegraphql" - } - ], - "license": "MIT", - "dependencies": { - "@graphql-yoga/subscription": "^5.0.5", - "@types/node": "*", - "@types/semver": "^7.7.1", - "graphql-query-complexity": "^1.1.0", - "semver": "^7.7.3", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">= 20.11.1" - }, - "peerDependencies": { - "class-validator": ">=0.14.3", - "graphql": "^16.12.0", - "graphql-scalars": "^1.25.0" - }, - "peerDependenciesMeta": { - "class-validator": { - "optional": true - } - } - }, "node_modules/type-is": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", @@ -3362,6 +3234,7 @@ "version": "7.8.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "dev": true, "license": "MIT" }, "node_modules/unenv": { @@ -3926,26 +3799,6 @@ "dev": true, "optional": true }, - "@graphql-yoga/subscription": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-5.0.5.tgz", - "integrity": "sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==", - "requires": { - "@graphql-yoga/typed-event-target": "^3.0.2", - "@repeaterjs/repeater": "^3.0.4", - "@whatwg-node/events": "^0.1.0", - "tslib": "^2.8.1" - } - }, - "@graphql-yoga/typed-event-target": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.2.tgz", - "integrity": "sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==", - "requires": { - "@repeaterjs/repeater": "^3.0.4", - "tslib": "^2.8.1" - } - }, "@grpc/grpc-js": { "version": "1.14.3", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.3.tgz", @@ -4327,11 +4180,6 @@ "yaml": "^2.8.2" } }, - "@repeaterjs/repeater": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", - "integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==" - }, "@sindresorhus/is": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", @@ -4348,23 +4196,11 @@ "version": "24.0.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", "integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==", + "dev": true, "requires": { "undici-types": "~7.8.0" } }, - "@types/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==" - }, - "@whatwg-node/events": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.2.tgz", - "integrity": "sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==", - "requires": { - "tslib": "^2.6.3" - } - }, "ansi-escapes": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", @@ -4892,23 +4728,6 @@ "integrity": "sha512-OC3ucK988teMf+Ak/O+ZJ0N2ukcgrEurypp8ePyJFWq83VzwRAmHxxr+XxrMpxO/FIwI4a7m/Fzv3tWGJv0wPA==", "requires": {} }, - "graphql-query-complexity": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/graphql-query-complexity/-/graphql-query-complexity-1.1.0.tgz", - "integrity": "sha512-6sfAX+9CgkcPeZ7UiuBwgTGA+M1FYgHrQOXvORhQGd6SiaXbNVkLDcJ9ZSvNgzyChIfH0uPFFOY3Jm4wFZ4qEA==", - "requires": { - "lodash.get": "^4.4.2" - } - }, - "graphql-scalars": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.25.0.tgz", - "integrity": "sha512-b0xyXZeRFkne4Eq7NAnL400gStGqG/Sx9VqX0A05nHyEbv57UJnWKsjNnrpVqv5e/8N1MUxkt0wwcRXbiyKcFg==", - "peer": true, - "requires": { - "tslib": "^2.5.0" - } - }, "has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -4991,11 +4810,6 @@ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" - }, "log-update": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-7.2.0.tgz", @@ -5244,11 +5058,6 @@ "util-deprecate": "^1.0.1" } }, - "reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5280,7 +5089,8 @@ "semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==" + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true }, "setprototypeof": { "version": "1.2.0", @@ -5488,7 +5298,9 @@ "tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true }, "tweetnacl": { "version": "0.14.5", @@ -5496,19 +5308,6 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, - "type-graphql": { - "version": "2.0.0-rc.3", - "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-rc.3.tgz", - "integrity": "sha512-o01aQg5/PWvd6nmZ55H1C74ROc9q0uNIAU2o65sbBailLmeG20LvkUuuYYA/E6fNoGABYFQlCVrIzlZlrSRDgQ==", - "requires": { - "@graphql-yoga/subscription": "^5.0.5", - "@types/node": "*", - "@types/semver": "^7.7.1", - "graphql-query-complexity": "^1.1.0", - "semver": "^7.7.3", - "tslib": "^2.8.1" - } - }, "type-is": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", @@ -5535,7 +5334,8 @@ "undici-types": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", - "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==" + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "dev": true }, "unenv": { "version": "2.0.0-rc.24", diff --git a/package.json b/package.json index a7b35da3..dccd3b57 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,6 @@ "graphql": "16.13.2", "graphql-depth-limit": "1.1.0", "graphql-http": "1.22.4", - "ical-generator": "10.1.0", - "reflect-metadata": "0.2.2", - "type-graphql": "2.0.0-rc.3" + "ical-generator": "10.1.0" } } diff --git a/server/schema/Conference.ts b/server/schema/Conference.ts index bdde793a..caacceba 100644 --- a/server/schema/Conference.ts +++ b/server/schema/Conference.ts @@ -1,4 +1,3 @@ -import { Field, ID, ObjectType } from "type-graphql"; import conferences from "../conferences"; import { Contact, ContactType } from "./Contact"; import { Location } from "./Location"; @@ -6,111 +5,50 @@ import { Schedule } from "./Schedule"; import { Session } from "./Session"; import { Series } from "./Series"; -@ObjectType() -export class Conference { - @Field((_) => ID) - public id!: string; - - @Field((_) => Series) - public series!: string; - - @Field((_) => String) - public name!: string; - - @Field((_) => Contact) - public organizer!: Contact; - - @Field((_) => String) - public year!: string; - - @Field((_) => String) - public startDate!: string; - - @Field((_) => String) - public endDate!: string; - - @Field((_) => String) - public slogan!: string; - - @Field((_) => String) - public websiteUrl!: string; - - @Field((_) => [Location], { nullable: true }) - public locations?: Location[]; - - @Field((_) => [Contact]) - public organizers!: Contact[]; - - @Field((_) => [Contact], { nullable: true }) - public mcs?: Contact[]; - - @Field((_) => [Contact], { nullable: true }) - public partners?: Contact[]; - - @Field((_) => [Contact]) - public sponsors!: Contact[]; - - @Field((_) => [Contact], { nullable: true }) - public goldSponsors!: Contact[]; - - @Field((_) => [Contact], { nullable: true }) - public silverSponsors!: Contact[]; - - @Field((_) => [Contact], { nullable: true }) - public bronzeSponsors!: Contact[]; - - @Field((_) => [Contact], { nullable: true }) - public platformSponsors!: Contact[]; - - @Field((_) => [Schedule]) - public schedules!: Schedule[]; - - @Field((_) => [Contact], { nullable: true }) - public allSpeakers?: Contact[]; - - @Field((_) => [Contact], { nullable: true }) - public speakers?: Contact[]; - - @Field((_) => [Contact], { nullable: true }) - public keynoteSpeakers?: Contact[]; - - @Field((_) => [Contact], { nullable: true }) - public fullTalkSpeakers?: Contact[]; - - @Field((_) => [Contact], { nullable: true }) - public lightningTalkSpeakers?: Contact[]; - - @Field((_) => [Contact], { nullable: true }) - public panelOnlySpeakers?: Contact[]; - - @Field((_) => [Contact], { nullable: true }) - public workshopInstructors?: Contact[]; - - @Field((_) => [Session], { nullable: true }) - public talks?: Session[]; - - @Field((_) => [Session], { nullable: true }) - public workshops?: Session[]; - - @Field((_) => [Contact]) - public attendees?: Contact[]; +export interface Conference { + id: string; + series: string | Series; + name: string; + organizer: Contact; + year: string; + startDate: string; + endDate: string; + slogan: string; + websiteUrl: string; + locations?: Location[]; + organizers: Contact[]; + mcs?: Contact[]; + partners?: Contact[]; + sponsors: Contact[]; + goldSponsors?: Contact[]; + silverSponsors?: Contact[]; + bronzeSponsors?: Contact[]; + platformSponsors?: Contact[]; + schedules: Schedule[]; + allSpeakers?: Contact[]; + speakers?: Contact[]; + keynoteSpeakers?: Contact[]; + fullTalkSpeakers?: Contact[]; + lightningTalkSpeakers?: Contact[]; + panelOnlySpeakers?: Contact[]; + workshopInstructors?: Contact[]; + talks?: Session[]; + workshops?: Session[]; } -// TODO: Maybe this should become a static method of Conference export function getConference(id: string): Conference { - if (conferences[id]) { - const conference = conferences[id]; - - return { - ...conference, - sponsors: attachSponsorTypes(conference, conference.sponsors), - }; - } else { + if (!conferences[id]) { throw new Error("Unknown conference"); } + + const conference = conferences[id]; + + return { + ...conference, + sponsors: attachSponsorTypes(conference, conference.sponsors), + }; } -// TODO: Extract sponsor levels to this code won't be needed anymore function attachSponsorTypes( conference: Conference, sponsors: Conference["sponsors"] @@ -126,18 +64,21 @@ function attachSponsorTypes( return sponsors.map(({ name, type, ...rest }) => ({ ...rest, name, - type: type - .concat( + type: [ + ...type, isSponsor(goldSponsors, name, ContactType.GOLD_SPONSOR), isSponsor(silverSponsors, name, ContactType.SILVER_SPONSOR), isSponsor(bronzeSponsors, name, ContactType.BRONZE_SPONSOR), isSponsor(platformSponsors, name, ContactType.PLATFORM_SPONSOR), isSponsor(partners, name, ContactType.PARTNER) - ) - .filter(Boolean), + ].filter((contactType): contactType is ContactType => Boolean(contactType)), })); } -function isSponsor(sponsors, sponsorName, contactType) { - return sponsors.find(({ name }) => sponsorName === name) ? contactType : null; +function isSponsor( + sponsors: Conference["sponsors"] | undefined, + sponsorName: string, + contactType: ContactType +) { + return sponsors?.find(({ name }) => sponsorName === name) ? contactType : null; } diff --git a/server/schema/Contact.ts b/server/schema/Contact.ts index 6ef0c7a3..c5d2aea0 100644 --- a/server/schema/Contact.ts +++ b/server/schema/Contact.ts @@ -1,4 +1,3 @@ -import { Field, ObjectType } from "type-graphql"; import { Conference } from "./Conference"; import { Image } from "./Image"; import Keyword from "./keywords"; @@ -25,72 +24,34 @@ export enum ContactType { ATTENDEE = "ATTENDEE", } -@ObjectType() -export class Contact { - // Needed for badges - @Field((_) => String) - public firstName?: string; - - // Needed for badges - @Field((_) => String) - public lastName?: string; - - // Combine with first/lastName somehow? Problematic for companies. - @Field((_) => String) - public name!: string; - - @Field((_) => String) - public about!: string; - - @Field((_) => String, { nullable: true }) - public aboutShort?: string; - - // TODO: This might become a Contact reference eventually - @Field((_) => String, { nullable: true }) - public company?: string; - - // TODO: This might become a Contact reference eventually - @Field((_) => String, { nullable: true }) - public tagline?: string; - - @Field((_) => Image) - public image!: Image; - - @Field((_) => [ContactType]) - public type!: ContactType[]; - - @Field((_) => Social) - public social!: Social; - - @Field((_) => [String], { nullable: true }) - public keywords?: Keyword[]; - - @Field((_) => Location) - public location!: Location; - - @Field((_) => [Session], { nullable: true }) - public talks?: Session[]; - - @Field((_) => [Session], { nullable: true }) - public workshops?: Session[]; - - @Field((_) => Boolean, { nullable: true }) - public noPhotography?: boolean; +export interface Contact { + firstName?: string; + lastName?: string; + name: string; + about: string; + aboutShort?: string; + company?: string; + tagline?: string; + image: Image; + type: ContactType[]; + social: Social; + keywords?: Keyword[]; + location: Location; + talks?: Session[]; + workshops?: Session[]; + noPhotography?: boolean; } -// TODO: Maybe this should become a static method of Conference export function getSessionSpeakers( conference: Conference, sessions: Session[] ): Contact[] { - const sessionTypes = [ + const talks = resolveSessions(conference.schedules, [ SessionType.LIGHTNING_TALK, SessionType.PANEL, SessionType.TALK, SessionType.KEYNOTE, - ]; - - const talks = resolveSessions(conference.schedules, sessionTypes); + ]); const workshops = resolveSessions(conference.schedules, [ SessionType.WORKSHOP, ]); diff --git a/server/schema/Country.ts b/server/schema/Country.ts index 00ce9f20..4b6ee574 100644 --- a/server/schema/Country.ts +++ b/server/schema/Country.ts @@ -1,10 +1,4 @@ -import { Field, ObjectType } from "type-graphql"; - -@ObjectType() -export class Country { - @Field((_) => String) - public name?: string; - - @Field((_) => String) - public code?: string; +export interface Country { + name?: string; + code?: string; } diff --git a/server/schema/Image.ts b/server/schema/Image.ts index 5dc82c62..d1e3a8ed 100644 --- a/server/schema/Image.ts +++ b/server/schema/Image.ts @@ -1,19 +1,9 @@ -import { Field, ObjectType } from "type-graphql"; - -@ObjectType() -class Style { - @Field((_) => String) - public backgroundSize!: string; +export interface Style { + backgroundSize: string; } -@ObjectType() -export class Image { - @Field((_) => String) - public url!: string; - - @Field((_) => String, { nullable: true }) - public title?: string; - - @Field((_) => Style, { nullable: true }) - public style?: Style; +export interface Image { + url: string; + title?: string; + style?: Style; } diff --git a/server/schema/Interval.ts b/server/schema/Interval.ts index 0774b481..53b5699a 100644 --- a/server/schema/Interval.ts +++ b/server/schema/Interval.ts @@ -1,31 +1,14 @@ -import { Field, ObjectType } from "type-graphql"; import { Contact } from "./Contact"; import { Location } from "./Location"; import { Session, SessionUrls } from "./Session"; -@ObjectType() -export class Interval { - @Field((_) => String) - public begin!: string; - - @Field((_) => String) - public end!: string; - - @Field((_) => String, { nullable: true }) - public title?: string; - - @Field((_) => [Session]) - public sessions!: Session[]; - - @Field((_) => Location, { nullable: true }) - public location?: Location; - - @Field((_) => Contact, { nullable: true }) - public mc?: Contact; - - @Field((_) => SessionUrls, { nullable: true }) - public urls?: SessionUrls; - - @Field((_) => String, { nullable: true }) - public drawing?: string; +export interface Interval { + begin: string; + end: string; + title?: string; + sessions: Session[]; + location?: Location; + mc?: Contact; + urls?: SessionUrls; + drawing?: string; } diff --git a/server/schema/Location.ts b/server/schema/Location.ts index bb95b281..494962c1 100644 --- a/server/schema/Location.ts +++ b/server/schema/Location.ts @@ -1,46 +1,13 @@ -import { - Ctx, - Field, - FieldResolver, - ObjectType, - Resolver, - Root, -} from "type-graphql"; -import { IContext } from "./Context"; import { Country } from "./Country"; import { Image } from "./Image"; import { Social } from "./Social"; -@ObjectType() -export class Location { - @Field((_) => String, { nullable: true }) - public name?: string; - - @Field((_) => String, { nullable: true }) - public about?: string; - - @Field((_) => Image, { nullable: true }) - public image?: Image; - - @Field((_) => Social, { nullable: true }) - public social?: Social; - - @Field((_) => Country, { nullable: true }) - public country?: Country; - - @Field((_) => String, { nullable: true }) - public city?: string; - - @Field((_) => String, { nullable: true }) - public address?: string; -} - -@Resolver((_) => Location) -export class LocationResolver { - @FieldResolver((_) => Image) - public image(@Root() location: Location, @Ctx() ctx: IContext) { - return { - url: location.image ? `${ctx.mediaUrl}/${location.image.url}` : "", - }; - } +export interface Location { + name?: string; + about?: string; + image?: Image; + social?: Social; + country?: Country; + city?: string; + address?: string; } diff --git a/server/schema/Schedule.ts b/server/schema/Schedule.ts index 3c971a40..99f539d8 100644 --- a/server/schema/Schedule.ts +++ b/server/schema/Schedule.ts @@ -1,21 +1,12 @@ -import { Field, ObjectType } from "type-graphql"; import { Interval } from "./Interval"; import { Location } from "./Location"; import SessionType from "./SessionType"; -@ObjectType() -export class Schedule { - @Field((_) => String) - public day!: string; - - @Field((_) => Location, { nullable: true }) - public location?: Location; - - @Field((_) => String, { nullable: true }) - public description?: string; - - @Field((_) => [Interval]) - public intervals!: Interval[]; +export interface Schedule { + day: string; + location?: Location; + description?: string; + intervals: Interval[]; } export function resolveSessions( diff --git a/server/schema/Series.ts b/server/schema/Series.ts index d7b4ecae..3e64a954 100644 --- a/server/schema/Series.ts +++ b/server/schema/Series.ts @@ -1,14 +1,7 @@ -import { Field, ID, ObjectType } from "type-graphql"; import { Conference } from "./Conference"; -@ObjectType() -export class Series { - @Field((_) => ID) - public id!: string; - - @Field((_) => String) - public name!: string; - - @Field((_) => [Conference]) - public conferences!: [Conference]; +export interface Series { + id: string; + name: string; + conferences: Conference[]; } diff --git a/server/schema/Session.ts b/server/schema/Session.ts index 53805ce9..24b1e3f1 100644 --- a/server/schema/Session.ts +++ b/server/schema/Session.ts @@ -1,4 +1,3 @@ -import { Field, ObjectType } from "type-graphql"; import { Contact } from "./Contact"; import { Interval } from "./Interval"; import Keyword from "./keywords"; @@ -6,73 +5,29 @@ import Level from "./Level"; import { Location } from "./Location"; import SessionType from "./SessionType"; -@ObjectType() -export class SessionUrls { - @Field((_) => String, { nullable: true }) - public web?: string; - - @Field((_) => String, { nullable: true }) - public slides?: string; - - @Field((_) => String, { nullable: true }) - public video?: string; - - @Field((_) => String, { nullable: true }) - public demo?: string; - - @Field((_) => String, { nullable: true }) - public drawing?: string; +export interface SessionUrls { + web?: string; + slides?: string; + video?: string; + demo?: string; + drawing?: string; } -@ObjectType() -export class Session { - @Field((_) => SessionType) - public type!: SessionType; - - @Field((_) => Level) - public level?: Level; - - @Field((_) => String) - public title!: string; - - // TODO: Eliminate and push title customization to frontend? - @Field((_) => Boolean) - public hasTitle?: boolean; - - @Field((_) => String, { nullable: true }) - public description?: string; - - @Field((_) => [String], { nullable: true }) - public keywords?: Keyword[]; - - @Field((_) => Location, { nullable: true }) - public location?: Location; - - @Field((_) => [Contact], { nullable: true }) - public people?: Contact[]; - - @Field((_) => SessionUrls, { nullable: true }) - public urls?: SessionUrls; - - @Field((_) => [Session], { nullable: true }) - public sessions?: Session[]; - - // This refers to the closest interval. Note the recursion above. - @Field((_) => Interval) - public parent?: Interval; - - // Derived from a parent Schedule if it exists - @Field((_) => String, { nullable: true }) - public day?: string; - - // Derived from a parent Interval if it exists - @Field((_) => String, { nullable: true }) - public begin?: string; - - // Derived from a parent Interval if it exists - @Field((_) => String, { nullable: true }) - public end?: string; +export interface Session { + type: SessionType; + level?: Level; + title: string; + hasTitle?: boolean; + description?: string; + keywords?: Keyword[]; + location?: Location; + people?: Contact[]; + urls?: SessionUrls; + sessions?: Session[]; + parent?: Interval; + day?: string; + begin?: string; + end?: string; } -// Backwards-compatibility with content. TODO: refactor out export { SessionType, Level }; diff --git a/server/schema/Social.ts b/server/schema/Social.ts index 2838185e..a64264c1 100644 --- a/server/schema/Social.ts +++ b/server/schema/Social.ts @@ -1,58 +1,20 @@ -import { Field, ObjectType } from "type-graphql"; - -@ObjectType() -export class Social { - @Field((_) => String, { nullable: true }) - public homepage?: string; - - @Field((_) => String, { nullable: true }) - public mastodon?: string; - - @Field((_) => String, { nullable: true }) - public bluesky?: string; - - @Field((_) => String, { nullable: true }) - public twitter?: string; - - @Field((_) => String, { nullable: true }) - public github?: string; - - @Field((_) => String, { nullable: true }) - public facebook?: string; - - @Field((_) => String, { nullable: true }) - public googleMaps?: string; - - @Field((_) => String, { nullable: true }) - public medium?: string; - - @Field((_) => String, { nullable: true }) - public instagram?: string; - - @Field((_) => String, { nullable: true }) - public linkedin?: string; - - @Field((_) => String, { nullable: true }) - public youtube?: string; - - @Field((_) => String, { nullable: true }) - public vk?: string; - - @Field((_) => String, { nullable: true }) - public pinterest?: string; - - @Field((_) => String, { nullable: true }) - public vimeo?: string; - - @Field((_) => String, { nullable: true }) - public dribble?: string; - - @Field((_) => String, { nullable: true }) - public devto?: string; - - @Field((_) => String, { nullable: true }) - public tiktok?: string; - - @Field((_) => String, { nullable: true }) - public twitch?: string; +export interface Social { + homepage?: string; + mastodon?: string; + bluesky?: string; + twitter?: string; + github?: string; + facebook?: string; + googleMaps?: string; + medium?: string; + instagram?: string; + linkedin?: string; + youtube?: string; + vk?: string; + pinterest?: string; + vimeo?: string; + dribble?: string; + devto?: string; + tiktok?: string; + twitch?: string; } diff --git a/server/schema/Theme.ts b/server/schema/Theme.ts index f9e1ebb8..654f1a45 100644 --- a/server/schema/Theme.ts +++ b/server/schema/Theme.ts @@ -1,92 +1,42 @@ -import { Field, ID, ObjectType } from "type-graphql"; import { Image } from "./Image"; -@ObjectType() -export class Colors { - @Field((_) => String) - public primary!: string; - - @Field((_) => String) - public secondary!: string; - - @Field((_) => String) - public text!: string; - - @Field((_) => String) - public background!: string; +export interface Colors { + primary: string; + secondary: string; + text: string; + background: string; } -// TODO: Likely this should be modelled a a union -@ObjectType() -export class Font { - @Field((_) => String, { nullable: true }) - public family?: string; - - @Field((_) => String, { nullable: true }) - public weight?: string; - - @Field((_) => String, { nullable: true }) - public style?: string; - - @Field((_) => String, { nullable: true }) - public fileName?: string; - - @Field((_) => [String], { nullable: true }) - public formats?: string[]; - - @Field((_) => String, { nullable: true }) - public href?: string; +export interface Font { + family?: string; + weight?: string; + style?: string; + fileName?: string; + formats?: string[]; + href?: string; } -@ObjectType() -export class Fonts { - @Field((_) => String) - public primary!: string; - - @Field((_) => String) - public secondary!: string; - - @Field((_) => [Font]) - public variants!: Font[]; +export interface Fonts { + primary: string; + secondary: string; + variants: Font[]; } -@ObjectType() -export class WithWithoutText { - @Field((_) => Image) - public withoutText!: Image; - - @Field((_) => Image) - public withText!: Image; +export interface WithWithoutText { + withoutText: Image; + withText: Image; } -@ObjectType() -export class Logos { - @Field((_) => WithWithoutText) - public black!: WithWithoutText; - - @Field((_) => WithWithoutText) - public colored!: WithWithoutText; - - @Field((_) => WithWithoutText) - public white!: WithWithoutText; +export interface Logos { + black: WithWithoutText; + colored: WithWithoutText; + white: WithWithoutText; } -// TODO: Add fonts here (name + path) -@ObjectType() -export class Theme { - @Field((_) => ID) - public id!: string; - - // TODO: Convert to an array (more flexible than primary/secondary) - @Field((_) => Fonts) - public fonts!: Fonts; - - @Field((_) => Image) - public textures!: [Image]; - - @Field((_) => Colors) - public colors!: Colors; - - @Field((_) => Logos) - public logos!: Logos; +export interface Theme { + id: string; + fonts: Fonts; + textures: Image[]; + colors: Colors; + logos: Logos; } diff --git a/server/schema/resolvers/ConferenceResolver.ts b/server/schema/resolvers/ConferenceResolver.ts deleted file mode 100644 index fd57cfde..00000000 --- a/server/schema/resolvers/ConferenceResolver.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { - Arg, - FieldResolver, - ID, - Query, - Resolver, - Root, -} from "type-graphql"; -import conferences from "../../conferences"; -import { Conference, getConference } from "../Conference"; -import { Contact, getSessionSpeakers } from "../Contact"; -import { resolveSessions } from "../Schedule"; -import { Series } from "../Series"; -import { Session, SessionType } from "../Session"; -import series from "./conferenceSeries"; - -@Resolver((_) => Conference) -class ConferenceResolver { - @Query((_) => Conference) - public conference(@Arg("id", (_) => ID) id: string) { - return getConference(id); - } - - @Query((_) => [Conference]) - public conferences() { - return Object.values(conferences); - } - - @Query((_) => [Conference], { - deprecationReason: "Use `conferences` instead", - }) - public allConferences() { - return Object.values(conferences); - } - - @FieldResolver((_) => Series) - public series(@Root() conference: Conference) { - const id = conference.id; - - for (const seriesId of Object.keys(series)) { - const oneSeries = series[seriesId]; - if (oneSeries.conferences.indexOf(id) !== -1) { - return oneSeries; - } - } - - return; - } - - @FieldResolver((_) => [Contact]) - public allSpeakers(@Root() conference: Conference) { - const talks = resolveSessions(conference.schedules, [ - SessionType.TALK, - SessionType.KEYNOTE, - SessionType.LIGHTNING_TALK, - SessionType.PANEL, - SessionType.WORKSHOP, - ]); - - return getSessionSpeakers(conference, talks); - } - - @FieldResolver((_) => [Contact]) - public speakers(@Root() conference: Conference) { - const talks = resolveSessions(conference.schedules, [SessionType.TALK]); - - return getSessionSpeakers(conference, talks); - } - - @FieldResolver((_) => [Session], { - deprecationReason: - "Use `keynotes`,s `fullTalks` and `lightningTalks` instead", - }) - public talks(@Root() conference: Conference) { - return resolveSessions(conference.schedules, [ - SessionType.LIGHTNING_TALK, - SessionType.TALK, - SessionType.KEYNOTE, - ]); - } - - @FieldResolver((_) => [Session]) - public keynotes(@Root() conference: Conference) { - return resolveSessions(conference.schedules, [SessionType.KEYNOTE]); - } - - @FieldResolver((_) => [Session]) - public keynoteSpeakers(@Root() conference: Conference) { - const talks = resolveSessions(conference.schedules, [SessionType.KEYNOTE]); - - return getSessionSpeakers(conference, talks); - } - - @FieldResolver((_) => [Session]) - public fullTalks(@Root() conference: Conference) { - return resolveSessions(conference.schedules, [SessionType.TALK]); - } - - @FieldResolver((_) => [Session]) - public fullTalkSpeakers(@Root() conference: Conference) { - const talks = resolveSessions(conference.schedules, [SessionType.TALK]); - - return getSessionSpeakers(conference, talks); - } - - @FieldResolver((_) => [Session]) - public lightningTalks(@Root() conference: Conference) { - return resolveSessions(conference.schedules, [SessionType.LIGHTNING_TALK]); - } - - @FieldResolver((_) => [Session]) - public lightningTalkSpeakers(@Root() conference: Conference) { - const talks = resolveSessions(conference.schedules, [ - SessionType.LIGHTNING_TALK, - ]); - - return getSessionSpeakers(conference, talks); - } - - @FieldResolver((_) => [Session]) - public panelOnlySpeakers(@Root() conference: Conference) { - const talks = resolveSessions(conference.schedules, [SessionType.TALK]); - const talkSpeakers = getSessionSpeakers(conference, talks); - const panels = resolveSessions(conference.schedules, [SessionType.PANEL]); - const panelSpeakers = getSessionSpeakers(conference, panels); - - // The idea is to substract talk speakers from panel speakers. - // Likely there's a simpler way to do this but this is enough for now - return panelSpeakers.filter( - (s) => !talkSpeakers.map((t) => t.name).includes(s.name) - ); - } - - @FieldResolver((_) => [Session]) - public workshops(@Root() conference: Conference) { - return resolveSessions(conference.schedules, [SessionType.WORKSHOP]); - } - - @FieldResolver((_) => [Session]) - public workshopInstructors(@Root() conference: Conference) { - const talks = resolveSessions(conference.schedules, [SessionType.WORKSHOP]); - - return getSessionSpeakers(conference, talks); - } -} - -export default ConferenceResolver; diff --git a/server/schema/resolvers/ContactResolver.ts b/server/schema/resolvers/ContactResolver.ts deleted file mode 100644 index 58a13f9c..00000000 --- a/server/schema/resolvers/ContactResolver.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { - Arg, - Ctx, - FieldResolver, - ID, - Query, - Resolver, - Root, -} from "type-graphql"; -import { locations, people, sponsors } from "../../../content/generated"; -import { getConference } from "../Conference"; -import { Contact, ContactType, getSessionSpeakers } from "../Contact"; -import { Location } from "../Location"; -import { IContext } from "../Context"; -import { Country } from "../Country"; -import { Image } from "../Image"; -import { resolveSessions } from "../Schedule"; -import SessionType from "../SessionType"; -import { Social } from "../Social"; - -@Resolver((_) => Contact) -class ContactResolver { - @Query((_) => Contact) - public contact( - @Arg("contactName") contactName: string, - @Arg("conferenceId", (_) => ID) conferenceId: string - ) { - const conference = getConference(conferenceId); - const sponsor = conference.sponsors.find( - ({ name }) => name === contactName - ); - const organizer = Object.values(conference.organizers).find( - ({ name }) => name === contactName - ); - const talks = resolveSessions(conference.schedules, [ - SessionType.LIGHTNING_TALK, - SessionType.TALK, - SessionType.KEYNOTE, - SessionType.PANEL, - ]); - const speaker = getSessionSpeakers(conference, talks).find( - ({ name }) => name === contactName - ); - const workshops = resolveSessions(conference.schedules, [ - SessionType.WORKSHOP, - ]); - const workshopInstructor = getSessionSpeakers(conference, workshops).find( - ({ name }) => name === contactName - ); - const mc = - conference.mcs && conference.mcs.find(({ name }) => name === contactName); - const contact = sponsor || organizer || speaker || workshopInstructor || mc; - - if (!contact) { - throw new Error(`Contact ${contactName} wasn't found!`); - } - - return contact; - } - - @Query((_) => [Location]) - public locations() { - return Object.values(locations); - } - - @Query((_) => [Contact]) - public people() { - return Object.values(people); - } - - @Query((_) => [Contact]) - public sponsors() { - return Object.values(sponsors); - } - - @FieldResolver((_) => [ContactType]) - public type(@Root() contact: Contact) { - return contact.type || []; - } - - @FieldResolver((_) => String) - public firstName(@Root() contact: Contact) { - return contact.firstName || contact.name.split(" ")[0]; - } - - @FieldResolver((_) => String) - public lastName(@Root() contact: Contact) { - return ( - contact.lastName || - /* TODO: This approximation isn't accurate always */ - contact.name.split(" ").slice(1).join(" ") - ); - } - - @FieldResolver((_) => Image) - public image(@Root() contact: Contact, @Ctx() ctx: IContext) { - if (!contact.image) { - return { - url: "", - }; - } - - if (contact.image.url.startsWith("http")) { - return contact.image; - } - - // FIXME: Figure out why ctx can be missing - return { - url: `${ctx ? ctx.mediaUrl : "/media"}/${contact.image.url}`, - }; - } - - @FieldResolver((_) => String) - public aboutShort(@Root() contact: Contact) { - if (contact.aboutShort) { - return contact.aboutShort; - } else { - return contact.about ? contact.about.split(".")[0] + "." : ""; - } - } - - @FieldResolver((_) => Social) - public social(@Root() contact: Contact) { - interface IRules { - [key: string]: string | undefined; - } - const social = contact.social; - - if (!social) { - return {}; - } - - // TODO: These resolvers should fork so you get url + original value - // as that's needed sometimes - const rules: IRules = { - homepage: social.homepage, - mastodon: social.mastodon, - bluesky: social.bluesky && `https://bsky.app/profile/${social.bluesky}`, - facebook: social.facebook && `https://facebook.com/${social.facebook}`, - github: social.github && `https://github.com/${social.github}`, - linkedin: resolveLinkedin(social.linkedin), - medium: social.medium && `https:// medium.com/${social.medium}`, - instagram: - social.instagram && `https://instagram.com/${social.instagram}`, - twitter: social.twitter && `https://twitter.com/${social.twitter}`, - youtube: social.youtube && `https://www.youtube.com/${social.youtube}`, - vk: social.vk && `https://vk.com/${social.vk}`, - }; - const result: IRules = {}; - - Object.keys(social).forEach((media) => { - if (rules[media]) { - result[media] = rules[media]; - } - }); - - return result; - } - - @FieldResolver((_) => Country, { - deprecationReason: "Use `location` instead", - }) - public country(@Root() contact: Contact) { - return contact.location.country; - } -} - -function resolveLinkedin(linkedin?: string): string { - if (!linkedin) { - return ""; - } - - if (linkedin.startsWith("company")) { - return `https://linkedin.com/${linkedin}`; - } - - return `https://linkedin.com/in/${linkedin}`; -} - -export default ContactResolver; diff --git a/server/schema/resolvers/IntervalResolver.ts b/server/schema/resolvers/IntervalResolver.ts deleted file mode 100644 index 6781656d..00000000 --- a/server/schema/resolvers/IntervalResolver.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Arg, FieldResolver, ID, Query, Resolver, Root } from "type-graphql"; -import { Interval } from "../Interval"; -import { Session } from "../Session"; -import { getConference } from "../Conference"; - -@Resolver((_) => Interval) -class IntervalResolver { - @Query((_) => Interval) - public interval( - @Arg("conferenceId", (_) => ID) conferenceId: string, - @Arg("intervalTitle", (_) => String) intervalTitle: string - ) { - const conference = getConference(conferenceId); - let ret; - - // This picks up only the last match right now - conference.schedules.forEach(({ intervals }) => { - const found = intervals.find(({ title }) => title === intervalTitle); - - if (found) { - ret = found; - } - }); - - return ret; - } - - @FieldResolver((_) => [Session]) - public sessions(@Root() interval: Interval) { - return interval.sessions.map((session) => ({ - ...session, - interval, - })); - } -} - -export default IntervalResolver; diff --git a/server/schema/resolvers/ScheduleResolver.ts b/server/schema/resolvers/ScheduleResolver.ts deleted file mode 100644 index 800c6bfb..00000000 --- a/server/schema/resolvers/ScheduleResolver.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Arg, ID, Query, Resolver } from "type-graphql"; -import { getConference } from "../Conference"; -import { Schedule } from "../Schedule"; - -@Resolver(_ => Schedule) -class ScheduleResolver { - @Query(_ => Schedule) - public schedule( - @Arg("conferenceId", _ => ID) conferenceId: string, - @Arg("day") day: string - ) { - return getSchedule(conferenceId, day); - } -} -function getSchedule(id: string, day: string) { - const conference = getConference(id); - const schedule = conference.schedules.find(c => c.day === day); - - if (schedule) { - return schedule; - } else { - throw new Error("Invalid date"); - } -} - -export default ScheduleResolver; diff --git a/server/schema/resolvers/SeriesResolver.ts b/server/schema/resolvers/SeriesResolver.ts deleted file mode 100644 index 3efa85b4..00000000 --- a/server/schema/resolvers/SeriesResolver.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Arg, FieldResolver, ID, Query, Resolver, Root } from "type-graphql"; -import conferences from "../../conferences"; -import { Conference } from "../Conference"; -import { Series } from "../Series"; -import series from "./conferenceSeries"; - -@Resolver(_ => Series) -class SeriesResolver { - @Query(_ => Series) - public series(@Arg("id", _ => ID) id: string) { - if (series[id]) { - return series[id]; - } else { - throw new Error("Unknown conference"); - } - } - - @Query(_ => [Series]) - public allSeries() { - return Object.keys(series).map(id => series[id]); - } - - @FieldResolver(_ => [Conference]) - public conferences(@Root() series: Series) { - return Object.values(conferences).filter( - conference => series.name === conference.series - ); - } -} - -export default SeriesResolver; diff --git a/server/schema/resolvers/SessionResolver.ts b/server/schema/resolvers/SessionResolver.ts deleted file mode 100644 index cd106b07..00000000 --- a/server/schema/resolvers/SessionResolver.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { FieldResolver, Resolver, Root } from "type-graphql"; -import { Contact } from "../Contact"; -import { Session } from "../Session"; - -@Resolver((_) => Session) -class SessionResolver { - @FieldResolver((_) => [Contact], { - deprecationReason: "Use `people` instead", - }) - public speakers(@Root() session: Session) { - return session.people || []; - } - - @FieldResolver((_) => String) - public title(@Root() session: Session) { - return session.title || "Mysterious talk"; - } - - @FieldResolver((_) => String) - public hasTitle(@Root() session: Session) { - return !!session.title; - } -} - -export default SessionResolver; diff --git a/server/schema/resolvers/SessionUrlsResolver.ts b/server/schema/resolvers/SessionUrlsResolver.ts deleted file mode 100644 index 7913c248..00000000 --- a/server/schema/resolvers/SessionUrlsResolver.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Ctx, FieldResolver, Resolver, Root } from "type-graphql"; -import { IContext } from "../Context"; -import { SessionUrls } from "../Session"; - -@Resolver((_) => SessionUrls) -class SessionUrlsResolver { - @FieldResolver((_) => String) - public drawing(@Root() root, @Ctx() ctx: IContext) { - if (!root.drawing) { - return; - } - - // FIXME: Figure out why ctx can be missing - return `${ctx ? ctx.mediaUrl : "/media"}/${root.drawing}`; - } -} - -export default SessionUrlsResolver; diff --git a/server/schema/resolvers/ThemeResolver.ts b/server/schema/resolvers/ThemeResolver.ts deleted file mode 100644 index 6be7aff9..00000000 --- a/server/schema/resolvers/ThemeResolver.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Arg, ID, Query, Resolver } from "type-graphql"; -import { Theme } from "../Theme"; -import allSeries from "./conferenceSeries"; - -@Resolver(_ => Theme) -class ThemeResolver { - @Query(_ => [Theme]) - public themes() { - return Object.values(allSeries).map(({ theme }) => theme); - } - - @Query(_ => Theme) - public theme(@Arg("conferenceId", _ => ID) conferenceId: string) { - const series = allSeries[conferenceId]; - - if (series) { - return series.theme; - } - - throw new Error("Conference id did not match series"); - } -} - -export default ThemeResolver; diff --git a/server/schema/resolvers/index.ts b/server/schema/resolvers/index.ts deleted file mode 100644 index 51895adc..00000000 --- a/server/schema/resolvers/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import ConferenceResolver from "./ConferenceResolver"; -import ContactResolver from "./ContactResolver"; -import IntervalResolver from "./IntervalResolver"; -import ScheduleResolver from "./ScheduleResolver"; -import SeriesResolver from "./SeriesResolver"; -import SessionResolver from "./SessionResolver"; -import SessionUrlsResolver from "./SessionUrlsResolver"; -import ThemeResolver from "./ThemeResolver"; - -export { - ConferenceResolver, - ContactResolver, - IntervalResolver, - ScheduleResolver, - SeriesResolver, - SessionResolver, - SessionUrlsResolver, - ThemeResolver, -}; diff --git a/server/schema/scalars.ts b/server/schema/scalars.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/server/schema/scalars.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/test/api.e2e.test.cjs b/test/api.e2e.test.cjs index d9d45cb6..75c9fb6f 100644 --- a/test/api.e2e.test.cjs +++ b/test/api.e2e.test.cjs @@ -2,8 +2,6 @@ const assert = require("node:assert/strict"); const http = require("node:http"); const test = require("node:test"); -require("reflect-metadata"); - const createRequestHandler = require("../build/server/create-request-handler").default; let server; diff --git a/tsconfig.json b/tsconfig.json index 07b7c92e..28b40325 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,8 +16,6 @@ "noImplicitAny": false, "noUnusedLocals": true, "esModuleInterop": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, "skipLibCheck": true }, "include": [ diff --git a/worker/index.ts b/worker/index.ts index 38958d13..24c74fd5 100644 --- a/worker/index.ts +++ b/worker/index.ts @@ -1,4 +1,3 @@ -import "reflect-metadata"; import createRequestHandler from "../server/create-request-handler"; interface Env { diff --git a/worker/shims/class-validator.ts b/worker/shims/class-validator.ts deleted file mode 100644 index 4a9e08df..00000000 --- a/worker/shims/class-validator.ts +++ /dev/null @@ -1,3 +0,0 @@ -export async function validateOrReject() { - return; -} diff --git a/wrangler.jsonc b/wrangler.jsonc index f3ea5425..70906daa 100644 --- a/wrangler.jsonc +++ b/wrangler.jsonc @@ -4,9 +4,6 @@ "main": "./worker/index.ts", "compatibility_date": "2026-04-03", "compatibility_flags": ["nodejs_compat"], - "alias": { - "class-validator": "./worker/shims/class-validator.ts" - }, "observability": { "enabled": true, "head_sampling_rate": 1 From 0cebbec7b17bef491452c976a0d8119b28e3d6b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 16:25:27 +0300 Subject: [PATCH 39/45] Move conference series data out of resolver path --- server/schema/conference-series.ts | 494 +++++++++++++++++++++++++++++ server/schema/graphql-schema.ts | 2 +- 2 files changed, 495 insertions(+), 1 deletion(-) create mode 100644 server/schema/conference-series.ts diff --git a/server/schema/conference-series.ts b/server/schema/conference-series.ts new file mode 100644 index 00000000..e189a5d6 --- /dev/null +++ b/server/schema/conference-series.ts @@ -0,0 +1,494 @@ +import { Theme } from "./Theme"; + +const conferenceSeries: { + [key: string]: { + id: string; + name: string; + conferences: string[]; + theme: Theme; + }; +} = { + "freezing-edge": { + id: "freezing-edge", + name: "Freezing Edge", + conferences: ["freezing-edge-2020"], + theme: { + id: "freezing-edge", + textures: [{ url: "/media/assets/freezing-edge-bg.jpg" }], + colors: { + primary: "#6efbfd", + secondary: "#3b99f7", + text: "#000000", + background: "#ffffff", + }, + fonts: { + primary: "Finlandica", + secondary: "Work Sans", + variants: [ + { + family: "Finlandica", + weight: "normal", + style: "normal", + fileName: "/media/fonts/finlandica-regular", + formats: ["woff2", "woff", "ttf"], + }, + { + family: "Work Sans", + weight: "normal", + style: "normal", + fileName: "/media/fonts/worksans-regular", + formats: ["ttf"], + }, + ], + }, + logos: { + black: { + withText: { + url: "/media/freezing-edge/black-logo-with-text.svg", + }, + withoutText: { + url: "/media/freezing-edge/black-logo.svg", + }, + }, + colored: { + withText: { + url: "/media/freezing-edge/color-logo-with-text.svg", + }, + withoutText: { + url: "/media/freezing-edge/color-logo.svg", + }, + }, + white: { + withText: { + url: "/media/freezing-edge/white-logo-with-text.svg", + }, + withoutText: { + url: "/media/freezing-edge/white-logo.svg", + }, + }, + }, + }, + }, + "future-frontend": { + id: "future-frontend", + name: "Future Frontend", + conferences: [ + "future-frontend-2023", + "future-frontend-2024", + "future-frontend-2025", + "future-frontend-2026", + ], + theme: { + id: "future-frontend", + textures: [{ url: "/media/assets/freezing-edge-bg.jpg" }], + colors: { + primary: "#3a2fa6", + secondary: "#84ebec", + text: "#ffffff", + background: "#ffffff", + }, + fonts: { + primary: "Eau", + secondary: "Work Sans", + variants: [ + { + family: "Eau", + weight: "normal", + style: "normal", + fileName: "/media/fonts/eau_sans_book", + formats: ["ttf"], + }, + { + family: "Work Sans", + weight: "normal", + style: "normal", + fileName: "/media/fonts/worksans-regular", + formats: ["woff2"], + }, + ], + }, + logos: { + black: { + withText: { + url: "/media/future-frontend/logo/ff-black.svg", + }, + withoutText: { + url: "/media/future-frontend/logo/icon.svg", + }, + }, + colored: { + withText: { + url: "/media/future-frontend/logo/ff-text.svg", + }, + withoutText: { + url: "/media/future-frontend/logo/icon.svg", + }, + }, + white: { + withText: { + url: "/media/future-frontend/logo/ff-white.svg", + }, + withoutText: { + url: "/media/future-frontend/logo/icon.svg", + }, + }, + }, + }, + }, + techmovienight: { + id: "techmovienight", + name: "Tech Movie Night", + conferences: ["techmovienight"], + theme: { + id: "techmovienight", + textures: [ + { + url: "/media/assets/wave.svg", + style: { + backgroundSize: "100% 100%, 150rem 150rem", + }, + }, + ], + colors: { + primary: "#141464", + secondary: "#272846", + text: "#000000", + background: "#ffffff", + }, + fonts: { + primary: "Finlandica", + secondary: "Work Sans", + variants: [ + { + family: "Finlandica", + weight: "normal", + style: "normal", + fileName: "/media/fonts/finlandica-regular", + formats: ["woff2", "woff", "ttf"], + }, + { + family: "Work Sans", + weight: "normal", + style: "normal", + fileName: "/media/fonts/worksans-regular", + formats: ["woff2"], + }, + ], + }, + logos: { + black: { + withText: { + url: "/media/techmovienight/black-logo-with-text.svg", + }, + withoutText: { + url: "/media/techmovienight/black-logo.svg", + }, + }, + colored: { + withText: { + url: "/media/techmovienight/black-logo-with-text.svg", + }, + withoutText: { + url: "/media/techmovienight/black-logo.svg", + }, + }, + white: { + withText: { + url: "/media/techmovienight/white-logo-with-text.svg", + }, + withoutText: { + url: "/media/techmovienight/white-logo.svg", + }, + }, + }, + }, + }, + halfstack: { + id: "halfstack", + name: "HalfStack", + conferences: ["halfstack-vienna-2019"], + theme: { + id: "halfstack", + textures: [{ url: "/media/halfstack/texture.svg" }], + colors: { + primary: "#D62329", + secondary: "#ffffff", + text: "#000000", + background: "#ffffff", + }, + // TODO: Figure out which font to use + fonts: { + primary: "Nunito", + secondary: "Nunito", + variants: [ + { + href: "https://fonts.googleapis.com/css?family=Nunito", + }, + ], + }, + logos: { + // TODO: A black version of the logo + black: { + withText: { + url: "/media/sponsors/halfstack.svg", + }, + withoutText: { + url: "/media/sponsors/halfstack.svg", + }, + }, + colored: { + withText: { + url: "/media/sponsors/halfstack.svg", + }, + // TODO: A compact version without text + withoutText: { + url: "/media/sponsors/halfstack.svg", + }, + }, + // TODO: A white version of the logo + white: { + withText: { + url: "/media/sponsors/halfstack.svg", + }, + withoutText: { + url: "/media/sponsors/halfstack.svg", + }, + }, + }, + }, + }, + typeof: { + id: "typeof", + name: "typeof", + conferences: ["typeof-2019"], + theme: { + id: "typeof", + textures: [{ url: "/media/assets/typeof.png" }], + colors: { + primary: "#9013fe", + secondary: "#2d2a96", + text: "#09020f", + background: "#ffffff", + }, + fonts: { + primary: "Nunito", + secondary: "Nunito", + variants: [ + { + href: "https://fonts.googleapis.com/css?family=Nunito", + }, + ], + }, + logos: { + black: { + withText: { + url: "/media/typeof/logo/logo-black-with-text.svg", + }, + withoutText: { + url: "/media/typeof/logo/logo-black.svg", + }, + }, + colored: { + withText: { + url: "/media/typeof/logo/logo-colored-with-text.svg", + }, + withoutText: { + url: "/media/typeof/logo/logo-colored.svg", + }, + }, + white: { + withText: { + url: "/media/typeof/logo/logo-white-with-text.svg", + }, + withoutText: { + url: "/media/typeof/logo/logo-white.svg", + }, + }, + }, + }, + }, + "reason-conf": { + id: "reason-conf", + name: "ReasonConf", + conferences: ["reason-conf-2019"], + theme: { + id: "reason-conf", + textures: [{ url: "/media/reason-conf/texture.png" }], + colors: { + primary: "#dd4b39", + secondary: "#385571", + text: "#fdfdfd", + background: "#F6F4F1", + }, + fonts: { + primary: "Montserrat", + secondary: "Work Sans", + variants: [ + { + href: "https://fonts.googleapis.com/css?family=Montserrat", + }, + { + href: "https://fonts.googleapis.com/css?family=Work+Sans", + }, + ], + }, + logos: { + black: { + withText: { + url: "/media/reason-conf/logo/logo-black-with-text.svg", + }, + withoutText: { + url: "/media/reason-conf/logo/logo-black.svg", + }, + }, + colored: { + withText: { + url: "/media/reason-conf/logo/logo-colored-with-text.svg", + }, + withoutText: { + url: "/media/reason-conf/logo/logo-colored.svg", + }, + }, + white: { + withText: { + url: "/media/reason-conf/logo/logo-white-with-text.svg", + }, + withoutText: { + url: "/media/reason-conf/logo/logo-white.svg", + }, + }, + }, + }, + }, + "react-finland": { + id: "react-finland", + name: "React Finland", + conferences: [ + "react-finland-2018", + "react-finland-2019", + "react-finland-2020", + "react-finland-2021", + "react-finland-2022", + "rf-2020-01", + ], + theme: { + id: "react-finland", + textures: [{ url: "/media/assets/wave.svg" }], + colors: { + primary: "#002fa9", + secondary: "#5297e9", + text: "#fdfdfd", + background: "#eee", + }, + fonts: { + primary: "Finlandica", + secondary: "Work Sans", + variants: [ + { + family: "Finlandica", + weight: "normal", + style: "normal", + fileName: "/media/fonts/finlandica-regular", + formats: ["woff2", "woff", "ttf"], + }, + { + family: "Work Sans", + weight: "normal", + style: "normal", + fileName: "/media/fonts/worksans-regular", + formats: ["ttf"], + }, + ], + }, + logos: { + black: { + withText: { + url: "/media/react-finland/logo/v2/logo-black-with-text.svg", + }, + withoutText: { + url: "/media/react-finland/logo/v2/logo-black.svg", + }, + }, + colored: { + withText: { + url: "/media/react-finland/logo/v2/logo-colored-with-text.svg", + }, + withoutText: { + url: "/media/react-finland/logo/v2/logo-colored.svg", + }, + }, + white: { + withText: { + url: "/media/react-finland/logo/v2/logo-white-with-text.svg", + }, + withoutText: { + url: "/media/react-finland/logo/v2/logo-white.svg", + }, + }, + }, + }, + }, + "graphql-finland": { + id: "graphql-finland", + name: "GraphQL Finland", + conferences: ["graphql-finland-2018", "graphql-finland-2020"], + theme: { + id: "graphql-finland", + textures: [{ url: "/media/assets/wave.svg" }], + colors: { + primary: "#e10098", + secondary: "#ff1eb6", + text: "#233239", + background: "#eee", + }, + fonts: { + primary: "Finlandica", + secondary: "Work Sans", + variants: [ + { + family: "Finlandica", + weight: "normal", + style: "normal", + fileName: "/media/fonts/finlandica-regular", + formats: ["woff2", "woff", "ttf"], + }, + { + family: "Work Sans", + weight: "normal", + style: "normal", + fileName: "/media/fonts/worksans-regular", + formats: ["woff2"], + }, + ], + }, + logos: { + black: { + withText: { + url: "/media/graphql-finland/logo/v1/logo-black-with-text.svg", + }, + withoutText: { + url: "/media/graphql-finland/logo/v1/logo-black.svg", + }, + }, + colored: { + withText: { + url: "/media/graphql-finland/logo/v1/logo-colored-with-text.svg", + }, + withoutText: { + url: "/media/graphql-finland/logo/v1/logo-colored.svg", + }, + }, + white: { + withText: { + url: "/media/graphql-finland/logo/v1/logo-white-with-text.svg", + }, + withoutText: { + url: "/media/graphql-finland/logo/v1/logo-white.svg", + }, + }, + }, + }, + }, +}; + +export default conferenceSeries; diff --git a/server/schema/graphql-schema.ts b/server/schema/graphql-schema.ts index 9a0ccf4d..36c40932 100644 --- a/server/schema/graphql-schema.ts +++ b/server/schema/graphql-schema.ts @@ -17,7 +17,7 @@ import Level from "./Level"; import { Location } from "./Location"; import { resolveSessions } from "./Schedule"; import { Session, SessionType } from "./Session"; -import conferenceSeries from "./resolvers/conferenceSeries"; +import conferenceSeries from "./conference-series"; const ContactTypeEnum = createEnumType("ContactType", ContactType); const SessionTypeEnum = createEnumType("SessionType", SessionType); From 376e60bd2f6775d9792ad61cc6707c4a70636a3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 16:25:54 +0300 Subject: [PATCH 40/45] Rename local API test and drop stale schema path --- package.json | 2 +- server/schema/resolvers/conferenceSeries.ts | 494 ------------------ ....e2e.test.cjs => api.integration.test.cjs} | 0 3 files changed, 1 insertion(+), 495 deletions(-) delete mode 100644 server/schema/resolvers/conferenceSeries.ts rename test/{api.e2e.test.cjs => api.integration.test.cjs} (100%) diff --git a/package.json b/package.json index dccd3b57..2207451e 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "ci:local:all": "npm run agent-ci:patch && node ./scripts/run-agent-ci.mjs run --all", "ci:local:retry": "npm run agent-ci:patch && node ./scripts/run-agent-ci.mjs retry", "types:check": "tsc --noEmit", - "test": "tsc && node --test test/api.e2e.test.cjs", + "test": "tsc && node --test test/api.integration.test.cjs", "quality:gate:fast": "npm run types:check && npm test && npm run cf:check", "quality:gate": "npm run ci:local:quiet" }, diff --git a/server/schema/resolvers/conferenceSeries.ts b/server/schema/resolvers/conferenceSeries.ts deleted file mode 100644 index a156a85d..00000000 --- a/server/schema/resolvers/conferenceSeries.ts +++ /dev/null @@ -1,494 +0,0 @@ -import { Theme } from "../Theme"; - -const conferenceSeries: { - [key: string]: { - id: string; - name: string; - conferences: string[]; - theme: Theme; - }; -} = { - "freezing-edge": { - id: "freezing-edge", - name: "Freezing Edge", - conferences: ["freezing-edge-2020"], - theme: { - id: "freezing-edge", - textures: [{ url: "/media/assets/freezing-edge-bg.jpg" }], - colors: { - primary: "#6efbfd", - secondary: "#3b99f7", - text: "#000000", - background: "#ffffff", - }, - fonts: { - primary: "Finlandica", - secondary: "Work Sans", - variants: [ - { - family: "Finlandica", - weight: "normal", - style: "normal", - fileName: "/media/fonts/finlandica-regular", - formats: ["woff2", "woff", "ttf"], - }, - { - family: "Work Sans", - weight: "normal", - style: "normal", - fileName: "/media/fonts/worksans-regular", - formats: ["ttf"], - }, - ], - }, - logos: { - black: { - withText: { - url: "/media/freezing-edge/black-logo-with-text.svg", - }, - withoutText: { - url: "/media/freezing-edge/black-logo.svg", - }, - }, - colored: { - withText: { - url: "/media/freezing-edge/color-logo-with-text.svg", - }, - withoutText: { - url: "/media/freezing-edge/color-logo.svg", - }, - }, - white: { - withText: { - url: "/media/freezing-edge/white-logo-with-text.svg", - }, - withoutText: { - url: "/media/freezing-edge/white-logo.svg", - }, - }, - }, - }, - }, - "future-frontend": { - id: "future-frontend", - name: "Future Frontend", - conferences: [ - "future-frontend-2023", - "future-frontend-2024", - "future-frontend-2025", - "future-frontend-2026", - ], - theme: { - id: "future-frontend", - textures: [{ url: "/media/assets/freezing-edge-bg.jpg" }], - colors: { - primary: "#3a2fa6", - secondary: "#84ebec", - text: "#ffffff", - background: "#ffffff", - }, - fonts: { - primary: "Eau", - secondary: "Work Sans", - variants: [ - { - family: "Eau", - weight: "normal", - style: "normal", - fileName: "/media/fonts/eau_sans_book", - formats: ["ttf"], - }, - { - family: "Work Sans", - weight: "normal", - style: "normal", - fileName: "/media/fonts/worksans-regular", - formats: ["woff2"], - }, - ], - }, - logos: { - black: { - withText: { - url: "/media/future-frontend/logo/ff-black.svg", - }, - withoutText: { - url: "/media/future-frontend/logo/icon.svg", - }, - }, - colored: { - withText: { - url: "/media/future-frontend/logo/ff-text.svg", - }, - withoutText: { - url: "/media/future-frontend/logo/icon.svg", - }, - }, - white: { - withText: { - url: "/media/future-frontend/logo/ff-white.svg", - }, - withoutText: { - url: "/media/future-frontend/logo/icon.svg", - }, - }, - }, - }, - }, - techmovienight: { - id: "techmovienight", - name: "Tech Movie Night", - conferences: ["techmovienight"], - theme: { - id: "techmovienight", - textures: [ - { - url: "/media/assets/wave.svg", - style: { - backgroundSize: "100% 100%, 150rem 150rem", - }, - }, - ], - colors: { - primary: "#141464", - secondary: "#272846", - text: "#000000", - background: "#ffffff", - }, - fonts: { - primary: "Finlandica", - secondary: "Work Sans", - variants: [ - { - family: "Finlandica", - weight: "normal", - style: "normal", - fileName: "/media/fonts/finlandica-regular", - formats: ["woff2", "woff", "ttf"], - }, - { - family: "Work Sans", - weight: "normal", - style: "normal", - fileName: "/media/fonts/worksans-regular", - formats: ["woff2"], - }, - ], - }, - logos: { - black: { - withText: { - url: "/media/techmovienight/black-logo-with-text.svg", - }, - withoutText: { - url: "/media/techmovienight/black-logo.svg", - }, - }, - colored: { - withText: { - url: "/media/techmovienight/black-logo-with-text.svg", - }, - withoutText: { - url: "/media/techmovienight/black-logo.svg", - }, - }, - white: { - withText: { - url: "/media/techmovienight/white-logo-with-text.svg", - }, - withoutText: { - url: "/media/techmovienight/white-logo.svg", - }, - }, - }, - }, - }, - halfstack: { - id: "halfstack", - name: "HalfStack", - conferences: ["halfstack-vienna-2019"], - theme: { - id: "halfstack", - textures: [{ url: "/media/halfstack/texture.svg" }], - colors: { - primary: "#D62329", - secondary: "#ffffff", - text: "#000000", - background: "#ffffff", - }, - // TODO: Figure out which font to use - fonts: { - primary: "Nunito", - secondary: "Nunito", - variants: [ - { - href: "https://fonts.googleapis.com/css?family=Nunito", - }, - ], - }, - logos: { - // TODO: A black version of the logo - black: { - withText: { - url: "/media/sponsors/halfstack.svg", - }, - withoutText: { - url: "/media/sponsors/halfstack.svg", - }, - }, - colored: { - withText: { - url: "/media/sponsors/halfstack.svg", - }, - // TODO: A compact version without text - withoutText: { - url: "/media/sponsors/halfstack.svg", - }, - }, - // TODO: A white version of the logo - white: { - withText: { - url: "/media/sponsors/halfstack.svg", - }, - withoutText: { - url: "/media/sponsors/halfstack.svg", - }, - }, - }, - }, - }, - typeof: { - id: "typeof", - name: "typeof", - conferences: ["typeof-2019"], - theme: { - id: "typeof", - textures: [{ url: "/media/assets/typeof.png" }], - colors: { - primary: "#9013fe", - secondary: "#2d2a96", - text: "#09020f", - background: "#ffffff", - }, - fonts: { - primary: "Nunito", - secondary: "Nunito", - variants: [ - { - href: "https://fonts.googleapis.com/css?family=Nunito", - }, - ], - }, - logos: { - black: { - withText: { - url: "/media/typeof/logo/logo-black-with-text.svg", - }, - withoutText: { - url: "/media/typeof/logo/logo-black.svg", - }, - }, - colored: { - withText: { - url: "/media/typeof/logo/logo-colored-with-text.svg", - }, - withoutText: { - url: "/media/typeof/logo/logo-colored.svg", - }, - }, - white: { - withText: { - url: "/media/typeof/logo/logo-white-with-text.svg", - }, - withoutText: { - url: "/media/typeof/logo/logo-white.svg", - }, - }, - }, - }, - }, - "reason-conf": { - id: "reason-conf", - name: "ReasonConf", - conferences: ["reason-conf-2019"], - theme: { - id: "reason-conf", - textures: [{ url: "/media/reason-conf/texture.png" }], - colors: { - primary: "#dd4b39", - secondary: "#385571", - text: "#fdfdfd", - background: "#F6F4F1", - }, - fonts: { - primary: "Montserrat", - secondary: "Work Sans", - variants: [ - { - href: "https://fonts.googleapis.com/css?family=Montserrat", - }, - { - href: "https://fonts.googleapis.com/css?family=Work+Sans", - }, - ], - }, - logos: { - black: { - withText: { - url: "/media/reason-conf/logo/logo-black-with-text.svg", - }, - withoutText: { - url: "/media/reason-conf/logo/logo-black.svg", - }, - }, - colored: { - withText: { - url: "/media/reason-conf/logo/logo-colored-with-text.svg", - }, - withoutText: { - url: "/media/reason-conf/logo/logo-colored.svg", - }, - }, - white: { - withText: { - url: "/media/reason-conf/logo/logo-white-with-text.svg", - }, - withoutText: { - url: "/media/reason-conf/logo/logo-white.svg", - }, - }, - }, - }, - }, - "react-finland": { - id: "react-finland", - name: "React Finland", - conferences: [ - "react-finland-2018", - "react-finland-2019", - "react-finland-2020", - "react-finland-2021", - "react-finland-2022", - "rf-2020-01", - ], - theme: { - id: "react-finland", - textures: [{ url: "/media/assets/wave.svg" }], - colors: { - primary: "#002fa9", - secondary: "#5297e9", - text: "#fdfdfd", - background: "#eee", - }, - fonts: { - primary: "Finlandica", - secondary: "Work Sans", - variants: [ - { - family: "Finlandica", - weight: "normal", - style: "normal", - fileName: "/media/fonts/finlandica-regular", - formats: ["woff2", "woff", "ttf"], - }, - { - family: "Work Sans", - weight: "normal", - style: "normal", - fileName: "/media/fonts/worksans-regular", - formats: ["ttf"], - }, - ], - }, - logos: { - black: { - withText: { - url: "/media/react-finland/logo/v2/logo-black-with-text.svg", - }, - withoutText: { - url: "/media/react-finland/logo/v2/logo-black.svg", - }, - }, - colored: { - withText: { - url: "/media/react-finland/logo/v2/logo-colored-with-text.svg", - }, - withoutText: { - url: "/media/react-finland/logo/v2/logo-colored.svg", - }, - }, - white: { - withText: { - url: "/media/react-finland/logo/v2/logo-white-with-text.svg", - }, - withoutText: { - url: "/media/react-finland/logo/v2/logo-white.svg", - }, - }, - }, - }, - }, - "graphql-finland": { - id: "graphql-finland", - name: "GraphQL Finland", - conferences: ["graphql-finland-2018", "graphql-finland-2020"], - theme: { - id: "graphql-finland", - textures: [{ url: "/media/assets/wave.svg" }], - colors: { - primary: "#e10098", - secondary: "#ff1eb6", - text: "#233239", - background: "#eee", - }, - fonts: { - primary: "Finlandica", - secondary: "Work Sans", - variants: [ - { - family: "Finlandica", - weight: "normal", - style: "normal", - fileName: "/media/fonts/finlandica-regular", - formats: ["woff2", "woff", "ttf"], - }, - { - family: "Work Sans", - weight: "normal", - style: "normal", - fileName: "/media/fonts/worksans-regular", - formats: ["woff2"], - }, - ], - }, - logos: { - black: { - withText: { - url: "/media/graphql-finland/logo/v1/logo-black-with-text.svg", - }, - withoutText: { - url: "/media/graphql-finland/logo/v1/logo-black.svg", - }, - }, - colored: { - withText: { - url: "/media/graphql-finland/logo/v1/logo-colored-with-text.svg", - }, - withoutText: { - url: "/media/graphql-finland/logo/v1/logo-colored.svg", - }, - }, - white: { - withText: { - url: "/media/graphql-finland/logo/v1/logo-white-with-text.svg", - }, - withoutText: { - url: "/media/graphql-finland/logo/v1/logo-white.svg", - }, - }, - }, - }, - }, -}; - -export default conferenceSeries; diff --git a/test/api.e2e.test.cjs b/test/api.integration.test.cjs similarity index 100% rename from test/api.e2e.test.cjs rename to test/api.integration.test.cjs From 3b0c3da152b74385c6c44f07c0fd67135c154f1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 16:26:11 +0300 Subject: [PATCH 41/45] Inline schema entrypoint --- server/create-request-handler.ts | 2 +- server/schema/index.ts | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) delete mode 100644 server/schema/index.ts diff --git a/server/create-request-handler.ts b/server/create-request-handler.ts index 1f4e62f0..9c3a9707 100644 --- a/server/create-request-handler.ts +++ b/server/create-request-handler.ts @@ -1,4 +1,4 @@ -import generateSchema from "./schema"; +import generateSchema from "./schema/graphql-schema"; import handleCalendarRequest from "./routes/calendar"; import createGraphQLRequestHandler from "./routes/graphql"; import handlePingRequest from "./routes/ping"; diff --git a/server/schema/index.ts b/server/schema/index.ts deleted file mode 100644 index 20c11312..00000000 --- a/server/schema/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import generateSchema from "./graphql-schema"; - -export default async function createSchema() { - return generateSchema(); -} From 41d17d05e3bc4a7edbceca9c69103cde1b4e7976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 16:30:00 +0300 Subject: [PATCH 42/45] chore: Allow access to calendar --- README.md | 4 ++-- server/create-request-handler.ts | 6 +++--- test/api.integration.test.cjs | 6 ++++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 96f3cbd8..600fe813 100644 --- a/README.md +++ b/README.md @@ -74,8 +74,8 @@ Check these endpoints on the deployed domain: ## Environment variables -The application requires a `TOKEN` value at runtime for all Worker-handled routes. +The application requires a `TOKEN` value at runtime for protected Worker-handled routes. `/calendar-2026.ics` and `/media/*` are public. For local Wrangler development, provide the values in `.dev.vars` or `.env`. The example in [.env.template](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.env.template) is: -- `TOKEN` for authenticating all Worker-handled routes through a `TOKEN` request header +- `TOKEN` for authenticating protected Worker-handled routes through a `TOKEN` request header diff --git a/server/create-request-handler.ts b/server/create-request-handler.ts index 9c3a9707..8df5ae91 100644 --- a/server/create-request-handler.ts +++ b/server/create-request-handler.ts @@ -27,12 +27,12 @@ async function createRequestHandler(options: CreateRequestHandlerOptions) { const pathname = new URL(request.url).pathname; let response: Response | null = null; - if (!hasValidToken(request, expectedToken)) { + if (pathname === "/calendar-2026.ics") { + response = handleCalendarRequest(); + } else if (!hasValidToken(request, expectedToken)) { response = new Response("Unauthorized", { status: 401 }); } else if (pathname === "/ping") { response = handlePingRequest(); - } else if (pathname === "/calendar-2026.ics") { - response = handleCalendarRequest(); } else if (pathname === "/graphql") { response = await graphqlHandler(request); } diff --git a/test/api.integration.test.cjs b/test/api.integration.test.cjs index 75c9fb6f..4668b2e3 100644 --- a/test/api.integration.test.cjs +++ b/test/api.integration.test.cjs @@ -134,6 +134,12 @@ test("GET /calendar-2026.ics returns the published calendar file", async () => { assert.match(body, /futurefrontend\.com/i); }); +test("GET /calendar-2026.ics is public", async () => { + const response = await fetch(new URL("/calendar-2026.ics", baseUrl)); + + assert.equal(response.status, 200); +}); + test("GET /calendar/:id is no longer exposed", async () => { const response = await request("/calendar/future-frontend-2026"); const body = await response.text(); From 765cebd0a9d4a542bff448e8423490812d054994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 16:34:37 +0300 Subject: [PATCH 43/45] chore: Split up docs --- DEVELOPMENT.md | 41 +++++++++++++++++++++++++++++++++++++++++ README.md | 28 +--------------------------- 2 files changed, 42 insertions(+), 27 deletions(-) create mode 100644 DEVELOPMENT.md diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 00000000..e6943efa --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,41 @@ +# Development + +## Local development + +Use the Worker runtime for local development: + +1. Use Node.js 24, for example with `nvm use`. +2. Install dependencies with `npm install`. +3. Authenticate Wrangler with `npx wrangler login`. +4. Start the Worker locally with `npm run cf:dev`. + +Wrangler uses [wrangler.jsonc](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/wrangler.jsonc) and serves public image assets from the repository through the static-assets configuration in [.assetsignore](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.assetsignore). + +Useful local endpoints: + +- `http://localhost:8787/calendar-2026.ics` +- `http://localhost:8787/media/people/kenw.jpg` + +## Quality checks + +Before deploying or after larger refactors, run: + +```sh +npm run quality:gate +``` + +That executes the checked-in CI workflow locally through `agent-ci`. + +If you only want the direct checks without the local CI wrapper, run: + +```sh +npm run quality:gate:fast +``` + +## Environment variables + +The application requires a `TOKEN` value at runtime for protected Worker-handled routes. `/calendar-2026.ics` and `/media/*` are public. + +For local Wrangler development, provide the values in `.dev.vars` or `.env`. The example in [.env.template](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.env.template) is: + +- `TOKEN` for authenticating protected Worker-handled routes through a `TOKEN` request header diff --git a/README.md b/README.md index 600fe813..0e4abb24 100644 --- a/README.md +++ b/README.md @@ -7,25 +7,7 @@ This repository serves conference data over GraphQL and exposes a small set of s - `/calendar-2026.ics` - `/media/*` -## Local development - -### Cloudflare Worker - -Use the Worker runtime for local development: - -1. Use Node.js 24, for example with `nvm use`. -2. Install dependencies with `npm install`. -3. Authenticate Wrangler with `npx wrangler login`. -4. Start the Worker locally with `npm run cf:dev`. - -Wrangler uses [wrangler.jsonc](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/wrangler.jsonc) and serves public image assets from the repository through the static-assets configuration in [.assetsignore](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.assetsignore). - -Before deploying or after larger refactors, run `npm run quality:gate` to execute the checked-in CI workflow locally through `agent-ci`. The direct checks that workflow runs are also available as `npm run quality:gate:fast`. - -Other useful local endpoints: - -- `http://localhost:8787/calendar-2026.ics` -- `http://localhost:8787/media/people/kenw.jpg` +Development setup lives in [DEVELOPMENT.md](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/DEVELOPMENT.md). ## Deploying to Cloudflare @@ -71,11 +53,3 @@ Check these endpoints on the deployed domain: - `/ping` - `/calendar-2026.ics` - `/media/people/kenw.jpg` - -## Environment variables - -The application requires a `TOKEN` value at runtime for protected Worker-handled routes. `/calendar-2026.ics` and `/media/*` are public. - -For local Wrangler development, provide the values in `.dev.vars` or `.env`. The example in [.env.template](/Users/juhovepsalainen/Projects/future-frontend/graphql-api/.env.template) is: - -- `TOKEN` for authenticating protected Worker-handled routes through a `TOKEN` request header From 6acdd7ec19cbba7501fca4950e809166b788318c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 16:36:17 +0300 Subject: [PATCH 44/45] fix: Fix worker name --- wrangler.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wrangler.jsonc b/wrangler.jsonc index 70906daa..264dfda1 100644 --- a/wrangler.jsonc +++ b/wrangler.jsonc @@ -1,6 +1,6 @@ { "$schema": "./node_modules/wrangler/config-schema.json", - "name": "future-frontend-graphql-api", + "name": "graphql-api", "main": "./worker/index.ts", "compatibility_date": "2026-04-03", "compatibility_flags": ["nodejs_compat"], From 9fe68b43c305ec4e2a151d8eebff274f94fd81e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Fri, 3 Apr 2026 16:38:57 +0300 Subject: [PATCH 45/45] chore: Add a note --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0e4abb24..e8b7702a 100644 --- a/README.md +++ b/README.md @@ -53,3 +53,5 @@ Check these endpoints on the deployed domain: - `/ping` - `/calendar-2026.ics` - `/media/people/kenw.jpg` + +Note that the first two require a `TOKEN` header.