astro 6.1.10 → 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.
- package/client.d.ts +1 -0
- package/dist/actions/runtime/types.d.ts +1 -1
- package/dist/assets/fonts/constants.d.ts +2 -0
- package/dist/assets/fonts/constants.js +4 -0
- package/dist/assets/fonts/core/create-get-font-file-url.d.ts +2 -0
- package/dist/assets/fonts/core/create-get-font-file-url.js +23 -0
- package/dist/assets/fonts/core/font-file-middleware.d.ts +21 -0
- package/dist/assets/fonts/core/font-file-middleware.js +59 -0
- package/dist/assets/fonts/definitions.d.ts +13 -0
- package/dist/assets/fonts/infra/build-url-resolver.d.ts +1 -0
- package/dist/assets/fonts/infra/build-url-resolver.js +7 -1
- package/dist/assets/fonts/infra/dev-url-resolver.d.ts +1 -0
- package/dist/assets/fonts/infra/dev-url-resolver.js +7 -1
- package/dist/assets/fonts/infra/remote-runtime-font-file-url-resolver.d.ts +19 -0
- package/dist/assets/fonts/infra/remote-runtime-font-file-url-resolver.js +27 -0
- package/dist/assets/fonts/infra/ssr-runtime-font-file-url-resolver.d.ts +12 -0
- package/dist/assets/fonts/infra/ssr-runtime-font-file-url-resolver.js +25 -0
- package/dist/assets/fonts/runtime.d.ts +1 -0
- package/dist/assets/fonts/runtime.js +4 -0
- package/dist/assets/fonts/vite-plugin-fonts.js +88 -49
- package/dist/assets/index.d.ts +1 -1
- package/dist/assets/index.js +3 -2
- package/dist/assets/svg/config.d.ts +5 -0
- package/dist/assets/svg/config.js +8 -0
- package/dist/assets/svg/svgo.d.ts +4 -0
- package/dist/assets/svg/svgo.js +10 -0
- package/dist/assets/svg/types.d.ts +4 -0
- package/dist/assets/svg/types.js +0 -0
- package/dist/assets/svg/utils.d.ts +3 -0
- package/dist/assets/{utils/svg.js → svg/utils.js} +11 -14
- package/dist/assets/vite-plugin-assets.js +8 -4
- package/dist/cli/flags.js +19 -9
- package/dist/cli/help/index.js +2 -1
- package/dist/cli/infra/build-time-astro-version-provider.js +1 -1
- package/dist/cli/preferences/index.js +3 -2
- package/dist/config/entrypoint.d.ts +2 -0
- package/dist/config/entrypoint.js +4 -0
- package/dist/config/index.js +9 -7
- package/dist/container/index.js +4 -7
- package/dist/content/content-layer.js +3 -3
- package/dist/core/app/base.d.ts +18 -4
- package/dist/core/app/base.js +29 -12
- package/dist/core/app/dev/app.d.ts +0 -1
- package/dist/core/app/dev/app.js +0 -2
- package/dist/core/app/entrypoints/index.d.ts +1 -1
- package/dist/core/app/entrypoints/index.js +1 -1
- package/dist/core/app/entrypoints/virtual/dev.js +1 -1
- package/dist/core/app/pipeline.js +2 -2
- package/dist/core/app/types.d.ts +10 -3
- package/dist/core/base-pipeline.d.ts +9 -2
- package/dist/core/base-pipeline.js +17 -0
- package/dist/core/build/app.js +2 -1
- package/dist/core/build/index.js +13 -2
- package/dist/core/build/internal.d.ts +1 -0
- package/dist/core/build/internal.js +1 -0
- package/dist/core/build/pipeline.js +1 -1
- package/dist/core/build/plugins/plugin-manifest.js +6 -1
- package/dist/core/cache/types.d.ts +2 -0
- package/dist/core/config/schemas/base.d.ts +12 -4
- package/dist/core/config/schemas/base.js +11 -4
- package/dist/core/config/schemas/relative.d.ts +27 -6
- package/dist/core/config/schemas/relative.js +1 -1
- package/dist/core/config/settings.js +2 -1
- package/dist/core/config/vite-load.js +4 -17
- package/dist/core/constants.js +1 -1
- package/dist/core/createMinimalViteDevServer.d.ts +8 -0
- package/dist/core/createMinimalViteDevServer.js +15 -0
- package/dist/core/dev/dev.js +1 -1
- package/dist/core/dev/restart.js +2 -2
- package/dist/core/errors/errors-data.d.ts +48 -2
- package/dist/core/errors/errors-data.js +26 -2
- package/dist/core/logger/config.d.ts +6 -0
- package/dist/core/logger/config.js +0 -0
- package/dist/core/logger/core.d.ts +33 -13
- package/dist/core/logger/core.js +50 -5
- package/dist/core/logger/handlers.d.ts +60 -0
- package/dist/core/logger/handlers.js +81 -0
- package/dist/core/logger/impls/compose.d.ts +2 -0
- package/dist/core/logger/impls/compose.js +26 -0
- package/dist/core/logger/impls/console.d.ts +9 -0
- package/dist/core/logger/impls/console.js +38 -0
- package/dist/core/logger/impls/json.d.ts +15 -0
- package/dist/core/logger/impls/json.js +42 -0
- package/dist/core/logger/impls/node.d.ts +7 -0
- package/dist/core/logger/impls/node.js +40 -0
- package/dist/core/logger/load.d.ts +11 -0
- package/dist/core/logger/load.js +88 -0
- package/dist/core/logger/node.d.ts +0 -5
- package/dist/core/logger/node.js +1 -39
- package/dist/core/logger/public.d.ts +17 -0
- package/dist/core/logger/public.js +7 -0
- package/dist/core/messages/runtime.js +1 -1
- package/dist/core/middleware/index.js +2 -1
- package/dist/core/preview/index.js +4 -3
- package/dist/core/render-context.js +35 -1
- package/dist/core/sync/index.js +2 -2
- package/dist/core/wait-until.d.ts +1 -0
- package/dist/core/wait-until.js +0 -0
- package/dist/manifest/serialized.js +6 -1
- package/dist/runtime/compiler/index.d.ts +1 -1
- package/dist/runtime/compiler/index.js +4 -0
- package/dist/runtime/server/astro-global.js +3 -0
- package/dist/runtime/server/index.d.ts +1 -0
- package/dist/runtime/server/index.js +3 -0
- package/dist/runtime/server/render/common.js +16 -0
- package/dist/runtime/server/render/instruction.d.ts +7 -1
- package/dist/runtime/server/render/template-depth.d.ts +13 -0
- package/dist/runtime/server/render/template-depth.js +11 -0
- package/dist/types/astro.d.ts +2 -0
- package/dist/types/public/common.d.ts +1 -0
- package/dist/types/public/config.d.ts +54 -42
- package/dist/types/public/context.d.ts +17 -0
- package/dist/types/public/index.d.ts +1 -0
- package/dist/types/public/internal.d.ts +7 -1
- package/dist/types/public/preview.d.ts +5 -0
- package/dist/vite-plugin-app/app.d.ts +0 -1
- package/dist/vite-plugin-app/app.js +0 -2
- package/dist/vite-plugin-app/createAstroServerApp.d.ts +1 -1
- package/dist/vite-plugin-app/createAstroServerApp.js +2 -6
- package/dist/vite-plugin-load-fallback/index.d.ts +1 -1
- package/dist/vite-plugin-load-fallback/index.js +2 -5
- package/package.json +12 -7
- package/dist/assets/utils/svg.d.ts +0 -3
- package/dist/core/app/logging.d.ts +0 -3
- package/dist/core/app/logging.js +0 -11
- package/dist/core/logger/console.d.ts +0 -2
- package/dist/core/logger/console.js +0 -21
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
import { optimize } from "svgo";
|
|
2
1
|
import { ELEMENT_NODE, TEXT_NODE, parse, renderSync } from "ultrahtml";
|
|
3
2
|
import { AstroError, AstroErrorData } from "../../core/errors/index.js";
|
|
4
3
|
import { dropAttributes } from "../runtime.js";
|
|
5
|
-
function parseSvg({
|
|
4
|
+
async function parseSvg({
|
|
6
5
|
path,
|
|
7
6
|
contents,
|
|
8
|
-
|
|
7
|
+
svgOptimizer
|
|
9
8
|
}) {
|
|
10
9
|
let processedContents = contents;
|
|
11
|
-
if (
|
|
10
|
+
if (svgOptimizer) {
|
|
12
11
|
try {
|
|
13
|
-
|
|
14
|
-
const result = optimize(contents, config);
|
|
15
|
-
processedContents = result.data;
|
|
12
|
+
processedContents = await svgOptimizer.optimize(contents);
|
|
16
13
|
} catch (cause) {
|
|
17
14
|
throw new AstroError(
|
|
18
15
|
{
|
|
19
16
|
...AstroErrorData.CannotOptimizeSvg,
|
|
20
|
-
message: AstroErrorData.CannotOptimizeSvg.message(path)
|
|
17
|
+
message: AstroErrorData.CannotOptimizeSvg.message(path, svgOptimizer.name)
|
|
21
18
|
},
|
|
22
19
|
{ cause }
|
|
23
20
|
);
|
|
@@ -43,16 +40,16 @@ function parseSvg({
|
|
|
43
40
|
}
|
|
44
41
|
return { attributes, body, styles };
|
|
45
42
|
}
|
|
46
|
-
function makeSvgComponent(meta, contents,
|
|
43
|
+
async function makeSvgComponent(meta, contents, svgOptimizer) {
|
|
47
44
|
const file = typeof contents === "string" ? contents : contents.toString("utf-8");
|
|
48
45
|
const {
|
|
49
46
|
attributes,
|
|
50
47
|
body: children,
|
|
51
48
|
styles
|
|
52
|
-
} = parseSvg({
|
|
49
|
+
} = await parseSvg({
|
|
53
50
|
path: meta.fsPath,
|
|
54
51
|
contents: file,
|
|
55
|
-
|
|
52
|
+
svgOptimizer
|
|
56
53
|
});
|
|
57
54
|
const props = {
|
|
58
55
|
meta,
|
|
@@ -63,16 +60,16 @@ function makeSvgComponent(meta, contents, svgoConfig) {
|
|
|
63
60
|
return `import { createSvgComponent } from 'astro/assets/runtime';
|
|
64
61
|
export default createSvgComponent(${JSON.stringify(props)})`;
|
|
65
62
|
}
|
|
66
|
-
function parseSvgComponentData(meta, contents,
|
|
63
|
+
async function parseSvgComponentData(meta, contents, svgOptimizer) {
|
|
67
64
|
const file = typeof contents === "string" ? contents : contents.toString("utf-8");
|
|
68
65
|
const {
|
|
69
66
|
attributes,
|
|
70
67
|
body: children,
|
|
71
68
|
styles
|
|
72
|
-
} = parseSvg({
|
|
69
|
+
} = await parseSvg({
|
|
73
70
|
path: meta.fsPath,
|
|
74
71
|
contents: file,
|
|
75
|
-
|
|
72
|
+
svgOptimizer
|
|
76
73
|
});
|
|
77
74
|
return { attributes: dropAttributes(attributes), children, styles };
|
|
78
75
|
}
|
|
@@ -31,7 +31,7 @@ import { hashTransform, propsToFilename } from "./utils/hash.js";
|
|
|
31
31
|
import { emitImageMetadata } from "./utils/node.js";
|
|
32
32
|
import { CONTENT_IMAGE_FLAG } from "../content/consts.js";
|
|
33
33
|
import { getProxyCode } from "./utils/proxy.js";
|
|
34
|
-
import { makeSvgComponent, parseSvgComponentData } from "./utils
|
|
34
|
+
import { makeSvgComponent, parseSvgComponentData } from "./svg/utils.js";
|
|
35
35
|
import { createPlaceholderURL, stringifyPlaceholderURL } from "./utils/url.js";
|
|
36
36
|
const assetRegex = new RegExp(`\\.(${VALID_INPUT_FORMATS.join("|")})`, "i");
|
|
37
37
|
const assetRegexEnds = new RegExp(`\\.(${VALID_INPUT_FORMATS.join("|")})$`, "i");
|
|
@@ -283,7 +283,11 @@ function assets({ fs, settings, sync, logger }) {
|
|
|
283
283
|
encoding: "utf8"
|
|
284
284
|
});
|
|
285
285
|
return {
|
|
286
|
-
code: makeSvgComponent(
|
|
286
|
+
code: await makeSvgComponent(
|
|
287
|
+
imageMetadata,
|
|
288
|
+
contents,
|
|
289
|
+
settings.config.experimental.svgOptimizer
|
|
290
|
+
)
|
|
287
291
|
};
|
|
288
292
|
}
|
|
289
293
|
const isSSROnlyEnvironment = settings.buildOutput === "server" && this.environment.name === ASTRO_VITE_ENVIRONMENT_NAMES.ssr;
|
|
@@ -294,10 +298,10 @@ function assets({ fs, settings, sync, logger }) {
|
|
|
294
298
|
const contents = await fs.promises.readFile(imageMetadata.fsPath, {
|
|
295
299
|
encoding: "utf8"
|
|
296
300
|
});
|
|
297
|
-
const svgData = parseSvgComponentData(
|
|
301
|
+
const svgData = await parseSvgComponentData(
|
|
298
302
|
imageMetadata,
|
|
299
303
|
contents,
|
|
300
|
-
settings.config.experimental.
|
|
304
|
+
settings.config.experimental.svgOptimizer
|
|
301
305
|
);
|
|
302
306
|
const metadataWithSvg = { ...imageMetadata, __svgData: svgData };
|
|
303
307
|
return {
|
package/dist/cli/flags.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createNodeLoggerFromFlags } from "../core/logger/impls/node.js";
|
|
2
|
+
import { createJsonLoggerFromFlags } from "../core/logger/impls/json.js";
|
|
2
3
|
function flagsToAstroInlineConfig(flags) {
|
|
3
|
-
|
|
4
|
+
const inlineConfig = {
|
|
4
5
|
// Inline-only configs
|
|
5
6
|
configFile: typeof flags.config === "string" ? flags.config : void 0,
|
|
6
7
|
mode: typeof flags.mode === "string" ? flags.mode : void 0,
|
|
@@ -18,18 +19,27 @@ function flagsToAstroInlineConfig(flags) {
|
|
|
18
19
|
allowedHosts: typeof flags.allowedHosts === "string" ? flags.allowedHosts.split(",") : typeof flags.allowedHosts === "boolean" && flags.allowedHosts === true ? flags.allowedHosts : []
|
|
19
20
|
}
|
|
20
21
|
};
|
|
22
|
+
if (flags.experimentalJson) {
|
|
23
|
+
inlineConfig.experimental = {
|
|
24
|
+
logger: {
|
|
25
|
+
entrypoint: "astro/logger/json"
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return inlineConfig;
|
|
21
30
|
}
|
|
22
31
|
function createLoggerFromFlags(flags) {
|
|
23
|
-
|
|
24
|
-
destination: nodeLogDestination,
|
|
25
|
-
level: "info"
|
|
26
|
-
};
|
|
32
|
+
let logLevel = flags.level;
|
|
27
33
|
if (flags.verbose) {
|
|
28
|
-
|
|
34
|
+
logLevel = "debug";
|
|
29
35
|
} else if (flags.silent) {
|
|
30
|
-
|
|
36
|
+
logLevel = "silent";
|
|
37
|
+
}
|
|
38
|
+
if (flags.experimentalJson) {
|
|
39
|
+
return createJsonLoggerFromFlags({ logLevel });
|
|
40
|
+
} else {
|
|
41
|
+
return createNodeLoggerFromFlags({ logLevel });
|
|
31
42
|
}
|
|
32
|
-
return createNodeLogger({ logLevel: logging.level });
|
|
33
43
|
}
|
|
34
44
|
export {
|
|
35
45
|
createLoggerFromFlags,
|
package/dist/cli/help/index.js
CHANGED
|
@@ -25,7 +25,8 @@ const DEFAULT_HELP_PAYLOAD = {
|
|
|
25
25
|
["--verbose", "Enable verbose logging."],
|
|
26
26
|
["--silent", "Disable all logging."],
|
|
27
27
|
["--version", "Show the version number and exit."],
|
|
28
|
-
["--help", "Show this help message."]
|
|
28
|
+
["--help", "Show this help message."],
|
|
29
|
+
["--experimental-json", "Enables JSON logging."]
|
|
29
30
|
]
|
|
30
31
|
}
|
|
31
32
|
};
|
|
@@ -9,7 +9,8 @@ import * as msg from "../../core/messages/runtime.js";
|
|
|
9
9
|
import { DEFAULT_PREFERENCES } from "../../preferences/defaults.js";
|
|
10
10
|
import dlv from "../../preferences/dlv.js";
|
|
11
11
|
import { coerce, isValidKey } from "../../preferences/index.js";
|
|
12
|
-
import {
|
|
12
|
+
import { flagsToAstroInlineConfig } from "../flags.js";
|
|
13
|
+
import { loadOrCreateNodeLogger } from "../../core/logger/load.js";
|
|
13
14
|
const { bgGreen, black, bold, dim, yellow } = colors;
|
|
14
15
|
const PREFERENCES_SUBCOMMANDS = [
|
|
15
16
|
"get",
|
|
@@ -49,8 +50,8 @@ async function preferences(subcommand, key, value, { flags }) {
|
|
|
49
50
|
return 0;
|
|
50
51
|
}
|
|
51
52
|
const inlineConfig = flagsToAstroInlineConfig(flags);
|
|
52
|
-
const logger = createLoggerFromFlags(flags);
|
|
53
53
|
const { astroConfig } = await resolveConfig(inlineConfig ?? {}, "dev");
|
|
54
|
+
const logger = await loadOrCreateNodeLogger(astroConfig, inlineConfig ?? {});
|
|
54
55
|
const settings = await createSettings(
|
|
55
56
|
astroConfig,
|
|
56
57
|
inlineConfig.logLevel,
|
|
@@ -8,6 +8,8 @@ export { validateConfig } from '../core/config/validate.js';
|
|
|
8
8
|
export { envField } from '../env/config.js';
|
|
9
9
|
export { defineConfig, getViteConfig } from './index.js';
|
|
10
10
|
export { sessionDrivers } from '../core/session/drivers.js';
|
|
11
|
+
export { svgoOptimizer } from '../assets/svg/svgo.js';
|
|
12
|
+
export { logHandlers } from '../core/logger/handlers.js';
|
|
11
13
|
/**
|
|
12
14
|
* Return the configuration needed to use the Sharp-based image service
|
|
13
15
|
*/
|
|
@@ -4,6 +4,8 @@ import { validateConfig } from "../core/config/validate.js";
|
|
|
4
4
|
import { envField } from "../env/config.js";
|
|
5
5
|
import { defineConfig, getViteConfig } from "./index.js";
|
|
6
6
|
import { sessionDrivers } from "../core/session/drivers.js";
|
|
7
|
+
import { svgoOptimizer } from "../assets/svg/svgo.js";
|
|
8
|
+
import { logHandlers } from "../core/logger/handlers.js";
|
|
7
9
|
function sharpImageService(config = {}) {
|
|
8
10
|
return {
|
|
9
11
|
entrypoint: "astro/assets/services/sharp",
|
|
@@ -28,10 +30,12 @@ export {
|
|
|
28
30
|
envField,
|
|
29
31
|
fontProviders,
|
|
30
32
|
getViteConfig,
|
|
33
|
+
logHandlers,
|
|
31
34
|
memoryCache,
|
|
32
35
|
mergeConfig,
|
|
33
36
|
passthroughImageService,
|
|
34
37
|
sessionDrivers,
|
|
35
38
|
sharpImageService,
|
|
39
|
+
svgoOptimizer,
|
|
36
40
|
validateConfig
|
|
37
41
|
};
|
package/dist/config/index.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { createRoutesList } from "../core/routing/create-manifest.js";
|
|
2
|
-
import { getPrerenderDefault } from "../prerender/utils.js";
|
|
3
1
|
function defineConfig(config) {
|
|
4
2
|
return config;
|
|
5
3
|
}
|
|
@@ -8,19 +6,23 @@ function getViteConfig(userViteConfig, inlineAstroConfig = {}) {
|
|
|
8
6
|
const cmd = command === "serve" ? "dev" : "build";
|
|
9
7
|
const [
|
|
10
8
|
{ mergeConfig },
|
|
11
|
-
{
|
|
9
|
+
{ loadOrCreateNodeLogger },
|
|
12
10
|
{ resolveConfig, createSettings },
|
|
13
11
|
{ createVite },
|
|
14
|
-
{ runHookConfigSetup, runHookConfigDone }
|
|
12
|
+
{ runHookConfigSetup, runHookConfigDone },
|
|
13
|
+
{ createRoutesList },
|
|
14
|
+
{ getPrerenderDefault }
|
|
15
15
|
] = await Promise.all([
|
|
16
16
|
import("vite"),
|
|
17
|
-
import("../core/logger/
|
|
17
|
+
import("../core/logger/load.js"),
|
|
18
18
|
import("../core/config/index.js"),
|
|
19
19
|
import("../core/create-vite.js"),
|
|
20
|
-
import("../integrations/hooks.js")
|
|
20
|
+
import("../integrations/hooks.js"),
|
|
21
|
+
import("../core/routing/create-manifest.js"),
|
|
22
|
+
import("../prerender/utils.js")
|
|
21
23
|
]);
|
|
22
|
-
const logger = createNodeLogger(inlineAstroConfig);
|
|
23
24
|
const { astroConfig: config } = await resolveConfig(inlineAstroConfig, cmd);
|
|
25
|
+
const logger = await loadOrCreateNodeLogger(config, inlineAstroConfig);
|
|
24
26
|
let settings = await createSettings(config, inlineAstroConfig.logLevel, userViteConfig.root);
|
|
25
27
|
settings = await runHookConfigSetup({ settings, command: cmd, logger });
|
|
26
28
|
const routesList = await createRoutesList(
|
package/dist/container/index.js
CHANGED
|
@@ -3,8 +3,6 @@ import { getDefaultClientDirectives } from "../core/client-directive/index.js";
|
|
|
3
3
|
import { ASTRO_CONFIG_DEFAULTS } from "../core/config/schemas/index.js";
|
|
4
4
|
import { validateConfig } from "../core/config/validate.js";
|
|
5
5
|
import { createKey } from "../core/encryption.js";
|
|
6
|
-
import { AstroLogger } from "../core/logger/core.js";
|
|
7
|
-
import { nodeLogDestination } from "../core/logger/node.js";
|
|
8
6
|
import { NOOP_MIDDLEWARE_FN } from "../core/middleware/noop-middleware.js";
|
|
9
7
|
import { removeLeadingForwardSlash } from "../core/path.js";
|
|
10
8
|
import { RenderContext } from "../core/render-context.js";
|
|
@@ -13,6 +11,7 @@ import { getPattern } from "../core/routing/pattern.js";
|
|
|
13
11
|
import { validateSegment } from "../core/routing/segment.js";
|
|
14
12
|
import { SlotString } from "../runtime/server/render/slot.js";
|
|
15
13
|
import { ContainerPipeline } from "./pipeline.js";
|
|
14
|
+
import { createConsoleLogger } from "../core/logger/impls/console.js";
|
|
16
15
|
function createManifest(manifest, renderers, middleware) {
|
|
17
16
|
function middlewareInstance() {
|
|
18
17
|
return {
|
|
@@ -64,7 +63,8 @@ function createManifest(manifest, renderers, middleware) {
|
|
|
64
63
|
logLevel: "silent",
|
|
65
64
|
experimentalQueuedRendering: manifest?.experimentalQueuedRendering ?? {
|
|
66
65
|
enabled: false
|
|
67
|
-
}
|
|
66
|
+
},
|
|
67
|
+
experimentalLogger: manifest?.experimentalLogger ?? void 0
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
70
|
class experimental_AstroContainer {
|
|
@@ -82,10 +82,7 @@ class experimental_AstroContainer {
|
|
|
82
82
|
astroConfig
|
|
83
83
|
}) {
|
|
84
84
|
this.#pipeline = ContainerPipeline.create({
|
|
85
|
-
logger:
|
|
86
|
-
level: "info",
|
|
87
|
-
destination: nodeLogDestination
|
|
88
|
-
}),
|
|
85
|
+
logger: createConsoleLogger({ level: "error" }),
|
|
89
86
|
manifest: createManifest(manifest, renderers),
|
|
90
87
|
streaming,
|
|
91
88
|
renderers: renderers ?? manifest?.renderers ?? [],
|
|
@@ -192,7 +192,7 @@ ${contentConfig.error.message}`
|
|
|
192
192
|
logger.info("Content config changed");
|
|
193
193
|
shouldClear = true;
|
|
194
194
|
}
|
|
195
|
-
if (previousAstroVersion && previousAstroVersion !== "6.
|
|
195
|
+
if (previousAstroVersion && previousAstroVersion !== "6.2.0") {
|
|
196
196
|
logger.info("Astro version changed");
|
|
197
197
|
shouldClear = true;
|
|
198
198
|
}
|
|
@@ -200,8 +200,8 @@ ${contentConfig.error.message}`
|
|
|
200
200
|
logger.info("Clearing content store");
|
|
201
201
|
this.#store.clearAll();
|
|
202
202
|
}
|
|
203
|
-
if ("6.
|
|
204
|
-
this.#store.metaStore().set("astro-version", "6.
|
|
203
|
+
if ("6.2.0") {
|
|
204
|
+
this.#store.metaStore().set("astro-version", "6.2.0");
|
|
205
205
|
}
|
|
206
206
|
if (currentConfigDigest) {
|
|
207
207
|
this.#store.metaStore().set("content-config-digest", currentConfigDigest);
|
package/dist/core/app/base.d.ts
CHANGED
|
@@ -2,8 +2,9 @@ import type { RoutesList } from '../../types/astro.js';
|
|
|
2
2
|
import type { RemotePattern, RouteData } from '../../types/public/index.js';
|
|
3
3
|
import type { Pipeline } from '../base-pipeline.js';
|
|
4
4
|
import { getSetCookiesFromResponse } from '../cookies/index.js';
|
|
5
|
-
import { AstroIntegrationLogger, AstroLogger } from '../logger/core.js';
|
|
5
|
+
import { AstroIntegrationLogger, type AstroLogger } from '../logger/core.js';
|
|
6
6
|
import { type CreateRenderContext, RenderContext } from '../render-context.js';
|
|
7
|
+
import type { WaitUntilHook } from '../wait-until.js';
|
|
7
8
|
import type { AppPipeline } from './pipeline.js';
|
|
8
9
|
import type { SSRManifest } from './types.js';
|
|
9
10
|
export interface DevMatch {
|
|
@@ -44,6 +45,13 @@ export interface RenderOptions {
|
|
|
44
45
|
* @returns {Promise<Response>} A promise resolving to the prerendered response.
|
|
45
46
|
*/
|
|
46
47
|
prerenderedErrorPageFetch?: (url: ErrorPagePath) => Promise<Response>;
|
|
48
|
+
/**
|
|
49
|
+
* Optional platform hook to keep background work alive after the response is sent.
|
|
50
|
+
*
|
|
51
|
+
* Adapters can pass this through so runtime cache providers can schedule cache writes
|
|
52
|
+
* without blocking the response path.
|
|
53
|
+
*/
|
|
54
|
+
waitUntil?: WaitUntilHook;
|
|
47
55
|
/**
|
|
48
56
|
* **Advanced API**: you probably do not need to use this.
|
|
49
57
|
*
|
|
@@ -58,6 +66,7 @@ interface ResolvedRenderOptions {
|
|
|
58
66
|
prerenderedErrorPageFetch: RequiredRenderOptions['prerenderedErrorPageFetch'] | undefined;
|
|
59
67
|
locals: RequiredRenderOptions['locals'] | undefined;
|
|
60
68
|
routeData: RequiredRenderOptions['routeData'] | undefined;
|
|
69
|
+
waitUntil: RequiredRenderOptions['waitUntil'] | undefined;
|
|
61
70
|
}
|
|
62
71
|
export interface RenderErrorOptions extends ResolvedRenderOptions {
|
|
63
72
|
response?: Response;
|
|
@@ -77,13 +86,18 @@ export declare abstract class BaseApp<P extends Pipeline = AppPipeline> {
|
|
|
77
86
|
manifest: SSRManifest;
|
|
78
87
|
manifestData: RoutesList;
|
|
79
88
|
pipeline: P;
|
|
80
|
-
adapterLogger: AstroIntegrationLogger;
|
|
81
89
|
baseWithoutTrailingSlash: string;
|
|
82
|
-
logger: AstroLogger;
|
|
90
|
+
get logger(): AstroLogger;
|
|
91
|
+
get adapterLogger(): AstroIntegrationLogger;
|
|
83
92
|
constructor(manifest: SSRManifest, streaming?: boolean, ...args: any[]);
|
|
84
93
|
abstract isDev(): boolean;
|
|
85
94
|
createRenderContext(payload: CreateRenderContext): Promise<RenderContext>;
|
|
86
95
|
getAdapterLogger(): AstroIntegrationLogger;
|
|
96
|
+
/**
|
|
97
|
+
* Resets the cached adapter logger so it picks up a new logger instance.
|
|
98
|
+
* Used by BuildApp when the logger is replaced via setOptions().
|
|
99
|
+
*/
|
|
100
|
+
protected resetAdapterLogger(): void;
|
|
87
101
|
getAllowedDomains(): Partial<RemotePattern>[] | undefined;
|
|
88
102
|
protected matchesAllowedDomains(forwardedHost: string, protocol?: string): boolean;
|
|
89
103
|
static validateForwardedHost(forwardedHost: string, allowedDomains?: Partial<RemotePattern>[], protocol?: string): boolean;
|
|
@@ -124,7 +138,7 @@ export declare abstract class BaseApp<P extends Pipeline = AppPipeline> {
|
|
|
124
138
|
devMatch(pathname?: string): Promise<DevMatch | undefined> | undefined;
|
|
125
139
|
private computePathnameFromDomain;
|
|
126
140
|
private redirectTrailingSlash;
|
|
127
|
-
render(request: Request, { addCookieHeader, clientAddress, locals, prerenderedErrorPageFetch, routeData, }?: RenderOptions): Promise<Response>;
|
|
141
|
+
render(request: Request, { addCookieHeader, clientAddress, locals, prerenderedErrorPageFetch, routeData, waitUntil, }?: RenderOptions): Promise<Response>;
|
|
128
142
|
setCookieHeaders(response: Response): Generator<string, string[], any>;
|
|
129
143
|
/**
|
|
130
144
|
* Reads all the cookies written by `Astro.cookie.set()` onto the passed response.
|
package/dist/core/app/base.js
CHANGED
|
@@ -27,8 +27,7 @@ import {
|
|
|
27
27
|
} from "../cookies/index.js";
|
|
28
28
|
import { getCookiesFromResponse } from "../cookies/response.js";
|
|
29
29
|
import { AstroError, AstroErrorData } from "../errors/index.js";
|
|
30
|
-
import {
|
|
31
|
-
import { AstroIntegrationLogger, AstroLogger } from "../logger/core.js";
|
|
30
|
+
import { AstroIntegrationLogger } from "../logger/core.js";
|
|
32
31
|
import { RenderContext } from "../render-context.js";
|
|
33
32
|
import { redirectTemplate } from "../routing/3xx.js";
|
|
34
33
|
import { ensure404Route } from "../routing/astro-designed-error-pages.js";
|
|
@@ -41,20 +40,26 @@ class BaseApp {
|
|
|
41
40
|
manifest;
|
|
42
41
|
manifestData;
|
|
43
42
|
pipeline;
|
|
44
|
-
adapterLogger;
|
|
43
|
+
#adapterLogger;
|
|
45
44
|
baseWithoutTrailingSlash;
|
|
46
|
-
logger;
|
|
47
45
|
#router;
|
|
46
|
+
get logger() {
|
|
47
|
+
return this.pipeline.logger;
|
|
48
|
+
}
|
|
49
|
+
get adapterLogger() {
|
|
50
|
+
if (!this.#adapterLogger) {
|
|
51
|
+
this.#adapterLogger = new AstroIntegrationLogger(
|
|
52
|
+
this.logger.options,
|
|
53
|
+
this.manifest.adapterName
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
return this.#adapterLogger;
|
|
57
|
+
}
|
|
48
58
|
constructor(manifest, streaming = true, ...args) {
|
|
49
59
|
this.manifest = manifest;
|
|
50
60
|
this.manifestData = { routes: manifest.routes.map((route) => route.routeData) };
|
|
51
61
|
this.baseWithoutTrailingSlash = removeTrailingForwardSlash(manifest.base);
|
|
52
62
|
this.pipeline = this.createPipeline(streaming, manifest, ...args);
|
|
53
|
-
this.logger = new AstroLogger({
|
|
54
|
-
destination: consoleLogDestination,
|
|
55
|
-
level: manifest.logLevel
|
|
56
|
-
});
|
|
57
|
-
this.adapterLogger = new AstroIntegrationLogger(this.logger.options, manifest.adapterName);
|
|
58
63
|
ensure404Route(this.manifestData);
|
|
59
64
|
this.#router = this.createRouter(this.manifestData);
|
|
60
65
|
}
|
|
@@ -64,6 +69,13 @@ class BaseApp {
|
|
|
64
69
|
getAdapterLogger() {
|
|
65
70
|
return this.adapterLogger;
|
|
66
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Resets the cached adapter logger so it picks up a new logger instance.
|
|
74
|
+
* Used by BuildApp when the logger is replaced via setOptions().
|
|
75
|
+
*/
|
|
76
|
+
resetAdapterLogger() {
|
|
77
|
+
this.#adapterLogger = void 0;
|
|
78
|
+
}
|
|
67
79
|
getAllowedDomains() {
|
|
68
80
|
return this.manifest.allowedDomains;
|
|
69
81
|
}
|
|
@@ -228,8 +240,10 @@ class BaseApp {
|
|
|
228
240
|
clientAddress = Reflect.get(request, clientAddressSymbol),
|
|
229
241
|
locals,
|
|
230
242
|
prerenderedErrorPageFetch = fetch,
|
|
231
|
-
routeData
|
|
243
|
+
routeData,
|
|
244
|
+
waitUntil
|
|
232
245
|
} = {}) {
|
|
246
|
+
await this.pipeline.getLogger();
|
|
233
247
|
const timeStart = performance.now();
|
|
234
248
|
const url = new URL(request.url);
|
|
235
249
|
const redirect = this.redirectTrailingSlash(url.pathname);
|
|
@@ -266,7 +280,8 @@ class BaseApp {
|
|
|
266
280
|
clientAddress,
|
|
267
281
|
prerenderedErrorPageFetch,
|
|
268
282
|
locals,
|
|
269
|
-
routeData
|
|
283
|
+
routeData,
|
|
284
|
+
waitUntil
|
|
270
285
|
};
|
|
271
286
|
if (locals) {
|
|
272
287
|
if (typeof locals !== "object") {
|
|
@@ -334,7 +349,8 @@ class BaseApp {
|
|
|
334
349
|
response = await cacheProvider.onRequest(
|
|
335
350
|
{
|
|
336
351
|
request,
|
|
337
|
-
url: new URL(request.url)
|
|
352
|
+
url: new URL(request.url),
|
|
353
|
+
waitUntil: resolvedRenderOptions.waitUntil
|
|
338
354
|
},
|
|
339
355
|
async () => {
|
|
340
356
|
const res = await renderContext.render(componentInstance);
|
|
@@ -400,6 +416,7 @@ class BaseApp {
|
|
|
400
416
|
response.headers.append("set-cookie", setCookieHeaderValue);
|
|
401
417
|
}
|
|
402
418
|
}
|
|
419
|
+
this.logger.flush();
|
|
403
420
|
Reflect.set(response, responseSentSymbol, true);
|
|
404
421
|
}
|
|
405
422
|
setCookieHeaders(response) {
|
|
@@ -5,7 +5,6 @@ import type { SSRManifest } from '../types.js';
|
|
|
5
5
|
import { NonRunnablePipeline } from './pipeline.js';
|
|
6
6
|
import type { RoutesList } from '../../../types/astro.js';
|
|
7
7
|
export declare class DevApp extends BaseApp<NonRunnablePipeline> {
|
|
8
|
-
logger: AstroLogger;
|
|
9
8
|
constructor(manifest: SSRManifest, streaming: boolean | undefined, logger: AstroLogger);
|
|
10
9
|
createPipeline(streaming: boolean, manifest: SSRManifest, logger: AstroLogger): NonRunnablePipeline;
|
|
11
10
|
isDev(): boolean;
|
package/dist/core/app/dev/app.js
CHANGED
|
@@ -9,10 +9,8 @@ import { ensure404Route } from "../../routing/astro-designed-error-pages.js";
|
|
|
9
9
|
import { matchRoute } from "../../routing/dev.js";
|
|
10
10
|
import { req } from "../../messages/runtime.js";
|
|
11
11
|
class DevApp extends BaseApp {
|
|
12
|
-
logger;
|
|
13
12
|
constructor(manifest, streaming = true, logger) {
|
|
14
13
|
super(manifest, streaming, logger);
|
|
15
|
-
this.logger = logger;
|
|
16
14
|
}
|
|
17
15
|
createPipeline(streaming, manifest, logger) {
|
|
18
16
|
return NonRunnablePipeline.create({
|
|
@@ -2,6 +2,6 @@ export type { RoutesList } from '../../../types/astro.js';
|
|
|
2
2
|
export { App } from '../app.js';
|
|
3
3
|
export { BaseApp, type RenderErrorOptions, type RenderOptions, type LogRequestPayload, } from '../base.js';
|
|
4
4
|
export { fromRoutingStrategy, toRoutingStrategy } from '../common.js';
|
|
5
|
-
export { createConsoleLogger } from '
|
|
5
|
+
export { createConsoleLogger } from '../../logger/impls/console.js';
|
|
6
6
|
export { deserializeManifest, deserializeRouteData, deserializeRouteInfo, serializeRouteData, serializeRouteInfo, } from '../manifest.js';
|
|
7
7
|
export { AppPipeline } from '../pipeline.js';
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
BaseApp
|
|
4
4
|
} from "../base.js";
|
|
5
5
|
import { fromRoutingStrategy, toRoutingStrategy } from "../common.js";
|
|
6
|
-
import { createConsoleLogger } from "
|
|
6
|
+
import { createConsoleLogger } from "../../logger/impls/console.js";
|
|
7
7
|
import {
|
|
8
8
|
deserializeManifest,
|
|
9
9
|
deserializeRouteData,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { manifest } from "virtual:astro:manifest";
|
|
2
2
|
import { DevApp } from "../../dev/app.js";
|
|
3
|
-
import { createConsoleLogger } from "
|
|
3
|
+
import { createConsoleLogger } from "../../../logger/impls/console.js";
|
|
4
4
|
let currentDevApp = null;
|
|
5
5
|
const createApp = ({ streaming } = {}) => {
|
|
6
6
|
const logger = createConsoleLogger(manifest.logLevel);
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "../render/ssr-element.js";
|
|
8
8
|
import { getFallbackRoute, routeIsFallback, routeIsRedirect } from "../routing/helpers.js";
|
|
9
9
|
import { findRouteToRewrite } from "../routing/rewrite.js";
|
|
10
|
-
import { createConsoleLogger } from "
|
|
10
|
+
import { createConsoleLogger } from "../logger/impls/console.js";
|
|
11
11
|
class AppPipeline extends Pipeline {
|
|
12
12
|
getName() {
|
|
13
13
|
return "AppPipeline";
|
|
@@ -24,7 +24,7 @@ class AppPipeline extends Pipeline {
|
|
|
24
24
|
return createAssetLink(bundlePath, manifest.base, manifest.assetsPrefix);
|
|
25
25
|
}
|
|
26
26
|
};
|
|
27
|
-
const logger = createConsoleLogger(manifest.logLevel);
|
|
27
|
+
const logger = createConsoleLogger({ level: manifest.logLevel });
|
|
28
28
|
const pipeline = new AppPipeline(
|
|
29
29
|
logger,
|
|
30
30
|
manifest,
|
package/dist/core/app/types.d.ts
CHANGED
|
@@ -5,13 +5,14 @@ import type { AstroConfig, CspAlgorithm, Locales, RemotePattern } from '../../ty
|
|
|
5
5
|
import type { RouteData, SSRComponentMetadata, SSRLoadedRenderer, SSRResult } from '../../types/public/internal.js';
|
|
6
6
|
import type { SinglePageBuiltModule } from '../build/types.js';
|
|
7
7
|
import type { CspDirective } from '../csp/config.js';
|
|
8
|
-
import type { AstroLoggerLevel } from '../logger/core.js';
|
|
8
|
+
import type { AstroLoggerDestination, AstroLoggerLevel, AstroLoggerMessage } from '../logger/core.js';
|
|
9
9
|
import type { RoutingStrategies } from './common.js';
|
|
10
10
|
import type { CacheProviderFactory, SSRManifestCache } from '../cache/types.js';
|
|
11
11
|
import type { BaseSessionConfig, SessionDriverFactory } from '../session/types.js';
|
|
12
12
|
import type { DevToolbarPlacement } from '../../types/public/toolbar.js';
|
|
13
13
|
import type { MiddlewareMode } from '../../types/public/integrations.js';
|
|
14
14
|
import type { BaseApp } from './base.js';
|
|
15
|
+
import type { LoggerHandlerConfig } from '../logger/config.js';
|
|
15
16
|
type ComponentPath = string;
|
|
16
17
|
export type StylesheetAsset = {
|
|
17
18
|
type: 'inline';
|
|
@@ -59,7 +60,7 @@ export type SSRManifest = {
|
|
|
59
60
|
userAssetsBase: string | undefined;
|
|
60
61
|
trailingSlash: AstroConfig['trailingSlash'];
|
|
61
62
|
buildFormat: NonNullable<AstroConfig['build']>['format'];
|
|
62
|
-
compressHTML: boolean;
|
|
63
|
+
compressHTML: boolean | 'jsx';
|
|
63
64
|
experimentalQueuedRendering: {
|
|
64
65
|
enabled: boolean;
|
|
65
66
|
/** Node pool size for memory reuse (default: 1000, set to 0 to disable pooling) */
|
|
@@ -96,6 +97,11 @@ export type SSRManifest = {
|
|
|
96
97
|
key: Promise<CryptoKey>;
|
|
97
98
|
i18n: SSRManifestI18n | undefined;
|
|
98
99
|
middleware?: () => Promise<AstroMiddlewareInstance> | AstroMiddlewareInstance;
|
|
100
|
+
logger?: () => Promise<{
|
|
101
|
+
default: AstroLoggerDestination<AstroLoggerMessage>;
|
|
102
|
+
}> | {
|
|
103
|
+
default: AstroLoggerDestination<AstroLoggerMessage>;
|
|
104
|
+
};
|
|
99
105
|
actions?: () => Promise<SSRActions> | SSRActions;
|
|
100
106
|
sessionDriver?: () => Promise<{
|
|
101
107
|
default: SessionDriverFactory | null;
|
|
@@ -139,6 +145,7 @@ export type SSRManifest = {
|
|
|
139
145
|
};
|
|
140
146
|
internalFetchHeaders?: Record<string, string>;
|
|
141
147
|
logLevel: AstroLoggerLevel;
|
|
148
|
+
experimentalLogger: LoggerHandlerConfig | undefined;
|
|
142
149
|
};
|
|
143
150
|
export type SSRActions = {
|
|
144
151
|
server: Record<string, ActionClient<any, any, any>>;
|
|
@@ -167,7 +174,7 @@ export interface SSRManifestSession extends BaseSessionConfig {
|
|
|
167
174
|
options?: Record<string, any> | undefined;
|
|
168
175
|
}
|
|
169
176
|
/** Public type exposed through the `astro:build:ssr` integration hook */
|
|
170
|
-
export type SerializedSSRManifest = Omit<SSRManifest, 'middleware' | 'routes' | 'assets' | 'componentMetadata' | 'inlinedScripts' | 'clientDirectives' | 'serverIslandNameMap' | 'key' | 'rootDir' | 'srcDir' | 'cacheDir' | 'outDir' | 'publicDir' | 'buildClientDir' | 'buildServerDir'> & {
|
|
177
|
+
export type SerializedSSRManifest = Omit<SSRManifest, 'middleware' | 'logger' | 'routes' | 'assets' | 'componentMetadata' | 'inlinedScripts' | 'clientDirectives' | 'serverIslandNameMap' | 'key' | 'rootDir' | 'srcDir' | 'cacheDir' | 'outDir' | 'publicDir' | 'buildClientDir' | 'buildServerDir'> & {
|
|
171
178
|
rootDir: string;
|
|
172
179
|
srcDir: string;
|
|
173
180
|
cacheDir: string;
|
|
@@ -23,13 +23,14 @@ import { HTMLStringCache } from '../runtime/server/html-string-cache.js';
|
|
|
23
23
|
export declare abstract class Pipeline {
|
|
24
24
|
readonly internalMiddleware: MiddlewareHandler[];
|
|
25
25
|
resolvedMiddleware: MiddlewareHandler | undefined;
|
|
26
|
+
resolvedLogger: boolean;
|
|
26
27
|
resolvedActions: SSRActions | undefined;
|
|
27
28
|
resolvedSessionDriver: SessionDriverFactory | null | undefined;
|
|
28
29
|
resolvedCacheProvider: CacheProvider | null | undefined;
|
|
29
30
|
compiledCacheRoutes: CompiledCacheRoute[] | undefined;
|
|
30
31
|
nodePool: NodePool | undefined;
|
|
31
32
|
htmlStringCache: HTMLStringCache | undefined;
|
|
32
|
-
|
|
33
|
+
logger: AstroLogger;
|
|
33
34
|
readonly manifest: SSRManifest;
|
|
34
35
|
/**
|
|
35
36
|
* "development" or "production" only
|
|
@@ -70,7 +71,7 @@ export declare abstract class Pipeline {
|
|
|
70
71
|
/**
|
|
71
72
|
* Used to provide better error messages for `Astro.clientAddress`
|
|
72
73
|
*/
|
|
73
|
-
adapterName?: string, clientDirectives?: Map<string, string>, inlinedScripts?: Map<string, string>, compressHTML?: boolean, i18n?: import("./app/types.js").SSRManifestI18n | undefined, middleware?: (() => Promise<import("../types/public/common.js").AstroMiddlewareInstance> | import("../types/public/common.js").AstroMiddlewareInstance) | undefined, routeCache?: RouteCache,
|
|
74
|
+
adapterName?: string, clientDirectives?: Map<string, string>, inlinedScripts?: Map<string, string>, compressHTML?: boolean | "jsx", i18n?: import("./app/types.js").SSRManifestI18n | undefined, middleware?: (() => Promise<import("../types/public/common.js").AstroMiddlewareInstance> | import("../types/public/common.js").AstroMiddlewareInstance) | undefined, routeCache?: RouteCache,
|
|
74
75
|
/**
|
|
75
76
|
* Used for `Astro.site`.
|
|
76
77
|
*/
|
|
@@ -116,6 +117,12 @@ export declare abstract class Pipeline {
|
|
|
116
117
|
* Called via HMR when middleware files change during development.
|
|
117
118
|
*/
|
|
118
119
|
clearMiddleware(): void;
|
|
120
|
+
/**
|
|
121
|
+
* Resolves the logger destination from the manifest and updates the pipeline logger.
|
|
122
|
+
* If the user configured `experimental.logger`, the bundled logger factory is loaded
|
|
123
|
+
* and replaces the default console destination. This is lazy and only resolves once.
|
|
124
|
+
*/
|
|
125
|
+
getLogger(): Promise<AstroLogger>;
|
|
119
126
|
getActions(): Promise<SSRActions>;
|
|
120
127
|
getSessionDriver(): Promise<SessionDriverFactory | null>;
|
|
121
128
|
getCacheProvider(): Promise<CacheProvider | null>;
|