astro 0.25.4 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/dist/@types/astro.js +0 -0
  2. package/dist/@types/serialize-javascript.d.js +0 -0
  3. package/dist/@types/shorthash.d.js +0 -0
  4. package/dist/adapter-ssg/index.js +0 -0
  5. package/dist/cli/check.js +4 -4
  6. package/dist/cli/index.js +21 -32
  7. package/dist/core/add/babel.js +0 -0
  8. package/dist/core/add/consts.js +0 -0
  9. package/dist/core/add/imports.js +0 -0
  10. package/dist/core/add/index.js +7 -14
  11. package/dist/core/add/wrapper.js +0 -0
  12. package/dist/core/app/common.js +0 -0
  13. package/dist/core/app/index.js +13 -10
  14. package/dist/core/app/node.js +0 -0
  15. package/dist/core/app/types.js +0 -0
  16. package/dist/core/build/add-rollup-input.js +0 -0
  17. package/dist/core/build/common.js +4 -5
  18. package/dist/core/build/generate.js +65 -72
  19. package/dist/core/build/index.js +59 -74
  20. package/dist/core/build/internal.js +0 -0
  21. package/dist/core/build/page-data.js +10 -9
  22. package/dist/core/build/static-build.js +41 -24
  23. package/dist/core/build/types.d.js +0 -0
  24. package/dist/core/build/util.js +0 -0
  25. package/dist/core/build/vite-plugin-hoisted-scripts.js +1 -1
  26. package/dist/core/build/vite-plugin-internals.js +0 -0
  27. package/dist/core/build/vite-plugin-pages.js +0 -0
  28. package/dist/core/build/vite-plugin-ssr.js +4 -2
  29. package/dist/core/config.js +86 -78
  30. package/dist/core/create-vite.js +12 -7
  31. package/dist/core/dev/index.js +8 -7
  32. package/dist/core/endpoint/dev/index.js +5 -10
  33. package/dist/core/endpoint/index.js +1 -3
  34. package/dist/core/errors.js +45 -0
  35. package/dist/core/logger/console.js +43 -0
  36. package/dist/core/logger/core.js +103 -0
  37. package/dist/core/logger/node.js +94 -0
  38. package/dist/core/messages.js +50 -24
  39. package/dist/core/path.js +0 -0
  40. package/dist/core/polyfill.js +0 -0
  41. package/dist/core/preview/index.js +8 -8
  42. package/dist/core/preview/util.js +3 -6
  43. package/dist/core/render/core.js +5 -6
  44. package/dist/core/render/dev/css.js +5 -6
  45. package/dist/core/render/dev/hmr.js +0 -0
  46. package/dist/core/render/dev/html.js +0 -0
  47. package/dist/core/render/dev/index.js +23 -36
  48. package/dist/core/render/paginate.js +0 -0
  49. package/dist/core/render/pretty-feed.js +103 -0
  50. package/dist/core/render/result.js +33 -15
  51. package/dist/core/render/route-cache.js +2 -2
  52. package/dist/core/render/rss.js +5 -4
  53. package/dist/core/render/script.js +0 -0
  54. package/dist/core/render/ssr-element.js +1 -1
  55. package/dist/core/render/util.js +26 -0
  56. package/dist/core/request.js +27 -0
  57. package/dist/core/routing/index.js +0 -0
  58. package/dist/core/routing/manifest/create.js +8 -6
  59. package/dist/core/routing/manifest/serialization.js +0 -0
  60. package/dist/core/routing/match.js +0 -0
  61. package/dist/core/routing/params.js +0 -0
  62. package/dist/core/routing/validation.js +1 -1
  63. package/dist/core/util.js +57 -125
  64. package/dist/integrations/index.js +9 -1
  65. package/dist/runtime/client/hmr.js +0 -0
  66. package/dist/runtime/client/idle.js +0 -0
  67. package/dist/runtime/client/load.js +0 -0
  68. package/dist/runtime/client/media.js +0 -0
  69. package/dist/runtime/client/only.js +0 -0
  70. package/dist/runtime/client/visible.js +0 -0
  71. package/dist/runtime/server/escape.js +0 -0
  72. package/dist/runtime/server/hydration.js +0 -0
  73. package/dist/runtime/server/index.js +42 -36
  74. package/dist/runtime/server/metadata.js +0 -0
  75. package/dist/runtime/server/util.js +0 -0
  76. package/dist/template/4xx.js +1 -1
  77. package/dist/template/5xx.js +0 -0
  78. package/dist/template/css.js +0 -0
  79. package/dist/types/@types/astro.d.ts +291 -233
  80. package/dist/types/cli/index.d.ts +1 -1
  81. package/dist/types/core/add/index.d.ts +1 -1
  82. package/dist/types/core/build/common.d.ts +0 -1
  83. package/dist/types/core/build/generate.d.ts +1 -1
  84. package/dist/types/core/build/index.d.ts +1 -1
  85. package/dist/types/core/build/page-data.d.ts +1 -1
  86. package/dist/types/core/config.d.ts +125 -116
  87. package/dist/types/core/create-vite.d.ts +1 -1
  88. package/dist/types/core/dev/index.d.ts +1 -1
  89. package/dist/types/core/endpoint/index.d.ts +1 -1
  90. package/dist/types/core/errors.d.ts +23 -0
  91. package/dist/types/core/logger/console.d.ts +4 -0
  92. package/dist/types/core/{logger.d.ts → logger/core.d.ts} +7 -22
  93. package/dist/types/core/logger/node.d.ts +34 -0
  94. package/dist/types/core/messages.d.ts +4 -2
  95. package/dist/types/core/preview/index.d.ts +1 -1
  96. package/dist/types/core/preview/util.d.ts +1 -2
  97. package/dist/types/core/render/core.d.ts +2 -3
  98. package/dist/types/core/render/dev/css.d.ts +0 -2
  99. package/dist/types/core/render/dev/index.d.ts +4 -6
  100. package/dist/types/core/render/pretty-feed.d.ts +2 -0
  101. package/dist/types/core/render/result.d.ts +2 -3
  102. package/dist/types/core/render/route-cache.d.ts +1 -1
  103. package/dist/types/core/render/util.d.ts +6 -0
  104. package/dist/types/core/request.d.ts +14 -0
  105. package/dist/types/core/routing/manifest/create.d.ts +1 -1
  106. package/dist/types/core/routing/validation.d.ts +1 -1
  107. package/dist/types/core/util.d.ts +11 -7
  108. package/dist/types/integrations/index.d.ts +6 -0
  109. package/dist/types/runtime/server/index.d.ts +1 -2
  110. package/dist/types/vite-plugin-astro/hmr.d.ts +1 -1
  111. package/dist/types/vite-plugin-astro/index.d.ts +1 -1
  112. package/dist/types/vite-plugin-astro-server/index.d.ts +1 -1
  113. package/dist/types/vite-plugin-build-html/extract-assets.d.ts +1 -1
  114. package/dist/types/vite-plugin-build-html/index.d.ts +3 -3
  115. package/dist/types/vite-plugin-config-alias/index.d.ts +1 -1
  116. package/dist/types/vite-plugin-jsx/index.d.ts +1 -1
  117. package/dist/vite-plugin-astro/compile.js +12 -14
  118. package/dist/vite-plugin-astro/hmr.js +2 -2
  119. package/dist/vite-plugin-astro/index.js +21 -8
  120. package/dist/vite-plugin-astro/query.js +0 -0
  121. package/dist/vite-plugin-astro/styles.js +1 -1
  122. package/dist/vite-plugin-astro-postprocess/index.js +31 -34
  123. package/dist/vite-plugin-astro-server/index.js +50 -22
  124. package/dist/vite-plugin-build-css/index.js +1 -1
  125. package/dist/vite-plugin-build-css/resolve.js +0 -0
  126. package/dist/vite-plugin-build-html/add-rollup-input.js +0 -0
  127. package/dist/vite-plugin-build-html/extract-assets.js +0 -0
  128. package/dist/vite-plugin-build-html/index.js +22 -23
  129. package/dist/vite-plugin-build-html/util.js +0 -0
  130. package/dist/vite-plugin-config-alias/index.js +1 -1
  131. package/dist/vite-plugin-env/index.js +1 -1
  132. package/dist/vite-plugin-integrations-container/index.js +0 -0
  133. package/dist/vite-plugin-jsx/index.js +1 -1
  134. package/dist/vite-plugin-markdown/index.js +89 -18
  135. package/dist/vite-plugin-scripts/index.js +0 -0
  136. package/env.d.ts +1 -1
  137. package/package.json +11 -7
  138. package/dist/core/build/scan-based-build.js +0 -62
  139. package/dist/core/dev/util.js +0 -44
  140. package/dist/core/logger.js +0 -174
  141. package/dist/core/render/dev/error.js +0 -34
  142. package/dist/core/render/request.js +0 -23
  143. package/dist/core/render/sitemap.js +0 -18
  144. package/dist/types/core/build/scan-based-build.d.ts +0 -18
  145. package/dist/types/core/dev/util.d.ts +0 -9
  146. package/dist/types/core/render/dev/error.d.ts +0 -7
  147. package/dist/types/core/render/request.d.ts +0 -15
  148. package/dist/types/core/render/sitemap.d.ts +0 -2
