Skip to content

Commit

Permalink
feat(remix-dev/vite, remix-react, remix-server-runtime): support cust…
Browse files Browse the repository at this point in the history
…om basename (#8145)

Co-authored-by: Mark Dalgleish <mark.john.dalgleish@gmail.com>
Co-authored-by: Matt Brophy <matt@brophy.org>
  • Loading branch information
3 people committed Feb 6, 2024
1 parent a670bc6 commit ad7c3d5
Show file tree
Hide file tree
Showing 13 changed files with 687 additions and 99 deletions.
36 changes: 28 additions & 8 deletions integration/helpers/vite.ts
Expand Up @@ -122,10 +122,12 @@ export const viteRemixServe = async ({
cwd,
port,
serverBundle,
basename,
}: {
cwd: string;
port: number;
serverBundle?: string;
basename?: string;
}) => {
let nodeBin = process.argv[0];
let serveProc = spawn(
Expand All @@ -140,26 +142,38 @@ export const viteRemixServe = async ({
env: { NODE_ENV: "production", PORT: port.toFixed(0) },
}
);
await waitForServer(serveProc, { port });
await waitForServer(serveProc, { port, basename });
return () => serveProc.kill();
};

type ServerArgs = {
cwd: string;
port: number;
env?: Record<string, string>;
basename?: string;
};

const createDev =
(nodeArgs: string[]) =>
async ({ cwd, port }: ServerArgs): Promise<() => unknown> => {
let proc = node(nodeArgs, { cwd });
await waitForServer(proc, { port });
async ({ cwd, port, env, basename }: ServerArgs): Promise<() => unknown> => {
let proc = node(nodeArgs, { cwd, env });
await waitForServer(proc, { port, basename });
return () => proc.kill();
};

export const viteDev = createDev([remixBin, "vite:dev"]);
export const customDev = createDev(["./server.mjs"]);

// Used for testing errors thrown on build when we don't want to start and
// wait for the server
export const viteDevCmd = ({ cwd }: { cwd: string }) => {
let nodeBin = process.argv[0];
return spawnSync(nodeBin, [remixBin, "vite:dev"], {
cwd,
env: { ...process.env },
});
};

export const using = async (
cleanup: () => unknown | Promise<unknown>,
task: () => unknown | Promise<unknown>
Expand All @@ -171,26 +185,32 @@ export const using = async (
}
};

function node(args: string[], options: { cwd: string }) {
function node(
args: string[],
options: { cwd: string; env?: Record<string, string> }
) {
let nodeBin = process.argv[0];

let proc = spawn(nodeBin, args, {
cwd: options.cwd,
env: process.env,
env: {
...process.env,
...options.env,
},
stdio: "pipe",
});
return proc;
}

async function waitForServer(
proc: ChildProcess & { stdout: Readable; stderr: Readable },
args: { port: number }
args: { port: number; basename?: string }
) {
let devStdout = bufferize(proc.stdout);
let devStderr = bufferize(proc.stderr);

await waitOn({
resources: [`http://localhost:${args.port}/`],
resources: [`http://localhost:${args.port}${args.basename ?? "/"}`],
timeout: 10000,
}).catch((err) => {
let stdout = devStdout();
Expand Down

0 comments on commit ad7c3d5

Please sign in to comment.