astro 6.1.9 → 6.2.0

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 (135) 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/manifest.js +2 -0
  49. package/dist/core/app/pipeline.js +2 -2
  50. package/dist/core/app/types.d.ts +10 -3
  51. package/dist/core/base-pipeline.d.ts +9 -2
  52. package/dist/core/base-pipeline.js +17 -0
  53. package/dist/core/build/app.js +2 -1
  54. package/dist/core/build/index.js +13 -2
  55. package/dist/core/build/internal.d.ts +1 -0
  56. package/dist/core/build/internal.js +1 -0
  57. package/dist/core/build/pipeline.js +1 -1
  58. package/dist/core/build/plugins/plugin-manifest.js +6 -1
  59. package/dist/core/cache/types.d.ts +2 -0
  60. package/dist/core/config/schemas/base.d.ts +12 -4
  61. package/dist/core/config/schemas/base.js +11 -4
  62. package/dist/core/config/schemas/relative.d.ts +27 -6
  63. package/dist/core/config/schemas/relative.js +1 -1
  64. package/dist/core/config/settings.js +2 -1
  65. package/dist/core/config/vite-load.js +4 -17
  66. package/dist/core/constants.js +1 -1
  67. package/dist/core/createMinimalViteDevServer.d.ts +8 -0
  68. package/dist/core/createMinimalViteDevServer.js +15 -0
  69. package/dist/core/dev/dev.js +2 -2
  70. package/dist/core/dev/restart.js +2 -2
  71. package/dist/core/encryption.d.ts +6 -2
  72. package/dist/core/encryption.js +12 -18
  73. package/dist/core/errors/errors-data.d.ts +48 -2
  74. package/dist/core/errors/errors-data.js +26 -2
  75. package/dist/core/logger/config.d.ts +6 -0
  76. package/dist/core/logger/config.js +0 -0
  77. package/dist/core/logger/core.d.ts +33 -13
  78. package/dist/core/logger/core.js +50 -5
  79. package/dist/core/logger/handlers.d.ts +60 -0
  80. package/dist/core/logger/handlers.js +81 -0
  81. package/dist/core/logger/impls/compose.d.ts +2 -0
  82. package/dist/core/logger/impls/compose.js +26 -0
  83. package/dist/core/logger/impls/console.d.ts +9 -0
  84. package/dist/core/logger/impls/console.js +38 -0
  85. package/dist/core/logger/impls/json.d.ts +15 -0
  86. package/dist/core/logger/impls/json.js +42 -0
  87. package/dist/core/logger/impls/node.d.ts +7 -0
  88. package/dist/core/logger/impls/node.js +40 -0
  89. package/dist/core/logger/load.d.ts +11 -0
  90. package/dist/core/logger/load.js +88 -0
  91. package/dist/core/logger/node.d.ts +0 -5
  92. package/dist/core/logger/node.js +1 -39
  93. package/dist/core/logger/public.d.ts +17 -0
  94. package/dist/core/logger/public.js +7 -0
  95. package/dist/core/messages/runtime.js +1 -1
  96. package/dist/core/middleware/index.js +2 -1
  97. package/dist/core/preview/index.js +4 -3
  98. package/dist/core/render-context.js +35 -1
  99. package/dist/core/server-islands/endpoint.js +7 -3
  100. package/dist/core/sync/index.js +2 -2
  101. package/dist/core/wait-until.d.ts +1 -0
  102. package/dist/core/wait-until.js +0 -0
  103. package/dist/manifest/serialized.js +6 -1
  104. package/dist/runtime/client/dev-toolbar/apps/audit/index.js +4 -1
  105. package/dist/runtime/compiler/index.d.ts +1 -1
  106. package/dist/runtime/compiler/index.js +4 -0
  107. package/dist/runtime/server/astro-global.js +3 -0
  108. package/dist/runtime/server/index.d.ts +1 -0
  109. package/dist/runtime/server/index.js +3 -0
  110. package/dist/runtime/server/render/common.js +16 -0
  111. package/dist/runtime/server/render/instruction.d.ts +7 -1
  112. package/dist/runtime/server/render/server-islands.js +7 -3
  113. package/dist/runtime/server/render/template-depth.d.ts +13 -0
  114. package/dist/runtime/server/render/template-depth.js +11 -0
  115. package/dist/toolbar/vite-plugin-dev-toolbar.js +23 -1
  116. package/dist/types/astro.d.ts +2 -0
  117. package/dist/types/public/common.d.ts +1 -0
  118. package/dist/types/public/config.d.ts +54 -42
  119. package/dist/types/public/context.d.ts +17 -0
  120. package/dist/types/public/index.d.ts +1 -0
  121. package/dist/types/public/internal.d.ts +7 -1
  122. package/dist/types/public/preview.d.ts +5 -0
  123. package/dist/vite-plugin-app/app.d.ts +0 -1
  124. package/dist/vite-plugin-app/app.js +0 -2
  125. package/dist/vite-plugin-app/createAstroServerApp.d.ts +1 -1
  126. package/dist/vite-plugin-app/createAstroServerApp.js +2 -6
  127. package/dist/vite-plugin-environment/index.js +2 -1
  128. package/dist/vite-plugin-load-fallback/index.d.ts +1 -1
  129. package/dist/vite-plugin-load-fallback/index.js +2 -5
  130. package/package.json +12 -7
  131. package/dist/assets/utils/svg.d.ts +0 -3
  132. package/dist/core/app/logging.d.ts +0 -3
  133. package/dist/core/app/logging.js +0 -11
  134. package/dist/core/logger/console.d.ts +0 -2
  135. 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
