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
5 changes: 5 additions & 0 deletions .changeset/big-jobs-make.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Fixes an issue where the use of the Astro internal logger couldn't work with Cloudflare Vite plugin.
5 changes: 5 additions & 0 deletions .changeset/fix-large-static-routes-stack-overflow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Fixes a build error when generating projects with a large number of static routes
6 changes: 6 additions & 0 deletions .changeset/floppy-cases-hug.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@astrojs/cloudflare': patch
'astro': patch
---

Fixes an issue where the use of the `Code` component would result in an unexpected error.
5 changes: 5 additions & 0 deletions .changeset/green-zebras-lick.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Fixes an issue where the new Astro v6 development server didn't log anything when navigating the pages.
5 changes: 5 additions & 0 deletions .changeset/orange-boats-refuse.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@astrojs/cloudflare': patch
---

Fixes an issue where `esbuild` would throw a "Top-level return cannot be used inside an ECMAScript module" error during dependency scanning in certain environments.
4 changes: 3 additions & 1 deletion benchmark/packages/adapter/src/server.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as fs from 'node:fs';
import type { SSRManifest } from 'astro';
import { AppPipeline, BaseApp } from 'astro/app';
import { AppPipeline, BaseApp, type LogRequestPayload } from 'astro/app';

class MyApp extends BaseApp {
#manifest: SSRManifest | undefined;
Expand Down Expand Up @@ -30,6 +30,8 @@ class MyApp extends BaseApp {
streaming,
});
}

logRequest(_options: LogRequestPayload) {}
}