@@ -4,41 +4,39 @@ import { apply as applyPolyfill } from "../polyfill.js";
4
4
  import { performance } from "perf_hooks";
5
5
  import * as vite from "vite";
6
6
  import { createVite } from "../create-vite.js";
7
- import { debug, defaultLogOptions, info, levels, timerMessage, warn, warnIfUsingExperimentalSSR } from "../logger.js";
7
+ import { debug, info, levels, timerMessage, warnIfUsingExperimentalSSR } from "../logger/core.js";
8
+ import { nodeLogOptions } from "../logger/node.js";
8
9
  import { createRouteManifest } from "../routing/index.js";
9
- import { generateSitemap } from "../render/sitemap.js";
10
10
  import { collectPagesData } from "./page-data.js";
11
- import { build as scanBasedBuild } from "./scan-based-build.js";
12
11
  import { staticBuild } from "./static-build.js";
13
12
  import { RouteCache } from "../render/route-cache.js";
14
13
  import { runHookBuildDone, runHookBuildStart, runHookConfigDone, runHookConfigSetup } from "../../integrations/index.js";
15
14
  import { getTimeStat } from "./util.js";
16
- async function build(config, options = { logging: defaultLogOptions }) {
15
+ import { createSafeError, isBuildingToSSR } from "../util.js";
16
+ import { fixViteErrorMessage } from "../errors.js";
17
+ async function build(config, options = { logging: nodeLogOptions }) {
18
+ applyPolyfill();
17
19
  const builder = new AstroBuilder(config, options);
18
- await builder.build();
20
+ await builder.run();
19
21
  }
20
22
  class AstroBuilder {
21
23
  constructor(config, options) {
22
24
  this.mode = "production";
23
- applyPolyfill();
24
- if (!config.buildOptions.site && config.buildOptions.sitemap !== false) {
25
- warn(options.logging, "config", `Set "buildOptions.site" to generate correct canonical URLs and sitemap`);
26
- }
27
- if (options.mode)
25
+ if (options.mode) {
28
26
  this.mode = options.mode;
27
+ }
29
28
  this.config = config;
30
- const port = config.devOptions.port;
31
29
  this.logging = options.logging;
32
30
  this.routeCache = new RouteCache(this.logging);
33
- this.origin = config.buildOptions.site ? new URL(config.buildOptions.site).origin : `http://localhost:${port}`;
31
+ this.origin = config.site ? new URL(config.site).origin : `http://localhost:${config.server.port}`;
34
32
  this.manifest = createRouteManifest({ config }, this.logging);
33
+ this.timer = {};
35
34
  }
36
- async build() {
37
- info(this.logging, "build", "Initial setup...");
38
- const { logging, origin } = this;
39
- const timer = {};
40
- timer.init = performance.now();
41
- timer.viteStart = performance.now();
35
+ async setup() {
36
+ debug("build", "Initial setup...");
37
+ const { logging } = this;
38
+ this.timer.init = performance.now();
39
+ this.timer.viteStart = performance.now();
42
40
  this.config = await runHookConfigSetup({ config: this.config, command: "build" });
43
41
  const viteConfig = await createVite({
44
42
  mode: this.mode,
@@ -49,66 +47,55 @@ class AstroBuilder {
49
47
  }, { astroConfig: this.config, logging, mode: "build" });
50
48
  await runHookConfigDone({ config: this.config });
51
49
  warnIfUsingExperimentalSSR(logging, this.config);
52
- this.viteConfig = viteConfig;
53
50
  const viteServer = await vite.createServer(viteConfig);
54
- this.viteServer = viteServer;
55
- debug("build", timerMessage("Vite started", timer.viteStart));
51
+ debug("build", timerMessage("Vite started", this.timer.viteStart));
52
+ return { viteConfig, viteServer };
53
+ }
54
+ async build({ viteConfig, viteServer }) {
55
+ const { origin } = this;
56
56
  const buildConfig = {
57
- client: new URL("./client/", this.config.dist),
58
- server: new URL("./server/", this.config.dist),
57
+ client: new URL("./client/", this.config.outDir),
58
+ server: new URL("./server/", this.config.outDir),
59
59
  serverEntry: "entry.mjs",
60
60
  staticMode: void 0
61
61
  };
62
62
  await runHookBuildStart({ config: this.config, buildConfig });
63
- info(this.logging, "build", "Collecting page data...");
64
- timer.loadStart = performance.now();
63
+ info(this.logging, "build", "Collecting build information...");
64
+ this.timer.loadStart = performance.now();
65
65
  const { assets, allPages } = await collectPagesData({
66
66
  astroConfig: this.config,
67
67
  logging: this.logging,
68
68
  manifest: this.manifest,
69
69
  origin,
70
70
  routeCache: this.routeCache,
71
- viteServer: this.viteServer,
72
- ssr: this.config.buildOptions.experimentalSsr
71
+ viteServer,
72
+ ssr: isBuildingToSSR(this.config)
73
73
  });
74
74
  Object.entries(allPages).forEach(([page, data]) => {
75
75
  if ("frontmatter" in data.preload[1]) {
76
76
  const frontmatter = data.preload[1].frontmatter;
77
- if (Boolean(frontmatter.draft) && !this.config.buildOptions.drafts) {
78
- debug("build", timerMessage(`Skipping draft page ${page}`, timer.loadStart));
77
+ if (Boolean(frontmatter.draft) && !this.config.markdown.drafts) {
78
+ debug("build", timerMessage(`Skipping draft page ${page}`, this.timer.loadStart));
79
79
  delete allPages[page];
80
80
  }
81
81
  }
82
82
  });
83
- debug("build", timerMessage("All pages loaded", timer.loadStart));
83
+ debug("build", timerMessage("All pages loaded", this.timer.loadStart));
84
84
  const pageNames = [];
85
- timer.buildStart = performance.now();
86
- info(this.logging, "build", colors.dim(`Completed in ${getTimeStat(timer.init, performance.now())}`));
87
- if (!this.config.buildOptions.legacyBuild) {
88
- await staticBuild({
89
- allPages,
90
- astroConfig: this.config,
91
- logging: this.logging,
92
- manifest: this.manifest,
93
- origin: this.origin,
94
- pageNames,
95
- routeCache: this.routeCache,
96
- viteConfig: this.viteConfig,
97
- buildConfig
98
- });
99
- } else {
100
- await scanBasedBuild({
101
- allPages,
102
- astroConfig: this.config,
103
- logging: this.logging,
104
- origin: this.origin,
105
- pageNames,
106
- routeCache: this.routeCache,
107
- viteConfig: this.viteConfig,
108
- viteServer: this.viteServer
109
- });
110
- }
111
- timer.assetsStart = performance.now();
85
+ this.timer.buildStart = performance.now();
86
+ info(this.logging, "build", colors.dim(`Completed in ${getTimeStat(this.timer.init, performance.now())}.`));
87
+ await staticBuild({
88
+ allPages,
89
+ astroConfig: this.config,
90
+ logging: this.logging,
91
+ manifest: this.manifest,
92
+ origin: this.origin,
93
+ pageNames,
94
+ routeCache: this.routeCache,
95
+ viteConfig,
96
+ buildConfig
97
+ });
98
+ this.timer.assetsStart = performance.now();
112
99
  Object.keys(assets).map((k) => {
113
100
  if (!assets[k])
114
101
  return;
@@ -117,21 +104,21 @@ class AstroBuilder {
117
104
  fs.writeFileSync(filePath, assets[k], "utf8");
118
105
  delete assets[k];
119
106
  });
120
- debug("build", timerMessage("Additional assets copied", timer.assetsStart));
121
- if (this.config.buildOptions.sitemap && this.config.buildOptions.site) {
122
- timer.sitemapStart = performance.now();
123
- const sitemapFilter = this.config.buildOptions.sitemapFilter ? this.config.buildOptions.sitemapFilter : void 0;
124
- const sitemap = generateSitemap(pageNames.map((pageName) => new URL(pageName, this.config.buildOptions.site).href), sitemapFilter);
125
- const sitemapPath = new URL("./sitemap.xml", this.config.dist);
126
- await fs.promises.mkdir(new URL("./", sitemapPath), { recursive: true });
127
- await fs.promises.writeFile(sitemapPath, sitemap, "utf8");
128
- debug("build", timerMessage("Sitemap built", timer.sitemapStart));
129
- }
107
+ debug("build", timerMessage("Additional assets copied", this.timer.assetsStart));
130
108
  await viteServer.close();
131
109
  await runHookBuildDone({ config: this.config, pages: pageNames, routes: Object.values(allPages).map((pd) => pd.route) });
132
- if (logging.level && levels[logging.level] <= levels["info"]) {
133
- const buildMode = this.config.buildOptions.experimentalSsr ? "ssr" : "static";
134
- await this.printStats({ logging, timeStart: timer.init, pageCount: pageNames.length, buildMode });
110
+ if (this.logging.level && levels[this.logging.level] <= levels["info"]) {
111
+ const buildMode = isBuildingToSSR(this.config) ? "ssr" : "static";
112
+ await this.printStats({ logging: this.logging, timeStart: this.timer.init, pageCount: pageNames.length, buildMode });
113
+ }
114
+ }
115
+ async run() {
116
+ const setupData = await this.setup();
117
+ try {
118
+ await this.build(setupData);
119
+ } catch (_err) {
120
+ debugger;
121
+ throw fixViteErrorMessage(createSafeError(_err), setupData.viteServer);
135
122
  }
136
123
  }
137
124
  async printStats({ logging, timeStart, pageCount, buildMode }) {
@@ -139,14 +126,12 @@ class AstroBuilder {
139
126
  const total = getTimeStat(timeStart, performance.now());
140
127
  let messages = [];
141
128
  if (buildMode === "static") {
142
- const timePerPage = Math.round(buildTime / pageCount);
143
- const perPageMsg = colors.dim(`(${colors.bold(`${timePerPage}ms`)} avg per page + resources)`);
144
- messages = [`${pageCount} pages built in`, colors.bold(total), perPageMsg];
129
+ messages = [`${pageCount} page(s) built in`, colors.bold(total)];
145
130
  } else {
146
131
  messages = ["Server built in", colors.bold(total)];
147
132
  }
148
133
  info(logging, "build", messages.join(" "));
149
- info(logging, "build", `\u{1F680} ${colors.cyan(colors.bold("Done"))}`);
134
+ info(logging, "build", `${colors.bold("Complete!")}`);
150
135
  }
151
136
  }
152
137
  export {
File without changes
@@ -1,16 +1,17 @@
1
- import { info } from "../logger.js";
1
+ import { info } from "../logger/core.js";
2
2
  import { fileURLToPath } from "url";
3
3
  import * as colors from "kleur/colors";
4
- import { debug } from "../logger.js";
4
+ import { debug } from "../logger/core.js";
5
5
  import { preload as ssrPreload } from "../render/dev/index.js";
6
6
  import { generateRssFunction } from "../render/rss.js";
7
7
  import { callGetStaticPaths } from "../render/route-cache.js";
8
+ import { isBuildingToSSR } from "../util.js";
8
9
  async function collectPagesData(opts) {
9
10
  var _a;
10
11
  const { astroConfig, logging, manifest, origin, routeCache, viteServer } = opts;
11
12
  const assets = {};
12
13
  const allPages = {};
13
- const buildMode = astroConfig.buildOptions.experimentalSsr ? "ssr" : "static";
14
+ const buildMode = isBuildingToSSR(astroConfig) ? "ssr" : "static";
14
15
  const dataCollectionLogTimeout = setInterval(() => {
15
16
  info(opts.logging, "build", "The data collection step may take longer for larger projects...");
16
17
  clearInterval(dataCollectionLogTimeout);
@@ -31,7 +32,7 @@ async function collectPagesData(opts) {
31
32
  scripts: /* @__PURE__ */ new Set(),
32
33
  preload: await ssrPreload({
33
34
  astroConfig,
34
- filePath: new URL(`./${route.component}`, astroConfig.projectRoot),
35
+ filePath: new URL(`./${route.component}`, astroConfig.root),
35
36
  viteServer
36
37
  }).then((routes) => {
37
38
  clearInterval(routeCollectionLogTimeout);
@@ -58,13 +59,13 @@ async function collectPagesData(opts) {
58
59
  debug("build", `\u251C\u2500\u2500 ${colors.bold(colors.red("\u2717"))} ${route.component}`);
59
60
  throw err;
60
61
  });
61
- const rssFn = generateRssFunction(astroConfig.buildOptions.site, route);
62
+ const rssFn = generateRssFunction(astroConfig.site, route);
62
63
  for (const rssCallArg of result.rss) {
63
64
  const rssResult = rssFn(rssCallArg);
64
65
  if (rssResult.xml) {
65
66
  const { url, content } = rssResult.xml;
66
67
  if (content) {
67
- const rssFile = new URL(url.replace(/^\/?/, "./"), astroConfig.dist);
68
+ const rssFile = new URL(url.replace(/^\/?/, "./"), astroConfig.outDir);
68
69
  if (assets[fileURLToPath(rssFile)]) {
69
70
  throw new Error(`[getStaticPaths] RSS feed ${url} already exists.
70
71
  Use \`rss(data, {url: '...'})\` to choose a unique, custom URL. (${route.component})`);
@@ -74,7 +75,7 @@ Use \`rss(data, {url: '...'})\` to choose a unique, custom URL. (${route.compone
74
75
  }
75
76
  if ((_a = rssResult.xsl) == null ? void 0 : _a.content) {
76
77
  const { url, content } = rssResult.xsl;
77
- const stylesheetFile = new URL(url.replace(/^\/?/, "./"), astroConfig.dist);
78
+ const stylesheetFile = new URL(url.replace(/^\/?/, "./"), astroConfig.outDir);
78
79
  if (assets[fileURLToPath(stylesheetFile)]) {
79
80
  throw new Error(`[getStaticPaths] RSS feed stylesheet ${url} already exists.
80
81
  Use \`rss(data, {stylesheet: '...'})\` to choose a unique, custom URL. (${route.component})`);
@@ -93,7 +94,7 @@ Use \`rss(data, {stylesheet: '...'})\` to choose a unique, custom URL. (${route.
93
94
  scripts: /* @__PURE__ */ new Set(),
94
95
  preload: await ssrPreload({
95
96
  astroConfig,
96
- filePath: new URL(`./${route.component}`, astroConfig.projectRoot),
97
+ filePath: new URL(`./${route.component}`, astroConfig.root),
97
98
  viteServer
98
99
  })
99
100
  };
@@ -105,7 +106,7 @@ async function getStaticPathsForRoute(opts, route) {
105
106
  const { astroConfig, logging, routeCache, ssr, viteServer } = opts;
106
107
  if (!viteServer)
107
108
  throw new Error(`vite.createServer() not called!`);
108
- const filePath = new URL(`./${route.component}`, astroConfig.projectRoot);
109
+ const filePath = new URL(`./${route.component}`, astroConfig.root);
109
110
  const mod = await viteServer.ssrLoadModule(fileURLToPath(filePath));
110
111
  const result = await callGetStaticPaths({ mod, route, isValidate: false, logging, ssr });
111
112
  routeCache.set(route, result);
@@ -24,8 +24,8 @@ import npath from "path";
24
24
  import { fileURLToPath } from "url";
25
25
  import * as vite from "vite";
26
26
  import { createBuildInternals } from "../../core/build/internal.js";
27
- import { info } from "../../core/logger.js";
28
- import { appendForwardSlash, prependForwardSlash } from "../../core/path.js";
27
+ import { info } from "../logger/core.js";
28
+ import { prependForwardSlash } from "../../core/path.js";
29
29
  import { emptyDir, removeDir } from "../../core/util.js";
30
30
  import { rollupPluginAstroBuildCSS } from "../../vite-plugin-build-css/index.js";
31
31
  import { vitePluginHoistedScripts } from "./vite-plugin-hoisted-scripts.js";
@@ -35,6 +35,7 @@ import { vitePluginPages } from "./vite-plugin-pages.js";
35
35
  import { generatePages } from "./generate.js";
36
36
  import { trackPageData } from "./internal.js";
37
37
  import { isBuildingToSSR } from "../util.js";
38
+ import { runHookBuildSetup } from "../../integrations/index.js";
38
39
  import { getTimeStat } from "./util.js";
39
40
  async function staticBuild(opts) {
40
41
  const { allPages, astroConfig } = opts;
@@ -44,9 +45,8 @@ async function staticBuild(opts) {
44
45
  const internals = createBuildInternals();
45
46
  const timer = {};
46
47
  timer.buildStart = performance.now();
47
- info(opts.logging, "build", "Discovering entrypoints...");
48
48
  for (const [component, pageData] of Object.entries(allPages)) {
49
- const astroModuleURL = new URL("./" + component, astroConfig.projectRoot);
49
+ const astroModuleURL = new URL("./" + component, astroConfig.root);
50
50
  const astroModuleId = prependForwardSlash(component);
51
51
  trackPageData(internals, component, pageData, astroModuleId, astroModuleURL);
52
52
  if (pageData.route.type === "page") {
@@ -71,13 +71,13 @@ async function staticBuild(opts) {
71
71
  pageInput.add(astroModuleId);
72
72
  facadeIdToPageDataMap.set(fileURLToPath(astroModuleURL), pageData);
73
73
  }
74
- emptyDir(astroConfig.dist, new Set(".git"));
74
+ emptyDir(astroConfig.outDir, new Set(".git"));
75
75
  timer.clientBuild = performance.now();
76
76
  await clientBuild(opts, internals, jsInput);
77
77
  timer.ssr = performance.now();
78
78
  info(opts.logging, "build", "Building for SSR...");
79
79
  const ssrResult = await ssrBuild(opts, internals, pageInput);
80
- info(opts.logging, "build", dim(`Completed in ${getTimeStat(timer.ssr, performance.now())}`));
80
+ info(opts.logging, "build", dim(`Completed in ${getTimeStat(timer.ssr, performance.now())}.`));
81
81
  timer.generate = performance.now();
82
82
  if (opts.buildConfig.staticMode) {
83
83
  await generatePages(ssrResult, opts, internals, facadeIdToPageDataMap);
@@ -88,14 +88,12 @@ ${bgMagenta(black(" finalizing server assets "))}
88
88
  `);
89
89
  await ssrMoveAssets(opts);
90
90
  }
91
- info(opts.logging, null, dim(`Completed in ${getTimeStat(timer.generate, performance.now())}
92
- `));
93
91
  }
94
92
  async function ssrBuild(opts, internals, input) {
95
93
  const { astroConfig, viteConfig } = opts;
96
- const ssr = astroConfig.buildOptions.experimentalSsr;
97
- const out = ssr ? opts.buildConfig.server : astroConfig.dist;
98
- return await vite.build({
94
+ const ssr = isBuildingToSSR(astroConfig);
95
+ const out = ssr ? opts.buildConfig.server : astroConfig.outDir;
96
+ const viteBuildConfig = {
99
97
  logLevel: "error",
100
98
  mode: "production",
101
99
  css: viteConfig.css,
@@ -103,7 +101,6 @@ async function ssrBuild(opts, internals, input) {
103
101
  emptyOutDir: false,
104
102
  manifest: false,
105
103
  outDir: fileURLToPath(out),
106
- ssr: true,
107
104
  rollupOptions: {
108
105
  input: [],
109
106
  output: {
@@ -113,6 +110,7 @@ async function ssrBuild(opts, internals, input) {
113
110
  assetFileNames: "assets/asset.[hash][extname]"
114
111
  }
115
112
  },
113
+ ssr: true,
116
114
  target: "esnext",
117
115
  minify: false,
118
116
  polyfillModulePreload: false,
@@ -132,21 +130,27 @@ async function ssrBuild(opts, internals, input) {
132
130
  root: viteConfig.root,
133
131
  envPrefix: "PUBLIC_",
134
132
  server: viteConfig.server,
135
- base: astroConfig.buildOptions.site ? new URL(astroConfig.buildOptions.site).pathname : "/",
136
- ssr: viteConfig.ssr
137
- });
133
+ base: astroConfig.site ? new URL(astroConfig.site).pathname : "/",
134
+ ssr: viteConfig.ssr,
135
+ resolve: viteConfig.resolve
136
+ };
137
+ await runHookBuildSetup({ config: astroConfig, vite: viteBuildConfig, target: "server" });
138
+ return await vite.build(viteBuildConfig);
138
139
  }
139
140
  async function clientBuild(opts, internals, input) {
140
141
  const { astroConfig, viteConfig } = opts;
141
142
  const timer = performance.now();
143
+ const ssr = isBuildingToSSR(astroConfig);
144
+ const out = ssr ? opts.buildConfig.client : astroConfig.outDir;
142
145
  if (!input.size) {
146
+ if (ssr) {
147
+ await copyFiles(astroConfig.publicDir, out);
148
+ }
143
149
  return null;
144
150
  }
145
151
  info(opts.logging, null, `
146
- ${bgGreen(black(" building resources "))}
147
- `);
148
- const out = isBuildingToSSR(astroConfig) ? opts.buildConfig.client : astroConfig.dist;
149
- const buildResult = await vite.build({
152
+ ${bgGreen(black(" building client "))}`);
153
+ const viteBuildConfig = {
150
154
  logLevel: "info",
151
155
  mode: "production",
152
156
  css: viteConfig.css,
@@ -179,21 +183,34 @@ ${bgGreen(black(" building resources "))}
179
183
  root: viteConfig.root,
180
184
  envPrefix: "PUBLIC_",
181
185
  server: viteConfig.server,
182
- base: appendForwardSlash(astroConfig.buildOptions.site ? new URL(astroConfig.buildOptions.site).pathname : "/")
183
- });
184
- info(opts.logging, null, dim(`Completed in ${getTimeStat(timer, performance.now())}
186
+ base: astroConfig.base
187
+ };
188
+ await runHookBuildSetup({ config: astroConfig, vite: viteBuildConfig, target: "client" });
189
+ const buildResult = await vite.build(viteBuildConfig);
190
+ info(opts.logging, null, dim(`Completed in ${getTimeStat(timer, performance.now())}.
185
191
  `));
186
192
  return buildResult;
187
193
  }
188
194
  async function cleanSsrOutput(opts) {
189
195
  const files = await glob("**/*.mjs", {
190
- cwd: fileURLToPath(opts.astroConfig.dist)
196
+ cwd: fileURLToPath(opts.astroConfig.outDir)
191
197
  });
192
198
  await Promise.all(files.map(async (filename) => {
193
- const url = new URL(filename, opts.astroConfig.dist);
199
+ const url = new URL(filename, opts.astroConfig.outDir);
194
200
  await fs.promises.rm(url);
195
201
  }));
196
202
  }
203
+ async function copyFiles(fromFolder, toFolder) {
204
+ const files = await glob("**/*", {
205
+ cwd: fileURLToPath(fromFolder)
206
+ });
207
+ await fs.promises.mkdir(toFolder, { recursive: true });
208
+ await Promise.all(files.map(async (filename) => {
209
+ const from = new URL(filename, fromFolder);
210
+ const to = new URL(filename, toFolder);
211
+ return fs.promises.copyFile(from, to);
212
+ }));
213
+ }
197
214
  async function ssrMoveAssets(opts) {
198
215
  info(opts.logging, "build", "Rearranging server assets...");
199
216
  const serverRoot = opts.buildConfig.staticMode ? opts.buildConfig.client : opts.buildConfig.server;
File without changes
File without changes
@@ -28,7 +28,7 @@ function vitePluginHoistedScripts(astroConfig, internals) {
28
28
  if (output.type === "chunk" && output.facadeModuleId && virtualHoistedEntry(output.facadeModuleId)) {
29
29
  const facadeId = output.facadeModuleId;
30
30
  const pathname = facadeId.slice(0, facadeId.length - "/hoisted.js".length);
31
- const vid = viteID(new URL("." + pathname, astroConfig.projectRoot));
31
+ const vid = viteID(new URL("." + pathname, astroConfig.root));
32
32
  const pageInfo = getPageDataByViteID(internals, vid);
33
33
  if (pageInfo) {
34
34
  pageInfo.hoistedScript = id;
File without changes
File without changes
@@ -1,3 +1,4 @@
1
+ import astroRemark from "@astrojs/markdown-remark";
1
2
  import { serializeRouteData } from "../routing/index.js";
2
3
  import { eachPageData } from "./internal.js";
3
4
  import { addRollupInput } from "./add-rollup-input.js";
@@ -9,6 +10,7 @@ const manifestReplace = "@@ASTRO_MANIFEST_REPLACE@@";
9
10
  function vitePluginSSR(buildOpts, internals, adapter) {
10
11
  return {
11
12
  name: "@astrojs/vite-plugin-astro-ssr",
13
+ enforce: "post",
12
14
  options(opts) {
13
15
  return addRollupInput(opts, [virtualModuleId]);
14
16
  },
@@ -73,9 +75,9 @@ function buildManifest(opts, internals) {
73
75
  entryModules[BEFORE_HYDRATION_SCRIPT_ID] = "data:text/javascript;charset=utf-8,//[no before-hydration script]";
74
76
  const ssrManifest = {
75
77
  routes,
76
- site: astroConfig.buildOptions.site,
78
+ site: astroConfig.site,
77
79
  markdown: {
78
- render: astroConfig.markdownOptions.render
80
+ render: [astroRemark, astroConfig.markdown]
79
81
  },
80
82
  pageMap: null,
81
83
  renderers: [],