1
  import type { OutgoingHttpHeaders } from 'node:http';
2
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>>;
@@ -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>>;
@@ -6,6 +6,7 @@ import { EnvSchema } from "../../../env/schema.js";
6
6
  import { allowedDirectivesSchema, cspAlgorithmSchema, cspHashSchema } from "../../csp/config.js";
7
7
  import { CacheSchema, RouteRulesSchema } from "../../cache/config.js";
8
8
  import { SessionSchema } from "../../session/config.js";
9
+ import { SvgOptimizerSchema } from "../../../assets/svg/config.js";
9
10
  const ASTRO_CONFIG_DEFAULTS = {
10
11
  root: ".",
11
12
  srcDir: "./src",
@@ -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,7 +98,7 @@ 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", {
@@ -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)
@@ -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>>;
@@ -570,13 +577,16 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
570
577
  clientPrerender: boolean;
571
578
  contentIntellisense: boolean;
572
579
  chromeDevtoolsWorkspace: boolean;
573
- svgo: boolean | import("svgo").Config;
574
580
  rustCompiler: boolean;
575
581
  queuedRendering: {
576
582
  enabled: boolean;
577
583
  poolSize?: number | undefined;
578
584
  contentCache?: boolean | undefined;
579
585
  };
586
+ svgOptimizer?: {
587
+ name: string;
588
+ optimize: (contents: string) => string | Promise<string>;
589
+ } | undefined;
580
590
  cache?: {
581
591
  provider?: {
582
592
  entrypoint: string | URL;
@@ -589,13 +599,17 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
589
599
  swr?: number | undefined;
590
600
  tags?: string[] | undefined;
591
601
  }> | undefined;
602
+ logger?: {
603
+ entrypoint: string;
604
+ config?: Record<string, any> | undefined;
605
+ } | undefined;
592
606
  };
593
607
  legacy: {
594
608
  collectionsBackwardsCompat: boolean;
595
609
  };
596
610
  root: import("url").URL;
597
611
  srcDir: import("url").URL;
598
- compressHTML: boolean;
612
+ compressHTML: boolean | "jsx";
599
613
  publicDir: import("url").URL;
600
614
  outDir: import("url").URL;
601
615
  cacheDir: import("url").URL;
