astro 1.6.13 → 1.6.14
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/astro.d.ts +16 -2
- package/dist/core/app/index.js +4 -3
- package/dist/core/build/graph.d.ts +1 -1
- package/dist/core/build/graph.js +5 -3
- package/dist/core/compile/compile.d.ts +2 -1
- package/dist/core/compile/compile.js +2 -0
- package/dist/core/constants.js +1 -1
- package/dist/core/create-vite.js +4 -2
- package/dist/core/dev/dev.js +1 -1
- package/dist/core/errors/dev/utils.js +1 -1
- package/dist/core/messages.js +2 -2
- package/dist/core/render/context.d.ts +2 -1
- package/dist/core/render/core.js +1 -0
- package/dist/core/render/dev/head.d.ts +3 -0
- package/dist/core/render/dev/head.js +26 -0
- package/dist/core/render/dev/index.d.ts +1 -25
- package/dist/core/render/dev/index.js +5 -2
- package/dist/core/render/result.d.ts +1 -0
- package/dist/core/render/result.js +23 -33
- package/dist/jsx/babel.js +2 -1
- package/dist/runtime/server/astro-component.d.ts +2 -0
- package/dist/runtime/server/astro-component.js +20 -0
- package/dist/runtime/server/index.d.ts +3 -4
- package/dist/runtime/server/index.js +10 -8
- package/dist/runtime/server/jsx.js +3 -3
- package/dist/runtime/server/render/any.js +9 -3
- package/dist/runtime/server/render/astro/factory.d.ts +13 -0
- package/dist/runtime/server/render/astro/factory.js +31 -0
- package/dist/runtime/server/render/astro/head-and-content.d.ts +10 -0
- package/dist/runtime/server/render/astro/head-and-content.js +15 -0
- package/dist/runtime/server/render/astro/index.d.ts +6 -0
- package/dist/runtime/server/render/astro/index.js +19 -0
- package/dist/runtime/server/render/astro/instance.d.ts +18 -0
- package/dist/runtime/server/render/astro/instance.js +62 -0
- package/dist/runtime/server/render/astro/render-template.d.ts +16 -0
- package/dist/runtime/server/render/astro/render-template.js +65 -0
- package/dist/runtime/server/render/component.d.ts +4 -2
- package/dist/runtime/server/render/component.js +52 -41
- package/dist/runtime/server/render/head.d.ts +3 -2
- package/dist/runtime/server/render/head.js +21 -4
- package/dist/runtime/server/render/index.d.ts +4 -7
- package/dist/runtime/server/render/index.js +13 -4
- package/dist/runtime/server/render/page.js +32 -6
- package/dist/runtime/server/render/stylesheet.d.ts +7 -0
- package/dist/runtime/server/render/stylesheet.js +30 -0
- package/dist/vite-plugin-astro/index.d.ts +3 -1
- package/dist/vite-plugin-astro/index.js +8 -2
- package/dist/vite-plugin-astro/metadata.d.ts +3 -0
- package/dist/vite-plugin-astro/metadata.js +10 -0
- package/dist/vite-plugin-astro/types.d.ts +2 -0
- package/dist/vite-plugin-head-propagation/index.d.ts +11 -0
- package/dist/vite-plugin-head-propagation/index.js +42 -0
- package/dist/vite-plugin-load-fallback/index.js +1 -1
- package/dist/vite-plugin-markdown/index.js +2 -1
- package/dist/vite-plugin-markdown-legacy/index.js +4 -2
- package/package.json +4 -4
- package/dist/runtime/server/render/astro.d.ts +0 -18
- package/dist/runtime/server/render/astro.js +0 -105
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { TransformResult } from '@astrojs/compiler';
|
|
2
|
+
import type { PropagationHint } from '../@types/astro';
|
|
2
3
|
export interface PluginMetadata {
|
|
3
4
|
astro: {
|
|
4
5
|
hydratedComponents: TransformResult['hydratedComponents'];
|
|
5
6
|
clientOnlyComponents: TransformResult['clientOnlyComponents'];
|
|
6
7
|
scripts: TransformResult['scripts'];
|
|
8
|
+
propagation: PropagationHint;
|
|
7
9
|
};
|
|
8
10
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AstroSettings } from '../@types/astro';
|
|
2
|
+
import * as vite from 'vite';
|
|
3
|
+
/**
|
|
4
|
+
* If any component is marked as doing head injection, walk up the tree
|
|
5
|
+
* and mark parent Astro components as having head injection in the tree.
|
|
6
|
+
* This is used at runtime to determine if we should wait for head content
|
|
7
|
+
* to be be populated before rendering the entire tree.
|
|
8
|
+
*/
|
|
9
|
+
export default function configHeadPropagationVitePlugin({ settings, }: {
|
|
10
|
+
settings: AstroSettings;
|
|
11
|
+
}): vite.Plugin;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { getAstroMetadata } from "../vite-plugin-astro/index.js";
|
|
2
|
+
const injectExp = /^\/\/\s*astro-head-inject/;
|
|
3
|
+
function configHeadPropagationVitePlugin({
|
|
4
|
+
settings
|
|
5
|
+
}) {
|
|
6
|
+
function addHeadInjectionInTree(graph, id, getInfo, seen = /* @__PURE__ */ new Set()) {
|
|
7
|
+
const mod = server.moduleGraph.getModuleById(id);
|
|
8
|
+
for (const parent of (mod == null ? void 0 : mod.importers) || []) {
|
|
9
|
+
if (parent.id) {
|
|
10
|
+
if (seen.has(parent.id)) {
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
const info = getInfo(parent.id);
|
|
14
|
+
if (info == null ? void 0 : info.meta.astro) {
|
|
15
|
+
const astroMetadata = getAstroMetadata(info);
|
|
16
|
+
if (astroMetadata) {
|
|
17
|
+
astroMetadata.propagation = "in-tree";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
addHeadInjectionInTree(graph, parent.id, getInfo, seen);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
let server;
|
|
25
|
+
return {
|
|
26
|
+
name: "astro:head-propagation",
|
|
27
|
+
configureServer(_server) {
|
|
28
|
+
server = _server;
|
|
29
|
+
},
|
|
30
|
+
transform(source, id) {
|
|
31
|
+
if (!server) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (injectExp.test(source)) {
|
|
35
|
+
addHeadInjectionInTree(server.moduleGraph, id, (child) => this.getModuleInfo(child));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
configHeadPropagationVitePlugin as default
|
|
42
|
+
};
|
|
@@ -29,7 +29,7 @@ function loadFallbackPlugin({
|
|
|
29
29
|
enforce: "post",
|
|
30
30
|
async resolveId(id, parent) {
|
|
31
31
|
if (parent) {
|
|
32
|
-
const candidateId = npath.posix.join(npath.posix.dirname(parent), id);
|
|
32
|
+
const candidateId = npath.posix.join(npath.posix.dirname(slashify(parent)), id);
|
|
33
33
|
try {
|
|
34
34
|
const stats = await fs.promises.stat(candidateId);
|
|
35
35
|
if (!stats.isDirectory()) {
|
|
@@ -159,7 +159,8 @@ ${astroResult}
|
|
|
159
159
|
astroConfig: config,
|
|
160
160
|
viteConfig: resolvedConfig,
|
|
161
161
|
filename,
|
|
162
|
-
source: astroResult
|
|
162
|
+
source: astroResult,
|
|
163
|
+
id
|
|
163
164
|
};
|
|
164
165
|
let transformResult = await cachedCompilation(compileProps);
|
|
165
166
|
let { code: tsResult } = transformResult;
|
|
@@ -180,7 +181,8 @@ ${tsResult}`;
|
|
|
180
181
|
const astroMetadata = {
|
|
181
182
|
clientOnlyComponents: transformResult.clientOnlyComponents,
|
|
182
183
|
hydratedComponents: transformResult.hydratedComponents,
|
|
183
|
-
scripts: transformResult.scripts
|
|
184
|
+
scripts: transformResult.scripts,
|
|
185
|
+
propagation: "none"
|
|
184
186
|
};
|
|
185
187
|
return {
|
|
186
188
|
code: escapeViteEnvReferences(code),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "astro",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.14",
|
|
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",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"vendor"
|
|
88
88
|
],
|
|
89
89
|
"dependencies": {
|
|
90
|
-
"@astrojs/compiler": "^0.
|
|
90
|
+
"@astrojs/compiler": "^0.30.0",
|
|
91
91
|
"@astrojs/language-server": "^0.28.3",
|
|
92
92
|
"@astrojs/markdown-remark": "^1.1.3",
|
|
93
93
|
"@astrojs/telemetry": "^1.0.1",
|
|
@@ -98,11 +98,11 @@
|
|
|
98
98
|
"@babel/plugin-transform-react-jsx": "^7.17.12",
|
|
99
99
|
"@babel/traverse": "^7.18.2",
|
|
100
100
|
"@babel/types": "^7.18.4",
|
|
101
|
+
"@proload/core": "^0.3.3",
|
|
102
|
+
"@proload/plugin-tsm": "^0.2.1",
|
|
101
103
|
"@types/babel__core": "^7.1.19",
|
|
102
104
|
"@types/html-escaper": "^3.0.0",
|
|
103
105
|
"@types/yargs-parser": "^21.0.0",
|
|
104
|
-
"@proload/core": "^0.3.3",
|
|
105
|
-
"@proload/plugin-tsm": "^0.2.1",
|
|
106
106
|
"boxen": "^6.2.1",
|
|
107
107
|
"ci-info": "^3.3.1",
|
|
108
108
|
"common-ancestor-path": "^1.0.1",
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { SSRResult } from '../../../@types/astro';
|
|
2
|
-
import type { AstroComponentFactory } from './index';
|
|
3
|
-
import type { RenderInstruction } from './types';
|
|
4
|
-
import { HTMLBytes } from '../escape.js';
|
|
5
|
-
export declare class AstroComponent {
|
|
6
|
-
private htmlParts;
|
|
7
|
-
private expressions;
|
|
8
|
-
private error;
|
|
9
|
-
constructor(htmlParts: TemplateStringsArray, expressions: any[]);
|
|
10
|
-
get [Symbol.toStringTag](): string;
|
|
11
|
-
[Symbol.asyncIterator](): AsyncGenerator<any, void, undefined>;
|
|
12
|
-
}
|
|
13
|
-
export declare function isAstroComponent(obj: any): obj is AstroComponent;
|
|
14
|
-
export declare function isAstroComponentFactory(obj: any): obj is AstroComponentFactory;
|
|
15
|
-
export declare function renderAstroComponent(component: InstanceType<typeof AstroComponent>): AsyncIterable<string | HTMLBytes | RenderInstruction>;
|
|
16
|
-
export declare function renderToString(result: SSRResult, componentFactory: AstroComponentFactory, props: any, children: any): Promise<string>;
|
|
17
|
-
export declare function renderToIterable(result: SSRResult, componentFactory: AstroComponentFactory, displayName: string, props: any, children: any): Promise<AsyncIterable<string | HTMLBytes | RenderInstruction>>;
|
|
18
|
-
export declare function renderTemplate(htmlParts: TemplateStringsArray, ...expressions: any[]): Promise<AstroComponent>;
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { markHTMLString } from "../escape.js";
|
|
2
|
-
import { HydrationDirectiveProps } from "../hydration.js";
|
|
3
|
-
import { isPromise } from "../util.js";
|
|
4
|
-
import { renderChild } from "./any.js";
|
|
5
|
-
import { HTMLParts } from "./common.js";
|
|
6
|
-
function validateComponentProps(props, displayName) {
|
|
7
|
-
if (props != null) {
|
|
8
|
-
for (const prop of Object.keys(props)) {
|
|
9
|
-
if (HydrationDirectiveProps.has(prop)) {
|
|
10
|
-
console.warn(
|
|
11
|
-
`You are attempting to render <${displayName} ${prop} />, but ${displayName} is an Astro component. Astro components do not render in the client and should not have a hydration directive. Please use a framework component for client rendering.`
|
|
12
|
-
);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
class AstroComponent {
|
|
18
|
-
constructor(htmlParts, expressions) {
|
|
19
|
-
this.htmlParts = htmlParts;
|
|
20
|
-
this.error = void 0;
|
|
21
|
-
this.expressions = expressions.map((expression) => {
|
|
22
|
-
if (isPromise(expression)) {
|
|
23
|
-
return Promise.resolve(expression).catch((err) => {
|
|
24
|
-
if (!this.error) {
|
|
25
|
-
this.error = err;
|
|
26
|
-
throw err;
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
return expression;
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
get [Symbol.toStringTag]() {
|
|
34
|
-
return "AstroComponent";
|
|
35
|
-
}
|
|
36
|
-
async *[Symbol.asyncIterator]() {
|
|
37
|
-
const { htmlParts, expressions } = this;
|
|
38
|
-
for (let i = 0; i < htmlParts.length; i++) {
|
|
39
|
-
const html = htmlParts[i];
|
|
40
|
-
const expression = expressions[i];
|
|
41
|
-
yield markHTMLString(html);
|
|
42
|
-
yield* renderChild(expression);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
function isAstroComponent(obj) {
|
|
47
|
-
return typeof obj === "object" && Object.prototype.toString.call(obj) === "[object AstroComponent]";
|
|
48
|
-
}
|
|
49
|
-
function isAstroComponentFactory(obj) {
|
|
50
|
-
return obj == null ? false : obj.isAstroComponentFactory === true;
|
|
51
|
-
}
|
|
52
|
-
async function* renderAstroComponent(component) {
|
|
53
|
-
for await (const value of component) {
|
|
54
|
-
if (value || value === 0) {
|
|
55
|
-
for await (const chunk of renderChild(value)) {
|
|
56
|
-
switch (chunk.type) {
|
|
57
|
-
case "directive": {
|
|
58
|
-
yield chunk;
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
default: {
|
|
62
|
-
yield markHTMLString(chunk);
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
async function renderToString(result, componentFactory, props, children) {
|
|
71
|
-
const Component = await componentFactory(result, props, children);
|
|
72
|
-
if (!isAstroComponent(Component)) {
|
|
73
|
-
const response = Component;
|
|
74
|
-
throw response;
|
|
75
|
-
}
|
|
76
|
-
let parts = new HTMLParts();
|
|
77
|
-
for await (const chunk of renderAstroComponent(Component)) {
|
|
78
|
-
parts.append(chunk, result);
|
|
79
|
-
}
|
|
80
|
-
return parts.toString();
|
|
81
|
-
}
|
|
82
|
-
async function renderToIterable(result, componentFactory, displayName, props, children) {
|
|
83
|
-
validateComponentProps(props, displayName);
|
|
84
|
-
const Component = await componentFactory(result, props, children);
|
|
85
|
-
if (!isAstroComponent(Component)) {
|
|
86
|
-
console.warn(
|
|
87
|
-
`Returning a Response is only supported inside of page components. Consider refactoring this logic into something like a function that can be used in the page.`
|
|
88
|
-
);
|
|
89
|
-
const response = Component;
|
|
90
|
-
throw response;
|
|
91
|
-
}
|
|
92
|
-
return renderAstroComponent(Component);
|
|
93
|
-
}
|
|
94
|
-
async function renderTemplate(htmlParts, ...expressions) {
|
|
95
|
-
return new AstroComponent(htmlParts, expressions);
|
|
96
|
-
}
|
|
97
|
-
export {
|
|
98
|
-
AstroComponent,
|
|
99
|
-
isAstroComponent,
|
|
100
|
-
isAstroComponentFactory,
|
|
101
|
-
renderAstroComponent,
|
|
102
|
-
renderTemplate,
|
|
103
|
-
renderToIterable,
|
|
104
|
-
renderToString
|
|
105
|
-
};
|