export function createExports(manifest: SSRManifest) {
Expand Down
2 changes: 1 addition & 1 deletion biome.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@
// We don't want to have node modules in code that should be runtime agnostic
"includes": [
"**/packages/astro/src/**/runtime/**/*.ts",
"**/packages/astro/src/**/runtime.ts"
"**/packages/astro/src/**/*runtime*.ts"
],
"linter": {
"rules": {
Expand Down
2 changes: 1 addition & 1 deletion knip.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ export default {
'packages/markdown/remark': {
entry: [testEntry],
// package.json#imports are not resolved at the moment
ignore: ['src/import-plugin-browser.ts'],
ignore: ['src/import-plugin-browser.ts', 'src/shiki-engine-workerd.ts'],
},
'packages/upgrade': {
entry: ['src/index.ts', testEntry],
Expand Down
9 changes: 3 additions & 6 deletions packages/astro/components/Code.astro
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
---
import {
type ThemePresets,
createShikiHighlighter,
globalShikiStyleCollector,
transformerStyleToClass,
} from '@astrojs/markdown-remark';
import { createShikiHighlighter, type ThemePresets } from '@astrojs/markdown-remark/shiki';
import { globalShikiStyleCollector } from '@astrojs/markdown-remark/shiki-style-collector';
import { transformerStyleToClass } from '@astrojs/markdown-remark/transformers/style-to-class';
import type { ShikiTransformer, ThemeRegistration, ThemeRegistrationRaw } from 'shiki';
import { bundledLanguages } from 'shiki/langs';
import type { CodeLanguage } from '../dist/types/public/common.js';
Expand Down
3 changes: 1 addition & 2 deletions packages/astro/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@
"common-ancestor-path": "^2.0.0",
"cookie": "^1.1.1",
"cssesc": "^3.0.0",
"debug": "^4.4.3",
"deterministic-object-hash": "^2.0.2",
"devalue": "^5.6.2",
"diff": "^8.0.3",
Expand All @@ -149,6 +148,7 @@
"magicast": "^0.5.2",
"mrmime": "^2.0.1",
"neotraverse": "^0.6.18",
"obug": "^2.1.1",
"p-limit": "^7.3.0",
"p-queue": "^9.1.0",
"package-manager-detector": "^1.6.0",
Expand Down Expand Up @@ -181,7 +181,6 @@
"@playwright/test": "1.58.2",
"@types/aria-query": "^5.0.4",
"@types/cssesc": "^3.0.2",
"@types/debug": "^4.1.12",
"@types/dlv": "^1.1.5",
"@types/hast": "^3.0.4",
"@types/html-escaper": "3.0.4",
Expand Down
2 changes: 1 addition & 1 deletion packages/astro/src/assets/fonts/vite-plugin-fonts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { generateCspDigest } from '../../core/encryption.js';
import { collectErrorMetadata } from '../../core/errors/dev/utils.js';
import { AstroError, AstroErrorData, isAstroError } from '../../core/errors/index.js';
import type { Logger } from '../../core/logger/core.js';
import { formatErrorMessage } from '../../core/messages.js';
import { formatErrorMessage } from '../../core/messages/runtime.js';
import { appendForwardSlash, joinPaths, prependForwardSlash } from '../../core/path.js';
import { getClientOutputDirectory } from '../../prerender/utils.js';
import type { AstroSettings } from '../../types/astro.js';
Expand Down
4 changes: 2 additions & 2 deletions packages/astro/src/cli/add/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ import {
updateTSConfigForFramework,
} from '../../core/config/tsconfig.js';
import type { Logger } from '../../core/logger/core.js';
import * as msg from '../../core/messages.js';
import { printHelp } from '../../core/messages.js';
import * as msg from '../../core/messages/runtime.js';
import { printHelp } from '../../core/messages/runtime.js';
import { appendForwardSlash } from '../../core/path.js';
import { ensureProcessNodeEnv, parseNpmName } from '../../core/util.js';
import { eventCliSession, telemetry } from '../../events/index.js';
Expand Down
2 changes: 1 addition & 1 deletion packages/astro/src/cli/build/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import _build from '../../core/build/index.js';
import { printHelp } from '../../core/messages.js';
import { printHelp } from '../../core/messages/runtime.js';
import { type Flags, flagsToAstroInlineConfig } from '../flags.js';

interface BuildOptions {
Expand Down
2 changes: 1 addition & 1 deletion packages/astro/src/cli/dev/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import colors from 'piccolore';
import devServer from '../../core/dev/index.js';
import { printHelp } from '../../core/messages.js';
import { printHelp } from '../../core/messages/runtime.js';
import { type Flags, flagsToAstroInlineConfig } from '../flags.js';

interface DevOptions {
Expand Down
6 changes: 3 additions & 3 deletions packages/astro/src/cli/flags.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Arguments } from 'yargs-parser';
import { Logger, type LogOptions } from '../core/logger/core.js';
import { nodeLogDestination } from '../core/logger/node.js';
import type { Logger, LogOptions } from '../core/logger/core.js';
import { createNodeLogger, nodeLogDestination } from '../core/logger/node.js';
import type { AstroInlineConfig } from '../types/public/config.js';

// Alias for now, but allows easier migration to node's `parseArgs` in the future.
Expand Down Expand Up @@ -52,5 +52,5 @@ export function createLoggerFromFlags(flags: Flags): Logger {
logging.level = 'silent';
}

return new Logger(logging);
return createNodeLogger({ logLevel: logging.level });
}
2 changes: 1 addition & 1 deletion packages/astro/src/cli/preferences/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import colors from 'piccolore';
import { resolveConfig } from '../../core/config/config.js';
import { createSettings } from '../../core/config/settings.js';
import { collectErrorMetadata } from '../../core/errors/dev/utils.js';
import * as msg from '../../core/messages.js';
import * as msg from '../../core/messages/runtime.js';
import { DEFAULT_PREFERENCES } from '../../preferences/defaults.js';
import { coerce, isValidKey, type PreferenceKey } from '../../preferences/index.js';
import type { AstroSettings } from '../../types/astro.js';
Expand Down
2 changes: 1 addition & 1 deletion packages/astro/src/cli/preview/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import colors from 'piccolore';
import { printHelp } from '../../core/messages.js';
import { printHelp } from '../../core/messages/runtime.js';
import previewServer from '../../core/preview/index.js';
import { type Flags, flagsToAstroInlineConfig } from '../flags.js';

Expand Down
2 changes: 1 addition & 1 deletion packages/astro/src/cli/sync/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { printHelp } from '../../core/messages.js';
import { printHelp } from '../../core/messages/runtime.js';
import _sync from '../../core/sync/index.js';
import { type Flags, flagsToAstroInlineConfig } from '../flags.js';

Expand Down
2 changes: 1 addition & 1 deletion packages/astro/src/cli/telemetry/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import * as msg from '../../core/messages.js';
import * as msg from '../../core/messages/runtime.js';
import { telemetry } from '../../events/index.js';
import { createLoggerFromFlags, type Flags } from '../flags.js';

Expand Down
2 changes: 1 addition & 1 deletion packages/astro/src/cli/throw-and-exit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { collectErrorMetadata } from '../core/errors/dev/index.js';
import { isAstroConfigZodError } from '../core/errors/errors.js';
import { createSafeError } from '../core/errors/index.js';
import { debug } from '../core/logger/core.js';
import { formatErrorMessage } from '../core/messages.js';
import { formatErrorMessage } from '../core/messages/runtime.js';
import { eventError, telemetry } from '../events/index.js';

/** Display error and exit */
Expand Down
2 changes: 1 addition & 1 deletion packages/astro/src/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export function getViteConfig(
{ runHookConfigSetup, runHookConfigDone },
] = await Promise.all([
import('vite'),
import('../core/config/logging.js'),
import('../core/logger/node.js'),
import('../core/config/index.js'),
import('../core/create-vite.js'),
import('../integrations/hooks.js'),
Expand Down
5 changes: 4 additions & 1 deletion packages/astro/src/core/app/app.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BaseApp } from './base.js';
import { BaseApp, type LogRequestPayload } from './base.js';
import { AppPipeline } from './pipeline.js';

export class App extends BaseApp {
Expand All @@ -12,4 +12,7 @@ export class App extends BaseApp {
isDev(): boolean {
return false;
}

// Should we log something for our users?
logRequest(_options: LogRequestPayload) {}
}
63 changes: 62 additions & 1 deletion packages/astro/src/core/app/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {
REROUTABLE_STATUS_CODES,
REROUTE_DIRECTIVE_HEADER,
responseSentSymbol,
REWRITE_DIRECTIVE_HEADER_KEY,
} from '../constants.js';
import { getSetCookiesFromResponse } from '../cookies/index.js';
import { AstroError, AstroErrorData } from '../errors/index.js';
Expand Down Expand Up @@ -342,6 +343,7 @@ export abstract class BaseApp<P extends Pipeline = AppPipeline> {
}

public async render(request: Request, renderOptions?: RenderOptions): Promise<Response> {
const timeStart = performance.now();
let routeData: RouteData | undefined = renderOptions?.routeData;
let locals: object | undefined;
let clientAddress: string | undefined;
Expand Down Expand Up @@ -379,7 +381,8 @@ export abstract class BaseApp<P extends Pipeline = AppPipeline> {
'The adapter ' + this.manifest.adapterName + ' provided a custom RouteData for ',
request.url,
);
this.logger.debug('router', 'RouteData:\n' + routeData);
this.logger.debug('router', 'RouteData');
this.logger.debug('router', routeData);
}
if (locals) {
if (typeof locals !== 'object') {
Expand Down Expand Up @@ -443,6 +446,16 @@ export abstract class BaseApp<P extends Pipeline = AppPipeline> {
});
session = renderContext.session;
response = await renderContext.render(componentInstance);

const isRewrite = response.headers.has(REWRITE_DIRECTIVE_HEADER_KEY);

this.logThisRequest({
pathname,
method: request.method,
statusCode: response.status,
isRewrite,
timeStart,
});
} catch (err: any) {
this.logger.error(null, err.stack || err.message || String(err));
return this.renderError(request, {
Expand Down Expand Up @@ -672,4 +685,52 @@ export abstract class BaseApp<P extends Pipeline = AppPipeline> {
public getManifest() {
return this.pipeline.manifest;
}

logThisRequest({
pathname,
method,
statusCode,
isRewrite,
timeStart,
}: {
pathname: string;
method: string;
statusCode: number;
isRewrite: boolean;
timeStart: number;
}) {
const timeEnd = performance.now();
this.logRequest({
pathname,
method,
statusCode,
isRewrite,
reqTime: timeEnd - timeStart,
});
}

public abstract logRequest(_options: LogRequestPayload): void;
}

export type LogRequestPayload = {
/**
* The current path being rendered
*/
pathname: string;
/**
* The method of the request
*/
method: string;
/**
* The status code of the request
*/
statusCode: number;
/**
* If the current request is a rewrite
*/
isRewrite: boolean;
/**
* How long it took to render the request
*/
reqTime: number;
};
24 changes: 23 additions & 1 deletion packages/astro/src/core/app/dev/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@ import { MiddlewareNoDataOrNextCalled, MiddlewareNotAResponse } from '../../erro
import { type AstroError, isAstroError } from '../../errors/index.js';
import type { Logger } from '../../logger/core.js';
import type { CreateRenderContext, RenderContext } from '../../render-context.js';
import { BaseApp, type DevMatch, type RenderErrorOptions } from '../base.js';
import {
BaseApp,
type DevMatch,
type LogRequestPayload,
type RenderErrorOptions,
} from '../base.js';
import type { SSRManifest } from '../types.js';
import { NonRunnablePipeline } from './pipeline.js';
import { getCustom404Route, getCustom500Route } from '../../routing/helpers.js';
import { ensure404Route } from '../../routing/astro-designed-error-pages.js';
import { matchRoute } from '../../routing/dev.js';
import type { RunnablePipeline } from '../../../vite-plugin-app/pipeline.js';
import type { RoutesList } from '../../../types/astro.js';
import { req } from '../../messages/runtime.js';

export class DevApp extends BaseApp<NonRunnablePipeline> {
logger: Logger;
Expand Down Expand Up @@ -134,4 +140,20 @@ export class DevApp extends BaseApp<NonRunnablePipeline> {
return renderRoute(custom500);
}
}

logRequest({ pathname, method, statusCode, isRewrite, reqTime }: LogRequestPayload) {
if (pathname === '/favicon.ico') {
return;
}
this.logger.info(
null,
req({
url: pathname,
method,
statusCode,
isRewrite,
reqTime,
}),
);
}
}
7 changes: 6 additions & 1 deletion packages/astro/src/core/app/entrypoints/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
export type { RoutesList } from '../../../types/astro.js';
export { App } from '../app.js';
export { BaseApp, type RenderErrorOptions, type RenderOptions } from '../base.js';
export {
BaseApp,
type RenderErrorOptions,
type RenderOptions,
type LogRequestPayload,
} from '../base.js';
export { fromRoutingStrategy, toRoutingStrategy } from '../common.js';
export { createConsoleLogger } from '../logging.js';
export {
Expand Down
3 changes: 3 additions & 0 deletions packages/astro/src/core/build/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import type { BuildInternals } from './internal.js';
import { BuildPipeline } from './pipeline.js';
import type { StaticBuildOptions } from './types.js';
import type { CreateRenderContext, RenderContext } from '../render-context.js';
import type { LogRequestPayload } from '../app/base.js';

export class BuildApp extends BaseApp<BuildPipeline> {
createPipeline(_streaming: boolean, manifest: SSRManifest, ..._args: any[]): BuildPipeline {
Expand Down Expand Up @@ -52,4 +53,6 @@ export class BuildApp extends BaseApp<BuildPipeline> {
});
}
}

logRequest(_options: LogRequestPayload) {}
}
2 changes: 1 addition & 1 deletion packages/astro/src/core/build/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
import type { AstroSettings, RoutesList } from '../../types/astro.js';
import type { AstroInlineConfig, RuntimeMode } from '../../types/public/config.js';
import { resolveConfig } from '../config/config.js';
import { createNodeLogger } from '../config/logging.js';
import { createNodeLogger } from '../logger/node.js';
import { createSettings } from '../config/settings.js';
import { createVite } from '../create-vite.js';
import { createKey, getEnvironmentKey, hasEnvironmentKey } from '../encryption.js';
Expand Down
2 changes: 1 addition & 1 deletion packages/astro/src/core/config/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import type {
} from '../../types/public/config.js';
import { trackAstroConfigZodError } from '../errors/errors.js';
import { AstroError, AstroErrorData } from '../errors/index.js';
import { formatConfigErrorMessage } from '../messages.js';
import { formatConfigErrorMessage } from '../messages/runtime.js';
import { mergeConfig } from './merge.js';
import { validateConfig } from './validate.js';
import { loadConfigWithVite } from './vite-load.js';
Expand Down
Loading
Loading