@@ -812,13 +826,16 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
812
826
  clientPrerender: boolean;
813
827
  contentIntellisense: boolean;
814
828
  chromeDevtoolsWorkspace: boolean;
815
- svgo: boolean | import("svgo").Config;
816
829
  rustCompiler: boolean;
817
830
  queuedRendering: {
818
831
  enabled: boolean;
819
832
  poolSize?: number | undefined;
820
833
  contentCache?: boolean | undefined;
821
834
  };
835
+ svgOptimizer?: {
836
+ name: string;
837
+ optimize: (contents: string) => string | Promise<string>;
838
+ } | undefined;
822
839
  cache?: {
823
840
  provider?: {
824
841
  entrypoint: string | URL;
@@ -831,13 +848,17 @@ export declare function createRelativeSchema(cmd: string, fileProtocolRoot: stri
831
848
  swr?: number | undefined;
832
849
  tags?: string[] | undefined;
833
850
  }> | undefined;
851
+ logger?: {
852
+ entrypoint: string;
853
+ config?: Record<string, any> | undefined;
854
+ } | undefined;
834
855
  };
835
856
  legacy: {
836
857
  collectionsBackwardsCompat: boolean;
837
858
  };
838
859
  root: import("url").URL;
839
860
  srcDir: import("url").URL;
840
- compressHTML: boolean;
861
+ compressHTML: boolean | "jsx";
841
862
  publicDir: import("url").URL;
842
863
  outDir: import("url").URL;
843
864
  cacheDir: import("url").URL;
@@ -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)),
@@ -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.9";
1
+ const ASTRO_VERSION = "6.2.0";
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.9";
40
+ const currentVersion = "6.2.0";
41
41
  const isPrerelease = currentVersion.includes("-");
42
42
  if (!isPrerelease) {
43
43
  try {
@@ -89,7 +89,7 @@ async function dev(inlineConfig) {
89
89
  });
90
90
  contentLayer.watchContentConfig();
91
91
  await contentLayer.sync();
92
- } else {
92
+ } else if (config.status !== "does-not-exist") {
93
93
  logger.warn("content", "Content config not loaded");
94
94
  }
95
95
  const devServerAddressInfo = await startContainer(restart.container);
