diff --git a/package.json b/package.json index d15b56f7f61..19bba896bdc 100644 --- a/package.json +++ b/package.json @@ -108,6 +108,6 @@ "unified": "^9.2.0" }, "engines": { - "node": ">=16" + "node": ">=14" } } diff --git a/packages/remix-gcloud-functions-gen2/index.ts b/packages/remix-gcloud-functions-gen2/index.ts deleted file mode 100644 index 3ada2fcef4f..00000000000 --- a/packages/remix-gcloud-functions-gen2/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import "./globals"; - -// export type { GetLoadContextFunction, RequestHandler } from "./server"; -export { createRequestHandler, createRemixHeaders, createRemixRequest } from "./server"; diff --git a/packages/remix-gcloud-functions-gen2/package.json b/packages/remix-gcloud-functions-gen2/package.json deleted file mode 100644 index c30e17d03cc..00000000000 --- a/packages/remix-gcloud-functions-gen2/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "remix-adapter-gcf-gen2", - "description": "Unofficial Google Cloud Functions (gen2) request handler for Remix", - "version": "0.0.8", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/eastlondoner/remix", - "directory": "packages/remix-gcloud-functions-gen2" - }, - "bugs": { - "url": "https://github.com/eastlondoner/remix/issues" - }, - "dependencies": { - "@remix-run/node": "1.5.1" - }, - "peerDependencies": { - "express": "^4.17.1" - }, - "devDependencies": { - "@google-cloud/functions-framework": "^3.1.1", - "@remix-run/server-runtime": "1.5.1" - } -} diff --git a/packages/remix-gcloud-functions-gen2/README.md b/packages/remix-google-cloud-functions/README.md similarity index 100% rename from packages/remix-gcloud-functions-gen2/README.md rename to packages/remix-google-cloud-functions/README.md diff --git a/packages/remix-gcloud-functions-gen2/globals.ts b/packages/remix-google-cloud-functions/globals.ts similarity index 100% rename from packages/remix-gcloud-functions-gen2/globals.ts rename to packages/remix-google-cloud-functions/globals.ts diff --git a/packages/remix-google-cloud-functions/index.ts b/packages/remix-google-cloud-functions/index.ts new file mode 100644 index 00000000000..fb640bf4799 --- /dev/null +++ b/packages/remix-google-cloud-functions/index.ts @@ -0,0 +1,4 @@ +import "./globals"; + +export type { GetLoadContextFunction, RequestHandler } from "./server"; +export { createRequestHandler } from "./server"; diff --git a/packages/remix-google-cloud-functions/package.json b/packages/remix-google-cloud-functions/package.json new file mode 100644 index 00000000000..ed27204209b --- /dev/null +++ b/packages/remix-google-cloud-functions/package.json @@ -0,0 +1,24 @@ +{ + "name": "@remix-run/google-cloud-functions", + "version": "1.5.1", + "description": "Google Cloud Functions server request handler for Remix", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/remix-run/remix", + "directory": "packages/remix-gcloud-functions-gen2" + }, + "bugs": { + "url": "https://github.com/remix-run/remix/issues" + }, + "dependencies": { + "@google-cloud/functions-framework": "^3.1.1", + "@remix-run/node": "1.5.1" + }, + "peerDependencies": { + "express": "^4.17.1" + }, + "engines": { + "node": ">=14" + } +} diff --git a/packages/remix-gcloud-functions-gen2/server.ts b/packages/remix-google-cloud-functions/server.ts similarity index 68% rename from packages/remix-gcloud-functions-gen2/server.ts rename to packages/remix-google-cloud-functions/server.ts index 0162382b57d..2403ce38981 100644 --- a/packages/remix-gcloud-functions-gen2/server.ts +++ b/packages/remix-google-cloud-functions/server.ts @@ -1,23 +1,21 @@ import type { NextFunction } from "express"; -import type { AppLoadContext, ServerBuild } from "@remix-run/server-runtime"; +import type { AppLoadContext, ServerBuild } from "@remix-run/node"; import type { Request as GcfRequest, Response as GcfResponse, } from "@google-cloud/functions-framework"; import type { RequestInit as NodeRequestInit, - Response as NodeResponse + } from "@remix-run/node"; import { + AbortController, createRequestHandler as createRemixRequestHandler, Headers as NodeHeaders, Request as NodeRequest, + Response as NodeResponse, writeReadableStreamToWritable } from "@remix-run/node"; -import { - // This has been added as a global in node 15+ - AbortController, -} from "@remix-run/node"; import { Readable } from 'stream' /** @@ -31,11 +29,9 @@ export interface GetLoadContextFunction { (req: GcfRequest, res: GcfResponse): AppLoadContext; } -//export type RequestHandler = ReturnType; export type RequestHandler = ( req: GcfRequest, res: GcfResponse, - next: NextFunction ) => Promise; /** @@ -52,7 +48,7 @@ export function createRequestHandler({ }): RequestHandler { let handleRequest = createRemixRequestHandler(build, mode); - return async (req: GcfRequest, res: GcfResponse, next: NextFunction) => { + return async (req: GcfRequest, res: GcfResponse) => { try { let request = createRemixRequest(req); let loadContext = @@ -67,9 +63,8 @@ export function createRequestHandler({ await sendRemixResponse(res, response); } catch (error) { - // Express doesn't support async functions, so we have to pass along the - // error manually using next(). - next(error); + console.error(error); + await sendRemixResponse(res ,new NodeResponse("Internal Error", { status: 500 })); } }; } @@ -86,7 +81,7 @@ export function createRemixHeaders( headers.append(key, value); } } else { - headers.set(key, values as any); + headers.set(key, values); } } } @@ -112,8 +107,8 @@ export function createRemixRequest( signal: controller.signal, }; - if (hasBody(req)) { - init.body = createRemixBody(req); + if (req.method !== "GET" && req.method !== "HEAD") { + init.body = req.rawBody; } return new NodeRequest(url.href, init); @@ -138,27 +133,3 @@ async function sendRemixResponse( res.end(); } } -/** - * Google Cloud Functions includes middleware that processes incoming requests based on their headers and sets the request body to - * a javascript object. But Remix doesn't like that, remix has its own request processing logic, so we have to turn the body back into - * something that Remix is expecting. In this case a Buffer with URLSearchParams encoded data works. - * - * @param req the request passed in from the Google Cloud Function - */ -function createRemixBody(req: GcfRequest) { - let s = new Readable() - s.push((new URLSearchParams(req.body).toString()).toString()); - s.push(null); - return s; -} - -function hasBody(req: GcfRequest): boolean { - let body = req.body; - if (!body) { - return false; - } - for (var x in body) { - return true; - } - return false; -} diff --git a/packages/remix-gcloud-functions-gen2/tsconfig.json b/packages/remix-google-cloud-functions/tsconfig.json similarity index 79% rename from packages/remix-gcloud-functions-gen2/tsconfig.json rename to packages/remix-google-cloud-functions/tsconfig.json index 5246a57b1d6..3fd09916a8f 100644 --- a/packages/remix-gcloud-functions-gen2/tsconfig.json +++ b/packages/remix-google-cloud-functions/tsconfig.json @@ -11,7 +11,7 @@ "declaration": true, "emitDeclarationOnly": true, - "outDir": "../../build/node_modules/@remix-run/gcloud-functions-gen2", + "outDir": "../../build/node_modules/@remix-run/google-cloud-functions", "rootDir": "." } } diff --git a/rollup.config.js b/rollup.config.js index e1204f05a05..24ca3738157 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -692,8 +692,8 @@ function remixServerAdapters() { ...getAdapterConfig("architect"), ...getAdapterConfig("cloudflare-pages"), ...getAdapterConfig("cloudflare-workers"), - ...getAdapterConfig("gcloud-functions-gen2"), ...getAdapterConfig("express"), + ...getAdapterConfig("google-cloud-functions"), ...getAdapterConfig("netlify"), ...getAdapterConfig("vercel"), ]; diff --git a/tsconfig.json b/tsconfig.json index dc30675e1f9..2ced77eb8c4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,7 @@ { "path": "packages/remix-cloudflare-workers" }, { "path": "packages/remix-dev" }, { "path": "packages/remix-express" }, - { "path": "packages/remix-gcloud-functions-gen2" }, + { "path": "packages/remix-google-cloud-functions" }, { "path": "packages/remix-netlify" }, { "path": "packages/remix-node" }, { "path": "packages/remix-react" }, diff --git a/yarn.lock b/yarn.lock index 03c2cd63562..d203abdcc60 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1159,20 +1159,6 @@ resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz" integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== -"@google-cloud/functions-framework@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@google-cloud/functions-framework/-/functions-framework-3.1.1.tgz#ba336b81217ebe55f249ab20c2ee2be8dd80c0eb" - integrity sha512-ZC85zX757DUYuE6H0HONCD40PPdim4Ew0gOBVwtm7Lb5jqv7t2TeM8c2B3btHwaNnxBVOdMOhbwwXzVLsivOaA== - dependencies: - "@types/express" "4.17.13" - body-parser "^1.18.3" - cloudevents "^6.0.0" - express "^4.16.4" - minimist "^1.2.5" - on-finished "^2.3.0" - read-pkg-up "^7.0.1" - semver "^7.3.5" - "@humanwhocodes/config-array@^0.6.0": version "0.6.0" resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz" @@ -1952,7 +1938,7 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@*", "@types/express@4.17.13", "@types/express@^4.17.9": +"@types/express@*", "@types/express@^4.17.9": version "4.17.13" resolved "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz" integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== @@ -2535,13 +2521,6 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" @@ -2552,16 +2531,6 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.6.3: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - ansi-bgblack@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/ansi-bgblack/-/ansi-bgblack-0.1.1.tgz" @@ -3247,24 +3216,6 @@ body-parser@1.19.2: raw-body "2.4.3" type-is "~1.6.18" -body-parser@1.20.0, body-parser@^1.18.3: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== - 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.10.3" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - boolbase@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" @@ -3717,16 +3668,6 @@ clone@^1.0.2: resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -cloudevents@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/cloudevents/-/cloudevents-6.0.1.tgz#06c6e5e5a2ce973befd3d22d191c3fd23950cc11" - integrity sha512-6Y2EOQKsEEciSeIPL8ENob2LcFSt/r0iftTefl3IanSVr2LyvXfbEdD5+pvufVDFdf6OVijvtl7UFx/0voMOsw== - dependencies: - ajv "^8.6.3" - ajv-formats "^2.1.1" - util "^0.12.4" - uuid "^8.3.2" - co@^4.6.0: version "4.6.0" resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" @@ -3894,11 +3835,6 @@ cookie@0.4.2, cookie@^0.4.1, cookie@^0.4.2: resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - cookiejar@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz" @@ -4222,26 +4158,21 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -depd@2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - depd@^1.1.0, depd@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +depd@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - destroy@~1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" @@ -5108,43 +5039,6 @@ express@4.17.3, express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" -express@^4.16.4: - version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.0" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.10.3" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" @@ -5304,19 +5198,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" @@ -5858,17 +5739,6 @@ http-errors@1.8.1: statuses ">= 1.5.0 < 2" toidentifier "1.0.1" -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" @@ -7084,11 +6954,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-schema@0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" @@ -8041,7 +7906,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.6: version "1.2.6" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== @@ -8398,13 +8263,6 @@ object.values@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" -on-finished@2.4.1, on-finished@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" @@ -9021,13 +8879,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - qs@6.9.7, qs@^6.9.4: version "6.9.7" resolved "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz" @@ -9087,16 +8938,6 @@ raw-body@2.4.3: iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - react-dom@^17.0.2: version "17.0.2" resolved "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" @@ -9376,11 +9217,6 @@ require-directory@^2.1.1: resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - requireindex@^1.2.0, requireindex@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz" @@ -9644,25 +9480,6 @@ send@0.17.2: range-parser "~1.2.1" statuses "~1.5.0" -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - serve-static@1.14.2: version "1.14.2" resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz" @@ -9673,16 +9490,6 @@ serve-static@1.14.2: parseurl "~1.3.3" send "0.17.2" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - set-cookie-parser@^2.4.6, set-cookie-parser@^2.4.8: version "2.4.8" resolved "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz" @@ -10035,16 +9842,16 @@ static-extend@^0.1.1, static-extend@^0.1.2: define-property "^0.2.5" object-copy "^0.1.0" -statuses@2.0.1, statuses@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +statuses@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" @@ -10869,7 +10676,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util@^0.12.3, util@^0.12.4: +util@^0.12.3: version "0.12.4" resolved "https://registry.npmjs.org/util/-/util-0.12.4.tgz" integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==