Skip to content

Commit

Permalink
support app.config.js and vite.config.js
Browse files Browse the repository at this point in the history
  • Loading branch information
nksaraf committed Aug 1, 2023
1 parent e862e35 commit 982878a
Show file tree
Hide file tree
Showing 26 changed files with 130 additions and 161 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import { join } from "path";
import { createApp } from "vinxi";
import { virtual } from "vinxi/lib/plugins/virtual";

import { builtinModules } from "node:module";

function hash(str) {
let hash = 0;

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
36 changes: 6 additions & 30 deletions packages/solid-start/entry-server/handler.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,39 +5,15 @@ import { createRoutes } from "../root/FileRoutes";

export function createHandler(fn) {
return eventHandler(async (event) => {
const events = {};

const clientManifest = import.meta.env.MANIFEST["client"];
const assets = await clientManifest.inputs[clientManifest.handler].assets();
const manifestJson = await clientManifest.json();
const tags = [];

const routes = createRoutes();

const context = {
event,
manifest: manifestJson,
tags,
routes,
assets,
};

const stream = renderToStream(() => fn(context), {
onCompleteAll(info) {
events["end"]?.();
},
});

// @ts-ignore
stream.on = (event, listener) => {
events[event] = listener;
};

return {
pipe: stream.pipe.bind(stream),
on: (event, listener) => {
events[event] = listener;
},
manifest: await clientManifest.json(),
tags: [],
routes: createRoutes(),
assets: await clientManifest.inputs[clientManifest.handler].assets(),
};
const stream = renderToStream(() => fn(context), {});
return stream;
});
}
22 changes: 18 additions & 4 deletions packages/vinxi/bin/cli.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#!/usr/bin/env node
import { loadConfig } from "c12";
import mri from "mri";
import { join, resolve } from "pathe";
import { pathToFileURL } from "url";
Expand All @@ -7,22 +8,35 @@ async function main() {
const args = mri(process.argv.slice(2));
const command = args._[0];
const rootDir = resolve(args._[1] || ".");

const configFile = args.config;
globalThis.MANIFEST = {};

const { default: config } = await import(
pathToFileURL(resolve("./app.js")).href
/** @type {{ config: import("../lib/app.js").App }}*/
const { config: app } = await loadConfig(
configFile
? {
configFile,
}
: {
name: "app",
},
);

if (!app.config) {
throw new Error("No config found");
}

if (command === "dev") {
const { createDevServer } = await import("../lib/dev-server.js");
await createDevServer(config, {
await createDevServer(app, {
dev: true,
port: Number(process.env.PORT ?? 3000),
});
} else if (command === "build") {
process.env.NODE_ENV = "production";
const { createBuild } = await import("../lib/build.js");
await createBuild(config, {});
await createBuild(app, {});
}
}
main().catch((err) => {
Expand Down
12 changes: 6 additions & 6 deletions packages/vinxi/lib/app-fetch.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { defineEventHandler, fromNodeMiddleware, toNodeListener } from "h3";
import {
createCall,
createFetch,
createFetch as createLocalFetch,
} from "unenv/runtime/fetch/index";
// import { defineEventHandler, fromNodeMiddleware, toNodeListener } from "h3";
// import {
// createCall,
// createFetch,
// createFetch as createLocalFetch,
// } from "unenv/runtime/fetch/index";

export default function plugin(app) {
// @ts-ignore
Expand Down
157 changes: 67 additions & 90 deletions packages/vinxi/lib/app-worker.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { loadConfig } from "c12";
import { H3Event } from "h3";

import { AsyncLocalStorage } from "node:async_hooks";
Expand Down Expand Up @@ -81,48 +82,11 @@ class AppWorker {
});
}

const readable = new Readable({ objectMode: true });
readable._read = () => {};
const req = createIncomingMessage();

readable.url = "/_rsc/";
const res = createServerResponse(rest);

const writableStream = new Writable({
write(chunk, encoding, callback) {
parentPort?.postMessage(
JSON.stringify({
chunk: new TextDecoder().decode(chunk),
id: rest.id,
}),
);
callback();
},
});
writableStream.setHeader = (header, value) => {
console.log(header, value);
parentPort?.postMessage(
JSON.stringify({
chunk: "$header",
data: {
key: header,
value,
},
id: rest.id,
}),
);
};

writableStream.on("finish", () => {
parentPort?.postMessage(
JSON.stringify({
chunk: "end",
id: rest.id,
}),
);
});

console.log(this.server.app);

const event = new H3Event(readable, writableStream);
const event = new H3Event(req, res);
await this.server.app.handler(event);
// tranformStream.on("end", () => {
// console.log("ending");
Expand Down Expand Up @@ -166,7 +130,9 @@ class AppWorker {
const {
req: { url, method, headers },
} = rest;
const { default: app } = await import(join(process.cwd(), "./app.js"));
const { config: app } = await loadConfig({
name: "app",
});

try {
if (!this.server) {
Expand All @@ -181,56 +147,11 @@ class AppWorker {
}

this.bodies ??= {};
const req = createIncomingMessage(url, method, headers);
this.bodies[rest.id] = req;
const res = createServerResponse(rest.id);

const readable = new Readable({ objectMode: true });
readable._read = () => {};

readable.url = "/_rsc" + url;
readable.method = method;
readable.headers = headers;

this.bodies[rest.id] = readable;

const responseHeaders = {};
const writableStream = new Writable({
write(chunk, encoding, callback) {
parentPort?.postMessage(
JSON.stringify({
chunk: new TextDecoder().decode(chunk),
id: rest.id,
}),
);
callback();
},
});
writableStream.socket = {};
writableStream.getHeader = (header) => {
return responseHeaders[header];
};
writableStream.setHeader = (header, value) => {
responseHeaders[header] = value;
parentPort?.postMessage(
JSON.stringify({
chunk: "$header",
data: {
key: header,
value,
},
id: rest.id,
}),
);
};

writableStream.on("finish", () => {
parentPort?.postMessage(
JSON.stringify({
chunk: "end",
id: rest.id,
}),
);
});

const event = new H3Event(readable, writableStream);
const event = new H3Event(req, res);
await this.server.h3App.handler(event);
// tranformStream.on("end", () => {
// console.log("ending");
Expand Down Expand Up @@ -264,3 +185,59 @@ invariant(parentPort, "parentPort is not defined");

const appWorker = new AppWorker(parentPort);
appWorker.listen();

function createServerResponse(id) {
const responseHeaders = {};
const writableStream = new Writable({
write(chunk, encoding, callback) {
parentPort?.postMessage(
JSON.stringify({
chunk: new TextDecoder().decode(chunk),
id,
}),
);
callback();
},
});
writableStream.socket = {};
writableStream.getHeader = (header) => {
return responseHeaders[header];
};
writableStream.setHeader = (header, value) => {
responseHeaders[header] = value;
parentPort?.postMessage(
JSON.stringify({
chunk: "$header",
data: {
key: header,
value,
},
id,
}),
);
};

writableStream.on("finish", () => {
parentPort?.postMessage(
JSON.stringify({
chunk: "end",
id,
}),
);
});
return writableStream;
}

/**
*
* @returns {import('node:http').IncomingMessage}
*/
function createIncomingMessage(url, method, headers) {
const readable = new Readable({ objectMode: true });
readable._read = () => {};

readable.url = "/_rsc" + url;
readable.method = method;
readable.headers = headers;
return readable;
}
22 changes: 1 addition & 21 deletions packages/vinxi/lib/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ const routerSchema = {

/** @typedef {(HandlerRouterSchema | BuildRouterSchema | SPARouterSchema | StaticRouterSchema) & { fileRouter?: import('../vinxi.d.ts').FileSystemRouter }} RouterSchema */
/** @typedef {{ routers: RouterSchema[]; name?: string; server?: import('nitropack').NitroConfig }} AppOptions */
/** @typedef {{ config: { name: string; server: import('nitropack').NitroConfig; routers: RouterSchema[]; root: string } }} App */

/**
*
Expand Down Expand Up @@ -179,32 +180,13 @@ export function createApp({ routers, name = "app", server = {} }) {
root: process.cwd(),
};

// function resolveBuildConfig(bundler) {
// let outDir = bundler.outDir ? join(config.root, bundler.outDir) : undefined;
// return {
// target: "static",
// root: config.root,
// ...bundler,
// outDir,
// };
// }

config.routers = routers.map((router, index) => {
return {
...resolveConfig(router, config),
index,
};
});

globalThis.MANIFEST = new Proxy(
{},
{
get(target, prop) {
throw new Error("Manifest not yet ready");
},
},
);

const app = {
config,
getRouter(name) {
Expand Down Expand Up @@ -233,5 +215,3 @@ export function createApp({ routers, name = "app", server = {} }) {

return app;
}

/** @typedef {{ config: { name: string; server: import('nitropack').NitroConfig; routers: RouterSchema[]; root: string } }} App */
Loading

0 comments on commit 982878a

Please sign in to comment.