🎉 initiate project *astro_rewrite*
This commit is contained in:
parent
ffd4d5e86c
commit
2ba37bfbe3
8658 changed files with 2268794 additions and 2538 deletions
24
node_modules/astro/dist/core/render/context.d.ts
generated
vendored
Normal file
24
node_modules/astro/dist/core/render/context.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
import type { ComponentInstance, Params, Props, RouteData, SSRElement, SSRResult } from '../../@types/astro';
|
||||
import type { Environment } from './environment';
|
||||
/**
|
||||
* The RenderContext represents the parts of rendering that are specific to one request.
|
||||
*/
|
||||
export interface RenderContext {
|
||||
request: Request;
|
||||
pathname: string;
|
||||
scripts?: Set<SSRElement>;
|
||||
links?: Set<SSRElement>;
|
||||
styles?: Set<SSRElement>;
|
||||
componentMetadata?: SSRResult['componentMetadata'];
|
||||
route?: RouteData;
|
||||
status?: number;
|
||||
params: Params;
|
||||
props: Props;
|
||||
locals?: object;
|
||||
}
|
||||
export type CreateRenderContextArgs = Partial<Omit<RenderContext, 'params' | 'props' | 'locals'>> & {
|
||||
request: RenderContext['request'];
|
||||
mod: ComponentInstance;
|
||||
env: Environment;
|
||||
};
|
||||
export declare function createRenderContext(options: CreateRenderContextArgs): Promise<RenderContext>;
|
38
node_modules/astro/dist/core/render/context.js
generated
vendored
Normal file
38
node_modules/astro/dist/core/render/context.js
generated
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
import { AstroError, AstroErrorData } from "../errors/index.js";
|
||||
import { getParamsAndProps } from "./params-and-props.js";
|
||||
const clientLocalsSymbol = Symbol.for("astro.locals");
|
||||
async function createRenderContext(options) {
|
||||
const request = options.request;
|
||||
const pathname = options.pathname ?? new URL(request.url).pathname;
|
||||
const [params, props] = await getParamsAndProps({
|
||||
mod: options.mod,
|
||||
route: options.route,
|
||||
routeCache: options.env.routeCache,
|
||||
pathname,
|
||||
logging: options.env.logging,
|
||||
ssr: options.env.ssr
|
||||
});
|
||||
const context = {
|
||||
...options,
|
||||
pathname,
|
||||
params,
|
||||
props
|
||||
};
|
||||
Object.defineProperty(context, "locals", {
|
||||
enumerable: true,
|
||||
get() {
|
||||
return Reflect.get(request, clientLocalsSymbol);
|
||||
},
|
||||
set(val) {
|
||||
if (typeof val !== "object") {
|
||||
throw new AstroError(AstroErrorData.LocalsNotAnObject);
|
||||
} else {
|
||||
Reflect.set(request, clientLocalsSymbol, val);
|
||||
}
|
||||
}
|
||||
});
|
||||
return context;
|
||||
}
|
||||
export {
|
||||
createRenderContext
|
||||
};
|
17
node_modules/astro/dist/core/render/core.d.ts
generated
vendored
Normal file
17
node_modules/astro/dist/core/render/core.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
import type { AstroCookies, ComponentInstance, MiddlewareHandler } from '../../@types/astro';
|
||||
import type { RenderContext } from './context.js';
|
||||
import type { Environment } from './environment.js';
|
||||
export type RenderPage = {
|
||||
mod: ComponentInstance;
|
||||
renderContext: RenderContext;
|
||||
env: Environment;
|
||||
cookies: AstroCookies;
|
||||
};
|
||||
/**
|
||||
* It attempts to render a page.
|
||||
*
|
||||
* ## Errors
|
||||
*
|
||||
* It throws an error if the page can't be rendered.
|
||||
*/
|
||||
export declare function tryRenderPage<MiddlewareReturnType = Response>(renderContext: Readonly<RenderContext>, env: Readonly<Environment>, mod: Readonly<ComponentInstance>, onRequest?: MiddlewareHandler<MiddlewareReturnType>): Promise<Response>;
|
89
node_modules/astro/dist/core/render/core.js
generated
vendored
Normal file
89
node_modules/astro/dist/core/render/core.js
generated
vendored
Normal file
|
@ -0,0 +1,89 @@
|
|||
import { renderPage as runtimeRenderPage } from "../../runtime/server/index.js";
|
||||
import { attachToResponse } from "../cookies/index.js";
|
||||
import { createAPIContext } from "../endpoint/index.js";
|
||||
import { callMiddleware } from "../middleware/callMiddleware.js";
|
||||
import { redirectRouteGenerate, redirectRouteStatus, routeIsRedirect } from "../redirects/index.js";
|
||||
import { createResult } from "./result.js";
|
||||
async function renderPage({ mod, renderContext, env, cookies }) {
|
||||
if (routeIsRedirect(renderContext.route)) {
|
||||
return new Response(null, {
|
||||
status: redirectRouteStatus(renderContext.route, renderContext.request.method),
|
||||
headers: {
|
||||
location: redirectRouteGenerate(renderContext.route, renderContext.params)
|
||||
}
|
||||
});
|
||||
}
|
||||
const Component = mod.default;
|
||||
if (!Component)
|
||||
throw new Error(`Expected an exported Astro component but received typeof ${typeof Component}`);
|
||||
const result = createResult({
|
||||
adapterName: env.adapterName,
|
||||
links: renderContext.links,
|
||||
styles: renderContext.styles,
|
||||
logging: env.logging,
|
||||
markdown: env.markdown,
|
||||
params: renderContext.params,
|
||||
pathname: renderContext.pathname,
|
||||
componentMetadata: renderContext.componentMetadata,
|
||||
resolve: env.resolve,
|
||||
renderers: env.renderers,
|
||||
clientDirectives: env.clientDirectives,
|
||||
compressHTML: env.compressHTML,
|
||||
request: renderContext.request,
|
||||
site: env.site,
|
||||
scripts: renderContext.scripts,
|
||||
ssr: env.ssr,
|
||||
status: renderContext.status ?? 200,
|
||||
cookies,
|
||||
locals: renderContext.locals ?? {}
|
||||
});
|
||||
if (typeof mod.components === "object") {
|
||||
Object.assign(renderContext.props, { components: mod.components });
|
||||
}
|
||||
let response = await runtimeRenderPage(
|
||||
result,
|
||||
Component,
|
||||
renderContext.props,
|
||||
null,
|
||||
env.streaming,
|
||||
renderContext.route
|
||||
);
|
||||
if (result.cookies) {
|
||||
attachToResponse(response, result.cookies);
|
||||
}
|
||||
return response;
|
||||
}
|
||||
async function tryRenderPage(renderContext, env, mod, onRequest) {
|
||||
const apiContext = createAPIContext({
|
||||
request: renderContext.request,
|
||||
params: renderContext.params,
|
||||
props: renderContext.props,
|
||||
site: env.site,
|
||||
adapterName: env.adapterName
|
||||
});
|
||||
if (onRequest) {
|
||||
return await callMiddleware(
|
||||
env.logging,
|
||||
onRequest,
|
||||
apiContext,
|
||||
() => {
|
||||
return renderPage({
|
||||
mod,
|
||||
renderContext,
|
||||
env,
|
||||
cookies: apiContext.cookies
|
||||
});
|
||||
}
|
||||
);
|
||||
} else {
|
||||
return await renderPage({
|
||||
mod,
|
||||
renderContext,
|
||||
env,
|
||||
cookies: apiContext.cookies
|
||||
});
|
||||
}
|
||||
}
|
||||
export {
|
||||
tryRenderPage
|
||||
};
|
7
node_modules/astro/dist/core/render/dev/css.d.ts
generated
vendored
Normal file
7
node_modules/astro/dist/core/render/dev/css.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
import type { ModuleLoader } from '../../module-loader/index';
|
||||
import type { RuntimeMode } from '../../../@types/astro.js';
|
||||
/** Given a filePath URL, crawl Vite’s module graph to find all style imports. */
|
||||
export declare function getStylesForURL(filePath: URL, loader: ModuleLoader, mode: RuntimeMode): Promise<{
|
||||
urls: Set<string>;
|
||||
stylesMap: Map<string, string>;
|
||||
}>;
|
30
node_modules/astro/dist/core/render/dev/css.js
generated
vendored
Normal file
30
node_modules/astro/dist/core/render/dev/css.js
generated
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
import { viteID } from "../../util.js";
|
||||
import { isBuildableCSSRequest } from "./util.js";
|
||||
import { crawlGraph } from "./vite.js";
|
||||
async function getStylesForURL(filePath, loader, mode) {
|
||||
const importedCssUrls = /* @__PURE__ */ new Set();
|
||||
const importedStylesMap = /* @__PURE__ */ new Map();
|
||||
for await (const importedModule of crawlGraph(loader, viteID(filePath), true)) {
|
||||
if (isBuildableCSSRequest(importedModule.url)) {
|
||||
let ssrModule;
|
||||
try {
|
||||
ssrModule = importedModule.ssrModule ?? await loader.import(importedModule.url);
|
||||
} catch {
|
||||
continue;
|
||||
}
|
||||
if (mode === "development" && // only inline in development
|
||||
typeof (ssrModule == null ? void 0 : ssrModule.default) === "string") {
|
||||
importedStylesMap.set(importedModule.url, ssrModule.default);
|
||||
} else {
|
||||
importedCssUrls.add(importedModule.url);
|
||||
}
|
||||
}
|
||||
}
|
||||
return {
|
||||
urls: importedCssUrls,
|
||||
stylesMap: importedStylesMap
|
||||
};
|
||||
}
|
||||
export {
|
||||
getStylesForURL
|
||||
};
|
9
node_modules/astro/dist/core/render/dev/environment.d.ts
generated
vendored
Normal file
9
node_modules/astro/dist/core/render/dev/environment.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
import type { AstroSettings, SSRManifest } from '../../../@types/astro';
|
||||
import type { LogOptions } from '../../logger/core.js';
|
||||
import type { ModuleLoader } from '../../module-loader/index';
|
||||
import type { Environment } from '../index';
|
||||
export type DevelopmentEnvironment = Environment & {
|
||||
loader: ModuleLoader;
|
||||
settings: AstroSettings;
|
||||
};
|
||||
export declare function createDevelopmentEnvironment(manifest: SSRManifest, settings: AstroSettings, logging: LogOptions, loader: ModuleLoader): DevelopmentEnvironment;
|
30
node_modules/astro/dist/core/render/dev/environment.js
generated
vendored
Normal file
30
node_modules/astro/dist/core/render/dev/environment.js
generated
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
import { isServerLikeOutput } from "../../../prerender/utils.js";
|
||||
import { createEnvironment } from "../index.js";
|
||||
import { RouteCache } from "../route-cache.js";
|
||||
import { createResolve } from "./resolve.js";
|
||||
function createDevelopmentEnvironment(manifest, settings, logging, loader) {
|
||||
const mode = "development";
|
||||
let env = createEnvironment({
|
||||
adapterName: manifest.adapterName,
|
||||
logging,
|
||||
markdown: manifest.markdown,
|
||||
mode,
|
||||
// This will be overridden in the dev server
|
||||
renderers: [],
|
||||
clientDirectives: manifest.clientDirectives,
|
||||
compressHTML: manifest.compressHTML,
|
||||
resolve: createResolve(loader, settings.config.root),
|
||||
routeCache: new RouteCache(logging, mode),
|
||||
site: manifest.site,
|
||||
ssr: isServerLikeOutput(settings.config),
|
||||
streaming: true
|
||||
});
|
||||
return {
|
||||
...env,
|
||||
loader,
|
||||
settings
|
||||
};
|
||||
}
|
||||
export {
|
||||
createDevelopmentEnvironment
|
||||
};
|
27
node_modules/astro/dist/core/render/dev/index.d.ts
generated
vendored
Normal file
27
node_modules/astro/dist/core/render/dev/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,27 @@
|
|||
import type { AstroMiddlewareInstance, ComponentInstance, RouteData } from '../../../@types/astro';
|
||||
import type { DevelopmentEnvironment } from './environment';
|
||||
export { createDevelopmentEnvironment } from './environment.js';
|
||||
export type { DevelopmentEnvironment };
|
||||
export interface SSROptions {
|
||||
/** The environment instance */
|
||||
env: DevelopmentEnvironment;
|
||||
/** location of file on disk */
|
||||
filePath: URL;
|
||||
/** the web request (needed for dynamic routes) */
|
||||
pathname: string;
|
||||
/** The runtime component instance */
|
||||
preload: ComponentInstance;
|
||||
/** Request */
|
||||
request: Request;
|
||||
/** optional, in case we need to render something outside of a dev server */
|
||||
route?: RouteData;
|
||||
/**
|
||||
* Optional middlewares
|
||||
*/
|
||||
middleware?: AstroMiddlewareInstance<unknown>;
|
||||
}
|
||||
export declare function preload({ env, filePath, }: {
|
||||
env: DevelopmentEnvironment;
|
||||
filePath: URL;
|
||||
}): Promise<ComponentInstance>;
|
||||
export declare function renderPage(options: SSROptions): Promise<Response>;
|
112
node_modules/astro/dist/core/render/dev/index.js
generated
vendored
Normal file
112
node_modules/astro/dist/core/render/dev/index.js
generated
vendored
Normal file
|
@ -0,0 +1,112 @@
|
|||
import { PAGE_SCRIPT_ID } from "../../../vite-plugin-scripts/index.js";
|
||||
import { enhanceViteSSRError } from "../../errors/dev/index.js";
|
||||
import { AggregateError, CSSError, MarkdownError } from "../../errors/index.js";
|
||||
import { isPage, resolveIdToUrl, viteID } from "../../util.js";
|
||||
import { createRenderContext, loadRenderers, tryRenderPage } from "../index.js";
|
||||
import { getStylesForURL } from "./css.js";
|
||||
import { getComponentMetadata } from "./metadata.js";
|
||||
import { getScriptsForURL } from "./scripts.js";
|
||||
import { createDevelopmentEnvironment } from "./environment.js";
|
||||
async function preload({
|
||||
env,
|
||||
filePath
|
||||
}) {
|
||||
const renderers = await loadRenderers(env.settings, env.loader);
|
||||
env.renderers = renderers;
|
||||
try {
|
||||
const mod = await env.loader.import(viteID(filePath));
|
||||
return mod;
|
||||
} catch (error) {
|
||||
if (MarkdownError.is(error) || CSSError.is(error) || AggregateError.is(error)) {
|
||||
throw error;
|
||||
}
|
||||
throw enhanceViteSSRError({ error, filePath, loader: env.loader });
|
||||
}
|
||||
}
|
||||
async function getScriptsAndStyles({ env, filePath }) {
|
||||
const scripts = await getScriptsForURL(filePath, env.settings.config.root, env.loader);
|
||||
if (isPage(filePath, env.settings) && env.mode === "development") {
|
||||
scripts.add({
|
||||
props: { type: "module", src: "/@vite/client" },
|
||||
children: ""
|
||||
});
|
||||
scripts.add({
|
||||
props: {
|
||||
type: "module",
|
||||
src: await resolveIdToUrl(env.loader, "astro/runtime/client/hmr.js")
|
||||
},
|
||||
children: ""
|
||||
});
|
||||
}
|
||||
for (const script of env.settings.scripts) {
|
||||
if (script.stage === "head-inline") {
|
||||
scripts.add({
|
||||
props: {},
|
||||
children: script.content
|
||||
});
|
||||
} else if (script.stage === "page" && isPage(filePath, env.settings)) {
|
||||
scripts.add({
|
||||
props: { type: "module", src: `/@id/${PAGE_SCRIPT_ID}` },
|
||||
children: ""
|
||||
});
|
||||
}
|
||||
}
|
||||
const { urls: styleUrls, stylesMap } = await getStylesForURL(filePath, env.loader, env.mode);
|
||||
let links = /* @__PURE__ */ new Set();
|
||||
[...styleUrls].forEach((href) => {
|
||||
links.add({
|
||||
props: {
|
||||
rel: "stylesheet",
|
||||
href
|
||||
},
|
||||
children: ""
|
||||
});
|
||||
});
|
||||
let styles = /* @__PURE__ */ new Set();
|
||||
[...stylesMap].forEach(([url, content]) => {
|
||||
scripts.add({
|
||||
props: {
|
||||
type: "module",
|
||||
src: url
|
||||
},
|
||||
children: ""
|
||||
});
|
||||
styles.add({
|
||||
props: {
|
||||
type: "text/css",
|
||||
// Track the ID so we can match it to Vite's injected style later
|
||||
"data-astro-dev-id": viteID(new URL(`.${url}`, env.settings.config.root))
|
||||
},
|
||||
children: content
|
||||
});
|
||||
});
|
||||
const metadata = await getComponentMetadata(filePath, env.loader);
|
||||
return { scripts, styles, links, metadata };
|
||||
}
|
||||
async function renderPage(options) {
|
||||
var _a;
|
||||
const mod = options.preload;
|
||||
const { scripts, links, styles, metadata } = await getScriptsAndStyles({
|
||||
env: options.env,
|
||||
filePath: options.filePath
|
||||
});
|
||||
const { env } = options;
|
||||
const renderContext = await createRenderContext({
|
||||
request: options.request,
|
||||
pathname: options.pathname,
|
||||
scripts,
|
||||
links,
|
||||
styles,
|
||||
componentMetadata: metadata,
|
||||
route: options.route,
|
||||
mod,
|
||||
env
|
||||
});
|
||||
const onRequest = (_a = options.middleware) == null ? void 0 : _a.onRequest;
|
||||
return tryRenderPage(renderContext, env, mod, onRequest);
|
||||
}
|
||||
export {
|
||||
createDevelopmentEnvironment,
|
||||
preload,
|
||||
renderPage
|
||||
};
|
3
node_modules/astro/dist/core/render/dev/metadata.d.ts
generated
vendored
Normal file
3
node_modules/astro/dist/core/render/dev/metadata.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
import type { SSRResult } from '../../../@types/astro';
|
||||
import type { ModuleLoader } from '../../module-loader/index';
|
||||
export declare function getComponentMetadata(filePath: URL, loader: ModuleLoader): Promise<SSRResult['componentMetadata']>;
|
36
node_modules/astro/dist/core/render/dev/metadata.js
generated
vendored
Normal file
36
node_modules/astro/dist/core/render/dev/metadata.js
generated
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
import { getAstroMetadata } from "../../../vite-plugin-astro/index.js";
|
||||
import { viteID } from "../../util.js";
|
||||
import { crawlGraph } from "./vite.js";
|
||||
async function getComponentMetadata(filePath, loader) {
|
||||
const map = /* @__PURE__ */ new Map();
|
||||
const rootID = viteID(filePath);
|
||||
addMetadata(map, loader.getModuleInfo(rootID));
|
||||
for await (const moduleNode of crawlGraph(loader, rootID, true)) {
|
||||
const id = moduleNode.id;
|
||||
if (id) {
|
||||
addMetadata(map, loader.getModuleInfo(id));
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
function addMetadata(map, modInfo) {
|
||||
if (modInfo) {
|
||||
const astro = getAstroMetadata(modInfo);
|
||||
if (astro) {
|
||||
let metadata = {
|
||||
containsHead: false,
|
||||
propagation: "none"
|
||||
};
|
||||
if (astro.propagation) {
|
||||
metadata.propagation = astro.propagation;
|
||||
}
|
||||
if (astro.containsHead) {
|
||||
metadata.containsHead = astro.containsHead;
|
||||
}
|
||||
map.set(modInfo.id, metadata);
|
||||
}
|
||||
}
|
||||
}
|
||||
export {
|
||||
getComponentMetadata
|
||||
};
|
2
node_modules/astro/dist/core/render/dev/resolve.d.ts
generated
vendored
Normal file
2
node_modules/astro/dist/core/render/dev/resolve.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
import type { ModuleLoader } from '../../module-loader/index';
|
||||
export declare function createResolve(loader: ModuleLoader, root: URL): (s: string) => Promise<string>;
|
9
node_modules/astro/dist/core/render/dev/resolve.js
generated
vendored
Normal file
9
node_modules/astro/dist/core/render/dev/resolve.js
generated
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
import { resolveIdToUrl } from "../../util.js";
|
||||
function createResolve(loader, root) {
|
||||
return async function(s) {
|
||||
return await resolveIdToUrl(loader, s, root);
|
||||
};
|
||||
}
|
||||
export {
|
||||
createResolve
|
||||
};
|
3
node_modules/astro/dist/core/render/dev/scripts.d.ts
generated
vendored
Normal file
3
node_modules/astro/dist/core/render/dev/scripts.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
import type { SSRElement } from '../../../@types/astro';
|
||||
import type { ModuleLoader } from '../../module-loader/index';
|
||||
export declare function getScriptsForURL(filePath: URL, root: URL, loader: ModuleLoader): Promise<Set<SSRElement>>;
|
34
node_modules/astro/dist/core/render/dev/scripts.js
generated
vendored
Normal file
34
node_modules/astro/dist/core/render/dev/scripts.js
generated
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
import { rootRelativePath, viteID } from "../../util.js";
|
||||
import { createModuleScriptElementWithSrc } from "../ssr-element.js";
|
||||
import { crawlGraph } from "./vite.js";
|
||||
async function getScriptsForURL(filePath, root, loader) {
|
||||
const elements = /* @__PURE__ */ new Set();
|
||||
const rootID = viteID(filePath);
|
||||
const modInfo = loader.getModuleInfo(rootID);
|
||||
addHoistedScripts(elements, modInfo, root);
|
||||
for await (const moduleNode of crawlGraph(loader, rootID, true)) {
|
||||
const id = moduleNode.id;
|
||||
if (id) {
|
||||
const info = loader.getModuleInfo(id);
|
||||
addHoistedScripts(elements, info, root);
|
||||
}
|
||||
}
|
||||
return elements;
|
||||
}
|
||||
function addHoistedScripts(set, info, root) {
|
||||
var _a, _b;
|
||||
if (!((_a = info == null ? void 0 : info.meta) == null ? void 0 : _a.astro)) {
|
||||
return;
|
||||
}
|
||||
let id = info.id;
|
||||
const astro = (_b = info == null ? void 0 : info.meta) == null ? void 0 : _b.astro;
|
||||
for (let i = 0; i < astro.scripts.length; i++) {
|
||||
let scriptId = `${id}?astro&type=script&index=${i}&lang.ts`;
|
||||
scriptId = rootRelativePath(root, scriptId);
|
||||
const element = createModuleScriptElementWithSrc(scriptId);
|
||||
set.add(element);
|
||||
}
|
||||
}
|
||||
export {
|
||||
getScriptsForURL
|
||||
};
|
3
node_modules/astro/dist/core/render/dev/util.d.ts
generated
vendored
Normal file
3
node_modules/astro/dist/core/render/dev/util.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
import { isCSSRequest } from 'vite';
|
||||
export { isCSSRequest };
|
||||
export declare const isBuildableCSSRequest: (request: string) => boolean;
|
8
node_modules/astro/dist/core/render/dev/util.js
generated
vendored
Normal file
8
node_modules/astro/dist/core/render/dev/util.js
generated
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
import { isCSSRequest } from "vite";
|
||||
const rawRE = /(?:\?|&)raw(?:&|$)/;
|
||||
const inlineRE = /(?:\?|&)inline\b/;
|
||||
const isBuildableCSSRequest = (request) => isCSSRequest(request) && !rawRE.test(request) && !inlineRE.test(request);
|
||||
export {
|
||||
isBuildableCSSRequest,
|
||||
isCSSRequest
|
||||
};
|
3
node_modules/astro/dist/core/render/dev/vite.d.ts
generated
vendored
Normal file
3
node_modules/astro/dist/core/render/dev/vite.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
import type { ModuleLoader, ModuleNode } from '../../module-loader/index';
|
||||
/** recursively crawl the module graph to get all style files imported by parent id */
|
||||
export declare function crawlGraph(loader: ModuleLoader, _id: string, isRootFile: boolean, scanned?: Set<string>): AsyncGenerator<ModuleNode, void, unknown>;
|
71
node_modules/astro/dist/core/render/dev/vite.js
generated
vendored
Normal file
71
node_modules/astro/dist/core/render/dev/vite.js
generated
vendored
Normal file
|
@ -0,0 +1,71 @@
|
|||
import npath from "node:path";
|
||||
import { SUPPORTED_MARKDOWN_FILE_EXTENSIONS } from "../../constants.js";
|
||||
import { unwrapId } from "../../util.js";
|
||||
import { isCSSRequest } from "./util.js";
|
||||
const fileExtensionsToSSR = /* @__PURE__ */ new Set([".astro", ".mdoc", ...SUPPORTED_MARKDOWN_FILE_EXTENSIONS]);
|
||||
const STRIP_QUERY_PARAMS_REGEX = /\?.*$/;
|
||||
const ASTRO_PROPAGATED_ASSET_REGEX = /\?astroPropagatedAssets/;
|
||||
async function* crawlGraph(loader, _id, isRootFile, scanned = /* @__PURE__ */ new Set()) {
|
||||
const id = unwrapId(_id);
|
||||
const importedModules = /* @__PURE__ */ new Set();
|
||||
const moduleEntriesForId = isRootFile ? (
|
||||
// "getModulesByFile" pulls from a delayed module cache (fun implementation detail),
|
||||
// So we can get up-to-date info on initial server load.
|
||||
// Needed for slower CSS preprocessing like Tailwind
|
||||
loader.getModulesByFile(id) ?? /* @__PURE__ */ new Set()
|
||||
) : (
|
||||
// For non-root files, we're safe to pull from "getModuleById" based on testing.
|
||||
// TODO: Find better invalidation strat to use "getModuleById" in all cases!
|
||||
/* @__PURE__ */ new Set([loader.getModuleById(id)])
|
||||
);
|
||||
for (const entry of moduleEntriesForId) {
|
||||
if (!entry) {
|
||||
continue;
|
||||
}
|
||||
if (id === entry.id) {
|
||||
scanned.add(id);
|
||||
const entryIsStyle = isCSSRequest(id);
|
||||
for (const importedModule of entry.importedModules) {
|
||||
if (!importedModule.id)
|
||||
continue;
|
||||
const importedModulePathname = importedModule.id.replace(STRIP_QUERY_PARAMS_REGEX, "");
|
||||
if (entryIsStyle && !isCSSRequest(importedModulePathname)) {
|
||||
continue;
|
||||
}
|
||||
const isFileTypeNeedingSSR = fileExtensionsToSSR.has(npath.extname(importedModulePathname));
|
||||
const isPropagationStoppingPoint = ASTRO_PROPAGATED_ASSET_REGEX.test(importedModule.id);
|
||||
if (isFileTypeNeedingSSR && // Should not SSR a module with ?astroPropagatedAssets
|
||||
!isPropagationStoppingPoint) {
|
||||
const mod = loader.getModuleById(importedModule.id);
|
||||
if (!(mod == null ? void 0 : mod.ssrModule)) {
|
||||
try {
|
||||
await loader.import(importedModule.id);
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isImportedBy(id, importedModule) && !isPropagationStoppingPoint) {
|
||||
importedModules.add(importedModule);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const importedModule of importedModules) {
|
||||
if (!importedModule.id || scanned.has(importedModule.id)) {
|
||||
continue;
|
||||
}
|
||||
yield importedModule;
|
||||
yield* crawlGraph(loader, importedModule.id, false, scanned);
|
||||
}
|
||||
}
|
||||
function isImportedBy(parent, entry) {
|
||||
for (const importer of entry.importers) {
|
||||
if (importer.id === parent) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
export {
|
||||
crawlGraph
|
||||
};
|
39
node_modules/astro/dist/core/render/environment.d.ts
generated
vendored
Normal file
39
node_modules/astro/dist/core/render/environment.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
import type { MarkdownRenderingOptions } from '@astrojs/markdown-remark';
|
||||
import type { RuntimeMode, SSRLoadedRenderer } from '../../@types/astro';
|
||||
import type { LogOptions } from '../logger/core.js';
|
||||
import type { RouteCache } from './route-cache.js';
|
||||
/**
|
||||
* An environment represents the static parts of rendering that do not change
|
||||
* between requests. These are mostly known when the server first starts up and do not change.
|
||||
* Thus they can be created once and passed through to renderPage on each request.
|
||||
*/
|
||||
export interface Environment {
|
||||
/**
|
||||
* Used to provide better error messages for `Astro.clientAddress`
|
||||
*/
|
||||
adapterName?: string;
|
||||
/** logging options */
|
||||
logging: LogOptions;
|
||||
/**
|
||||
* Used to support `Astro.__renderMarkdown` for legacy `<Markdown />` component
|
||||
*/
|
||||
markdown: MarkdownRenderingOptions;
|
||||
/** "development" or "production" */
|
||||
mode: RuntimeMode;
|
||||
compressHTML: boolean;
|
||||
renderers: SSRLoadedRenderer[];
|
||||
clientDirectives: Map<string, string>;
|
||||
resolve: (s: string) => Promise<string>;
|
||||
routeCache: RouteCache;
|
||||
/**
|
||||
* Used for `Astro.site`
|
||||
*/
|
||||
site?: string;
|
||||
/**
|
||||
* Value of Astro config's `output` option, true if "server" or "hybrid"
|
||||
*/
|
||||
ssr: boolean;
|
||||
streaming: boolean;
|
||||
}
|
||||
export type CreateEnvironmentArgs = Environment;
|
||||
export declare function createEnvironment(options: CreateEnvironmentArgs): Environment;
|
6
node_modules/astro/dist/core/render/environment.js
generated
vendored
Normal file
6
node_modules/astro/dist/core/render/environment.js
generated
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
function createEnvironment(options) {
|
||||
return options;
|
||||
}
|
||||
export {
|
||||
createEnvironment
|
||||
};
|
7
node_modules/astro/dist/core/render/index.d.ts
generated
vendored
Normal file
7
node_modules/astro/dist/core/render/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
export { createRenderContext } from './context.js';
|
||||
export type { RenderContext } from './context.js';
|
||||
export { tryRenderPage } from './core.js';
|
||||
export type { Environment } from './environment';
|
||||
export { createEnvironment } from './environment.js';
|
||||
export { getParamsAndProps } from './params-and-props.js';
|
||||
export { loadRenderer, loadRenderers } from './renderer.js';
|
13
node_modules/astro/dist/core/render/index.js
generated
vendored
Normal file
13
node_modules/astro/dist/core/render/index.js
generated
vendored
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { createRenderContext } from "./context.js";
|
||||
import { tryRenderPage } from "./core.js";
|
||||
import { createEnvironment } from "./environment.js";
|
||||
import { getParamsAndProps } from "./params-and-props.js";
|
||||
import { loadRenderer, loadRenderers } from "./renderer.js";
|
||||
export {
|
||||
createEnvironment,
|
||||
createRenderContext,
|
||||
getParamsAndProps,
|
||||
loadRenderer,
|
||||
loadRenderers,
|
||||
tryRenderPage
|
||||
};
|
2
node_modules/astro/dist/core/render/paginate.d.ts
generated
vendored
Normal file
2
node_modules/astro/dist/core/render/paginate.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
import type { PaginateFunction, RouteData } from '../../@types/astro';
|
||||
export declare function generatePaginateFunction(routeMatch: RouteData): PaginateFunction;
|
65
node_modules/astro/dist/core/render/paginate.js
generated
vendored
Normal file
65
node_modules/astro/dist/core/render/paginate.js
generated
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
import { AstroError, AstroErrorData } from "../errors/index.js";
|
||||
function generatePaginateFunction(routeMatch) {
|
||||
return function paginateUtility(data, args = {}) {
|
||||
let { pageSize: _pageSize, params: _params, props: _props } = args;
|
||||
const pageSize = _pageSize || 10;
|
||||
const paramName = "page";
|
||||
const additionalParams = _params || {};
|
||||
const additionalProps = _props || {};
|
||||
let includesFirstPageNumber;
|
||||
if (routeMatch.params.includes(`...${paramName}`)) {
|
||||
includesFirstPageNumber = false;
|
||||
} else if (routeMatch.params.includes(`${paramName}`)) {
|
||||
includesFirstPageNumber = true;
|
||||
} else {
|
||||
throw new AstroError({
|
||||
...AstroErrorData.PageNumberParamNotFound,
|
||||
message: AstroErrorData.PageNumberParamNotFound.message(paramName)
|
||||
});
|
||||
}
|
||||
const lastPage = Math.max(1, Math.ceil(data.length / pageSize));
|
||||
const result = [...Array(lastPage).keys()].map((num) => {
|
||||
const pageNum = num + 1;
|
||||
const start = pageSize === Infinity ? 0 : (pageNum - 1) * pageSize;
|
||||
const end = Math.min(start + pageSize, data.length);
|
||||
const params = {
|
||||
...additionalParams,
|
||||
[paramName]: includesFirstPageNumber || pageNum > 1 ? String(pageNum) : void 0
|
||||
};
|
||||
const current = correctIndexRoute(routeMatch.generate({ ...params }));
|
||||
const next = pageNum === lastPage ? void 0 : correctIndexRoute(routeMatch.generate({ ...params, page: String(pageNum + 1) }));
|
||||
const prev = pageNum === 1 ? void 0 : correctIndexRoute(
|
||||
routeMatch.generate({
|
||||
...params,
|
||||
page: !includesFirstPageNumber && pageNum - 1 === 1 ? void 0 : String(pageNum - 1)
|
||||
})
|
||||
);
|
||||
return {
|
||||
params,
|
||||
props: {
|
||||
...additionalProps,
|
||||
page: {
|
||||
data: data.slice(start, end),
|
||||
start,
|
||||
end: end - 1,
|
||||
size: pageSize,
|
||||
total: data.length,
|
||||
currentPage: pageNum,
|
||||
lastPage,
|
||||
url: { current, next, prev }
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
return result;
|
||||
};
|
||||
}
|
||||
function correctIndexRoute(route) {
|
||||
if (route === "") {
|
||||
return "/";
|
||||
}
|
||||
return route;
|
||||
}
|
||||
export {
|
||||
generatePaginateFunction
|
||||
};
|
13
node_modules/astro/dist/core/render/params-and-props.d.ts
generated
vendored
Normal file
13
node_modules/astro/dist/core/render/params-and-props.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,13 @@
|
|||
import type { ComponentInstance, Params, Props, RouteData } from '../../@types/astro';
|
||||
import type { LogOptions } from '../logger/core.js';
|
||||
import { RouteCache } from './route-cache.js';
|
||||
interface GetParamsAndPropsOptions {
|
||||
mod: ComponentInstance;
|
||||
route?: RouteData | undefined;
|
||||
routeCache: RouteCache;
|
||||
pathname: string;
|
||||
logging: LogOptions;
|
||||
ssr: boolean;
|
||||
}
|
||||
export declare function getParamsAndProps(opts: GetParamsAndPropsOptions): Promise<[Params, Props]>;
|
||||
export {};
|
57
node_modules/astro/dist/core/render/params-and-props.js
generated
vendored
Normal file
57
node_modules/astro/dist/core/render/params-and-props.js
generated
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
import { AstroError, AstroErrorData } from "../errors/index.js";
|
||||
import { getParams } from "../routing/params.js";
|
||||
import { callGetStaticPaths, findPathItemByKey } from "./route-cache.js";
|
||||
async function getParamsAndProps(opts) {
|
||||
const { logging, mod, route, routeCache, pathname, ssr } = opts;
|
||||
if (!route || route.pathname) {
|
||||
return [{}, {}];
|
||||
}
|
||||
const params = getRouteParams(route, pathname) ?? {};
|
||||
validatePrerenderEndpointCollision(route, mod, params);
|
||||
const staticPaths = await callGetStaticPaths({
|
||||
mod,
|
||||
route,
|
||||
routeCache,
|
||||
isValidate: true,
|
||||
logging,
|
||||
ssr
|
||||
});
|
||||
const matchedStaticPath = findPathItemByKey(staticPaths, params, route);
|
||||
if (!matchedStaticPath && (ssr ? route.prerender : true)) {
|
||||
throw new AstroError({
|
||||
...AstroErrorData.NoMatchingStaticPathFound,
|
||||
message: AstroErrorData.NoMatchingStaticPathFound.message(pathname),
|
||||
hint: AstroErrorData.NoMatchingStaticPathFound.hint([route.component])
|
||||
});
|
||||
}
|
||||
const props = (matchedStaticPath == null ? void 0 : matchedStaticPath.props) ? { ...matchedStaticPath.props } : {};
|
||||
return [params, props];
|
||||
}
|
||||
function getRouteParams(route, pathname) {
|
||||
if (route.params.length) {
|
||||
const paramsMatch = route.pattern.exec(decodeURIComponent(pathname));
|
||||
if (paramsMatch) {
|
||||
return getParams(route.params)(paramsMatch);
|
||||
}
|
||||
}
|
||||
}
|
||||
function validatePrerenderEndpointCollision(route, mod, params) {
|
||||
if (route.type === "endpoint" && mod.getStaticPaths) {
|
||||
const lastSegment = route.segments[route.segments.length - 1];
|
||||
const paramValues = Object.values(params);
|
||||
const lastParam = paramValues[paramValues.length - 1];
|
||||
if (lastSegment.length === 1 && lastSegment[0].dynamic && lastParam === void 0) {
|
||||
throw new AstroError({
|
||||
...AstroErrorData.PrerenderDynamicEndpointPathCollide,
|
||||
message: AstroErrorData.PrerenderDynamicEndpointPathCollide.message(route.route),
|
||||
hint: AstroErrorData.PrerenderDynamicEndpointPathCollide.hint(route.component),
|
||||
location: {
|
||||
file: route.component
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
export {
|
||||
getParamsAndProps
|
||||
};
|
4
node_modules/astro/dist/core/render/renderer.d.ts
generated
vendored
Normal file
4
node_modules/astro/dist/core/render/renderer.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
import type { AstroRenderer, AstroSettings, SSRLoadedRenderer } from '../../@types/astro';
|
||||
import type { ModuleLoader } from '../module-loader/index.js';
|
||||
export declare function loadRenderers(settings: AstroSettings, moduleLoader: ModuleLoader): Promise<SSRLoadedRenderer[]>;
|
||||
export declare function loadRenderer(renderer: AstroRenderer, moduleLoader: ModuleLoader): Promise<SSRLoadedRenderer | undefined>;
|
18
node_modules/astro/dist/core/render/renderer.js
generated
vendored
Normal file
18
node_modules/astro/dist/core/render/renderer.js
generated
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
async function loadRenderers(settings, moduleLoader) {
|
||||
const renderers = await Promise.all(settings.renderers.map((r) => loadRenderer(r, moduleLoader)));
|
||||
return renderers.filter(Boolean);
|
||||
}
|
||||
async function loadRenderer(renderer, moduleLoader) {
|
||||
const mod = await moduleLoader.import(renderer.serverEntrypoint);
|
||||
if (typeof mod.default !== "undefined") {
|
||||
return {
|
||||
...renderer,
|
||||
ssr: mod.default
|
||||
};
|
||||
}
|
||||
return void 0;
|
||||
}
|
||||
export {
|
||||
loadRenderer,
|
||||
loadRenderers
|
||||
};
|
38
node_modules/astro/dist/core/render/result.d.ts
generated
vendored
Normal file
38
node_modules/astro/dist/core/render/result.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
import type { MarkdownRenderingOptions } from '@astrojs/markdown-remark';
|
||||
import type { Params, SSRElement, SSRLoadedRenderer, SSRResult } from '../../@types/astro';
|
||||
import { AstroCookies } from '../cookies/index.js';
|
||||
import { type LogOptions } from '../logger/core.js';
|
||||
export interface CreateResultArgs {
|
||||
/**
|
||||
* Used to provide better error messages for `Astro.clientAddress`
|
||||
*/
|
||||
adapterName: string | undefined;
|
||||
/**
|
||||
* Value of Astro config's `output` option, true if "server" or "hybrid"
|
||||
*/
|
||||
ssr: boolean;
|
||||
logging: LogOptions;
|
||||
/**
|
||||
* Used to support `Astro.__renderMarkdown` for legacy `<Markdown />` component
|
||||
*/
|
||||
markdown: MarkdownRenderingOptions;
|
||||
params: Params;
|
||||
pathname: string;
|
||||
renderers: SSRLoadedRenderer[];
|
||||
clientDirectives: Map<string, string>;
|
||||
compressHTML: boolean;
|
||||
resolve: (s: string) => Promise<string>;
|
||||
/**
|
||||
* Used for `Astro.site`
|
||||
*/
|
||||
site: string | undefined;
|
||||
links?: Set<SSRElement>;
|
||||
scripts?: Set<SSRElement>;
|
||||
styles?: Set<SSRElement>;
|
||||
componentMetadata?: SSRResult['componentMetadata'];
|
||||
request: Request;
|
||||
status: number;
|
||||
locals: App.Locals;
|
||||
cookies?: AstroCookies;
|
||||
}
|
||||
export declare function createResult(args: CreateResultArgs): SSRResult;
|
191
node_modules/astro/dist/core/render/result.js
generated
vendored
Normal file
191
node_modules/astro/dist/core/render/result.js
generated
vendored
Normal file
|
@ -0,0 +1,191 @@
|
|||
import { isHTMLString } from "../../runtime/server/escape.js";
|
||||
import {
|
||||
renderSlotToString,
|
||||
stringifyChunk
|
||||
} from "../../runtime/server/index.js";
|
||||
import { renderJSX } from "../../runtime/server/jsx.js";
|
||||
import { AstroCookies } from "../cookies/index.js";
|
||||
import { AstroError, AstroErrorData } from "../errors/index.js";
|
||||
import { warn } from "../logger/core.js";
|
||||
const clientAddressSymbol = Symbol.for("astro.clientAddress");
|
||||
const responseSentSymbol = Symbol.for("astro.responseSent");
|
||||
function getFunctionExpression(slot) {
|
||||
var _a;
|
||||
if (!slot)
|
||||
return;
|
||||
if (((_a = slot.expressions) == null ? void 0 : _a.length) !== 1)
|
||||
return;
|
||||
return slot.expressions[0];
|
||||
}
|
||||
class Slots {
|
||||
#result;
|
||||
#slots;
|
||||
#loggingOpts;
|
||||
constructor(result, slots, logging) {
|
||||
this.#result = result;
|
||||
this.#slots = slots;
|
||||
this.#loggingOpts = logging;
|
||||
if (slots) {
|
||||
for (const key of Object.keys(slots)) {
|
||||
if (this[key] !== void 0) {
|
||||
throw new AstroError({
|
||||
...AstroErrorData.ReservedSlotName,
|
||||
message: AstroErrorData.ReservedSlotName.message(key)
|
||||
});
|
||||
}
|
||||
Object.defineProperty(this, key, {
|
||||
get() {
|
||||
return true;
|
||||
},
|
||||
enumerable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
has(name) {
|
||||
if (!this.#slots)
|
||||
return false;
|
||||
return Boolean(this.#slots[name]);
|
||||
}
|
||||
async render(name, args = []) {
|
||||
if (!this.#slots || !this.has(name))
|
||||
return;
|
||||
const result = this.#result;
|
||||
if (!Array.isArray(args)) {
|
||||
warn(
|
||||
this.#loggingOpts,
|
||||
"Astro.slots.render",
|
||||
`Expected second parameter to be an array, received a ${typeof args}. If you're trying to pass an array as a single argument and getting unexpected results, make sure you're passing your array as a item of an array. Ex: Astro.slots.render('default', [["Hello", "World"]])`
|
||||
);
|
||||
} else if (args.length > 0) {
|
||||
const slotValue = this.#slots[name];
|
||||
const component = typeof slotValue === "function" ? await slotValue(result) : await slotValue;
|
||||
const expression = getFunctionExpression(component);
|
||||
if (expression) {
|
||||
const slot = async () => isHTMLString(await expression) ? expression : expression(...args);
|
||||
return await renderSlotToString(result, slot).then((res) => {
|
||||
return res != null ? String(res) : res;
|
||||
});
|
||||
}
|
||||
if (typeof component === "function") {
|
||||
return await renderJSX(result, component(...args)).then(
|
||||
(res) => res != null ? String(res) : res
|
||||
);
|
||||
}
|
||||
}
|
||||
const content = await renderSlotToString(result, this.#slots[name]);
|
||||
const outHTML = stringifyChunk(result, content);
|
||||
return outHTML;
|
||||
}
|
||||
}
|
||||
let renderMarkdown = null;
|
||||
function createResult(args) {
|
||||
const { markdown, params, request, resolve, locals } = args;
|
||||
const url = new URL(request.url);
|
||||
const headers = new Headers();
|
||||
headers.set("Content-Type", "text/html");
|
||||
const response = {
|
||||
status: args.status,
|
||||
statusText: "OK",
|
||||
headers
|
||||
};
|
||||
Object.defineProperty(response, "headers", {
|
||||
value: response.headers,
|
||||
enumerable: true,
|
||||
writable: false
|
||||
});
|
||||
let cookies = args.cookies;
|
||||
const result = {
|
||||
styles: args.styles ?? /* @__PURE__ */ new Set(),
|
||||
scripts: args.scripts ?? /* @__PURE__ */ new Set(),
|
||||
links: args.links ?? /* @__PURE__ */ new Set(),
|
||||
componentMetadata: args.componentMetadata ?? /* @__PURE__ */ new Map(),
|
||||
renderers: args.renderers,
|
||||
clientDirectives: args.clientDirectives,
|
||||
compressHTML: args.compressHTML,
|
||||
pathname: args.pathname,
|
||||
cookies,
|
||||
/** This function returns the `Astro` faux-global */
|
||||
createAstro(astroGlobal, props, slots) {
|
||||
const astroSlots = new Slots(result, slots, args.logging);
|
||||
const Astro = {
|
||||
// @ts-expect-error
|
||||
__proto__: astroGlobal,
|
||||
get clientAddress() {
|
||||
if (!(clientAddressSymbol in request)) {
|
||||
if (args.adapterName) {
|
||||
throw new AstroError({
|
||||
...AstroErrorData.ClientAddressNotAvailable,
|
||||
message: AstroErrorData.ClientAddressNotAvailable.message(args.adapterName)
|
||||
});
|
||||
} else {
|
||||
throw new AstroError(AstroErrorData.StaticClientAddressNotAvailable);
|
||||
}
|
||||
}
|
||||
return Reflect.get(request, clientAddressSymbol);
|
||||
},
|
||||
get cookies() {
|
||||
if (cookies) {
|
||||
return cookies;
|
||||
}
|
||||
cookies = new AstroCookies(request);
|
||||
result.cookies = cookies;
|
||||
return cookies;
|
||||
},
|
||||
params,
|
||||
props,
|
||||
locals,
|
||||
request,
|
||||
url,
|
||||
redirect(path, status) {
|
||||
if (request[responseSentSymbol]) {
|
||||
throw new AstroError({
|
||||
...AstroErrorData.ResponseSentError
|
||||
});
|
||||
}
|
||||
return new Response(null, {
|
||||
status: status || 302,
|
||||
headers: {
|
||||
Location: path
|
||||
}
|
||||
});
|
||||
},
|
||||
response,
|
||||
slots: astroSlots
|
||||
};
|
||||
Object.defineProperty(Astro, "__renderMarkdown", {
|
||||
// Ensure this API is not exposed to users
|
||||
enumerable: false,
|
||||
writable: false,
|
||||
// TODO: Remove this hole "Deno" logic once our plugin gets Deno support
|
||||
value: async function(content, opts) {
|
||||
if (typeof Deno !== "undefined") {
|
||||
throw new Error("Markdown is not supported in Deno SSR");
|
||||
}
|
||||
if (!renderMarkdown) {
|
||||
let astroRemark = "@astrojs/";
|
||||
astroRemark += "markdown-remark";
|
||||
renderMarkdown = (await import(astroRemark)).renderMarkdown;
|
||||
}
|
||||
const { code } = await renderMarkdown(content, { ...markdown, ...opts ?? {} });
|
||||
return code;
|
||||
}
|
||||
});
|
||||
return Astro;
|
||||
},
|
||||
resolve,
|
||||
response,
|
||||
_metadata: {
|
||||
hasHydrationScript: false,
|
||||
hasRenderedHead: false,
|
||||
hasDirectives: /* @__PURE__ */ new Set(),
|
||||
headInTree: false,
|
||||
extraHead: [],
|
||||
propagators: /* @__PURE__ */ new Map()
|
||||
}
|
||||
};
|
||||
return result;
|
||||
}
|
||||
export {
|
||||
createResult
|
||||
};
|
31
node_modules/astro/dist/core/render/route-cache.d.ts
generated
vendored
Normal file
31
node_modules/astro/dist/core/render/route-cache.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
import type { ComponentInstance, GetStaticPathsItem, GetStaticPathsResultKeyed, Params, RouteData, RuntimeMode } from '../../@types/astro';
|
||||
import { type LogOptions } from '../logger/core.js';
|
||||
interface CallGetStaticPathsOptions {
|
||||
mod: ComponentInstance;
|
||||
route: RouteData;
|
||||
routeCache: RouteCache;
|
||||
isValidate: boolean;
|
||||
logging: LogOptions;
|
||||
ssr: boolean;
|
||||
}
|
||||
export declare function callGetStaticPaths({ mod, route, routeCache, isValidate, logging, ssr, }: CallGetStaticPathsOptions): Promise<GetStaticPathsResultKeyed>;
|
||||
interface RouteCacheEntry {
|
||||
staticPaths: GetStaticPathsResultKeyed;
|
||||
}
|
||||
/**
|
||||
* Manage the route cache, responsible for caching data related to each route,
|
||||
* including the result of calling getStaticPath() so that it can be reused across
|
||||
* responses during dev and only ever called once during build.
|
||||
*/
|
||||
export declare class RouteCache {
|
||||
private logging;
|
||||
private cache;
|
||||
private mode;
|
||||
constructor(logging: LogOptions, mode?: RuntimeMode);
|
||||
/** Clear the cache. */
|
||||
clearAll(): void;
|
||||
set(route: RouteData, entry: RouteCacheEntry): void;
|
||||
get(route: RouteData): RouteCacheEntry | undefined;
|
||||
}
|
||||
export declare function findPathItemByKey(staticPaths: GetStaticPathsResultKeyed, params: Params, route: RouteData): GetStaticPathsItem | undefined;
|
||||
export {};
|
85
node_modules/astro/dist/core/render/route-cache.js
generated
vendored
Normal file
85
node_modules/astro/dist/core/render/route-cache.js
generated
vendored
Normal file
|
@ -0,0 +1,85 @@
|
|||
import { AstroError, AstroErrorData } from "../errors/index.js";
|
||||
import { debug, warn } from "../logger/core.js";
|
||||
import { stringifyParams } from "../routing/params.js";
|
||||
import { validateDynamicRouteModule, validateGetStaticPathsResult } from "../routing/validation.js";
|
||||
import { generatePaginateFunction } from "./paginate.js";
|
||||
async function callGetStaticPaths({
|
||||
mod,
|
||||
route,
|
||||
routeCache,
|
||||
isValidate,
|
||||
logging,
|
||||
ssr
|
||||
}) {
|
||||
const cached = routeCache.get(route);
|
||||
if (cached == null ? void 0 : cached.staticPaths)
|
||||
return cached.staticPaths;
|
||||
validateDynamicRouteModule(mod, { ssr, logging, route });
|
||||
if (ssr && !route.prerender) {
|
||||
const entry = Object.assign([], { keyed: /* @__PURE__ */ new Map() });
|
||||
routeCache.set(route, { ...cached, staticPaths: entry });
|
||||
return entry;
|
||||
}
|
||||
if (!mod.getStaticPaths) {
|
||||
throw new Error("Unexpected Error.");
|
||||
}
|
||||
let staticPaths = [];
|
||||
staticPaths = await mod.getStaticPaths({
|
||||
paginate: generatePaginateFunction(route),
|
||||
rss() {
|
||||
throw new AstroError(AstroErrorData.GetStaticPathsRemovedRSSHelper);
|
||||
}
|
||||
});
|
||||
if (Array.isArray(staticPaths)) {
|
||||
staticPaths = staticPaths.flat();
|
||||
}
|
||||
if (isValidate) {
|
||||
validateGetStaticPathsResult(staticPaths, logging, route);
|
||||
}
|
||||
const keyedStaticPaths = staticPaths;
|
||||
keyedStaticPaths.keyed = /* @__PURE__ */ new Map();
|
||||
for (const sp of keyedStaticPaths) {
|
||||
const paramsKey = stringifyParams(sp.params, route);
|
||||
keyedStaticPaths.keyed.set(paramsKey, sp);
|
||||
}
|
||||
routeCache.set(route, { ...cached, staticPaths: keyedStaticPaths });
|
||||
return keyedStaticPaths;
|
||||
}
|
||||
class RouteCache {
|
||||
constructor(logging, mode = "production") {
|
||||
this.cache = {};
|
||||
this.logging = logging;
|
||||
this.mode = mode;
|
||||
}
|
||||
/** Clear the cache. */
|
||||
clearAll() {
|
||||
this.cache = {};
|
||||
}
|
||||
set(route, entry) {
|
||||
var _a;
|
||||
if (this.mode === "production" && ((_a = this.cache[route.component]) == null ? void 0 : _a.staticPaths)) {
|
||||
warn(
|
||||
this.logging,
|
||||
"routeCache",
|
||||
`Internal Warning: route cache overwritten. (${route.component})`
|
||||
);
|
||||
}
|
||||
this.cache[route.component] = entry;
|
||||
}
|
||||
get(route) {
|
||||
return this.cache[route.component];
|
||||
}
|
||||
}
|
||||
function findPathItemByKey(staticPaths, params, route) {
|
||||
const paramsKey = stringifyParams(params, route);
|
||||
const matchedStaticPath = staticPaths.keyed.get(paramsKey);
|
||||
if (matchedStaticPath) {
|
||||
return matchedStaticPath;
|
||||
}
|
||||
debug("findPathItemByKey", `Unexpected cache miss looking for ${paramsKey}`);
|
||||
}
|
||||
export {
|
||||
RouteCache,
|
||||
callGetStaticPaths,
|
||||
findPathItemByKey
|
||||
};
|
15
node_modules/astro/dist/core/render/ssr-element.d.ts
generated
vendored
Normal file
15
node_modules/astro/dist/core/render/ssr-element.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
import type { SSRElement } from '../../@types/astro';
|
||||
import type { StylesheetAsset } from '../app/types';
|
||||
export declare function createAssetLink(href: string, base?: string, assetsPrefix?: string): string;
|
||||
export declare function createStylesheetElement(stylesheet: StylesheetAsset, base?: string, assetsPrefix?: string): SSRElement;
|
||||
export declare function createStylesheetElementSet(stylesheets: StylesheetAsset[], base?: string, assetsPrefix?: string): Set<SSRElement>;
|
||||
export declare function createModuleScriptElement(script: {
|
||||
type: 'inline' | 'external';
|
||||
value: string;
|
||||
}, base?: string, assetsPrefix?: string): SSRElement;
|
||||
export declare function createModuleScriptElementWithSrc(src: string, base?: string, assetsPrefix?: string): SSRElement;
|
||||
export declare function createModuleScriptElementWithSrcSet(srces: string[], site?: string, assetsPrefix?: string): Set<SSRElement>;
|
||||
export declare function createModuleScriptsSet(scripts: {
|
||||
type: 'inline' | 'external';
|
||||
value: string;
|
||||
}[], base?: string, assetsPrefix?: string): Set<SSRElement>;
|
71
node_modules/astro/dist/core/render/ssr-element.js
generated
vendored
Normal file
71
node_modules/astro/dist/core/render/ssr-element.js
generated
vendored
Normal file
|
@ -0,0 +1,71 @@
|
|||
import { joinPaths, prependForwardSlash, slash } from "../../core/path.js";
|
||||
function createAssetLink(href, base, assetsPrefix) {
|
||||
if (assetsPrefix) {
|
||||
return joinPaths(assetsPrefix, slash(href));
|
||||
} else if (base) {
|
||||
return prependForwardSlash(joinPaths(base, slash(href)));
|
||||
} else {
|
||||
return href;
|
||||
}
|
||||
}
|
||||
function createStylesheetElement(stylesheet, base, assetsPrefix) {
|
||||
if (stylesheet.type === "inline") {
|
||||
return {
|
||||
props: {
|
||||
type: "text/css"
|
||||
},
|
||||
children: stylesheet.content
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
props: {
|
||||
rel: "stylesheet",
|
||||
href: createAssetLink(stylesheet.src, base, assetsPrefix)
|
||||
},
|
||||
children: ""
|
||||
};
|
||||
}
|
||||
}
|
||||
function createStylesheetElementSet(stylesheets, base, assetsPrefix) {
|
||||
return new Set(stylesheets.map((s) => createStylesheetElement(s, base, assetsPrefix)));
|
||||
}
|
||||
function createModuleScriptElement(script, base, assetsPrefix) {
|
||||
if (script.type === "external") {
|
||||
return createModuleScriptElementWithSrc(script.value, base, assetsPrefix);
|
||||
} else {
|
||||
return {
|
||||
props: {
|
||||
type: "module"
|
||||
},
|
||||
children: script.value
|
||||
};
|
||||
}
|
||||
}
|
||||
function createModuleScriptElementWithSrc(src, base, assetsPrefix) {
|
||||
return {
|
||||
props: {
|
||||
type: "module",
|
||||
src: createAssetLink(src, base, assetsPrefix)
|
||||
},
|
||||
children: ""
|
||||
};
|
||||
}
|
||||
function createModuleScriptElementWithSrcSet(srces, site, assetsPrefix) {
|
||||
return new Set(
|
||||
srces.map((src) => createModuleScriptElementWithSrc(src, site, assetsPrefix))
|
||||
);
|
||||
}
|
||||
function createModuleScriptsSet(scripts, base, assetsPrefix) {
|
||||
return new Set(
|
||||
scripts.map((script) => createModuleScriptElement(script, base, assetsPrefix))
|
||||
);
|
||||
}
|
||||
export {
|
||||
createAssetLink,
|
||||
createModuleScriptElement,
|
||||
createModuleScriptElementWithSrc,
|
||||
createModuleScriptElementWithSrcSet,
|
||||
createModuleScriptsSet,
|
||||
createStylesheetElement,
|
||||
createStylesheetElementSet
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue