astro 6.1.10 → 6.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/client.d.ts +1 -0
  2. package/dist/actions/runtime/types.d.ts +1 -1
  3. package/dist/assets/fonts/constants.d.ts +2 -0
  4. package/dist/assets/fonts/constants.js +4 -0
  5. package/dist/assets/fonts/core/create-get-font-file-url.d.ts +2 -0
  6. package/dist/assets/fonts/core/create-get-font-file-url.js +23 -0
  7. package/dist/assets/fonts/core/font-file-middleware.d.ts +21 -0
  8. package/dist/assets/fonts/core/font-file-middleware.js +59 -0
  9. package/dist/assets/fonts/definitions.d.ts +13 -0
  10. package/dist/assets/fonts/infra/build-url-resolver.d.ts +1 -0
  11. package/dist/assets/fonts/infra/build-url-resolver.js +7 -1
  12. package/dist/assets/fonts/infra/dev-url-resolver.d.ts +1 -0
  13. package/dist/assets/fonts/infra/dev-url-resolver.js +7 -1
  14. package/dist/assets/fonts/infra/remote-runtime-font-file-url-resolver.d.ts +19 -0
  15. package/dist/assets/fonts/infra/remote-runtime-font-file-url-resolver.js +27 -0
  16. package/dist/assets/fonts/infra/ssr-runtime-font-file-url-resolver.d.ts +12 -0
  17. package/dist/assets/fonts/infra/ssr-runtime-font-file-url-resolver.js +25 -0
  18. package/dist/assets/fonts/runtime.d.ts +1 -0
  19. package/dist/assets/fonts/runtime.js +4 -0
  20. package/dist/assets/fonts/vite-plugin-fonts.js +88 -49
  21. package/dist/assets/index.d.ts +1 -1
  22. package/dist/assets/index.js +3 -2
  23. package/dist/assets/svg/config.d.ts +5 -0
  24. package/dist/assets/svg/config.js +8 -0
  25. package/dist/assets/svg/svgo.d.ts +4 -0
  26. package/dist/assets/svg/svgo.js +10 -0
  27. package/dist/assets/svg/types.d.ts +4 -0
  28. package/dist/assets/svg/types.js +0 -0
  29. package/dist/assets/svg/utils.d.ts +3 -0
  30. package/dist/assets/{utils/svg.js → svg/utils.js} +11 -14
  31. package/dist/assets/vite-plugin-assets.js +8 -4
  32. package/dist/cli/flags.js +19 -9
  33. package/dist/cli/help/index.js +2 -1
  34. package/dist/cli/infra/build-time-astro-version-provider.js +1 -1
  35. package/dist/cli/preferences/index.js +3 -2
  36. package/dist/config/entrypoint.d.ts +2 -0
  37. package/dist/config/entrypoint.js +4 -0
  38. package/dist/config/index.js +9 -7
  39. package/dist/container/index.js +4 -7
  40. package/dist/content/content-layer.js +3 -3
  41. package/dist/core/app/base.d.ts +18 -4
  42. package/dist/core/app/base.js +29 -12
  43. package/dist/core/app/dev/app.d.ts +0 -1
  44. package/dist/core/app/dev/app.js +0 -2
  45. package/dist/core/app/entrypoints/index.d.ts +1 -1
  46. package/dist/core/app/entrypoints/index.js +1 -1
  47. package/dist/core/app/entrypoints/virtual/dev.js +1 -1
  48. package/dist/core/app/pipeline.js +2 -2
  49. package/dist/core/app/types.d.ts +10 -3
  50. package/dist/core/base-pipeline.d.ts +9 -2
  51. package/dist/core/base-pipeline.js +17 -0
  52. package/dist/core/build/app.js +2 -1
  53. package/dist/core/build/index.js +13 -2
  54. package/dist/core/build/internal.d.ts +1 -0
  55. package/dist/core/build/internal.js +1 -0
  56. package/dist/core/build/pipeline.js +1 -1
  57. package/dist/core/build/plugins/plugin-manifest.js +6 -1
  58. package/dist/core/cache/types.d.ts +2 -0
  59. package/dist/core/config/schemas/base.d.ts +16 -8
  60. package/dist/core/config/schemas/base.js +17 -10
  61. package/dist/core/config/schemas/relative.d.ts +31 -13
  62. package/dist/core/config/schemas/relative.js +3 -4
  63. package/dist/core/config/settings.js +2 -1
  64. package/dist/core/config/vite-load.js +4 -17
  65. package/dist/core/constants.js +1 -1
  66. package/dist/core/createMinimalViteDevServer.d.ts +8 -0
  67. package/dist/core/createMinimalViteDevServer.js +15 -0
  68. package/dist/core/dev/dev.js +1 -1
  69. package/dist/core/dev/restart.js +2 -2
  70. package/dist/core/errors/errors-data.d.ts +48 -2
  71. package/dist/core/errors/errors-data.js +26 -2
  72. package/dist/core/errors/zod-error-map.js +27 -0
  73. package/dist/core/logger/config.d.ts +6 -0
  74. package/dist/core/logger/config.js +0 -0
  75. package/dist/core/logger/core.d.ts +33 -13
  76. package/dist/core/logger/core.js +50 -5
  77. package/dist/core/logger/handlers.d.ts +60 -0
  78. package/dist/core/logger/handlers.js +81 -0
  79. package/dist/core/logger/impls/compose.d.ts +2 -0
  80. package/dist/core/logger/impls/compose.js +26 -0
  81. package/dist/core/logger/impls/console.d.ts +9 -0
  82. package/dist/core/logger/impls/console.js +38 -0
  83. package/dist/core/logger/impls/json.d.ts +15 -0
  84. package/dist/core/logger/impls/json.js +42 -0
  85. package/dist/core/logger/impls/node.d.ts +7 -0
  86. package/dist/core/logger/impls/node.js +40 -0
  87. package/dist/core/logger/load.d.ts +11 -0
  88. package/dist/core/logger/load.js +88 -0
  89. package/dist/core/logger/node.d.ts +0 -5
  90. package/dist/core/logger/node.js +1 -39
  91. package/dist/core/logger/public.d.ts +17 -0
  92. package/dist/core/logger/public.js +7 -0
  93. package/dist/core/messages/runtime.js +1 -1
  94. package/dist/core/middleware/index.js +2 -1
  95. package/dist/core/preview/index.js +4 -3
  96. package/dist/core/render-context.js +35 -1
  97. package/dist/core/sync/index.js +2 -2
  98. package/dist/core/wait-until.d.ts +1 -0
  99. package/dist/core/wait-until.js +0 -0
  100. package/dist/manifest/serialized.js +6 -1
  101. package/dist/runtime/compiler/index.d.ts +1 -1
  102. package/dist/runtime/compiler/index.js +4 -0
  103. package/dist/runtime/server/astro-global.js +3 -0
  104. package/dist/runtime/server/index.d.ts +1 -0
  105. package/dist/runtime/server/index.js +3 -0
  106. package/dist/runtime/server/render/common.js +16 -0
  107. package/dist/runtime/server/render/instruction.d.ts +7 -1
  108. package/dist/runtime/server/render/template-depth.d.ts +13 -0
  109. package/dist/runtime/server/render/template-depth.js +11 -0
  110. package/dist/types/astro.d.ts +2 -0
  111. package/dist/types/public/common.d.ts +1 -0
  112. package/dist/types/public/config.d.ts +54 -42
  113. package/dist/types/public/context.d.ts +17 -0
  114. package/dist/types/public/index.d.ts +1 -0
  115. package/dist/types/public/internal.d.ts +7 -1
  116. package/dist/types/public/preview.d.ts +5 -0
  117. package/dist/vite-plugin-app/app.d.ts +0 -1
  118. package/dist/vite-plugin-app/app.js +0 -2
  119. package/dist/vite-plugin-app/createAstroServerApp.d.ts +1 -1
  120. package/dist/vite-plugin-app/createAstroServerApp.js +2 -6
  121. package/dist/vite-plugin-load-fallback/index.d.ts +1 -1
  122. package/dist/vite-plugin-load-fallback/index.js +2 -5
  123. package/package.json +8 -3
  124. package/dist/assets/utils/svg.d.ts +0 -3
  125. package/dist/core/app/logging.d.ts +0 -3
  126. package/dist/core/app/logging.js +0 -11
  127. package/dist/core/logger/console.d.ts +0 -2
  128. package/dist/core/logger/console.js +0 -21
