astro 1.5.0 → 1.5.2
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/astro-jsx.d.ts +8 -6
- package/config.d.ts +1 -1
- package/dist/core/add/index.js +1 -1
- package/dist/core/app/index.js +45 -43
- package/dist/core/build/common.js +2 -1
- package/dist/core/build/generate.js +14 -30
- package/dist/core/build/static-build.js +1 -1
- package/dist/core/config/schema.js +12 -1
- package/dist/core/config/tsconfig.js +5 -6
- package/dist/core/constants.js +1 -1
- package/dist/core/dev/index.js +1 -1
- package/dist/core/endpoint/dev/index.d.ts +2 -1
- package/dist/core/endpoint/dev/index.js +13 -9
- package/dist/core/endpoint/index.d.ts +4 -3
- package/dist/core/endpoint/index.js +16 -8
- package/dist/core/messages.js +2 -2
- package/dist/core/render/context.d.ts +20 -0
- package/dist/core/render/context.js +15 -0
- package/dist/core/render/core.d.ts +4 -24
- package/dist/core/render/core.js +26 -47
- package/dist/core/render/dev/environment.d.ts +9 -0
- package/dist/core/render/dev/environment.js +30 -0
- package/dist/core/render/dev/index.d.ts +22 -5
- package/dist/core/render/dev/index.js +38 -69
- package/dist/core/render/dev/resolve.d.ts +2 -0
- package/dist/core/render/dev/resolve.js +14 -0
- package/dist/core/render/environment.d.ts +29 -0
- package/dist/core/render/environment.js +21 -0
- package/dist/core/render/index.d.ts +6 -0
- package/dist/core/render/index.js +13 -0
- package/dist/core/render/renderer.d.ts +9 -0
- package/dist/core/render/renderer.js +23 -0
- package/dist/core/render/result.js +1 -1
- package/dist/core/routing/manifest/create.js +14 -5
- package/dist/core/routing/manifest/generator.js +8 -3
- package/dist/jsx/component.d.ts +1 -0
- package/dist/jsx/component.js +10 -0
- package/dist/jsx/index.d.ts +2 -0
- package/dist/jsx/index.js +6 -0
- package/dist/jsx-runtime/index.js +1 -1
- package/dist/runtime/server/index.d.ts +1 -0
- package/dist/runtime/server/index.js +2 -0
- package/dist/vite-plugin-astro-server/index.js +47 -60
- package/env.d.ts +1 -1
- package/package.json +5 -2
package/dist/core/render/core.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fragment, renderPage } from "../../runtime/server/index.js";
|
|
1
|
+
import { Fragment, renderPage as runtimeRenderPage } from "../../runtime/server/index.js";
|
|
2
2
|
import { attachToResponse } from "../cookies/index.js";
|
|
3
3
|
import { getParams } from "../routing/params.js";
|
|
4
4
|
import { createResult } from "./result.js";
|
|
@@ -33,63 +33,42 @@ async function getParamsAndProps(opts) {
|
|
|
33
33
|
}
|
|
34
34
|
return [params, pageProps];
|
|
35
35
|
}
|
|
36
|
-
async function
|
|
37
|
-
const {
|
|
38
|
-
adapterName,
|
|
39
|
-
links,
|
|
40
|
-
styles,
|
|
41
|
-
logging,
|
|
42
|
-
origin,
|
|
43
|
-
markdown,
|
|
44
|
-
mod,
|
|
45
|
-
mode,
|
|
46
|
-
pathname,
|
|
47
|
-
scripts,
|
|
48
|
-
renderers,
|
|
49
|
-
request,
|
|
50
|
-
resolve,
|
|
51
|
-
route,
|
|
52
|
-
routeCache,
|
|
53
|
-
site,
|
|
54
|
-
ssr,
|
|
55
|
-
streaming,
|
|
56
|
-
status = 200
|
|
57
|
-
} = opts;
|
|
36
|
+
async function renderPage(mod, ctx, env) {
|
|
58
37
|
const paramsAndPropsRes = await getParamsAndProps({
|
|
59
|
-
logging,
|
|
38
|
+
logging: env.logging,
|
|
60
39
|
mod,
|
|
61
|
-
route,
|
|
62
|
-
routeCache,
|
|
63
|
-
pathname,
|
|
64
|
-
ssr
|
|
40
|
+
route: ctx.route,
|
|
41
|
+
routeCache: env.routeCache,
|
|
42
|
+
pathname: ctx.pathname,
|
|
43
|
+
ssr: env.ssr
|
|
65
44
|
});
|
|
66
45
|
if (paramsAndPropsRes === 0 /* NoMatchingStaticPath */) {
|
|
67
46
|
throw new Error(
|
|
68
|
-
`[getStaticPath] route pattern matched, but no matching static path found. (${pathname})`
|
|
47
|
+
`[getStaticPath] route pattern matched, but no matching static path found. (${ctx.pathname})`
|
|
69
48
|
);
|
|
70
49
|
}
|
|
71
50
|
const [params, pageProps] = paramsAndPropsRes;
|
|
72
|
-
const Component =
|
|
51
|
+
const Component = mod.default;
|
|
73
52
|
if (!Component)
|
|
74
53
|
throw new Error(`Expected an exported Astro component but received typeof ${typeof Component}`);
|
|
75
54
|
const result = createResult({
|
|
76
|
-
adapterName,
|
|
77
|
-
links,
|
|
78
|
-
styles,
|
|
79
|
-
logging,
|
|
80
|
-
markdown,
|
|
81
|
-
mode,
|
|
82
|
-
origin,
|
|
55
|
+
adapterName: env.adapterName,
|
|
56
|
+
links: ctx.links,
|
|
57
|
+
styles: ctx.styles,
|
|
58
|
+
logging: env.logging,
|
|
59
|
+
markdown: env.markdown,
|
|
60
|
+
mode: env.mode,
|
|
61
|
+
origin: ctx.origin,
|
|
83
62
|
params,
|
|
84
63
|
props: pageProps,
|
|
85
|
-
pathname,
|
|
86
|
-
resolve,
|
|
87
|
-
renderers,
|
|
88
|
-
request,
|
|
89
|
-
site,
|
|
90
|
-
scripts,
|
|
91
|
-
ssr,
|
|
92
|
-
status
|
|
64
|
+
pathname: ctx.pathname,
|
|
65
|
+
resolve: env.resolve,
|
|
66
|
+
renderers: env.renderers,
|
|
67
|
+
request: ctx.request,
|
|
68
|
+
site: env.site,
|
|
69
|
+
scripts: ctx.scripts,
|
|
70
|
+
ssr: env.ssr,
|
|
71
|
+
status: ctx.status ?? 200
|
|
93
72
|
});
|
|
94
73
|
if (typeof mod.components === "object") {
|
|
95
74
|
Object.assign(pageProps, { components: mod.components });
|
|
@@ -99,7 +78,7 @@ async function render(opts) {
|
|
|
99
78
|
components: Object.assign((pageProps == null ? void 0 : pageProps.components) ?? {}, { Fragment })
|
|
100
79
|
});
|
|
101
80
|
}
|
|
102
|
-
const response = await
|
|
81
|
+
const response = await runtimeRenderPage(result, Component, pageProps, null, env.streaming);
|
|
103
82
|
if (result.cookies) {
|
|
104
83
|
attachToResponse(response, result.cookies);
|
|
105
84
|
}
|
|
@@ -108,5 +87,5 @@ async function render(opts) {
|
|
|
108
87
|
export {
|
|
109
88
|
GetParamsAndPropsError,
|
|
110
89
|
getParamsAndProps,
|
|
111
|
-
|
|
90
|
+
renderPage
|
|
112
91
|
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ViteDevServer } from 'vite';
|
|
2
|
+
import type { AstroSettings } from '../../../@types/astro';
|
|
3
|
+
import type { LogOptions } from '../../logger/core.js';
|
|
4
|
+
import type { Environment } from '../index';
|
|
5
|
+
export declare type DevelopmentEnvironment = Environment & {
|
|
6
|
+
settings: AstroSettings;
|
|
7
|
+
viteServer: ViteDevServer;
|
|
8
|
+
};
|
|
9
|
+
export declare function createDevelopmentEnvironment(settings: AstroSettings, logging: LogOptions, viteServer: ViteDevServer): DevelopmentEnvironment;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createEnvironment } from "../index.js";
|
|
2
|
+
import { RouteCache } from "../route-cache.js";
|
|
3
|
+
import { createResolve } from "./resolve.js";
|
|
4
|
+
function createDevelopmentEnvironment(settings, logging, viteServer) {
|
|
5
|
+
var _a;
|
|
6
|
+
const mode = "development";
|
|
7
|
+
let env = createEnvironment({
|
|
8
|
+
adapterName: (_a = settings.adapter) == null ? void 0 : _a.name,
|
|
9
|
+
logging,
|
|
10
|
+
markdown: {
|
|
11
|
+
...settings.config.markdown,
|
|
12
|
+
isAstroFlavoredMd: settings.config.legacy.astroFlavoredMarkdown
|
|
13
|
+
},
|
|
14
|
+
mode,
|
|
15
|
+
renderers: [],
|
|
16
|
+
resolve: createResolve(viteServer),
|
|
17
|
+
routeCache: new RouteCache(logging, mode),
|
|
18
|
+
site: settings.config.site,
|
|
19
|
+
ssr: settings.config.output === "server",
|
|
20
|
+
streaming: true
|
|
21
|
+
});
|
|
22
|
+
return {
|
|
23
|
+
...env,
|
|
24
|
+
viteServer,
|
|
25
|
+
settings
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
createDevelopmentEnvironment
|
|
30
|
+
};
|
|
@@ -2,7 +2,10 @@ import type { ViteDevServer } from 'vite';
|
|
|
2
2
|
import type { AstroSettings, ComponentInstance, RouteData, RuntimeMode, SSRLoadedRenderer } from '../../../@types/astro';
|
|
3
3
|
import { LogOptions } from '../../logger/core.js';
|
|
4
4
|
import { RouteCache } from '../route-cache.js';
|
|
5
|
-
|
|
5
|
+
import type { DevelopmentEnvironment } from './environment';
|
|
6
|
+
export { createDevelopmentEnvironment } from './environment.js';
|
|
7
|
+
export type { DevelopmentEnvironment };
|
|
8
|
+
export interface SSROptionsOld {
|
|
6
9
|
/** an instance of the AstroSettings */
|
|
7
10
|
settings: AstroSettings;
|
|
8
11
|
/** location of file on disk */
|
|
@@ -24,9 +27,23 @@ export interface SSROptions {
|
|
|
24
27
|
/** Request */
|
|
25
28
|
request: Request;
|
|
26
29
|
}
|
|
30
|
+
export interface SSROptions {
|
|
31
|
+
/** The environment instance */
|
|
32
|
+
env: DevelopmentEnvironment;
|
|
33
|
+
/** location of file on disk */
|
|
34
|
+
filePath: URL;
|
|
35
|
+
/** production website */
|
|
36
|
+
origin: string;
|
|
37
|
+
/** the web request (needed for dynamic routes) */
|
|
38
|
+
pathname: string;
|
|
39
|
+
/** The renderers and instance */
|
|
40
|
+
preload: ComponentPreload;
|
|
41
|
+
/** Request */
|
|
42
|
+
request: Request;
|
|
43
|
+
/** optional, in case we need to render something outside of a dev server */
|
|
44
|
+
route?: RouteData;
|
|
45
|
+
}
|
|
27
46
|
export declare type ComponentPreload = [SSRLoadedRenderer[], ComponentInstance];
|
|
28
47
|
export declare function loadRenderers(viteServer: ViteDevServer, settings: AstroSettings): Promise<SSRLoadedRenderer[]>;
|
|
29
|
-
export declare function preload({
|
|
30
|
-
|
|
31
|
-
export declare function render(renderers: SSRLoadedRenderer[], mod: ComponentInstance, ssrOpts: SSROptions): Promise<Response>;
|
|
32
|
-
export declare function ssr(preloadedComponent: ComponentPreload, ssrOpts: SSROptions): Promise<Response>;
|
|
48
|
+
export declare function preload({ env, filePath, }: Pick<SSROptions, 'env' | 'filePath'>): Promise<ComponentPreload>;
|
|
49
|
+
export declare function renderPage(options: SSROptions): Promise<Response>;
|
|
@@ -1,50 +1,35 @@
|
|
|
1
1
|
import { fileURLToPath } from "url";
|
|
2
2
|
import { PAGE_SCRIPT_ID } from "../../../vite-plugin-scripts/index.js";
|
|
3
3
|
import { isPage, resolveIdToUrl } from "../../util.js";
|
|
4
|
-
import {
|
|
4
|
+
import { createRenderContext, renderPage as coreRenderPage } from "../index.js";
|
|
5
|
+
import { filterFoundRenderers, loadRenderer } from "../renderer.js";
|
|
5
6
|
import { collectMdMetadata } from "../util.js";
|
|
6
7
|
import { getStylesForURL } from "./css.js";
|
|
7
8
|
import { getScriptsForURL } from "./scripts.js";
|
|
8
|
-
|
|
9
|
-
async function loadRenderer(viteServer, renderer) {
|
|
10
|
-
const mod = await viteServer.ssrLoadModule(renderer.serverEntrypoint);
|
|
11
|
-
return { ...renderer, ssr: mod.default };
|
|
12
|
-
}
|
|
9
|
+
import { createDevelopmentEnvironment } from "./environment.js";
|
|
13
10
|
async function loadRenderers(viteServer, settings) {
|
|
14
|
-
|
|
11
|
+
const loader = (entry) => viteServer.ssrLoadModule(entry);
|
|
12
|
+
const renderers = await Promise.all(settings.renderers.map((r) => loadRenderer(r, loader)));
|
|
13
|
+
return filterFoundRenderers(renderers);
|
|
15
14
|
}
|
|
16
15
|
async function preload({
|
|
17
|
-
|
|
18
|
-
filePath
|
|
19
|
-
viteServer
|
|
16
|
+
env,
|
|
17
|
+
filePath
|
|
20
18
|
}) {
|
|
21
|
-
const renderers = await loadRenderers(viteServer, settings);
|
|
22
|
-
const mod = await viteServer.ssrLoadModule(fileURLToPath(filePath));
|
|
23
|
-
if (viteServer.config.mode === "development" || !(mod == null ? void 0 : mod.$$metadata)) {
|
|
19
|
+
const renderers = await loadRenderers(env.viteServer, env.settings);
|
|
20
|
+
const mod = await env.viteServer.ssrLoadModule(fileURLToPath(filePath));
|
|
21
|
+
if (env.viteServer.config.mode === "development" || !(mod == null ? void 0 : mod.$$metadata)) {
|
|
24
22
|
return [renderers, mod];
|
|
25
23
|
}
|
|
26
|
-
const modGraph = await viteServer.moduleGraph.getModuleByUrl(fileURLToPath(filePath));
|
|
24
|
+
const modGraph = await env.viteServer.moduleGraph.getModuleByUrl(fileURLToPath(filePath));
|
|
27
25
|
if (modGraph) {
|
|
28
|
-
await collectMdMetadata(mod.$$metadata, modGraph, viteServer);
|
|
26
|
+
await collectMdMetadata(mod.$$metadata, modGraph, env.viteServer);
|
|
29
27
|
}
|
|
30
28
|
return [renderers, mod];
|
|
31
29
|
}
|
|
32
|
-
async function
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
settings,
|
|
36
|
-
filePath,
|
|
37
|
-
logging,
|
|
38
|
-
mode,
|
|
39
|
-
origin,
|
|
40
|
-
pathname,
|
|
41
|
-
request,
|
|
42
|
-
route,
|
|
43
|
-
routeCache,
|
|
44
|
-
viteServer
|
|
45
|
-
} = ssrOpts;
|
|
46
|
-
const scripts = await getScriptsForURL(filePath, viteServer);
|
|
47
|
-
if (isPage(filePath, settings) && mode === "development") {
|
|
30
|
+
async function getScriptsAndStyles({ env, filePath }) {
|
|
31
|
+
const scripts = await getScriptsForURL(filePath, env.viteServer);
|
|
32
|
+
if (isPage(filePath, env.settings) && env.mode === "development") {
|
|
48
33
|
scripts.add({
|
|
49
34
|
props: { type: "module", src: "/@vite/client" },
|
|
50
35
|
children: ""
|
|
@@ -52,25 +37,25 @@ async function render(renderers, mod, ssrOpts) {
|
|
|
52
37
|
scripts.add({
|
|
53
38
|
props: {
|
|
54
39
|
type: "module",
|
|
55
|
-
src: await resolveIdToUrl(viteServer, "astro/runtime/client/hmr.js")
|
|
40
|
+
src: await resolveIdToUrl(env.viteServer, "astro/runtime/client/hmr.js")
|
|
56
41
|
},
|
|
57
42
|
children: ""
|
|
58
43
|
});
|
|
59
44
|
}
|
|
60
|
-
for (const script of settings.scripts) {
|
|
45
|
+
for (const script of env.settings.scripts) {
|
|
61
46
|
if (script.stage === "head-inline") {
|
|
62
47
|
scripts.add({
|
|
63
48
|
props: {},
|
|
64
49
|
children: script.content
|
|
65
50
|
});
|
|
66
|
-
} else if (script.stage === "page" && isPage(filePath, settings)) {
|
|
51
|
+
} else if (script.stage === "page" && isPage(filePath, env.settings)) {
|
|
67
52
|
scripts.add({
|
|
68
53
|
props: { type: "module", src: `/@id/${PAGE_SCRIPT_ID}` },
|
|
69
54
|
children: ""
|
|
70
55
|
});
|
|
71
56
|
}
|
|
72
57
|
}
|
|
73
|
-
const { urls: styleUrls, stylesMap } = await getStylesForURL(filePath, viteServer, mode);
|
|
58
|
+
const { urls: styleUrls, stylesMap } = await getStylesForURL(filePath, env.viteServer, env.mode);
|
|
74
59
|
let links = /* @__PURE__ */ new Set();
|
|
75
60
|
[...styleUrls].forEach((href) => {
|
|
76
61
|
links.add({
|
|
@@ -95,45 +80,29 @@ async function render(renderers, mod, ssrOpts) {
|
|
|
95
80
|
children: content
|
|
96
81
|
});
|
|
97
82
|
});
|
|
98
|
-
|
|
99
|
-
|
|
83
|
+
return { scripts, styles, links };
|
|
84
|
+
}
|
|
85
|
+
async function renderPage(options) {
|
|
86
|
+
const [renderers, mod] = options.preload;
|
|
87
|
+
options.env.renderers = renderers;
|
|
88
|
+
const { scripts, links, styles } = await getScriptsAndStyles({
|
|
89
|
+
env: options.env,
|
|
90
|
+
filePath: options.filePath
|
|
91
|
+
});
|
|
92
|
+
const ctx = createRenderContext({
|
|
93
|
+
request: options.request,
|
|
94
|
+
origin: options.origin,
|
|
95
|
+
pathname: options.pathname,
|
|
96
|
+
scripts,
|
|
100
97
|
links,
|
|
101
98
|
styles,
|
|
102
|
-
|
|
103
|
-
markdown: {
|
|
104
|
-
...settings.config.markdown,
|
|
105
|
-
isAstroFlavoredMd: settings.config.legacy.astroFlavoredMarkdown
|
|
106
|
-
},
|
|
107
|
-
mod,
|
|
108
|
-
mode,
|
|
109
|
-
origin,
|
|
110
|
-
pathname,
|
|
111
|
-
scripts,
|
|
112
|
-
async resolve(s) {
|
|
113
|
-
const url = await resolveIdToUrl(viteServer, s);
|
|
114
|
-
if (url.startsWith("/@fs") && url.endsWith(".jsx")) {
|
|
115
|
-
return url.slice(0, -4);
|
|
116
|
-
} else {
|
|
117
|
-
return url;
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
renderers,
|
|
121
|
-
request,
|
|
122
|
-
route,
|
|
123
|
-
routeCache,
|
|
124
|
-
site: settings.config.site ? new URL(settings.config.base, settings.config.site).toString() : void 0,
|
|
125
|
-
ssr: settings.config.output === "server",
|
|
126
|
-
streaming: true
|
|
99
|
+
route: options.route
|
|
127
100
|
});
|
|
128
|
-
return
|
|
129
|
-
}
|
|
130
|
-
async function ssr(preloadedComponent, ssrOpts) {
|
|
131
|
-
const [renderers, mod] = preloadedComponent;
|
|
132
|
-
return await render(renderers, mod, ssrOpts);
|
|
101
|
+
return await coreRenderPage(mod, ctx, options.env);
|
|
133
102
|
}
|
|
134
103
|
export {
|
|
104
|
+
createDevelopmentEnvironment,
|
|
135
105
|
loadRenderers,
|
|
136
106
|
preload,
|
|
137
|
-
|
|
138
|
-
ssr
|
|
107
|
+
renderPage
|
|
139
108
|
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { resolveIdToUrl } from "../../util.js";
|
|
2
|
+
function createResolve(viteServer) {
|
|
3
|
+
return async function(s) {
|
|
4
|
+
const url = await resolveIdToUrl(viteServer, s);
|
|
5
|
+
if (url.startsWith("/@fs") && url.endsWith(".jsx")) {
|
|
6
|
+
return url.slice(0, -4);
|
|
7
|
+
} else {
|
|
8
|
+
return url;
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
createResolve
|
|
14
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { MarkdownRenderingOptions } from '@astrojs/markdown-remark';
|
|
2
|
+
import type { RuntimeMode, SSRLoadedRenderer } from '../../@types/astro';
|
|
3
|
+
import type { LogOptions } from '../logger/core.js';
|
|
4
|
+
import { RouteCache } from './route-cache.js';
|
|
5
|
+
/**
|
|
6
|
+
* An environment represents the static parts of rendering that do not change
|
|
7
|
+
* between requests. These are mostly known when the server first starts up and do not change.
|
|
8
|
+
* Thus they can be created once and passed through to renderPage on each request.
|
|
9
|
+
*/
|
|
10
|
+
export interface Environment {
|
|
11
|
+
adapterName?: string;
|
|
12
|
+
/** logging options */
|
|
13
|
+
logging: LogOptions;
|
|
14
|
+
markdown: MarkdownRenderingOptions;
|
|
15
|
+
/** "development" or "production" */
|
|
16
|
+
mode: RuntimeMode;
|
|
17
|
+
renderers: SSRLoadedRenderer[];
|
|
18
|
+
resolve: (s: string) => Promise<string>;
|
|
19
|
+
routeCache: RouteCache;
|
|
20
|
+
site?: string;
|
|
21
|
+
ssr: boolean;
|
|
22
|
+
streaming: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare type CreateEnvironmentArgs = Environment;
|
|
25
|
+
export declare function createEnvironment(options: CreateEnvironmentArgs): Environment;
|
|
26
|
+
export declare type CreateBasicEnvironmentArgs = Partial<Environment> & {
|
|
27
|
+
logging: CreateEnvironmentArgs['logging'];
|
|
28
|
+
};
|
|
29
|
+
export declare function createBasicEnvironment(options: CreateBasicEnvironmentArgs): Environment;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { RouteCache } from "./route-cache.js";
|
|
2
|
+
function createEnvironment(options) {
|
|
3
|
+
return options;
|
|
4
|
+
}
|
|
5
|
+
function createBasicEnvironment(options) {
|
|
6
|
+
const mode = options.mode ?? "development";
|
|
7
|
+
return createEnvironment({
|
|
8
|
+
...options,
|
|
9
|
+
markdown: options.markdown ?? {},
|
|
10
|
+
mode,
|
|
11
|
+
renderers: options.renderers ?? [],
|
|
12
|
+
resolve: options.resolve ?? ((s) => Promise.resolve(s)),
|
|
13
|
+
routeCache: new RouteCache(options.logging, mode),
|
|
14
|
+
ssr: options.ssr ?? true,
|
|
15
|
+
streaming: options.streaming ?? true
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
createBasicEnvironment,
|
|
20
|
+
createEnvironment
|
|
21
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { RenderContext } from './context';
|
|
2
|
+
export { createRenderContext } from './context.js';
|
|
3
|
+
export { getParamsAndProps, GetParamsAndPropsError, renderPage } from './core.js';
|
|
4
|
+
export type { Environment } from './environment';
|
|
5
|
+
export { createBasicEnvironment, createEnvironment } from './environment.js';
|
|
6
|
+
export { loadRenderer } from './renderer.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createRenderContext } from "./context.js";
|
|
2
|
+
import { getParamsAndProps, GetParamsAndPropsError, renderPage } from "./core.js";
|
|
3
|
+
import { createBasicEnvironment, createEnvironment } from "./environment.js";
|
|
4
|
+
import { loadRenderer } from "./renderer.js";
|
|
5
|
+
export {
|
|
6
|
+
GetParamsAndPropsError,
|
|
7
|
+
createBasicEnvironment,
|
|
8
|
+
createEnvironment,
|
|
9
|
+
createRenderContext,
|
|
10
|
+
getParamsAndProps,
|
|
11
|
+
loadRenderer,
|
|
12
|
+
renderPage
|
|
13
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AstroRenderer, SSRLoadedRenderer } from '../../@types/astro';
|
|
2
|
+
export declare type RendererServerEntrypointModule = {
|
|
3
|
+
default: SSRLoadedRenderer['ssr'];
|
|
4
|
+
};
|
|
5
|
+
export declare type MaybeRendererServerEntrypointModule = Partial<RendererServerEntrypointModule>;
|
|
6
|
+
export declare type RendererLoader = (entryPoint: string) => Promise<MaybeRendererServerEntrypointModule>;
|
|
7
|
+
export declare function loadRenderer(renderer: AstroRenderer, loader: RendererLoader): Promise<SSRLoadedRenderer | undefined>;
|
|
8
|
+
export declare function filterFoundRenderers(renderers: Array<SSRLoadedRenderer | undefined>): SSRLoadedRenderer[];
|
|
9
|
+
export declare function createLoadedRenderer(renderer: AstroRenderer, mod: RendererServerEntrypointModule): SSRLoadedRenderer;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
async function loadRenderer(renderer, loader) {
|
|
2
|
+
const mod = await loader(renderer.serverEntrypoint);
|
|
3
|
+
if (typeof mod.default !== "undefined") {
|
|
4
|
+
return createLoadedRenderer(renderer, mod);
|
|
5
|
+
}
|
|
6
|
+
return void 0;
|
|
7
|
+
}
|
|
8
|
+
function filterFoundRenderers(renderers) {
|
|
9
|
+
return renderers.filter((renderer) => {
|
|
10
|
+
return !!renderer;
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function createLoadedRenderer(renderer, mod) {
|
|
14
|
+
return {
|
|
15
|
+
...renderer,
|
|
16
|
+
ssr: mod.default
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
createLoadedRenderer,
|
|
21
|
+
filterFoundRenderers,
|
|
22
|
+
loadRenderer
|
|
23
|
+
};
|
|
@@ -116,7 +116,7 @@ _slots = new WeakMap();
|
|
|
116
116
|
_loggingOpts = new WeakMap();
|
|
117
117
|
let renderMarkdown = null;
|
|
118
118
|
function createResult(args) {
|
|
119
|
-
const { markdown, params, pathname,
|
|
119
|
+
const { markdown, params, pathname, renderers, request, resolve } = args;
|
|
120
120
|
const url = new URL(request.url);
|
|
121
121
|
const headers = new Headers();
|
|
122
122
|
headers.set("Content-Type", "text/html");
|
|
@@ -36,10 +36,19 @@ function getParts(part, file) {
|
|
|
36
36
|
}
|
|
37
37
|
function getPattern(segments, addTrailingSlash) {
|
|
38
38
|
const pathname = segments.map((segment) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
if (segment.length === 1 && segment[0].spread) {
|
|
40
|
+
return "(?:\\/(.*?))?";
|
|
41
|
+
} else {
|
|
42
|
+
return "\\/" + segment.map((part) => {
|
|
43
|
+
if (part.spread) {
|
|
44
|
+
return "(.*?)";
|
|
45
|
+
} else if (part.dynamic) {
|
|
46
|
+
return "([^/]+?)";
|
|
47
|
+
} else {
|
|
48
|
+
return part.content.normalize().replace(/\?/g, "%3F").replace(/#/g, "%23").replace(/%5B/g, "[").replace(/%5D/g, "]").replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
49
|
+
}
|
|
50
|
+
}).join("");
|
|
51
|
+
}
|
|
43
52
|
}).join("");
|
|
44
53
|
const trailing = addTrailingSlash && segments.length ? getTrailingSlashPattern(addTrailingSlash) : "$";
|
|
45
54
|
return new RegExp(`^${pathname || "\\/"}${trailing}`);
|
|
@@ -71,7 +80,7 @@ function validateSegment(segment, file = "") {
|
|
|
71
80
|
if (countOccurrences("[", segment) !== countOccurrences("]", segment)) {
|
|
72
81
|
throw new Error(`Invalid route ${file} \u2014 brackets are unbalanced`);
|
|
73
82
|
}
|
|
74
|
-
if (/.+\[\.\.\.[^\]]+\]/.test(segment) || /\[\.\.\.[^\]]+\].+/.test(segment)) {
|
|
83
|
+
if ((/.+\[\.\.\.[^\]]+\]/.test(segment) || /\[\.\.\.[^\]]+\].+/.test(segment)) && file.endsWith(".astro")) {
|
|
75
84
|
throw new Error(`Invalid route ${file} \u2014 rest parameter must be a standalone segment`);
|
|
76
85
|
}
|
|
77
86
|
}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { compile } from "path-to-regexp";
|
|
2
2
|
function getRouteGenerator(segments, addTrailingSlash) {
|
|
3
3
|
const template = segments.map((segment) => {
|
|
4
|
-
return
|
|
5
|
-
if (part)
|
|
6
|
-
return
|
|
4
|
+
return "/" + segment.map((part) => {
|
|
5
|
+
if (part.spread) {
|
|
6
|
+
return `:${part.content.slice(3)}(.*)?`;
|
|
7
|
+
} else if (part.dynamic) {
|
|
8
|
+
return `:${part.content}`;
|
|
9
|
+
} else {
|
|
10
|
+
return part.content.normalize().replace(/\?/g, "%3F").replace(/#/g, "%23").replace(/%5B/g, "[").replace(/%5D/g, "]").replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
11
|
+
}
|
|
7
12
|
}).join("");
|
|
8
13
|
}).join("");
|
|
9
14
|
let trailing = "";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function createAstroJSXComponent(factory: (...args: any[]) => any): (...args: any[]) => any;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { __astro_tag_component__ } from "../runtime/server/index.js";
|
|
2
|
+
import renderer from "./renderer.js";
|
|
3
|
+
const ASTRO_JSX_RENDERER_NAME = renderer.name;
|
|
4
|
+
function createAstroJSXComponent(factory) {
|
|
5
|
+
__astro_tag_component__(factory, ASTRO_JSX_RENDERER_NAME);
|
|
6
|
+
return factory;
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
createAstroJSXComponent
|
|
10
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Fragment, markHTMLString, Renderer } from "../runtime/server/index.js";
|
|
2
2
|
const AstroJSX = "astro:jsx";
|
|
3
3
|
const Empty = Symbol("empty");
|
|
4
|
-
const toSlotName = (
|
|
4
|
+
const toSlotName = (slotAttr) => slotAttr;
|
|
5
5
|
function isVNode(vnode) {
|
|
6
6
|
return vnode && typeof vnode === "object" && vnode[AstroJSX];
|
|
7
7
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { createAstro } from './astro-global.js';
|
|
2
2
|
export { renderEndpoint } from './endpoint.js';
|
|
3
3
|
export { escapeHTML, HTMLBytes, HTMLString, markHTMLString, unescapeHTML } from './escape.js';
|
|
4
|
+
export { renderJSX } from './jsx.js';
|
|
4
5
|
export type { Metadata } from './metadata';
|
|
5
6
|
export { createMetadata } from './metadata.js';
|
|
6
7
|
export { addAttribute, defineScriptVars, Fragment, maybeRenderHead, renderAstroComponent, renderComponent, Renderer as Renderer, renderHead, renderHTMLElement, renderPage, renderSlot, renderTemplate as render, renderTemplate, renderToString, stringifyChunk, voidElementNames, } from './render/index.js';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createAstro } from "./astro-global.js";
|
|
2
2
|
import { renderEndpoint } from "./endpoint.js";
|
|
3
3
|
import { escapeHTML, HTMLBytes, HTMLString, markHTMLString, unescapeHTML } from "./escape.js";
|
|
4
|
+
import { renderJSX } from "./jsx.js";
|
|
4
5
|
import { createMetadata } from "./metadata.js";
|
|
5
6
|
import {
|
|
6
7
|
addAttribute,
|
|
@@ -101,6 +102,7 @@ export {
|
|
|
101
102
|
renderEndpoint,
|
|
102
103
|
renderHTMLElement,
|
|
103
104
|
renderHead,
|
|
105
|
+
renderJSX,
|
|
104
106
|
renderPage,
|
|
105
107
|
renderSlot,
|
|
106
108
|
renderTemplate2 as renderTemplate,
|