astro 1.6.2 → 1.6.3
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/dist/@types/typed-emitter.d.ts +42 -0
- package/dist/@types/typed-emitter.js +0 -0
- package/dist/cli/index.js +13 -51
- package/dist/core/build/generate.js +10 -6
- package/dist/core/compile/compile.d.ts +3 -3
- package/dist/core/compile/compile.js +15 -10
- package/dist/core/compile/style.d.ts +7 -4
- package/dist/core/compile/style.js +65 -12
- package/dist/core/config/config.d.ts +7 -3
- package/dist/core/config/config.js +15 -12
- package/dist/core/config/index.d.ts +2 -2
- package/dist/core/config/index.js +4 -1
- package/dist/core/config/schema.d.ts +69 -69
- package/dist/core/config/settings.d.ts +3 -1
- package/dist/core/config/settings.js +23 -5
- package/dist/core/constants.js +1 -1
- package/dist/core/create-vite.d.ts +4 -1
- package/dist/core/create-vite.js +7 -4
- package/dist/core/dev/container.d.ts +36 -0
- package/dist/core/dev/container.js +109 -0
- package/dist/core/dev/dev.d.ts +24 -0
- package/dist/core/dev/dev.js +55 -0
- package/dist/core/dev/index.d.ts +3 -18
- package/dist/core/dev/index.js +8 -81
- package/dist/core/dev/restart.d.ts +25 -0
- package/dist/core/dev/restart.js +143 -0
- package/dist/core/endpoint/index.d.ts +2 -1
- package/dist/core/endpoint/index.js +12 -1
- package/dist/core/errors/dev/vite.d.ts +3 -2
- package/dist/core/errors/dev/vite.js +4 -6
- package/dist/core/messages.js +2 -2
- package/dist/core/module-loader/index.d.ts +3 -0
- package/dist/core/module-loader/index.js +6 -0
- package/dist/core/module-loader/loader.d.ts +42 -0
- package/dist/core/module-loader/loader.js +39 -0
- package/dist/core/module-loader/vite.d.ts +3 -0
- package/dist/core/module-loader/vite.js +62 -0
- package/dist/core/render/dev/css.d.ts +2 -2
- package/dist/core/render/dev/css.js +3 -3
- package/dist/core/render/dev/environment.d.ts +3 -3
- package/dist/core/render/dev/environment.js +3 -3
- package/dist/core/render/dev/index.d.ts +4 -4
- package/dist/core/render/dev/index.js +8 -8
- package/dist/core/render/dev/resolve.d.ts +2 -2
- package/dist/core/render/dev/resolve.js +2 -2
- package/dist/core/render/dev/scripts.d.ts +2 -2
- package/dist/core/render/dev/scripts.js +4 -4
- package/dist/core/render/dev/vite.d.ts +2 -2
- package/dist/core/render/dev/vite.js +5 -5
- package/dist/core/routing/manifest/create.d.ts +10 -3
- package/dist/core/routing/manifest/create.js +7 -6
- package/dist/core/util.d.ts +3 -4
- package/dist/core/util.js +10 -17
- package/dist/vite-plugin-astro/index.js +9 -20
- package/dist/vite-plugin-astro-postprocess/index.js +1 -1
- package/dist/vite-plugin-astro-server/base.d.ts +4 -0
- package/dist/vite-plugin-astro-server/base.js +36 -0
- package/dist/vite-plugin-astro-server/common.d.ts +2 -0
- package/dist/vite-plugin-astro-server/common.js +8 -0
- package/dist/vite-plugin-astro-server/controller.d.ts +26 -0
- package/dist/vite-plugin-astro-server/controller.js +77 -0
- package/dist/vite-plugin-astro-server/index.d.ts +3 -10
- package/dist/vite-plugin-astro-server/index.js +7 -336
- package/dist/vite-plugin-astro-server/plugin.d.ts +11 -0
- package/dist/vite-plugin-astro-server/plugin.js +54 -0
- package/dist/vite-plugin-astro-server/request.d.ts +7 -0
- package/dist/vite-plugin-astro-server/request.js +52 -0
- package/dist/vite-plugin-astro-server/response.d.ts +9 -0
- package/dist/vite-plugin-astro-server/response.js +85 -0
- package/dist/vite-plugin-astro-server/route.d.ts +13 -0
- package/dist/vite-plugin-astro-server/route.js +144 -0
- package/dist/vite-plugin-astro-server/server-state.d.ts +15 -0
- package/dist/vite-plugin-astro-server/server-state.js +42 -0
- package/dist/vite-plugin-jsx/index.js +2 -2
- package/dist/vite-plugin-load-fallback/index.d.ts +9 -0
- package/dist/vite-plugin-load-fallback/index.js +26 -0
- package/dist/vite-plugin-markdown/index.js +1 -1
- package/dist/vite-plugin-markdown-legacy/index.js +8 -24
- package/package.json +4 -2
- package/types.d.ts +1 -1
- package/dist/vite-style-transform/index.d.ts +0 -2
- package/dist/vite-style-transform/index.js +0 -5
- package/dist/vite-style-transform/style-transform.d.ts +0 -10
- package/dist/vite-style-transform/style-transform.js +0 -80
- package/dist/vite-style-transform/transform-with-vite.d.ts +0 -18
- package/dist/vite-style-transform/transform-with-vite.js +0 -33
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import mime from "mime";
|
|
2
|
+
import { attachToResponse } from "../core/cookies/index.js";
|
|
3
|
+
import { call as callEndpoint } from "../core/endpoint/dev/index.js";
|
|
4
|
+
import { throwIfRedirectNotAllowed } from "../core/endpoint/index.js";
|
|
5
|
+
import { warn } from "../core/logger/core.js";
|
|
6
|
+
import { appendForwardSlash } from "../core/path.js";
|
|
7
|
+
import { preload, renderPage } from "../core/render/dev/index.js";
|
|
8
|
+
import { getParamsAndProps, GetParamsAndPropsError } from "../core/render/index.js";
|
|
9
|
+
import { createRequest } from "../core/request.js";
|
|
10
|
+
import { matchAllRoutes } from "../core/routing/index.js";
|
|
11
|
+
import { resolvePages } from "../core/util.js";
|
|
12
|
+
import { log404 } from "./common.js";
|
|
13
|
+
import { handle404Response, writeSSRResult, writeWebResponse } from "./response.js";
|
|
14
|
+
function getCustom404Route({ config }, manifest) {
|
|
15
|
+
const relPages = resolvePages(config).href.replace(config.root.href, "");
|
|
16
|
+
const pattern = new RegExp(`${appendForwardSlash(relPages)}404.(astro|md)`);
|
|
17
|
+
return manifest.routes.find((r) => r.component.match(pattern));
|
|
18
|
+
}
|
|
19
|
+
async function matchRoute(pathname, env, manifest) {
|
|
20
|
+
const { logging, settings, routeCache } = env;
|
|
21
|
+
const matches = matchAllRoutes(pathname, manifest);
|
|
22
|
+
for await (const maybeRoute of matches) {
|
|
23
|
+
const filePath = new URL(`./${maybeRoute.component}`, settings.config.root);
|
|
24
|
+
const preloadedComponent = await preload({ env, filePath });
|
|
25
|
+
const [, mod] = preloadedComponent;
|
|
26
|
+
const paramsAndPropsRes = await getParamsAndProps({
|
|
27
|
+
mod,
|
|
28
|
+
route: maybeRoute,
|
|
29
|
+
routeCache,
|
|
30
|
+
pathname,
|
|
31
|
+
logging,
|
|
32
|
+
ssr: settings.config.output === "server"
|
|
33
|
+
});
|
|
34
|
+
if (paramsAndPropsRes !== GetParamsAndPropsError.NoMatchingStaticPath) {
|
|
35
|
+
return {
|
|
36
|
+
route: maybeRoute,
|
|
37
|
+
filePath,
|
|
38
|
+
preloadedComponent,
|
|
39
|
+
mod
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (matches.length) {
|
|
44
|
+
warn(
|
|
45
|
+
logging,
|
|
46
|
+
"getStaticPaths",
|
|
47
|
+
`Route pattern matched, but no matching static path found. (${pathname})`
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
log404(logging, pathname);
|
|
51
|
+
const custom404 = getCustom404Route(settings, manifest);
|
|
52
|
+
if (custom404) {
|
|
53
|
+
const filePath = new URL(`./${custom404.component}`, settings.config.root);
|
|
54
|
+
const preloadedComponent = await preload({ env, filePath });
|
|
55
|
+
const [, mod] = preloadedComponent;
|
|
56
|
+
return {
|
|
57
|
+
route: custom404,
|
|
58
|
+
filePath,
|
|
59
|
+
preloadedComponent,
|
|
60
|
+
mod
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return void 0;
|
|
64
|
+
}
|
|
65
|
+
async function handleRoute(matchedRoute, url, pathname, body, origin, env, manifest, req, res) {
|
|
66
|
+
const { logging, settings } = env;
|
|
67
|
+
if (!matchedRoute) {
|
|
68
|
+
return handle404Response(origin, req, res);
|
|
69
|
+
}
|
|
70
|
+
const { config } = settings;
|
|
71
|
+
const filePath = matchedRoute.filePath;
|
|
72
|
+
const { route, preloadedComponent, mod } = matchedRoute;
|
|
73
|
+
const buildingToSSR = config.output === "server";
|
|
74
|
+
const request = createRequest({
|
|
75
|
+
url,
|
|
76
|
+
headers: buildingToSSR ? req.headers : new Headers(),
|
|
77
|
+
method: req.method,
|
|
78
|
+
body,
|
|
79
|
+
logging,
|
|
80
|
+
ssr: buildingToSSR,
|
|
81
|
+
clientAddress: buildingToSSR ? req.socket.remoteAddress : void 0
|
|
82
|
+
});
|
|
83
|
+
const paramsAndPropsRes = await getParamsAndProps({
|
|
84
|
+
mod,
|
|
85
|
+
route,
|
|
86
|
+
routeCache: env.routeCache,
|
|
87
|
+
pathname,
|
|
88
|
+
logging,
|
|
89
|
+
ssr: config.output === "server"
|
|
90
|
+
});
|
|
91
|
+
const options = {
|
|
92
|
+
env,
|
|
93
|
+
filePath,
|
|
94
|
+
origin,
|
|
95
|
+
preload: preloadedComponent,
|
|
96
|
+
pathname,
|
|
97
|
+
request,
|
|
98
|
+
route
|
|
99
|
+
};
|
|
100
|
+
if (route.type === "endpoint") {
|
|
101
|
+
const result = await callEndpoint(options);
|
|
102
|
+
if (result.type === "response") {
|
|
103
|
+
if (result.response.headers.get("X-Astro-Response") === "Not-Found") {
|
|
104
|
+
const fourOhFourRoute = await matchRoute("/404", env, manifest);
|
|
105
|
+
return handleRoute(
|
|
106
|
+
fourOhFourRoute,
|
|
107
|
+
new URL("/404", url),
|
|
108
|
+
"/404",
|
|
109
|
+
body,
|
|
110
|
+
origin,
|
|
111
|
+
env,
|
|
112
|
+
manifest,
|
|
113
|
+
req,
|
|
114
|
+
res
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
throwIfRedirectNotAllowed(result.response, config);
|
|
118
|
+
await writeWebResponse(res, result.response);
|
|
119
|
+
} else {
|
|
120
|
+
let contentType = "text/plain";
|
|
121
|
+
const filepath = route.pathname || route.segments.map((segment) => segment.map((p) => p.content).join("")).join("/");
|
|
122
|
+
const computedMimeType = mime.getType(filepath);
|
|
123
|
+
if (computedMimeType) {
|
|
124
|
+
contentType = computedMimeType;
|
|
125
|
+
}
|
|
126
|
+
const response = new Response(result.body, {
|
|
127
|
+
status: 200,
|
|
128
|
+
headers: {
|
|
129
|
+
"Content-Type": `${contentType};charset=utf-8`
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
attachToResponse(response, result.cookies);
|
|
133
|
+
await writeWebResponse(res, response);
|
|
134
|
+
}
|
|
135
|
+
} else {
|
|
136
|
+
const result = await renderPage(options);
|
|
137
|
+
throwIfRedirectNotAllowed(result, config);
|
|
138
|
+
return await writeSSRResult(result, res);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
export {
|
|
142
|
+
handleRoute,
|
|
143
|
+
matchRoute
|
|
144
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare type ErrorState = 'fresh' | 'error';
|
|
2
|
+
export interface RouteState {
|
|
3
|
+
state: ErrorState;
|
|
4
|
+
error?: Error;
|
|
5
|
+
}
|
|
6
|
+
export interface ServerState {
|
|
7
|
+
routes: Map<string, RouteState>;
|
|
8
|
+
state: ErrorState;
|
|
9
|
+
error?: Error;
|
|
10
|
+
}
|
|
11
|
+
export declare function createServerState(): ServerState;
|
|
12
|
+
export declare function hasAnyFailureState(serverState: ServerState): boolean;
|
|
13
|
+
export declare function setRouteError(serverState: ServerState, pathname: string, error: Error): void;
|
|
14
|
+
export declare function setServerError(serverState: ServerState, error: Error): void;
|
|
15
|
+
export declare function clearRouteError(serverState: ServerState, pathname: string): void;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
function createServerState() {
|
|
2
|
+
return {
|
|
3
|
+
routes: /* @__PURE__ */ new Map(),
|
|
4
|
+
state: "fresh"
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
function hasAnyFailureState(serverState) {
|
|
8
|
+
return serverState.state !== "fresh";
|
|
9
|
+
}
|
|
10
|
+
function setRouteError(serverState, pathname, error) {
|
|
11
|
+
if (serverState.routes.has(pathname)) {
|
|
12
|
+
const routeState = serverState.routes.get(pathname);
|
|
13
|
+
routeState.state = "error";
|
|
14
|
+
routeState.error = error;
|
|
15
|
+
} else {
|
|
16
|
+
const routeState = {
|
|
17
|
+
state: "error",
|
|
18
|
+
error
|
|
19
|
+
};
|
|
20
|
+
serverState.routes.set(pathname, routeState);
|
|
21
|
+
}
|
|
22
|
+
serverState.state = "error";
|
|
23
|
+
serverState.error = error;
|
|
24
|
+
}
|
|
25
|
+
function setServerError(serverState, error) {
|
|
26
|
+
serverState.state = "error";
|
|
27
|
+
serverState.error = error;
|
|
28
|
+
}
|
|
29
|
+
function clearRouteError(serverState, pathname) {
|
|
30
|
+
if (serverState.routes.has(pathname)) {
|
|
31
|
+
serverState.routes.delete(pathname);
|
|
32
|
+
}
|
|
33
|
+
serverState.state = "fresh";
|
|
34
|
+
serverState.error = void 0;
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
clearRouteError,
|
|
38
|
+
createServerState,
|
|
39
|
+
hasAnyFailureState,
|
|
40
|
+
setRouteError,
|
|
41
|
+
setServerError
|
|
42
|
+
};
|
|
@@ -4,7 +4,7 @@ import esbuild from "esbuild";
|
|
|
4
4
|
import * as colors from "kleur/colors";
|
|
5
5
|
import path from "path";
|
|
6
6
|
import { error } from "../core/logger/core.js";
|
|
7
|
-
import {
|
|
7
|
+
import { parseNpmName } from "../core/util.js";
|
|
8
8
|
import tagExportsPlugin from "./tag.js";
|
|
9
9
|
const JSX_EXTENSIONS = /* @__PURE__ */ new Set([".jsx", ".tsx", ".mdx"]);
|
|
10
10
|
const IMPORT_STATEMENTS = {
|
|
@@ -131,7 +131,7 @@ function jsx({ settings, logging }) {
|
|
|
131
131
|
return null;
|
|
132
132
|
}
|
|
133
133
|
const { mode } = viteConfig;
|
|
134
|
-
if (id.
|
|
134
|
+
if (id.endsWith(".mdx")) {
|
|
135
135
|
const { code: jsxCode2 } = await esbuild.transform(code, {
|
|
136
136
|
loader: getEsbuildLoader(path.extname(id)),
|
|
137
137
|
jsx: "preserve",
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import nodeFs from 'fs';
|
|
3
|
+
import type * as vite from 'vite';
|
|
4
|
+
declare type NodeFileSystemModule = typeof nodeFs;
|
|
5
|
+
export interface LoadFallbackPluginParams {
|
|
6
|
+
fs?: NodeFileSystemModule;
|
|
7
|
+
}
|
|
8
|
+
export default function loadFallbackPlugin({ fs }: LoadFallbackPluginParams): vite.Plugin | false;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import nodeFs from "fs";
|
|
2
|
+
function loadFallbackPlugin({ fs }) {
|
|
3
|
+
if (!fs || fs === nodeFs) {
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
return {
|
|
7
|
+
name: "astro:load-fallback",
|
|
8
|
+
enforce: "post",
|
|
9
|
+
async load(id) {
|
|
10
|
+
try {
|
|
11
|
+
return await fs.promises.readFile(cleanUrl(id), "utf-8");
|
|
12
|
+
} catch (e) {
|
|
13
|
+
try {
|
|
14
|
+
return await fs.promises.readFile(id, "utf-8");
|
|
15
|
+
} catch (e2) {
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const queryRE = /\?.*$/s;
|
|
22
|
+
const hashRE = /#.*$/s;
|
|
23
|
+
const cleanUrl = (url) => url.replace(hashRE, "").replace(queryRE, "");
|
|
24
|
+
export {
|
|
25
|
+
loadFallbackPlugin as default
|
|
26
|
+
};
|
|
@@ -39,7 +39,7 @@ function markdown({ settings, logging }) {
|
|
|
39
39
|
enforce: "pre",
|
|
40
40
|
name: "astro:markdown",
|
|
41
41
|
async load(id) {
|
|
42
|
-
if (isMarkdownFile(id
|
|
42
|
+
if (isMarkdownFile(id)) {
|
|
43
43
|
const { fileId, fileUrl } = getFileInfo(id, settings.config);
|
|
44
44
|
const rawFile = await fs.promises.readFile(fileId, "utf-8");
|
|
45
45
|
const raw = safeMatter(rawFile, id);
|
|
@@ -9,10 +9,6 @@ import { cachedCompilation } from "../core/compile/index.js";
|
|
|
9
9
|
import { AstroErrorCodes, MarkdownError } from "../core/errors/index.js";
|
|
10
10
|
import { isMarkdownFile } from "../core/util.js";
|
|
11
11
|
import { getFileInfo } from "../vite-plugin-utils/index.js";
|
|
12
|
-
import {
|
|
13
|
-
createTransformStyles,
|
|
14
|
-
createViteStyleTransformer
|
|
15
|
-
} from "../vite-style-transform/index.js";
|
|
16
12
|
const MARKDOWN_IMPORT_FLAG = "?mdImport";
|
|
17
13
|
const MARKDOWN_CONTENT_FLAG = "?content";
|
|
18
14
|
function safeMatter(source, id) {
|
|
@@ -62,23 +58,16 @@ function markdown({ settings }) {
|
|
|
62
58
|
}
|
|
63
59
|
return false;
|
|
64
60
|
}
|
|
65
|
-
let
|
|
66
|
-
let viteDevServer;
|
|
61
|
+
let resolvedConfig;
|
|
67
62
|
return {
|
|
68
63
|
name: "astro:markdown",
|
|
69
64
|
enforce: "pre",
|
|
70
|
-
configResolved(_resolvedConfig) {
|
|
71
|
-
styleTransformer = createViteStyleTransformer(_resolvedConfig);
|
|
72
|
-
},
|
|
73
|
-
configureServer(server) {
|
|
74
|
-
styleTransformer.viteDevServer = server;
|
|
75
|
-
},
|
|
76
65
|
async resolveId(id, importer, options) {
|
|
77
|
-
if (isMarkdownFile(id, {
|
|
66
|
+
if (isMarkdownFile(id, { suffix: MARKDOWN_CONTENT_FLAG })) {
|
|
78
67
|
const resolvedId = await this.resolve(id, importer, { skipSelf: true, ...options });
|
|
79
68
|
return resolvedId == null ? void 0 : resolvedId.id.replace(MARKDOWN_CONTENT_FLAG, "");
|
|
80
69
|
}
|
|
81
|
-
if (isMarkdownFile(id
|
|
70
|
+
if (isMarkdownFile(id) && !isRootImport(importer)) {
|
|
82
71
|
const resolvedId = await this.resolve(id, importer, { skipSelf: true, ...options });
|
|
83
72
|
if (resolvedId) {
|
|
84
73
|
return resolvedId.id + MARKDOWN_IMPORT_FLAG;
|
|
@@ -87,7 +76,7 @@ function markdown({ settings }) {
|
|
|
87
76
|
return void 0;
|
|
88
77
|
},
|
|
89
78
|
async load(id, opts) {
|
|
90
|
-
if (isMarkdownFile(id, {
|
|
79
|
+
if (isMarkdownFile(id, { suffix: MARKDOWN_IMPORT_FLAG })) {
|
|
91
80
|
const { fileId, fileUrl } = getFileInfo(id, config);
|
|
92
81
|
const source = await fs.promises.readFile(fileId, "utf8");
|
|
93
82
|
const { data: frontmatter, content: rawContent } = safeMatter(source, fileId);
|
|
@@ -122,7 +111,7 @@ function markdown({ settings }) {
|
|
|
122
111
|
map: null
|
|
123
112
|
};
|
|
124
113
|
}
|
|
125
|
-
if (isMarkdownFile(id
|
|
114
|
+
if (isMarkdownFile(id)) {
|
|
126
115
|
const filename = normalizeFilename(id);
|
|
127
116
|
const source = await fs.promises.readFile(filename, "utf8");
|
|
128
117
|
const renderOpts = config.markdown;
|
|
@@ -176,15 +165,10 @@ ${astroResult}
|
|
|
176
165
|
<head></head>${astroResult}`;
|
|
177
166
|
}
|
|
178
167
|
const compileProps = {
|
|
179
|
-
config,
|
|
168
|
+
astroConfig: config,
|
|
169
|
+
viteConfig: resolvedConfig,
|
|
180
170
|
filename,
|
|
181
|
-
source: astroResult
|
|
182
|
-
transformStyle: createTransformStyles(
|
|
183
|
-
styleTransformer,
|
|
184
|
-
filename,
|
|
185
|
-
Boolean(opts == null ? void 0 : opts.ssr),
|
|
186
|
-
this
|
|
187
|
-
)
|
|
171
|
+
source: astroResult
|
|
188
172
|
};
|
|
189
173
|
let transformResult = await cachedCompilation(compileProps);
|
|
190
174
|
let { code: tsResult } = transformResult;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "astro",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.3",
|
|
4
4
|
"description": "Astro is a modern site builder with web best practices, performance, and DX front-of-mind.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "withastro",
|
|
@@ -176,8 +176,10 @@
|
|
|
176
176
|
"astro-scripts": "0.0.9",
|
|
177
177
|
"chai": "^4.3.6",
|
|
178
178
|
"cheerio": "^1.0.0-rc.11",
|
|
179
|
+
"memfs": "^3.4.7",
|
|
179
180
|
"mocha": "^9.2.2",
|
|
180
181
|
"node-fetch": "^3.2.5",
|
|
182
|
+
"node-mocks-http": "^1.11.0",
|
|
181
183
|
"rehype-autolink-headings": "^6.1.1",
|
|
182
184
|
"rehype-slug": "^5.0.1",
|
|
183
185
|
"rehype-toc": "^3.0.2",
|
|
@@ -197,7 +199,7 @@
|
|
|
197
199
|
"dev": "astro-scripts dev --prebuild \"src/runtime/server/astro-island.ts\" --prebuild \"src/runtime/client/{idle,load,media,only,visible}.ts\" \"src/**/*.ts\"",
|
|
198
200
|
"postbuild": "astro-scripts copy \"src/**/*.astro\"",
|
|
199
201
|
"benchmark": "node test/benchmark/dev.bench.js && node test/benchmark/build.bench.js",
|
|
200
|
-
"test:unit": "mocha --exit --timeout
|
|
202
|
+
"test:unit": "mocha --exit --timeout 30000 ./test/units/**/*.test.js",
|
|
201
203
|
"test": "pnpm run test:unit && mocha --exit --timeout 20000 --ignore **/lit-element.test.js && mocha --timeout 20000 **/lit-element.test.js",
|
|
202
204
|
"test:match": "mocha --timeout 20000 -g",
|
|
203
205
|
"test:e2e": "playwright test",
|
package/types.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export type HTMLTag = keyof astroHTML.JSX.DefinedIntrinsicElements;
|
|
|
6
6
|
/** The built-in attributes for any known HTML or SVG element name */
|
|
7
7
|
export type HTMLAttributes<Tag extends HTMLTag> = Omit<
|
|
8
8
|
astroHTML.JSX.IntrinsicElements[Tag],
|
|
9
|
-
keyof AstroBuiltinAttributes
|
|
9
|
+
keyof Omit<AstroBuiltinAttributes, 'class:list'>
|
|
10
10
|
>;
|
|
11
11
|
|
|
12
12
|
// TODO: Enable generic/polymorphic types once compiler output stabilizes in the Language Server
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { PluginContext } from 'rollup';
|
|
2
|
-
import type { TransformStyle } from '../core/compile/index';
|
|
3
|
-
import { TransformStyleWithVite } from './transform-with-vite.js';
|
|
4
|
-
import type * as vite from 'vite';
|
|
5
|
-
export declare type ViteStyleTransformer = {
|
|
6
|
-
viteDevServer?: vite.ViteDevServer;
|
|
7
|
-
transformStyleWithVite: TransformStyleWithVite;
|
|
8
|
-
};
|
|
9
|
-
export declare function createViteStyleTransformer(viteConfig: vite.ResolvedConfig): ViteStyleTransformer;
|
|
10
|
-
export declare function createTransformStyles(viteStyleTransformer: ViteStyleTransformer, filename: string, ssr: boolean, pluginContext?: PluginContext): TransformStyle;
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { fileURLToPath } from "url";
|
|
2
|
-
import { createTransformStyleWithViteFn } from "./transform-with-vite.js";
|
|
3
|
-
import { readFileSync } from "fs";
|
|
4
|
-
import { AstroErrorCodes } from "../core/errors/codes.js";
|
|
5
|
-
import { CSSError } from "../core/errors/errors.js";
|
|
6
|
-
import { positionAt } from "../core/errors/index.js";
|
|
7
|
-
function createViteStyleTransformer(viteConfig) {
|
|
8
|
-
return {
|
|
9
|
-
transformStyleWithVite: createTransformStyleWithViteFn(viteConfig)
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
function getNormalizedIDForPostCSS(filename) {
|
|
13
|
-
try {
|
|
14
|
-
const filenameURL = new URL(`file://${filename}`);
|
|
15
|
-
return fileURLToPath(filenameURL);
|
|
16
|
-
} catch (err) {
|
|
17
|
-
return filename;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function createTransformStyles(viteStyleTransformer, filename, ssr, pluginContext) {
|
|
21
|
-
const normalizedID = getNormalizedIDForPostCSS(filename);
|
|
22
|
-
return async function(styleSource, lang) {
|
|
23
|
-
var _a;
|
|
24
|
-
let result;
|
|
25
|
-
try {
|
|
26
|
-
result = await viteStyleTransformer.transformStyleWithVite.call(pluginContext, {
|
|
27
|
-
id: normalizedID,
|
|
28
|
-
source: styleSource,
|
|
29
|
-
lang,
|
|
30
|
-
ssr,
|
|
31
|
-
viteDevServer: viteStyleTransformer.viteDevServer
|
|
32
|
-
});
|
|
33
|
-
} catch (err) {
|
|
34
|
-
const fileContent = readFileSync(filename).toString();
|
|
35
|
-
const styleTagBeginning = fileContent.indexOf(((_a = err.input) == null ? void 0 : _a.source) ?? err.code);
|
|
36
|
-
if (err.name === "CssSyntaxError") {
|
|
37
|
-
const errorLine = positionAt(styleTagBeginning, fileContent).line + (err.line ?? 0);
|
|
38
|
-
throw new CSSError({
|
|
39
|
-
errorCode: AstroErrorCodes.CssSyntaxError,
|
|
40
|
-
message: err.reason,
|
|
41
|
-
location: {
|
|
42
|
-
file: filename,
|
|
43
|
-
line: errorLine,
|
|
44
|
-
column: err.column
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
if (err.line && err.column) {
|
|
49
|
-
const errorLine = positionAt(styleTagBeginning, fileContent).line + (err.line ?? 0);
|
|
50
|
-
throw new CSSError({
|
|
51
|
-
errorCode: AstroErrorCodes.CssUnknownError,
|
|
52
|
-
message: err.message,
|
|
53
|
-
location: {
|
|
54
|
-
file: filename,
|
|
55
|
-
line: errorLine,
|
|
56
|
-
column: err.column
|
|
57
|
-
},
|
|
58
|
-
frame: err.frame
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
const errorPosition = positionAt(styleTagBeginning, fileContent);
|
|
62
|
-
errorPosition.line += 1;
|
|
63
|
-
throw new CSSError({
|
|
64
|
-
errorCode: AstroErrorCodes.CssUnknownError,
|
|
65
|
-
message: err.message,
|
|
66
|
-
location: {
|
|
67
|
-
file: filename,
|
|
68
|
-
line: errorPosition.line,
|
|
69
|
-
column: 0
|
|
70
|
-
},
|
|
71
|
-
frame: err.frame
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
return result;
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
export {
|
|
78
|
-
createTransformStyles,
|
|
79
|
-
createViteStyleTransformer
|
|
80
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type * as vite from 'vite';
|
|
2
|
-
export declare type TransformHook = (code: string, id: string, ssr?: boolean) => Promise<vite.TransformResult>;
|
|
3
|
-
interface TransformStyleWithViteOptions {
|
|
4
|
-
id: string;
|
|
5
|
-
source: string;
|
|
6
|
-
lang: string;
|
|
7
|
-
ssr?: boolean;
|
|
8
|
-
viteDevServer?: vite.ViteDevServer;
|
|
9
|
-
}
|
|
10
|
-
export interface TransformStyleWithVite {
|
|
11
|
-
(options: TransformStyleWithViteOptions): Promise<{
|
|
12
|
-
code: string;
|
|
13
|
-
map: vite.TransformResult['map'];
|
|
14
|
-
deps: Set<string>;
|
|
15
|
-
} | null>;
|
|
16
|
-
}
|
|
17
|
-
export declare function createTransformStyleWithViteFn(viteConfig: vite.ResolvedConfig): TransformStyleWithVite;
|
|
18
|
-
export {};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { STYLE_EXTENSIONS } from "../core/render/util.js";
|
|
2
|
-
function createTransformStyleWithViteFn(viteConfig) {
|
|
3
|
-
const viteCSSPlugin = viteConfig.plugins.find(({ name }) => name === "vite:css");
|
|
4
|
-
if (!viteCSSPlugin)
|
|
5
|
-
throw new Error(`vite:css plugin couldn't be found`);
|
|
6
|
-
if (!viteCSSPlugin.transform)
|
|
7
|
-
throw new Error(`vite:css has no transform() hook`);
|
|
8
|
-
const transformCss = viteCSSPlugin.transform;
|
|
9
|
-
return async function({ id, source, lang, ssr, viteDevServer }) {
|
|
10
|
-
if (!STYLE_EXTENSIONS.has(lang)) {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
const styleId = `${id}?astro&type=style&lang${lang}`;
|
|
14
|
-
viteDevServer == null ? void 0 : viteDevServer.moduleGraph.ensureEntryFromUrl(styleId, ssr, false);
|
|
15
|
-
const ctx = this ?? { addWatchFile: () => {
|
|
16
|
-
} };
|
|
17
|
-
const transformResult = await transformCss.call(ctx, source, styleId, ssr);
|
|
18
|
-
const { code, map } = transformResult;
|
|
19
|
-
const deps = /* @__PURE__ */ new Set();
|
|
20
|
-
const mod = viteDevServer == null ? void 0 : viteDevServer.moduleGraph.getModuleById(styleId);
|
|
21
|
-
if (mod) {
|
|
22
|
-
for (const imported of mod.importedModules) {
|
|
23
|
-
if (imported.file) {
|
|
24
|
-
deps.add(imported.file);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return { code, map, deps };
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
export {
|
|
32
|
-
createTransformStyleWithViteFn
|
|
33
|
-
};
|