@@ -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(
@@ -22,12 +22,16 @@ export declare function encodeKey(key: CryptoKey): Promise<string>;
22
22
  export declare function decodeKey(encoded: string): Promise<CryptoKey>;
23
23
  /**
24
24
  * Using a CryptoKey, encrypt a string into a base64 string.
25
+ * @param additionalData Optional authenticated context (e.g. "props:ComponentName") that is
26
+ * verified during decryption but not included in the ciphertext. Both sides must agree on
27
+ * the same value or decryption will fail.
25
28
  */
26
- export declare function encryptString(key: CryptoKey, raw: string): Promise<string>;
29
+ export declare function encryptString(key: CryptoKey, raw: string, additionalData?: string): Promise<string>;
27
30
  /**
28
31
  * Takes a base64 encoded string, decodes it and returns the decrypted text.
32
+ * @param additionalData Must match the value used during encryption, or decryption will fail.
29
33
  */
30
- export declare function decryptString(key: CryptoKey, encoded: string): Promise<string>;
34
+ export declare function decryptString(key: CryptoKey, encoded: string, additionalData?: string): Promise<string>;
31
35
  /**
32
36
  * Generates an SHA-256 digest of the given string.
33
37
  * @param {string} data The string to hash.
@@ -43,30 +43,24 @@ async function decodeKey(encoded) {
43
43
  const encoder = new TextEncoder();
44
44
  const decoder = new TextDecoder();
45
45
  const IV_LENGTH = 24;
46
- async function encryptString(key, raw) {
46
+ async function encryptString(key, raw, additionalData) {
47
47
  const iv = crypto.getRandomValues(new Uint8Array(IV_LENGTH / 2));
48
48
  const data = encoder.encode(raw);
49
- const buffer = await crypto.subtle.encrypt(
50
- {
51
- name: ALGORITHM,
52
- iv
53
- },
54
- key,
55
- data
56
- );
49
+ const params = { name: ALGORITHM, iv };
50
+ if (additionalData) {
51
+ params.additionalData = encoder.encode(additionalData);
52
+ }
53
+ const buffer = await crypto.subtle.encrypt(params, key, data);
57
54
  return encodeHexUpperCase(iv) + encodeBase64(new Uint8Array(buffer));
58
55
  }
59
- async function decryptString(key, encoded) {
56
+ async function decryptString(key, encoded, additionalData) {
60
57
  const iv = decodeHex(encoded.slice(0, IV_LENGTH));
61
58
  const dataArray = decodeBase64(encoded.slice(IV_LENGTH));
62
- const decryptedBuffer = await crypto.subtle.decrypt(
63
- {
64
- name: ALGORITHM,
65
- iv
66
- },
67
- key,
68
- dataArray
69
- );
59
+ const params = { name: ALGORITHM, iv };
60
+ if (additionalData) {
61
+ params.additionalData = encoder.encode(additionalData);
62
+ }
63
+ const decryptedBuffer = await crypto.subtle.decrypt(params, key, dataArray);
70
64
  const decryptedString = decoder.decode(decryptedBuffer);
71
65
  return decryptedString;
72
66
  }
@@ -539,12 +539,12 @@ export declare const UnsupportedImageConversion: {
539
539
  };
540
540
  /**
541
541
  * @docs
542
- * @message An error occurred while optimizing the SVG file with SVGO.
542
+ * @message An error occurred while optimizing the SVG file with the optimizer.
543
543
  */
544
544
  export declare const CannotOptimizeSvg: {
545
545
  name: string;
546
546
  title: string;
547
- message: (path: string) => string;
547
+ message: (path: string, name: string) => string;
548
548
  hint: string;
549
549
  };
550
550
  /**
@@ -1314,6 +1314,29 @@ export declare const FontFamilyNotFound: {
1314
1314
  message: (family: string) => string;
1315
1315
  hint: string;
1316
1316
  };
1317
+ /**
1318
+ * @docs
1319
+ * @description
1320
+ * Font file URL not found
1321
+ * @message
1322
+ * The URL passed to the `experimental_getFontFileURL()` function is invalid.
1323
+ */
1324
+ export declare const FontFileUrlNotFound: {
1325
+ name: string;
1326
+ title: string;
1327
+ message: (url: string) => string;
1328
+ hint: string;
1329
+ };
1330
+ /**
1331
+ * @docs
1332
+ * @description
1333
+ * `experimental_getFontFileURL()` requires the request URL with on-demand rendering.
1334
+ */
1335
+ export declare const MissingGetFontFileRequestUrl: {
1336
+ name: string;
1337
+ title: string;
1338
+ hint: string;
1339
+ };
1317
1340
  /**
1318
1341
  * @docs
1319
1342
  * @description
@@ -1326,6 +1349,29 @@ export declare const UnavailableAstroGlobal: {
1326
1349
  title: string;
1327
1350
  message: (name: string) => string;
1328
1351
  };
1352
+ /**
1353
+ * @docs
1354
+ * @description
1355
+ * Unable to load the logger.
1356
+ * @message
1357
+ * Couldn't load the logger at the given path.
1358
+ */
1359
+ export declare const UnableToLoadLogger: {
1360
+ name: string;
1361
+ title: string;
1362
+ message: (path: string) => string;
1363
+ };
1364
+ /**
1365
+ * @docs
1366
+ * @description
1367
+ * The configuration of the logger is not serializable.
1368
+ * @message
1369
+ * The configuration of the logger is not serializable.
1370
+ */
1371
+ export declare const LoggerConfigurationNotSerializable: {
1372
+ name: string;
1373
+ title: string;
1374
+ };
1329
1375
  /**
1330
1376
  * @docs
1331
1377
  * @kind heading