@@ -11,9 +11,11 @@ import { createDefaultRoutes } from "./routing/default.js";
11
11
  import { NodePool } from "../runtime/server/render/queue/pool.js";
12
12
  import { HTMLStringCache } from "../runtime/server/html-string-cache.js";
13
13
  import { FORBIDDEN_PATH_KEYS } from "@astrojs/internal-helpers/object";
14
+ import { loadLogger } from "./logger/load.js";
14
15
  class Pipeline {
15
16
  internalMiddleware;
16
17
  resolvedMiddleware = void 0;
18
+ resolvedLogger = false;
17
19
  resolvedActions = void 0;
18
20
  resolvedSessionDriver = void 0;
19
21
  resolvedCacheProvider = void 0;
@@ -119,6 +121,21 @@ class Pipeline {
119
121
  clearMiddleware() {
120
122
  this.resolvedMiddleware = void 0;
121
123
  }
124
+ /**
125
+ * Resolves the logger destination from the manifest and updates the pipeline logger.
126
+ * If the user configured `experimental.logger`, the bundled logger factory is loaded
127
+ * and replaces the default console destination. This is lazy and only resolves once.
128
+ */
129
+ async getLogger() {
130
+ if (this.resolvedLogger) {
131
+ return this.logger;
132
+ }
133
+ this.resolvedLogger = true;
134
+ if (this.manifest.experimentalLogger) {
135
+ this.logger = await loadLogger(this.manifest.experimentalLogger);
136
+ }
137
+ return this.logger;
138
+ }
122
139
  async getActions() {
123
140
  if (this.resolvedActions) {
124
141
  return this.resolvedActions;
@@ -19,7 +19,8 @@ class BuildApp extends BaseApp {
19
19
  }
20
20
  setOptions(options) {
21
21
  this.pipeline.setOptions(options);
22
- this.logger = options.logger;
22
+ this.logger.setDestination(options.logger.options.destination);
23
+ this.resetAdapterLogger();
23
24
  }
24
25
  getOptions() {
25
26
  return this.pipeline.getOptions();
@@ -11,7 +11,7 @@ import {
11
11
  runHookConfigSetup
12
12
  } from "../../integrations/hooks.js";
13
13
  import { resolveConfig } from "../config/config.js";
14
- import { createNodeLogger } from "../logger/node.js";
14
+ import { loadOrCreateNodeLogger } from "../logger/load.js";
15
15
  import { createSettings } from "../config/settings.js";
16
16
  import { createVite } from "../create-vite.js";
17
17
  import { createKey, getEnvironmentKey, hasEnvironmentKey } from "../encryption.js";
@@ -27,8 +27,8 @@ import { getTimeStat } from "./util.js";
27
27
  import { warnIfCspWithShiki } from "../messages/runtime.js";
28
28
  async function build(inlineConfig, options = {}) {
29
29
  ensureProcessNodeEnv(options.devOutput ? "development" : "production");
30
- const logger = createNodeLogger(inlineConfig);
31
30
  const { userConfig, astroConfig } = await resolveConfig(inlineConfig, "build");
31
+ const logger = await loadOrCreateNodeLogger(astroConfig, inlineConfig ?? {});
32
32
  telemetry.record(eventCliSession("build", userConfig));
33
33
  warnIfCspWithShiki(astroConfig, logger);
34
34
  const settings = await createSettings(
@@ -165,6 +165,17 @@ class AstroBuilder {
165
165
  delete assets[k];
166
166
  });
167
167
  this.logger.debug("build", timerMessage("Additional assets copied", this.timer.assetsStart));
168
+ if (this.settings.fontsHttpServer) {
169
+ await new Promise((resolve, reject) => {
170
+ this.settings.fontsHttpServer.close((err) => {
171
+ if (err) reject(err);
172
+ else resolve();
173
+ });
174
+ }).catch((err) => {
175
+ this.logger.debug("assets", "Failed to close fonts HTTP server:", err);
176
+ });
177
+ this.settings.fontsHttpServer = null;
178
+ }
168
179
  await runHookBuildDone({
169
180
  settings: this.settings,
170
181
  pages: pageNames,
@@ -74,6 +74,7 @@ export interface BuildInternals {
74
74
  prerenderEntryFileName?: string;
75
75
  componentMetadata: SSRResult['componentMetadata'];
76
76
  middlewareEntryPoint: URL | undefined;
77
+ loggerEntryPoint: URL | undefined;
77
78
  astroActionsEntryPoint: URL | undefined;
78
79
  /**
79
80
  * Assets that need to be moved from SSR/prerender directories to the client directory.
@@ -19,6 +19,7 @@ function createBuildInternals() {
19
19
  componentMetadata: /* @__PURE__ */ new Map(),
20
20
  astroActionsEntryPoint: void 0,
21
21
  middlewareEntryPoint: void 0,
22
+ loggerEntryPoint: void 0,
22
23
  clientChunksAndAssets: /* @__PURE__ */ new Set(),
23
24
  ssrAssetsPerEnvironment: /* @__PURE__ */ new Map()
24
25
  };
@@ -61,7 +61,7 @@ class BuildPipeline extends Pipeline {
61
61
  resolveCache.set(specifier, assetLink);
62
62
  return assetLink;
63
63
  }
64
- const logger = createConsoleLogger(manifest.logLevel);
64
+ const logger = createConsoleLogger({ level: manifest.logLevel });
65
65
  super(logger, manifest, "production", manifest.renderers, resolve, manifest.serverLike);
66
66
  this.manifest = manifest;
67
67
  this.defaultRoutes = defaultRoutes;
@@ -211,6 +211,10 @@ async function buildManifest(opts, internals, staticFiles, encodedKey) {
211
211
  }
212
212
  }
213
213
  const middlewareMode = resolveMiddlewareMode(opts.settings.adapter?.adapterFeatures);
214
+ let experimentalLogger = void 0;
215
+ if (settings.config.experimental.logger) {
216
+ experimentalLogger = settings.config.experimental.logger;
217
+ }
214
218
  return {
215
219
  rootDir: opts.settings.config.root.toString(),
216
220
  cacheDir: opts.settings.config.cacheDir.toString(),
@@ -267,7 +271,8 @@ async function buildManifest(opts, internals, staticFiles, encodedKey) {
267
271
  },
268
272
  internalFetchHeaders,
269
273
  logLevel: settings.logLevel,
270
- shouldInjectCspMetaTags: shouldTrackCspHashes(settings.config.security.csp)
274
+ shouldInjectCspMetaTags: shouldTrackCspHashes(settings.config.security.csp),
275
+ experimentalLogger
271
276
  };
272
277
  }
273
278
  export {
@@ -1,4 +1,5 @@
1
1
  import type { MiddlewareNext } from '../../types/public/common.js';
2
+ import type { WaitUntilHook } from '../wait-until.js';
2
3
  export interface CacheOptions {
3
4
  maxAge?: number;
4
5
  swr?: number;
@@ -25,6 +26,7 @@ export interface CacheProvider {
25
26
  onRequest?(context: {
26
27
  request: Request;
27
28
  url: URL;
29
+ waitUntil?: WaitUntilHook;
28
30
  }, next: MiddlewareNext): Promise<Response>;
29
31
  invalidate(options: InvalidateOptions): Promise<void>;
30
32
  }
@@ -1,6 +1,5 @@
1
+ import type { RehypePlugin as _RehypePlugin, RemarkPlugin as _RemarkPlugin, RemarkRehype as _RemarkRehype, Smartypants as _Smartypants, ShikiConfig } from '@astrojs/markdown-remark';
1
2
  import type { OutgoingHttpHeaders } from 'node:http';
2
- import type { RehypePlugin as _RehypePlugin, RemarkPlugin as _RemarkPlugin, RemarkRehype as _RemarkRehype, ShikiConfig, Smartypants as _Smartypants } from '@astrojs/markdown-remark';
3
- import type { Config as SvgoConfig } from 'svgo';
4
3
  import * as z from 'zod/v4';
5
4
  import type { ViteUserConfig } from '../../../types/public/config.js';
6
5
  /** @lintignore */
@@ -79,11 +78,13 @@ export declare const ASTRO_CONFIG_DEFAULTS: {
79
78
  clientPrerender: false;
80
79
  contentIntellisense: false;
81
80
  chromeDevtoolsWorkspace: false;
82
- svgo: false;
83
81
  rustCompiler: false;
84
82
  queuedRendering: {
85
83
  enabled: false;
86
84
  };
85
+ logger: {
86
+ entrypoint: string;
87
+ };
87
88
  };
88
89
  };
89
90
  export declare const AstroConfigSchema: z.ZodObject<{
@@ -93,7 +94,7 @@ export declare const AstroConfigSchema: z.ZodObject<{
93
94
  outDir: z.ZodPipe<z.ZodDefault<z.ZodOptional<z.ZodString>>, z.ZodTransform<URL, string>>;
94
95
  cacheDir: z.ZodPipe<z.ZodDefault<z.ZodOptional<z.ZodString>>, z.ZodTransform<URL, string>>;
95
96
  site: z.ZodOptional<z.ZodString>;
96
- compressHTML: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
97
+ compressHTML: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"jsx">]>>>;
97
98
  base: z.ZodDefault<z.ZodOptional<z.ZodString>>;
98
99
  trailingSlash: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"always">, z.ZodLiteral<"never">, z.ZodLiteral<"ignore">]>>>;
99
100
  output: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"static">, z.ZodLiteral<"server">, z.ZodLiteral<"hybrid">]>>> & z.ZodType<"server" | "static", "server" | "static" | "hybrid" | undefined, z.core.$ZodTypeInternals<"server" | "static", "server" | "static" | "hybrid" | undefined>>;
@@ -102,10 +103,10 @@ export declare const AstroConfigSchema: z.ZodObject<{
102
103
  name: z.ZodString;
103
104
  hooks: z.ZodDefault<z.ZodObject<{}, z.core.$loose>>;
104
105
  }, z.core.$strip>>;
105
- integrations: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodArray<z.ZodObject<{
106
+ integrations: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodArray<z.ZodObject<{
106
107
  name: z.ZodString;
107
108
  hooks: z.ZodDefault<z.ZodObject<{}, z.core.$loose>>;
108
- }, z.core.$strip>>>>;
109
+ }, z.core.$strip>>>>>;
109
110
  build: z.ZodPrefault<z.ZodObject<{
110
111
  format: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"file">, z.ZodLiteral<"directory">, z.ZodLiteral<"preserve">]>>>;
111
112
  client: z.ZodPipe<z.ZodDefault<z.ZodOptional<z.ZodString>>, z.ZodTransform<URL, string>>;
@@ -123,7 +124,7 @@ export declare const AstroConfigSchema: z.ZodObject<{
123
124
  }>>>;
124
125
  concurrency: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
125
126
  }, z.core.$strip>>;
126
- server: z.ZodPipe<z.ZodTransform<any, unknown>, z.ZodPrefault<z.ZodObject<{
127
+ server: z.ZodPrefault<z.ZodPipe<z.ZodTransform<any, unknown>, z.ZodObject<{
127
128
  open: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
128
129
  host: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
129
130
  port: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
@@ -500,7 +501,10 @@ export declare const AstroConfigSchema: z.ZodObject<{
500
501
  clientPrerender: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
501
502
  contentIntellisense: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
502
503
  chromeDevtoolsWorkspace: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
503
- svgo: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCustom<SvgoConfig, SvgoConfig>]>>>;
504
+ svgOptimizer: z.ZodOptional<z.ZodObject<{
505
+ name: z.ZodString;
506
+ optimize: z.ZodCustom<(contents: string) => string | Promise<string>, (contents: string) => string | Promise<string>>;
507
+ }, z.core.$strip>>;
504
508
  cache: z.ZodOptional<z.ZodObject<{
505
509
  provider: z.ZodOptional<z.ZodObject<{
506
510
  config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
@@ -519,6 +523,10 @@ export declare const AstroConfigSchema: z.ZodObject<{
519
523
  poolSize: z.ZodOptional<z.ZodNumber>;
520
524
  contentCache: z.ZodOptional<z.ZodBoolean>;
521
525
  }, z.core.$strip>>>;
526
+ logger: z.ZodOptional<z.ZodObject<{
527
+ entrypoint: z.ZodString;
528
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
529
+ }, z.core.$strip>>;
522
530
  }, z.core.$strict>>;
523
531
  legacy: z.ZodPrefault<z.ZodObject<{
524
532
  collectionsBackwardsCompat: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
@@ -2,9 +2,10 @@ import { markdownConfigDefaults, syntaxHighlightDefaults } from "@astrojs/markdo
2
2
  import { bundledThemes } from "shiki";
3
3
  import * as z from "zod/v4";
4
4
  import { FontFamilySchema } from "../../../assets/fonts/config.js";
5
+ import { SvgOptimizerSchema } from "../../../assets/svg/config.js";
5
6
  import { EnvSchema } from "../../../env/schema.js";
6
- import { allowedDirectivesSchema, cspAlgorithmSchema, cspHashSchema } from "../../csp/config.js";
7
7
  import { CacheSchema, RouteRulesSchema } from "../../cache/config.js";
8
+ import { allowedDirectivesSchema, cspAlgorithmSchema, cspHashSchema } from "../../csp/config.js";
8
9
  import { SessionSchema } from "../../session/config.js";
9
10
  const ASTRO_CONFIG_DEFAULTS = {
10
11
  root: ".",
@@ -62,10 +63,12 @@ const ASTRO_CONFIG_DEFAULTS = {
62
63
  clientPrerender: false,
63
64
  contentIntellisense: false,
64
65
  chromeDevtoolsWorkspace: false,
65
- svgo: false,
66
66
  rustCompiler: false,
67
67
  queuedRendering: {
68
68
  enabled: false
69
+ },
70
+ logger: {
71
+ entrypoint: "astro/logger/node"
69
72
  }
70
73
  }
71
74
  };
@@ -95,20 +98,20 @@ const AstroConfigSchema = z.object({
95
98
  outDir: z.string().optional().default(ASTRO_CONFIG_DEFAULTS.outDir).transform((val) => new URL(val)),
96
99
  cacheDir: z.string().optional().default(ASTRO_CONFIG_DEFAULTS.cacheDir).transform((val) => new URL(val)),
97
100
  site: z.string().url().optional(),
98
- compressHTML: z.boolean().optional().default(ASTRO_CONFIG_DEFAULTS.compressHTML),
101
+ compressHTML: z.union([z.boolean(), z.literal("jsx")]).optional().default(ASTRO_CONFIG_DEFAULTS.compressHTML),
99
102
  base: z.string().optional().default(ASTRO_CONFIG_DEFAULTS.base),
100
103
  trailingSlash: z.union([z.literal("always"), z.literal("never"), z.literal("ignore")]).optional().default(ASTRO_CONFIG_DEFAULTS.trailingSlash),
101
104
  output: z.union([z.literal("static"), z.literal("server"), z.literal("hybrid")]).optional().default("static").refine((val) => val !== "hybrid", {
102
105
  message: 'The `output: "hybrid"` option has been removed. Use `output: "static"` (the default) instead, which now behaves the same way.'
103
106
  }),
104
107
  scopedStyleStrategy: z.union([z.literal("where"), z.literal("class"), z.literal("attribute")]).optional().default("attribute"),
105
- adapter: z.object({ name: z.string(), hooks: z.object({}).passthrough().default({}) }).optional(),
108
+ adapter: z.object({ name: z.string(), hooks: z.object({}).loose().default({}) }).optional(),
106
109
  integrations: z.preprocess(
107
110
  // preprocess
108
111
  (val) => Array.isArray(val) ? val.flat(Number.POSITIVE_INFINITY).filter(Boolean) : val,
109
112
  // validate
110
- z.array(z.object({ name: z.string(), hooks: z.object({}).passthrough().default({}) })).default(ASTRO_CONFIG_DEFAULTS.integrations)
111
- ),
113
+ z.array(z.object({ name: z.string(), hooks: z.object({}).loose().default({}) }))
114
+ ).optional().default(ASTRO_CONFIG_DEFAULTS.integrations),
112
115
  build: z.object({
113
116
  format: z.union([z.literal("file"), z.literal("directory"), z.literal("preserve")]).optional().default(ASTRO_CONFIG_DEFAULTS.build.format),
114
117
  client: z.string().optional().default(ASTRO_CONFIG_DEFAULTS.build.client).transform((val) => new URL(val)),
@@ -132,8 +135,8 @@ const AstroConfigSchema = z.object({
132
135
  port: z.number().optional().default(ASTRO_CONFIG_DEFAULTS.server.port),
133
136
  headers: z.custom().optional(),
134
137
  allowedHosts: z.union([z.array(z.string()), z.literal(true)]).optional().default(ASTRO_CONFIG_DEFAULTS.server.allowedHosts)
135
- }).prefault({})
136
- ),
138
+ })
139
+ ).prefault({}),
137
140
  redirects: z.record(
138
141
  z.string(),
139
142
  z.union([
@@ -307,7 +310,7 @@ const AstroConfigSchema = z.object({
307
310
  clientPrerender: z.boolean().optional().default(ASTRO_CONFIG_DEFAULTS.experimental.clientPrerender),
308
311
  contentIntellisense: z.boolean().optional().default(ASTRO_CONFIG_DEFAULTS.experimental.contentIntellisense),
309
312
  chromeDevtoolsWorkspace: z.boolean().optional().default(ASTRO_CONFIG_DEFAULTS.experimental.chromeDevtoolsWorkspace),
310
- svgo: z.union([z.boolean(), z.custom((value) => value && typeof value === "object")]).optional().default(ASTRO_CONFIG_DEFAULTS.experimental.svgo),
313
+ svgOptimizer: SvgOptimizerSchema.optional(),
311
314
  cache: CacheSchema.optional(),
312
315
  routeRules: RouteRulesSchema.optional(),
313
316
  rustCompiler: z.boolean().optional().default(ASTRO_CONFIG_DEFAULTS.experimental.rustCompiler),
@@ -315,7 +318,11 @@ const AstroConfigSchema = z.object({
315
318
  enabled: z.boolean().optional().prefault(false),
316
319
  poolSize: z.number().int().nonnegative().optional(),
317
320
  contentCache: z.boolean().optional()
318
- }).optional().prefault(ASTRO_CONFIG_DEFAULTS.experimental.queuedRendering)
321
+ }).optional().prefault(ASTRO_CONFIG_DEFAULTS.experimental.queuedRendering),
322
+ logger: z.object({
323
+ entrypoint: z.string(),
324
+ config: z.record(z.string(), z.any()).optional()
325
+ }).optional()
319
326
  }).prefault({}),
320
327
  legacy: z.object({
321
328
  collectionsBackwardsCompat: z.boolean().optional().default(false)
@@ -10,10 +10,10 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
10
10
  name: z.ZodString;
11
11
  hooks: z.ZodDefault<z.ZodObject<{}, z.core.$loose>>;
12
12
  }, z.core.$strip>>;
13
- integrations: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodArray<z.ZodObject<{
13
+ integrations: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodArray<z.ZodObject<{
14
14
  name: z.ZodString;
15
15
  hooks: z.ZodDefault<z.ZodObject<{}, z.core.$loose>>;
16
- }, z.core.$strip>>>>;
16
+ }, z.core.$strip>>>>>;
17
17
  redirects: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
18
18
  status: z.ZodUnion<readonly [z.ZodLiteral<300>, z.ZodLiteral<301>, z.ZodLiteral<302>, z.ZodLiteral<303>, z.ZodLiteral<304>, z.ZodLiteral<307>, z.ZodLiteral<308>]>;
19
19
  destination: z.ZodString;
@@ -384,7 +384,10 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
384
384
  clientPrerender: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
385
385
  contentIntellisense: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
386
386
  chromeDevtoolsWorkspace: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
387
- svgo: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCustom<import("svgo").Config, import("svgo").Config>]>>>;
387
+ svgOptimizer: z.ZodOptional<z.ZodObject<{
388
+ name: z.ZodString;
389
+ optimize: z.ZodCustom<(contents: string) => string | Promise<string>, (contents: string) => string | Promise<string>>;
390
+ }, z.core.$strip>>;
388
391
  cache: z.ZodOptional<z.ZodObject<{
389
392
  provider: z.ZodOptional<z.ZodObject<{
390
393
  config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
@@ -403,13 +406,17 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
403
406
  poolSize: z.ZodOptional<z.ZodNumber>;
404
407
  contentCache: z.ZodOptional<z.ZodBoolean>;
405
408
  }, z.core.$strip>>>;
409
+ logger: z.ZodOptional<z.ZodObject<{
410
+ entrypoint: z.ZodString;
411
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
412
+ }, z.core.$strip>>;
406
413
  }, z.core.$strict>>;
407
414
  legacy: z.ZodPrefault<z.ZodObject<{
408
415
  collectionsBackwardsCompat: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
409
416
  }, z.core.$strip>>;
410
417
  root: z.ZodPipe<z.ZodDefault<z.ZodString>, z.ZodTransform<import("url").URL, string>>;
411
418
  srcDir: z.ZodPipe<z.ZodDefault<z.ZodString>, z.ZodTransform<import("url").URL, string>>;
412
- compressHTML: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
419
+ compressHTML: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"jsx">]>>>;
413
420
  publicDir: z.ZodPipe<z.ZodDefault<z.ZodString>, z.ZodTransform<import("url").URL, string>>;
414
421
  outDir: z.ZodPipe<z.ZodDefault<z.ZodString>, z.ZodTransform<import("url").URL, string>>;
415
422
  cacheDir: z.ZodPipe<z.ZodDefault<z.ZodString>, z.ZodTransform<import("url").URL, string>>;
@@ -430,14 +437,13 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
430
437
  }>>>;
431
438
  concurrency: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
432
439
  }, z.core.$strip>>>;
433
- server: z.ZodPipe<z.ZodTransform<any, unknown>, z.ZodPrefault<z.ZodOptional<z.ZodObject<{
440
+ server: z.ZodPrefault<z.ZodPipe<z.ZodTransform<any, unknown>, z.ZodObject<{
434
441
  open: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
435
442
  host: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
436
443
  port: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
437
444
  headers: z.ZodOptional<z.ZodCustom<OutgoingHttpHeaders, OutgoingHttpHeaders>>;
438
- streaming: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
439
445
  allowedHosts: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<true>]>>>;
440
- }, z.core.$strip>>>>;
446
+ }, z.core.$strip>>>;
441
447
  }, z.core.$strip>, z.ZodTransform<{
442
448
  base: string;
443
449
  trailingSlash: "never" | "ignore" | "always";
@@ -570,13 +576,16 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
570
576
  clientPrerender: boolean;
571
577
  contentIntellisense: boolean;
572
578
  chromeDevtoolsWorkspace: boolean;
573
- svgo: boolean | import("svgo").Config;
574
579
  rustCompiler: boolean;
575
580
  queuedRendering: {
576
581
  enabled: boolean;
577
582
  poolSize?: number | undefined;
578
583
  contentCache?: boolean | undefined;
579
584
  };
585
+ svgOptimizer?: {
586
+ name: string;
587
+ optimize: (contents: string) => string | Promise<string>;
588
+ } | undefined;
580
589
  cache?: {
581
590
  provider?: {
582
591
  entrypoint: string | URL;
@@ -589,13 +598,17 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
589
598
  swr?: number | undefined;
590
599
  tags?: string[] | undefined;
591
600
  }> | undefined;
601
+ logger?: {
602
+ entrypoint: string;
603
+ config?: Record<string, any> | undefined;
604
+ } | undefined;
592
605
  };
593
606
  legacy: {
594
607
  collectionsBackwardsCompat: boolean;
595
608
  };
596
609
  root: import("url").URL;
597
610
  srcDir: import("url").URL;
598
- compressHTML: boolean;
611
+ compressHTML: boolean | "jsx";
599
612
  publicDir: import("url").URL;
600
613
  outDir: import("url").URL;
601
614
  cacheDir: import("url").URL;
@@ -616,7 +629,6 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
616
629
  open: string | boolean;
617
630
  host: string | boolean;
618
631
  port: number;
619
- streaming: boolean;
620
632
  allowedHosts: true | string[];
621
633
  headers?: OutgoingHttpHeaders | undefined;
622
634
  };
@@ -812,13 +824,16 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
812
824
  clientPrerender: boolean;
813
825
  contentIntellisense: boolean;
814
826
  chromeDevtoolsWorkspace: boolean;
815
- svgo: boolean | import("svgo").Config;
816
827
  rustCompiler: boolean;
817
828
  queuedRendering: {
818
829
  enabled: boolean;
819
830
  poolSize?: number | undefined;
820
831
  contentCache?: boolean | undefined;
821
832
  };
833
+ svgOptimizer?: {
834
+ name: string;
835
+ optimize: (contents: string) => string | Promise<string>;
836
+ } | undefined;
822
837
  cache?: {
823
838
  provider?: {
824
839
  entrypoint: string | URL;
@@ -831,13 +846,17 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
831
846
  swr?: number | undefined;
832
847
  tags?: string[] | undefined;
833
848
  }> | undefined;
849
+ logger?: {
850
+ entrypoint: string;
851
+ config?: Record<string, any> | undefined;
852
+ } | undefined;
834
853
  };
835
854
  legacy: {
836
855
  collectionsBackwardsCompat: boolean;
837
856
  };
838
857
  root: import("url").URL;
839
858
  srcDir: import("url").URL;
840
- compressHTML: boolean;
859
+ compressHTML: boolean | "jsx";
841
860
  publicDir: import("url").URL;
842
861
  outDir: import("url").URL;
843
862
  cacheDir: import("url").URL;
@@ -858,7 +877,6 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
858
877
  open: string | boolean;
859
878
  host: string | boolean;
860
879
  port: number;
861
- streaming: boolean;
862
880
  allowedHosts: true | string[];
863
881
  headers?: OutgoingHttpHeaders | undefined;
864
882
  };
@@ -16,7 +16,7 @@ function createRelativeSchema(cmd, fileProtocolRoot) {
16
16
  const AstroConfigRelativeSchema = AstroConfigSchema.extend({
17
17
  root: z.string().default(ASTRO_CONFIG_DEFAULTS.root).transform((val) => resolveDirAsUrl(val, fileProtocolRoot)),
18
18
  srcDir: z.string().default(ASTRO_CONFIG_DEFAULTS.srcDir).transform((val) => resolveDirAsUrl(val, fileProtocolRoot)),
19
- compressHTML: z.boolean().optional().default(ASTRO_CONFIG_DEFAULTS.compressHTML),
19
+ compressHTML: z.union([z.boolean(), z.literal("jsx")]).optional().default(ASTRO_CONFIG_DEFAULTS.compressHTML),
20
20
  publicDir: z.string().default(ASTRO_CONFIG_DEFAULTS.publicDir).transform((val) => resolveDirAsUrl(val, fileProtocolRoot)),
21
21
  outDir: z.string().default(ASTRO_CONFIG_DEFAULTS.outDir).transform((val) => resolveDirAsUrl(val, fileProtocolRoot)),
22
22
  cacheDir: z.string().default(ASTRO_CONFIG_DEFAULTS.cacheDir).transform((val) => resolveDirAsUrl(val, fileProtocolRoot)),
@@ -59,10 +59,9 @@ function createRelativeSchema(cmd, fileProtocolRoot) {
59
59
  host: z.union([z.string(), z.boolean()]).optional().default(ASTRO_CONFIG_DEFAULTS.server.host),
60
60
  port: z.number().optional().default(ASTRO_CONFIG_DEFAULTS.server.port),
61
61
  headers: z.custom().optional(),
62
- streaming: z.boolean().optional().default(true),
63
62
  allowedHosts: z.union([z.array(z.string()), z.literal(true)]).optional().default(ASTRO_CONFIG_DEFAULTS.server.allowedHosts)
64
- }).optional().prefault({})
65
- )
63
+ })
64
+ ).prefault({})
66
65
  }).transform((config) => {
67
66
  if (config.outDir.toString() !== resolveDirAsUrl(ASTRO_CONFIG_DEFAULTS.outDir, fileProtocolRoot).toString()) {
68
67
  const outDirPath = fileURLToPath(config.outDir);
@@ -138,7 +138,8 @@ function createBaseSettings(config, logLevel) {
138
138
  fontResources: /* @__PURE__ */ new Set(),
139
139
  styleHashes: []
140
140
  },
141
- logLevel: logLevel ?? "info"
141
+ logLevel: logLevel ?? "info",
142
+ fontsHttpServer: null
142
143
  };
143
144
  }
144
145
  async function createSettings(config, logLevel, cwd) {
@@ -1,23 +1,9 @@
1
1
  import { pathToFileURL } from "node:url";
2
- import {
3
- createServer,
4
- isRunnableDevEnvironment
5
- } from "vite";
2
+ import { isRunnableDevEnvironment } from "vite";
6
3
  import loadFallbackPlugin from "../../vite-plugin-load-fallback/index.js";
7
4
  import { debug } from "../logger/core.js";
8
5
  import { ASTRO_VITE_ENVIRONMENT_NAMES } from "../constants.js";
9
- async function createViteServer(root, fs) {
10
- const viteServer = await createServer({
11
- configFile: false,
12
- server: { middlewareMode: true, hmr: false, watch: null, ws: false },
13
- optimizeDeps: { noDiscovery: true },
14
- clearScreen: false,
15
- appType: "custom",
16
- ssr: { external: true },
17
- plugins: [loadFallbackPlugin({ fs, root: pathToFileURL(root) })]
18
- });
19
- return viteServer;
20
- }
6
+ import { createMinimalViteDevServer } from "../createMinimalViteDevServer.js";
21
7
  async function loadConfigWithVite({
22
8
  configPath,
23
9
  fs,
@@ -36,7 +22,8 @@ async function loadConfigWithVite({
36
22
  }
37
23
  let server;
38
24
  try {
39
- server = await createViteServer(root, fs);
25
+ const plugins = loadFallbackPlugin({ fs, root: pathToFileURL(root) });
26
+ server = await createMinimalViteDevServer(plugins);
40
27
  if (isRunnableDevEnvironment(server.environments[ASTRO_VITE_ENVIRONMENT_NAMES.ssr])) {
41
28
  const environment = server.environments[ASTRO_VITE_ENVIRONMENT_NAMES.ssr];
42
29
  const mod = await environment.runner.import(configPath);
@@ -1,4 +1,4 @@
1
- const ASTRO_VERSION = "6.1.10";
1
+ const ASTRO_VERSION = "6.2.1";
2
2
  const ASTRO_GENERATOR = `Astro v${ASTRO_VERSION}`;
3
3
  const REROUTE_DIRECTIVE_HEADER = "X-Astro-Reroute";
4
4
  const REWRITE_DIRECTIVE_HEADER_KEY = "X-Astro-Rewrite";
@@ -0,0 +1,8 @@
1
+ import { type ViteDevServer, type Plugin } from 'vite';
2
+ /**
3
+ * Creates a minimal dev server with a list of plugins. Use this instance for a one-shot usage.
4
+ *
5
+ * NOTE: This is intentionally in its own module to avoid pulling `vite`'s heavy `createServer`
6
+ * (and transitively Rollup) into every file that imports from `viteUtils.ts`.
7
+ */
8
+ export declare function createMinimalViteDevServer(plugins?: Plugin[]): Promise<ViteDevServer>;
@@ -0,0 +1,15 @@
1
+ import { createServer } from "vite";
2
+ async function createMinimalViteDevServer(plugins = []) {
3
+ return await createServer({
4
+ configFile: false,
5
+ server: { middlewareMode: true, hmr: false, watch: null, ws: false },
6
+ optimizeDeps: { noDiscovery: true },
7
+ clearScreen: false,
8
+ appType: "custom",
9
+ ssr: { external: true },
10
+ plugins
11
+ });
12
+ }
13
+ export {
14
+ createMinimalViteDevServer
15
+ };
@@ -37,7 +37,7 @@ async function dev(inlineConfig) {
37
37
  await telemetry.record([]);
38
38
  const restart = await createContainerWithAutomaticRestart({ inlineConfig, fs });
39
39
  const logger = restart.container.logger;
40
- const currentVersion = "6.1.10";
40
+ const currentVersion = "6.2.1";
41
41
  const isPrerelease = currentVersion.includes("-");
42
42
  if (!isPrerelease) {
43
43
  try {
@@ -11,7 +11,7 @@ import { clearCrawlCache, createVite } from "../create-vite.js";
11
11
  import { collectErrorMetadata } from "../errors/dev/utils.js";
12
12
  import { isAstroConfigZodError } from "../errors/errors.js";
13
13
  import { createSafeError } from "../errors/index.js";
14
- import { createNodeLogger } from "../logger/node.js";
14
+ import { loadOrCreateNodeLogger } from "../logger/load.js";
15
15
  import { formatErrorMessage, warnIfCspWithShiki } from "../messages/runtime.js";
16
16
  import { createRoutesList } from "../routing/create-manifest.js";
17
17
  import { createContainer } from "./container.js";
@@ -97,8 +97,8 @@ async function createContainerWithAutomaticRestart({
97
97
  inlineConfig,
98
98
  fs
99
99
  }) {
100
- const logger = createNodeLogger(inlineConfig ?? {});
101
100
  const { userConfig, astroConfig } = await resolveConfig(inlineConfig ?? {}, "dev", fs);
101
+ const logger = await loadOrCreateNodeLogger(astroConfig, inlineConfig ?? {});
102
102
  warnIfCspWithShiki(astroConfig, logger);
103
103
  telemetry.record(eventCliSession("dev", userConfig));
104
104
  const settings = await createSettings(