Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,6 @@
"unified": "^9.2.0"
},
"engines": {
"node": ">=16"
"node": ">=14"
}
}
4 changes: 0 additions & 4 deletions packages/remix-gcloud-functions-gen2/index.ts

This file was deleted.

24 changes: 0 additions & 24 deletions packages/remix-gcloud-functions-gen2/package.json

This file was deleted.

4 changes: 4 additions & 0 deletions packages/remix-google-cloud-functions/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import "./globals";

export type { GetLoadContextFunction, RequestHandler } from "./server";
export { createRequestHandler } from "./server";
24 changes: 24 additions & 0 deletions packages/remix-google-cloud-functions/package.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
Original file line number Diff line number Diff line change
@@ -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'

/**
Expand All @@ -31,11 +29,9 @@ export interface GetLoadContextFunction {
(req: GcfRequest, res: GcfResponse): AppLoadContext;
}

//export type RequestHandler = ReturnType<typeof createRequestHandler>;
export type RequestHandler = (
req: GcfRequest,
res: GcfResponse,
next: NextFunction
) => Promise<void>;

/**
Expand All @@ -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 =
Expand All @@ -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 }));
}
};
}
Expand All @@ -86,7 +81,7 @@ export function createRemixHeaders(
headers.append(key, value);
}
} else {
headers.set(key, values as any);
headers.set(key, values);
}
}
}
Expand All @@ -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);
Expand All @@ -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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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": "."
}
}
2 changes: 1 addition & 1 deletion rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
];
Expand Down
2 changes: 1 addition & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -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" },
Expand Down
Loading