diff options
Diffstat (limited to 'packages/astro/src')
24 files changed, 172 insertions, 176 deletions
diff --git a/packages/astro/src/@types/typed-emitter.ts b/packages/astro/src/@types/typed-emitter.ts index 62ed3522d..1c25a8006 100644 --- a/packages/astro/src/@types/typed-emitter.ts +++ b/packages/astro/src/@types/typed-emitter.ts @@ -5,8 +5,8 @@ */ export type EventMap = { - [key: string]: (...args: any[]) => void -} + [key: string]: (...args: any[]) => void; +}; /** * Type-safe event emitter. @@ -25,25 +25,25 @@ export type EventMap = { * ``` */ interface TypedEventEmitter<Events extends EventMap> { - addListener<E extends keyof Events> (event: E, listener: Events[E]): this - on<E extends keyof Events> (event: E, listener: Events[E]): this - once<E extends keyof Events> (event: E, listener: Events[E]): this - prependListener<E extends keyof Events> (event: E, listener: Events[E]): this - prependOnceListener<E extends keyof Events> (event: E, listener: Events[E]): this + addListener<E extends keyof Events>(event: E, listener: Events[E]): this; + on<E extends keyof Events>(event: E, listener: Events[E]): this; + once<E extends keyof Events>(event: E, listener: Events[E]): this; + prependListener<E extends keyof Events>(event: E, listener: Events[E]): this; + prependOnceListener<E extends keyof Events>(event: E, listener: Events[E]): this; - off<E extends keyof Events>(event: E, listener: Events[E]): this - removeAllListeners<E extends keyof Events> (event?: E): this - removeListener<E extends keyof Events> (event: E, listener: Events[E]): this + off<E extends keyof Events>(event: E, listener: Events[E]): this; + removeAllListeners<E extends keyof Events>(event?: E): this; + removeListener<E extends keyof Events>(event: E, listener: Events[E]): this; - emit<E extends keyof Events> (event: E, ...args: Parameters<Events[E]>): boolean - // The sloppy `eventNames()` return type is to mitigate type incompatibilities - see #5 - eventNames (): (keyof Events | string | symbol)[] - rawListeners<E extends keyof Events> (event: E): Events[E][] - listeners<E extends keyof Events> (event: E): Events[E][] - listenerCount<E extends keyof Events> (event: E): number + emit<E extends keyof Events>(event: E, ...args: Parameters<Events[E]>): boolean; + // The sloppy `eventNames()` return type is to mitigate type incompatibilities - see #5 + eventNames(): (keyof Events | string | symbol)[]; + rawListeners<E extends keyof Events>(event: E): Events[E][]; + listeners<E extends keyof Events>(event: E): Events[E][]; + listenerCount<E extends keyof Events>(event: E): number; - getMaxListeners (): number - setMaxListeners (maxListeners: number): this + getMaxListeners(): number; + setMaxListeners(maxListeners: number): this; } -export default TypedEventEmitter +export default TypedEventEmitter; diff --git a/packages/astro/src/core/config/config.ts b/packages/astro/src/core/config/config.ts index 6e9092bf3..2e71a94c8 100644 --- a/packages/astro/src/core/config/config.ts +++ b/packages/astro/src/core/config/config.ts @@ -190,12 +190,7 @@ export async function openConfig(configOptions: LoadConfigOptions): Promise<Open if (config) { userConfig = config.value; } - const astroConfig = await resolveConfig( - userConfig, - root, - flags, - configOptions.cmd - ); + const astroConfig = await resolveConfig(userConfig, root, flags, configOptions.cmd); return { astroConfig, @@ -318,7 +313,7 @@ export async function resolveConfig( export function createDefaultDevConfig( userConfig: AstroUserConfig = {}, - root: string = process.cwd(), + root: string = process.cwd() ) { return resolveConfig(userConfig, root, undefined, 'dev'); } diff --git a/packages/astro/src/core/config/index.ts b/packages/astro/src/core/config/index.ts index 4cb79a713..bbc64f512 100644 --- a/packages/astro/src/core/config/index.ts +++ b/packages/astro/src/core/config/index.ts @@ -7,5 +7,5 @@ export { validateConfig, } from './config.js'; export type { AstroConfigSchema } from './schema'; -export { createSettings, createDefaultDevSettings } from './settings.js'; +export { createDefaultDevSettings, createSettings } from './settings.js'; export { loadTSConfig, updateTSConfigForFramework } from './tsconfig.js'; diff --git a/packages/astro/src/core/config/settings.ts b/packages/astro/src/core/config/settings.ts index 54be8bb71..b5dccae53 100644 --- a/packages/astro/src/core/config/settings.ts +++ b/packages/astro/src/core/config/settings.ts @@ -2,8 +2,8 @@ import type { AstroConfig, AstroSettings, AstroUserConfig } from '../../@types/a import { SUPPORTED_MARKDOWN_FILE_EXTENSIONS } from './../constants.js'; import { fileURLToPath } from 'url'; -import { createDefaultDevConfig } from './config.js'; import jsxRenderer from '../../jsx/renderer.js'; +import { createDefaultDevConfig } from './config.js'; import { loadTSConfig } from './tsconfig.js'; export function createBaseSettings(config: AstroConfig): AstroSettings { @@ -34,10 +34,9 @@ export async function createDefaultDevSettings( userConfig: AstroUserConfig = {}, root?: string | URL ): Promise<AstroSettings> { - if(root && typeof root !== 'string') { + if (root && typeof root !== 'string') { root = fileURLToPath(root); } const config = await createDefaultDevConfig(userConfig, root); return createBaseSettings(config); } - diff --git a/packages/astro/src/core/create-vite.ts b/packages/astro/src/core/create-vite.ts index 9dce95680..91968affd 100644 --- a/packages/astro/src/core/create-vite.ts +++ b/packages/astro/src/core/create-vite.ts @@ -13,12 +13,12 @@ import envVitePlugin from '../vite-plugin-env/index.js'; import htmlVitePlugin from '../vite-plugin-html/index.js'; import astroIntegrationsContainerPlugin from '../vite-plugin-integrations-container/index.js'; import jsxVitePlugin from '../vite-plugin-jsx/index.js'; +import astroLoadFallbackPlugin from '../vite-plugin-load-fallback/index.js'; import legacyMarkdownVitePlugin from '../vite-plugin-markdown-legacy/index.js'; import markdownVitePlugin from '../vite-plugin-markdown/index.js'; import astroScriptsPlugin from '../vite-plugin-scripts/index.js'; import astroScriptsPageSSRPlugin from '../vite-plugin-scripts/page-ssr.js'; import { createCustomViteLogger } from './errors/dev/index.js'; -import astroLoadFallbackPlugin from '../vite-plugin-load-fallback/index.js'; import { resolveDependency } from './util.js'; interface CreateViteOptions { @@ -110,7 +110,7 @@ export async function createVite( astroPostprocessVitePlugin({ settings }), astroIntegrationsContainerPlugin({ settings, logging }), astroScriptsPageSSRPlugin({ settings }), - astroLoadFallbackPlugin({ fs }) + astroLoadFallbackPlugin({ fs }), ], publicDir: fileURLToPath(settings.config.publicDir), root: fileURLToPath(settings.config.root), diff --git a/packages/astro/src/core/dev/container.ts b/packages/astro/src/core/dev/container.ts index da99f998f..5626aaf6d 100644 --- a/packages/astro/src/core/dev/container.ts +++ b/packages/astro/src/core/dev/container.ts @@ -1,23 +1,21 @@ - +import * as http from 'http'; import type { AddressInfo } from 'net'; import type { AstroSettings, AstroUserConfig } from '../../@types/astro'; -import * as http from 'http'; +import nodeFs from 'fs'; +import * as vite from 'vite'; import { runHookConfigDone, runHookConfigSetup, runHookServerSetup, runHookServerStart, } from '../../integrations/index.js'; +import { createDefaultDevSettings } from '../config/index.js'; import { createVite } from '../create-vite.js'; -import { LogOptions } from '../logger/core.js'; +import { LogOptions } from '../logger/core.js'; import { nodeLogDestination } from '../logger/node.js'; -import nodeFs from 'fs'; -import * as vite from 'vite'; -import { createDefaultDevSettings } from '../config/index.js'; import { apply as applyPolyfill } from '../polyfill.js'; - const defaultLogging: LogOptions = { dest: nodeLogDestination, level: 'error', @@ -47,7 +45,7 @@ export async function createContainer(params: CreateContainerParams = {}): Promi isRestart = false, logging = defaultLogging, settings = await createDefaultDevSettings(params.userConfig, params.root), - fs = nodeFs + fs = nodeFs, } = params; // Initialize @@ -97,11 +95,15 @@ export async function createContainer(params: CreateContainerParams = {}): Promi }, close() { return viteServer.close(); - } + }, }; } -export async function startContainer({ settings, viteServer, logging }: Container): Promise<AddressInfo> { +export async function startContainer({ + settings, + viteServer, + logging, +}: Container): Promise<AddressInfo> { const { port } = settings.config.server; await viteServer.listen(port); const devServerAddressInfo = viteServer.httpServer!.address() as AddressInfo; @@ -114,7 +116,10 @@ export async function startContainer({ settings, viteServer, logging }: Containe return devServerAddressInfo; } -export async function runInContainer(params: CreateContainerParams, callback: (container: Container) => Promise<void> | void) { +export async function runInContainer( + params: CreateContainerParams, + callback: (container: Container) => Promise<void> | void +) { const container = await createContainer(params); try { await callback(container); diff --git a/packages/astro/src/core/dev/index.ts b/packages/astro/src/core/dev/index.ts index 53b67502c..52366b0bf 100644 --- a/packages/astro/src/core/dev/index.ts +++ b/packages/astro/src/core/dev/index.ts @@ -1,9 +1,2 @@ -export { - createContainer, - startContainer, - runInContainer -} from './container.js'; - -export { - default -} from './dev.js'; +export { createContainer, runInContainer, startContainer } from './container.js'; +export { default } from './dev.js'; diff --git a/packages/astro/src/core/errors/dev/vite.ts b/packages/astro/src/core/errors/dev/vite.ts index 9feed2ab0..ceaba7006 100644 --- a/packages/astro/src/core/errors/dev/vite.ts +++ b/packages/astro/src/core/errors/dev/vite.ts @@ -1,12 +1,7 @@ -import type { ModuleLoader } from '../../module-loader/index.js'; import * as fs from 'fs'; import { fileURLToPath } from 'url'; -import { - createLogger, - type ErrorPayload, - type Logger, - type LogLevel, -} from 'vite'; +import { createLogger, type ErrorPayload, type Logger, type LogLevel } from 'vite'; +import type { ModuleLoader } from '../../module-loader/index.js'; import { AstroErrorCodes } from '../codes.js'; import { AstroError, type ErrorWithMetadata } from '../errors.js'; import { incompatPackageExp } from './utils.js'; @@ -30,7 +25,7 @@ export function createCustomViteLogger(logLevel: LogLevel): Logger { export function enhanceViteSSRError( error: Error, filePath?: URL, - loader?: ModuleLoader, + loader?: ModuleLoader ): AstroError { // Vite will give you better stacktraces, using sourcemaps. if (loader) { diff --git a/packages/astro/src/core/module-loader/index.ts b/packages/astro/src/core/module-loader/index.ts index fd2c2a303..4d21148b6 100644 --- a/packages/astro/src/core/module-loader/index.ts +++ b/packages/astro/src/core/module-loader/index.ts @@ -1,14 +1,3 @@ -export type { - ModuleInfo, - ModuleLoader, - ModuleNode, - LoaderEvents -} from './loader.js'; - -export { - createLoader -} from './loader.js'; - -export { - createViteLoader -} from './vite.js'; +export { createLoader } from './loader.js'; +export type { LoaderEvents, ModuleInfo, ModuleLoader, ModuleNode } from './loader.js'; +export { createViteLoader } from './vite.js'; diff --git a/packages/astro/src/core/module-loader/loader.ts b/packages/astro/src/core/module-loader/loader.ts index 6185e5d12..1be3c4557 100644 --- a/packages/astro/src/core/module-loader/loader.ts +++ b/packages/astro/src/core/module-loader/loader.ts @@ -1,6 +1,6 @@ -import type TypedEmitter from '../../@types/typed-emitter'; -import type * as fs from 'fs'; import { EventEmitter } from 'events'; +import type * as fs from 'fs'; +import type TypedEmitter from '../../@types/typed-emitter'; // This is a generic interface for a module loader. In the astro cli this is // fulfilled by Vite, see vite.ts @@ -10,10 +10,10 @@ export type LoaderEvents = { 'file-change': (msg: [path: string, stats?: fs.Stats | undefined]) => void; 'file-unlink': (msg: [path: string, stats?: fs.Stats | undefined]) => void; 'hmr-error': (msg: { - type: 'error', + type: 'error'; err: { message: string; - stack: string + stack: string; }; }) => void; }; @@ -53,19 +53,33 @@ export interface ModuleInfo { export function createLoader(overrides: Partial<ModuleLoader>): ModuleLoader { return { - import() { throw new Error(`Not implemented`); }, - resolveId(id) { return Promise.resolve(id); }, - getModuleById() {return undefined }, - getModulesByFile() { return undefined }, - getModuleInfo() { return null; }, - eachModule() { throw new Error(`Not implemented`); }, + import() { + throw new Error(`Not implemented`); + }, + resolveId(id) { + return Promise.resolve(id); + }, + getModuleById() { + return undefined; + }, + getModulesByFile() { + return undefined; + }, + getModuleInfo() { + return null; + }, + eachModule() { + throw new Error(`Not implemented`); + }, invalidateModule() {}, fixStacktrace() {}, clientReload() {}, webSocketSend() {}, - isHttps() { return true; }, + isHttps() { + return true; + }, events: new EventEmitter() as ModuleLoaderEventEmitter, - ...overrides + ...overrides, }; } diff --git a/packages/astro/src/core/module-loader/vite.ts b/packages/astro/src/core/module-loader/vite.ts index 9e4d58208..af1d8d070 100644 --- a/packages/astro/src/core/module-loader/vite.ts +++ b/packages/astro/src/core/module-loader/vite.ts @@ -1,6 +1,6 @@ +import { EventEmitter } from 'events'; import type * as vite from 'vite'; import type { ModuleLoader, ModuleLoaderEventEmitter } from './loader'; -import { EventEmitter } from 'events'; export function createViteLoader(viteServer: vite.ViteDevServer): ModuleLoader { const events = new EventEmitter() as ModuleLoaderEventEmitter; @@ -9,8 +9,8 @@ export function createViteLoader(viteServer: vite.ViteDevServer): ModuleLoader { viteServer.watcher.on('unlink', (...args) => events.emit('file-unlink', args)); viteServer.watcher.on('change', (...args) => events.emit('file-change', args)); - wrapMethod(viteServer.ws, 'send', msg => { - if(msg?.type === 'error') { + wrapMethod(viteServer.ws, 'send', (msg) => { + if (msg?.type === 'error') { events.emit('hmr-error', msg); } }); @@ -33,18 +33,18 @@ export function createViteLoader(viteServer: vite.ViteDevServer): ModuleLoader { return viteServer.pluginContainer.getModuleInfo(id); }, eachModule(cb) { - return viteServer.moduleGraph.idToModuleMap.forEach(cb); - }, - invalidateModule(mod) { - viteServer.moduleGraph.invalidateModule(mod as vite.ModuleNode); - }, + return viteServer.moduleGraph.idToModuleMap.forEach(cb); + }, + invalidateModule(mod) { + viteServer.moduleGraph.invalidateModule(mod as vite.ModuleNode); + }, fixStacktrace(err) { return viteServer.ssrFixStacktrace(err); }, clientReload() { viteServer.ws.send({ type: 'full-reload', - path: '*' + path: '*', }); }, webSocketSend(msg) { @@ -53,14 +53,13 @@ export function createViteLoader(viteServer: vite.ViteDevServer): ModuleLoader { isHttps() { return !!viteServer.config.server.https; }, - events + events, }; } - function wrapMethod(object: any, method: string, newFn: (...args: any[]) => void) { const orig = object[method]; - object[method] = function(...args: any[]) { + object[method] = function (...args: any[]) { newFn.apply(this, args); return orig.apply(this, args); }; diff --git a/packages/astro/src/core/render/dev/css.ts b/packages/astro/src/core/render/dev/css.ts index 811be70b9..e10a7166e 100644 --- a/packages/astro/src/core/render/dev/css.ts +++ b/packages/astro/src/core/render/dev/css.ts @@ -19,8 +19,7 @@ export async function getStylesForURL( const ext = path.extname(importedModule.url).toLowerCase(); if (STYLE_EXTENSIONS.has(ext)) { // The SSR module is possibly not loaded. Load it if it's null. - const ssrModule = - importedModule.ssrModule ?? (await loader.import(importedModule.url)); + const ssrModule = importedModule.ssrModule ?? (await loader.import(importedModule.url)); if ( mode === 'development' && // only inline in development typeof ssrModule?.default === 'string' // ignore JS module styles diff --git a/packages/astro/src/core/render/dev/environment.ts b/packages/astro/src/core/render/dev/environment.ts index bf7a44fb5..5c4a8ed73 100644 --- a/packages/astro/src/core/render/dev/environment.ts +++ b/packages/astro/src/core/render/dev/environment.ts @@ -1,8 +1,7 @@ -import type { ViteDevServer } from 'vite'; import type { AstroSettings, RuntimeMode } from '../../../@types/astro'; import type { LogOptions } from '../../logger/core.js'; -import type { Environment } from '../index'; import type { ModuleLoader } from '../../module-loader/index'; +import type { Environment } from '../index'; import { createEnvironment } from '../index.js'; import { RouteCache } from '../route-cache.js'; diff --git a/packages/astro/src/core/render/dev/index.ts b/packages/astro/src/core/render/dev/index.ts index e5e651903..805be1123 100644 --- a/packages/astro/src/core/render/dev/index.ts +++ b/packages/astro/src/core/render/dev/index.ts @@ -7,11 +7,11 @@ import type { SSRElement, SSRLoadedRenderer, } from '../../../@types/astro'; -import type { ModuleLoader } from '../../module-loader/index'; import { PAGE_SCRIPT_ID } from '../../../vite-plugin-scripts/index.js'; import { enhanceViteSSRError } from '../../errors/dev/index.js'; import { AggregateError, CSSError, MarkdownError } from '../../errors/index.js'; import { LogOptions } from '../../logger/core.js'; +import type { ModuleLoader } from '../../module-loader/index'; import { isPage, resolveIdToUrl } from '../../util.js'; import { createRenderContext, renderPage as coreRenderPage } from '../index.js'; import { filterFoundRenderers, loadRenderer } from '../renderer.js'; diff --git a/packages/astro/src/core/routing/manifest/create.ts b/packages/astro/src/core/routing/manifest/create.ts index c983d2a0d..aa4a1ea68 100644 --- a/packages/astro/src/core/routing/manifest/create.ts +++ b/packages/astro/src/core/routing/manifest/create.ts @@ -224,7 +224,12 @@ export function createRouteManifest( const validEndpointExtensions: Set<string> = new Set(['.js', '.ts']); const localFs = fsMod ?? nodeFs; - function walk(fs: typeof nodeFs, dir: string, parentSegments: RoutePart[][], parentParams: string[]) { + function walk( + fs: typeof nodeFs, + dir: string, + parentSegments: RoutePart[][], + parentParams: string[] + ) { let items: Item[] = []; fs.readdirSync(dir).forEach((basename) => { const resolved = path.join(dir, basename); diff --git a/packages/astro/src/core/util.ts b/packages/astro/src/core/util.ts index e99c849ac..14c641de0 100644 --- a/packages/astro/src/core/util.ts +++ b/packages/astro/src/core/util.ts @@ -1,5 +1,3 @@ -import type { ModuleLoader } from './module-loader'; -import eol from 'eol'; import fs from 'fs'; import path from 'path'; import resolve from 'resolve'; @@ -8,6 +6,7 @@ import { fileURLToPath, pathToFileURL } from 'url'; import { normalizePath } from 'vite'; import type { AstroConfig, AstroSettings, RouteType } from '../@types/astro'; import { SUPPORTED_MARKDOWN_FILE_EXTENSIONS } from './constants.js'; +import type { ModuleLoader } from './module-loader'; import { prependForwardSlash, removeTrailingForwardSlash } from './path.js'; /** Returns true if argument is an object of any prototype/class (but not null). */ diff --git a/packages/astro/src/vite-plugin-astro-server/controller.ts b/packages/astro/src/vite-plugin-astro-server/controller.ts index bbbf87c04..3004e68f3 100644 --- a/packages/astro/src/vite-plugin-astro-server/controller.ts +++ b/packages/astro/src/vite-plugin-astro-server/controller.ts @@ -1,7 +1,12 @@ -import type { ServerState } from './server-state'; import type { LoaderEvents, ModuleLoader } from '../core/module-loader/index'; +import type { ServerState } from './server-state'; -import { createServerState, setRouteError, setServerError, clearRouteError } from './server-state.js'; +import { + clearRouteError, + createServerState, + setRouteError, + setServerError, +} from './server-state.js'; type ReloadFn = () => void; @@ -11,14 +16,16 @@ export interface DevServerController { onHMRError: LoaderEvents['hmr-error']; } -export type CreateControllerParams = { - loader: ModuleLoader; -} | { - reload: ReloadFn; -}; +export type CreateControllerParams = + | { + loader: ModuleLoader; + } + | { + reload: ReloadFn; + }; export function createController(params: CreateControllerParams): DevServerController { - if('loader' in params) { + if ('loader' in params) { return createLoaderController(params.loader); } else { return createBaseController(params); @@ -29,7 +36,7 @@ export function createBaseController({ reload }: { reload: ReloadFn }): DevServe const serverState = createServerState(); const onFileChange: LoaderEvents['file-change'] = () => { - if(serverState.state === 'error') { + if (serverState.state === 'error') { reload(); } }; @@ -39,7 +46,7 @@ export function createBaseController({ reload }: { reload: ReloadFn }): DevServe let stack = payload?.err?.stack ?? 'Unknown stack'; let error = new Error(msg); Object.defineProperty(error, 'stack', { - value: stack + value: stack, }); setServerError(serverState, error); }; @@ -47,7 +54,7 @@ export function createBaseController({ reload }: { reload: ReloadFn }): DevServe return { state: serverState, onFileChange, - onHMRError + onHMRError, }; } @@ -55,21 +62,21 @@ export function createLoaderController(loader: ModuleLoader): DevServerControlle const controller = createBaseController({ reload() { loader.clientReload(); - } + }, }); const baseOnFileChange = controller.onFileChange; controller.onFileChange = (...args) => { - if(controller.state.state === 'error') { + if (controller.state.state === 'error') { // If we are in an error state, check if there are any modules with errors // and if so invalidate them so that they will be updated on refresh. - loader.eachModule(mod => { - if(mod.ssrError) { + loader.eachModule((mod) => { + if (mod.ssrError) { loader.invalidateModule(mod); } }); } baseOnFileChange(...args); - } + }; loader.events.on('file-change', controller.onFileChange); loader.events.on('hmr-error', controller.onHMRError); @@ -88,12 +95,12 @@ export async function runWithErrorHandling({ controller: { state }, pathname, run, - onError + onError, }: RunWithErrorHandlingParams) { try { await run(); clearRouteError(state, pathname); - } catch(err) { + } catch (err) { const error = onError(err); setRouteError(state, pathname, error); } diff --git a/packages/astro/src/vite-plugin-astro-server/index.ts b/packages/astro/src/vite-plugin-astro-server/index.ts index a6baa6c2c..14172e8ae 100644 --- a/packages/astro/src/vite-plugin-astro-server/index.ts +++ b/packages/astro/src/vite-plugin-astro-server/index.ts @@ -1,10 +1,3 @@ -export { - createController, - runWithErrorHandling -} from './controller.js'; -export { - default as vitePluginAstroServer -} from './plugin.js'; -export { - handleRequest -} from './request.js'; +export { createController, runWithErrorHandling } from './controller.js'; +export { default as vitePluginAstroServer } from './plugin.js'; +export { handleRequest } from './request.js'; diff --git a/packages/astro/src/vite-plugin-astro-server/plugin.ts b/packages/astro/src/vite-plugin-astro-server/plugin.ts index 434b220a3..73c9b8f50 100644 --- a/packages/astro/src/vite-plugin-astro-server/plugin.ts +++ b/packages/astro/src/vite-plugin-astro-server/plugin.ts @@ -1,15 +1,14 @@ - import type * as vite from 'vite'; import type { AstroSettings, ManifestData } from '../@types/astro'; +import type fs from 'fs'; import { LogOptions } from '../core/logger/core.js'; +import { createViteLoader } from '../core/module-loader/index.js'; import { createDevelopmentEnvironment } from '../core/render/dev/index.js'; import { createRouteManifest } from '../core/routing/index.js'; -import { createViteLoader } from '../core/module-loader/index.js'; import { baseMiddleware } from './base.js'; -import { handleRequest } from './request.js'; import { createController } from './controller.js'; -import type fs from 'fs'; +import { handleRequest } from './request.js'; export interface AstroPluginOptions { settings: AstroSettings; @@ -17,7 +16,11 @@ export interface AstroPluginOptions { fs: typeof fs; } -export default function createVitePluginAstroServer({ settings, logging, fs: fsMod }: AstroPluginOptions): vite.Plugin { +export default function createVitePluginAstroServer({ + settings, + logging, + fs: fsMod, +}: AstroPluginOptions): vite.Plugin { return { name: 'astro:server', configureServer(viteServer) { diff --git a/packages/astro/src/vite-plugin-astro-server/request.ts b/packages/astro/src/vite-plugin-astro-server/request.ts index 4b0c1563e..fa6561493 100644 --- a/packages/astro/src/vite-plugin-astro-server/request.ts +++ b/packages/astro/src/vite-plugin-astro-server/request.ts @@ -1,15 +1,15 @@ import type http from 'http'; -import type { ManifestData, RouteData } from '../@types/astro'; -import type { DevServerController } from './controller'; +import type { ManifestData } from '../@types/astro'; import type { DevelopmentEnvironment } from '../core/render/dev/index'; +import type { DevServerController } from './controller'; import { collectErrorMetadata } from '../core/errors/dev/index.js'; +import { createSafeError } from '../core/errors/index.js'; import { error } from '../core/logger/core.js'; import * as msg from '../core/messages.js'; -import { handleRoute, matchRoute } from './route.js'; -import { handle500Response } from './response.js'; import { runWithErrorHandling } from './controller.js'; -import { createSafeError } from '../core/errors/index.js'; +import { handle500Response } from './response.js'; +import { handleRoute, matchRoute } from './route.js'; /** The main logic to route dev server requests to pages in Astro. */ export async function handleRequest( @@ -60,7 +60,7 @@ export async function handleRequest( pathname, async run() { const matchedRoute = await matchRoute(pathname, env, manifest); - + return await handleRoute(matchedRoute, url, pathname, body, origin, env, manifest, req, res); }, onError(_err) { @@ -73,6 +73,6 @@ export async function handleRequest( handle500Response(moduleLoader, res, errorWithMetadata); return err; - } + }, }); } diff --git a/packages/astro/src/vite-plugin-astro-server/response.ts b/packages/astro/src/vite-plugin-astro-server/response.ts index 60142e0d6..6a8d3a608 100644 --- a/packages/astro/src/vite-plugin-astro-server/response.ts +++ b/packages/astro/src/vite-plugin-astro-server/response.ts @@ -1,13 +1,12 @@ import type http from 'http'; -import type { ModuleLoader } from '../core/module-loader/index'; import type { ErrorWithMetadata } from '../core/errors/index.js'; +import type { ModuleLoader } from '../core/module-loader/index'; import { Readable } from 'stream'; import { getSetCookiesFromResponse } from '../core/cookies/index.js'; import { getViteErrorPayload } from '../core/errors/dev/index.js'; import notFoundTemplate from '../template/4xx.js'; - export async function handle404Response( origin: string, req: http.IncomingMessage, diff --git a/packages/astro/src/vite-plugin-astro-server/route.ts b/packages/astro/src/vite-plugin-astro-server/route.ts index 7015aaba8..b55760608 100644 --- a/packages/astro/src/vite-plugin-astro-server/route.ts +++ b/packages/astro/src/vite-plugin-astro-server/route.ts @@ -1,10 +1,11 @@ import type http from 'http'; import mime from 'mime'; -import type { AstroConfig, AstroSettings, ManifestData } from '../@types/astro'; +import type { AstroSettings, ManifestData } from '../@types/astro'; import { DevelopmentEnvironment, SSROptions } from '../core/render/dev/index'; import { attachToResponse } from '../core/cookies/index.js'; import { call as callEndpoint } from '../core/endpoint/dev/index.js'; +import { throwIfRedirectNotAllowed } from '../core/endpoint/index.js'; import { warn } from '../core/logger/core.js'; import { appendForwardSlash } from '../core/path.js'; import { preload, renderPage } from '../core/render/dev/index.js'; @@ -13,8 +14,7 @@ import { createRequest } from '../core/request.js'; import { matchAllRoutes } from '../core/routing/index.js'; import { resolvePages } from '../core/util.js'; import { log404 } from './common.js'; -import { handle404Response, writeWebResponse, writeSSRResult } from './response.js'; -import { throwIfRedirectNotAllowed } from '../core/endpoint/index.js'; +import { handle404Response, writeSSRResult, writeWebResponse } from './response.js'; type AsyncReturnType<T extends (...args: any) => Promise<any>> = T extends ( ...args: any @@ -29,7 +29,11 @@ function getCustom404Route({ config }: AstroSettings, manifest: ManifestData) { return manifest.routes.find((r) => r.component.match(pattern)); } -export async function matchRoute(pathname: string, env: DevelopmentEnvironment, manifest: ManifestData) { +export async function matchRoute( + pathname: string, + env: DevelopmentEnvironment, + manifest: ManifestData +) { const { logging, settings, routeCache } = env; const matches = matchAllRoutes(pathname, manifest); diff --git a/packages/astro/src/vite-plugin-astro-server/server-state.ts b/packages/astro/src/vite-plugin-astro-server/server-state.ts index 16dec7d5a..94f1fe8a5 100644 --- a/packages/astro/src/vite-plugin-astro-server/server-state.ts +++ b/packages/astro/src/vite-plugin-astro-server/server-state.ts @@ -14,7 +14,7 @@ export interface ServerState { export function createServerState(): ServerState { return { routes: new Map(), - state: 'fresh' + state: 'fresh', }; } @@ -23,14 +23,14 @@ export function hasAnyFailureState(serverState: ServerState) { } export function setRouteError(serverState: ServerState, pathname: string, error: Error) { - if(serverState.routes.has(pathname)) { + if (serverState.routes.has(pathname)) { const routeState = serverState.routes.get(pathname)!; routeState.state = 'error'; routeState.error = error; } else { const routeState: RouteState = { state: 'error', - error: error + error: error, }; serverState.routes.set(pathname, routeState); } @@ -44,7 +44,7 @@ export function setServerError(serverState: ServerState, error: Error) { } export function clearRouteError(serverState: ServerState, pathname: string) { - if(serverState.routes.has(pathname)) { + if (serverState.routes.has(pathname)) { serverState.routes.delete(pathname); } serverState.state = 'fresh'; diff --git a/packages/astro/src/vite-plugin-load-fallback/index.ts b/packages/astro/src/vite-plugin-load-fallback/index.ts index 6a6af9142..f0a983993 100644 --- a/packages/astro/src/vite-plugin-load-fallback/index.ts +++ b/packages/astro/src/vite-plugin-load-fallback/index.ts @@ -1,5 +1,5 @@ -import type * as vite from 'vite'; import nodeFs from 'fs'; +import type * as vite from 'vite'; type NodeFileSystemModule = typeof nodeFs; @@ -9,30 +9,29 @@ export interface LoadFallbackPluginParams { export default function loadFallbackPlugin({ fs }: LoadFallbackPluginParams): vite.Plugin | false { // Only add this plugin if a custom fs implementation is provided. - if(!fs || fs === nodeFs) { + if (!fs || fs === nodeFs) { return false; } - return { - name: 'astro:load-fallback', - enforce: 'post', - async load(id) { - try { - // await is necessary for the catch - return await fs.promises.readFile(cleanUrl(id), 'utf-8') - } catch (e) { - try { - return await fs.promises.readFile(id, 'utf-8'); - } catch(e2) { - // Let fall through to the next - } - } - } - } + return { + name: 'astro:load-fallback', + enforce: 'post', + async load(id) { + try { + // await is necessary for the catch + return await fs.promises.readFile(cleanUrl(id), 'utf-8'); + } catch (e) { + try { + return await fs.promises.readFile(id, 'utf-8'); + } catch (e2) { + // Let fall through to the next + } + } + }, + }; } const queryRE = /\?.*$/s; const hashRE = /#.*$/s; -const cleanUrl = (url: string): string => - url.replace(hashRE, '').replace(queryRE, ''); +const cleanUrl = (url: string): string => url.replace(hashRE, '').replace(queryRE, ''); |