Expose raw container just in case
This commit is contained in:
parent
bc437dce60
commit
c8299b24fb
1 changed files with 15 additions and 8 deletions
|
@ -1,5 +1,6 @@
|
|||
import type { ComponentInstance, ManifestData, RouteData } from '../../@types/astro';
|
||||
import type { ComponentInstance, RouteData } from '../../@types/astro';
|
||||
import type { SSRManifest as Manifest } from './types';
|
||||
import type http from 'http';
|
||||
import { posix } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { createContainer, type CreateContainerParams } from '../dev/index.js';
|
||||
|
@ -24,10 +25,12 @@ export type DevAppParams = Partial<CreateContainerParams> & {
|
|||
export class DevApp extends App {
|
||||
#createContainerParams: CreateContainerParams;
|
||||
#manifest: Manifest;
|
||||
#container: Awaited<ReturnType<typeof createContainer>> | null = null;
|
||||
#env: DevelopmentEnvironment | null = null;
|
||||
#root: URL;
|
||||
#modToRoute = new Map<ComponentInstance, RouteData>();
|
||||
|
||||
// TODO don't expose this entire API
|
||||
container: Awaited<ReturnType<typeof createContainer>> | null = null;
|
||||
constructor(params: DevAppParams) {
|
||||
const { root, userConfig } = params;
|
||||
const manifest: Manifest = {
|
||||
|
@ -51,25 +54,25 @@ export class DevApp extends App {
|
|||
}
|
||||
|
||||
get loaded() {
|
||||
return !!this.#container;
|
||||
return !!this.container;
|
||||
}
|
||||
|
||||
url(pathname: string): string | undefined {
|
||||
if(!this.loaded) {
|
||||
return undefined;
|
||||
}
|
||||
const { host, port } = this.#container!.settings.config.server
|
||||
const { host, port } = this.container!.settings.config.server
|
||||
return new URL(pathname, `http://${host}:${port}`).toString();
|
||||
}
|
||||
|
||||
async load() {
|
||||
if(this.loaded) {
|
||||
await this.close();
|
||||
this.#container = null;
|
||||
this.container = null;
|
||||
this.#env = null;
|
||||
}
|
||||
|
||||
const container = this.#container = await createContainer(this.#createContainerParams);
|
||||
const container = this.container = await createContainer(this.#createContainerParams);
|
||||
this.#manifest.trailingSlash = container.settings.config.trailingSlash;
|
||||
|
||||
const loader = createViteLoader(container.viteServer);
|
||||
|
@ -92,11 +95,11 @@ export class DevApp extends App {
|
|||
}
|
||||
|
||||
async close() {
|
||||
await this.#container?.close();
|
||||
await this.container?.close();
|
||||
}
|
||||
|
||||
fileChanged(path: string) {
|
||||
const container = this.#container!;
|
||||
const container = this.container!;
|
||||
const fs = this.#createContainerParams.fs!;
|
||||
const root = fileURLToPath(this.#root);
|
||||
const fullPath = posix.join(root, path);
|
||||
|
@ -108,6 +111,10 @@ export class DevApp extends App {
|
|||
}
|
||||
}
|
||||
|
||||
handle(req: http.IncomingMessage, res: http.ServerResponse) {
|
||||
this.container!.handle(req, res);
|
||||
}
|
||||
|
||||
async render(request: Request, route?: RouteData | undefined): Promise<Response> {
|
||||
if(!this.loaded) {
|
||||
await this.load();
|
||||
|
|
Loading…
Reference in a new issue