astro 4.14.1 → 4.14.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/config.d.ts CHANGED
@@ -26,6 +26,9 @@ export function getViteConfig(
26
26
  export function sharpImageService(config?: SharpImageServiceConfig): ImageServiceConfig;
27
27
 
28
28
  /**
29
+ * @deprecated The Squoosh image service is deprecated and will be removed in Astro 5.x.
30
+ * We suggest migrating to the default Sharp image service instead, as it is faster, more powerful and better maintained.
31
+ *
29
32
  * Return the configuration needed to use the Squoosh-based image service
30
33
  * See: https://docs.astro.build/en/guides/images/#configure-squoosh
31
34
  */
@@ -1913,7 +1913,7 @@ export interface AstroUserConfig {
1913
1913
  *
1914
1914
  * **Note:** Secret client variables are not supported because there is no safe way to send this data to the client. Therefore, it is not possible to configure both `context: "client"` and `access: "secret"` in your schema.
1915
1915
  *
1916
- * For a complete overview, and to give feedback on this experimental API, see the [Astro Env RFC](https://github.com/withastro/roadmap/blob/feat/astro-env-rfc/proposals/0046-astro-env.md).
1916
+ * For a complete overview, and to give feedback on this experimental API, see the [Astro Env RFC](https://github.com/withastro/roadmap/blob/main/proposals/0049-astro-env.md).
1917
1917
  */
1918
1918
  env?: {
1919
1919
  /**
@@ -2127,6 +2127,10 @@ export interface AstroUserConfig {
2127
2127
  * export const collections = { blog, dogs };
2128
2128
  * ```
2129
2129
  *
2130
+ * :::note
2131
+ * Loaders will not automatically [exclude files prefaced with an `_`](/en/guides/routing/#excluding-pages). Use a regular expression such as `pattern: '**\/[^_]*.md` in your loader to ignore these files.
2132
+ * :::
2133
+ *
2130
2134
  * #### Querying and rendering with the Content Layer API
2131
2135
  *
2132
2136
  * The collection can be [queried in the same way as content collections](/en/guides/content-collections/#querying-collections):
@@ -2207,8 +2211,8 @@ export interface AstroUserConfig {
2207
2211
  *
2208
2212
  * const blog = defineCollection({
2209
2213
  * // For content layer you no longer define a `type`
2210
- * type: 'content',
2211
- * loader: glob({ pattern: "**\/*.md", base: "./src/data/blog" }),
2214
+ * type: 'content',
2215
+ * loader: glob({ pattern: '**\/[^_]*.md', base: "./src/data/blog" }),
2212
2216
  * schema: z.object({
2213
2217
  * title: z.string(),
2214
2218
  * description: z.string(),
@@ -2239,13 +2243,13 @@ export interface AstroUserConfig {
2239
2243
  * ```astro ins={4,9} del={3,8}
2240
2244
  * // src/pages/index.astro
2241
2245
  * ---
2242
- * import { getEntry } from 'astro:content';
2243
- * import { getEntry, render } from 'astro:content';
2246
+ * import { getEntry } from 'astro:content';
2247
+ * import { getEntry, render } from 'astro:content';
2244
2248
  *
2245
- * const post = await getEntry('blog', params.slug);
2249
+ * const post = await getEntry('blog', params.slug);
2246
2250
  *
2247
- * const { Content, headings } = await post.render();
2248
- * const { Content, headings } = await render(post);
2251
+ * const { Content, headings } = await post.render();
2252
+ * const { Content, headings } = await render(post);
2249
2253
  * ---
2250
2254
  *
2251
2255
  * <Content />
@@ -1,9 +1,15 @@
1
+ import { yellow } from "kleur/colors";
1
2
  import { imageMetadata } from "../utils/metadata.js";
2
3
  import {
3
4
  baseService,
4
5
  parseQuality
5
6
  } from "./service.js";
6
7
  import { processBuffer } from "./vendor/squoosh/image-pool.js";
8
+ console.warn(
9
+ yellow(
10
+ "The Squoosh image service is deprecated and will be removed in Astro 5.x. We suggest migrating to the default Sharp image service instead, as it is faster, more powerful and better maintained."
11
+ )
12
+ );
7
13
  const baseQuality = { low: 25, mid: 50, high: 80, max: 100 };
8
14
  const qualityTable = {
9
15
  avif: {
@@ -7,7 +7,7 @@ async function check(flags) {
7
7
  const logger = createLoggerFromFlags(flags);
8
8
  const getPackageOpts = {
9
9
  skipAsk: !!flags.yes || !!flags.y,
10
- cwd: typeof flags.root == "string" ? flags.root : void 0
10
+ cwd: flags.root
11
11
  };
12
12
  const checkPackage = await getPackage(
13
13
  "@astrojs/check",
@@ -1,5 +1,4 @@
1
- import { type Flags } from '../flags.js';
2
- export declare function db({ positionals, flags }: {
3
- positionals: string[];
4
- flags: Flags;
1
+ import type { Arguments } from 'yargs-parser';
2
+ export declare function db({ flags }: {
3
+ flags: Arguments;
5
4
  }): Promise<void>;
@@ -2,12 +2,12 @@ import { resolveConfig } from "../../core/config/config.js";
2
2
  import { apply as applyPolyfill } from "../../core/polyfill.js";
3
3
  import { createLoggerFromFlags, flagsToAstroInlineConfig } from "../flags.js";
4
4
  import { getPackage } from "../install-package.js";
5
- async function db({ positionals, flags }) {
5
+ async function db({ flags }) {
6
6
  applyPolyfill();
7
7
  const logger = createLoggerFromFlags(flags);
8
8
  const getPackageOpts = {
9
9
  skipAsk: !!flags.yes || !!flags.y,
10
- cwd: typeof flags.root == "string" ? flags.root : void 0
10
+ cwd: flags.root
11
11
  };
12
12
  const dbPackage = await getPackage("@astrojs/db", logger, getPackageOpts, []);
13
13
  if (!dbPackage) {
@@ -20,11 +20,7 @@ async function db({ positionals, flags }) {
20
20
  const { cli } = dbPackage;
21
21
  const inlineConfig = flagsToAstroInlineConfig(flags);
22
22
  const { astroConfig } = await resolveConfig(inlineConfig, "build");
23
- const yargsArgs = {
24
- _: positionals,
25
- ...flags
26
- };
27
- await cli({ flags: yargsArgs, config: astroConfig });
23
+ await cli({ flags, config: astroConfig });
28
24
  }
29
25
  export {
30
26
  db
@@ -1,8 +1,7 @@
1
- import type { parseArgs } from 'node:util';
1
+ import type { Arguments } from 'yargs-parser';
2
2
  import type { AstroInlineConfig } from '../@types/astro.js';
3
3
  import { Logger } from '../core/logger/core.js';
4
- export type ParsedArgsResult = ReturnType<typeof parseArgs>;
5
- export type Flags = ParsedArgsResult['values'];
4
+ export type Flags = Arguments;
6
5
  export declare function flagsToAstroInlineConfig(flags: Flags): AstroInlineConfig;
7
6
  /**
8
7
  * The `logging` is usually created from an `AstroInlineConfig`, but some flows like `add`
package/dist/cli/flags.js CHANGED
@@ -13,7 +13,7 @@ function flagsToAstroInlineConfig(flags) {
13
13
  base: typeof flags.base === "string" ? flags.base : void 0,
14
14
  outDir: typeof flags.outDir === "string" ? flags.outDir : void 0,
15
15
  server: {
16
- port: typeof flags.port === "string" ? Number(flags.port) : void 0,
16
+ port: typeof flags.port === "number" ? flags.port : void 0,
17
17
  host: typeof flags.host === "string" || typeof flags.host === "boolean" ? flags.host : void 0,
18
18
  open: typeof flags.open === "string" || typeof flags.open === "boolean" ? flags.open : void 0
19
19
  }
package/dist/cli/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { parseArgs } from "node:util";
2
1
  import * as colors from "kleur/colors";
2
+ import yargs from "yargs-parser";
3
3
  import { ASTRO_VERSION } from "../core/constants.js";
4
4
  async function printAstroHelp() {
5
5
  const { printHelp } = await import("../core/messages.js");
@@ -43,9 +43,9 @@ function printVersion() {
43
43
  console.log();
44
44
  console.log(` ${colors.bgGreen(colors.black(` astro `))} ${colors.green(`v${ASTRO_VERSION}`)}`);
45
45
  }
46
- function resolveCommand(args) {
47
- const cmd = args.positionals[2];
48
- if (args.values.version) return "version";
46
+ function resolveCommand(flags) {
47
+ const cmd = flags._[2];
48
+ if (flags.version) return "version";
49
49
  const supportedCommands = /* @__PURE__ */ new Set([
50
50
  "add",
51
51
  "sync",
@@ -68,8 +68,7 @@ function resolveCommand(args) {
68
68
  }
69
69
  return "help";
70
70
  }
71
- async function runCommand(cmd, args) {
72
- const flags = args.values;
71
+ async function runCommand(cmd, flags) {
73
72
  switch (cmd) {
74
73
  case "help":
75
74
  await printAstroHelp();
@@ -89,7 +88,7 @@ async function runCommand(cmd, args) {
89
88
  }
90
89
  case "telemetry": {
91
90
  const { update } = await import("./telemetry/index.js");
92
- const subcommand = args.positionals[3];
91
+ const subcommand = flags._[3]?.toString();
93
92
  await update(subcommand, { flags });
94
93
  return;
95
94
  }
@@ -100,7 +99,7 @@ async function runCommand(cmd, args) {
100
99
  }
101
100
  case "preferences": {
102
101
  const { preferences } = await import("./preferences/index.js");
103
- const [subcommand, key, value] = args.positionals.slice(3);
102
+ const [subcommand, key, value] = flags._.slice(3).map((v) => v.toString());
104
103
  const exitCode = await preferences(subcommand, key, value, { flags });
105
104
  return process.exit(exitCode);
106
105
  }
@@ -114,7 +113,7 @@ async function runCommand(cmd, args) {
114
113
  switch (cmd) {
115
114
  case "add": {
116
115
  const { add } = await import("./add/index.js");
117
- const packages = args.positionals.slice(3);
116
+ const packages = flags._.slice(3);
118
117
  await add(packages, { flags });
119
118
  return;
120
119
  }
@@ -124,7 +123,7 @@ async function runCommand(cmd, args) {
124
123
  case "link":
125
124
  case "init": {
126
125
  const { db } = await import("./db/index.js");
127
- await db({ positionals: args.positionals, flags });
126
+ await db({ flags });
128
127
  return;
129
128
  }
130
129
  case "dev": {
@@ -163,22 +162,10 @@ async function runCommand(cmd, args) {
163
162
  throw new Error(`Error running ${cmd} -- no command found.`);
164
163
  }
165
164
  async function cli(argv) {
166
- const args = parseArgs({
167
- args: argv,
168
- allowPositionals: true,
169
- strict: false,
170
- options: {
171
- global: { type: "boolean", short: "g" },
172
- host: { type: "string" },
173
- // Can be boolean too, which is covered by `strict: false`
174
- open: { type: "string" }
175
- // Can be boolean too, which is covered by `strict: false`
176
- // TODO: Add more flags here
177
- }
178
- });
179
- const cmd = resolveCommand(args);
165
+ const flags = yargs(argv, { boolean: ["global"], alias: { g: "global" } });
166
+ const cmd = resolveCommand(flags);
180
167
  try {
181
- await runCommand(cmd, args);
168
+ await runCommand(cmd, flags);
182
169
  } catch (err) {
183
170
  const { throwAndExit } = await import("./throw-and-exit.js");
184
171
  await throwAndExit(cmd, err);
@@ -5,7 +5,7 @@ import { debug } from "../logger/core.js";
5
5
  async function createViteServer(root, fs) {
6
6
  const viteServer = await createServer({
7
7
  configFile: false,
8
- server: { middlewareMode: true, hmr: false, watch: null },
8
+ server: { middlewareMode: true, hmr: false, watch: null, ws: false },
9
9
  optimizeDeps: { noDiscovery: true },
10
10
  clearScreen: false,
11
11
  appType: "custom",
@@ -1,4 +1,4 @@
1
- const ASTRO_VERSION = "4.14.1";
1
+ const ASTRO_VERSION = "4.14.3";
2
2
  const REROUTE_DIRECTIVE_HEADER = "X-Astro-Reroute";
3
3
  const REWRITE_DIRECTIVE_HEADER_KEY = "X-Astro-Rewrite";
4
4
  const REWRITE_DIRECTIVE_HEADER_VALUE = "yes";
@@ -23,7 +23,7 @@ async function dev(inlineConfig) {
23
23
  await telemetry.record([]);
24
24
  const restart = await createContainerWithAutomaticRestart({ inlineConfig, fs });
25
25
  const logger = restart.container.logger;
26
- const currentVersion = "4.14.1";
26
+ const currentVersion = "4.14.3";
27
27
  const isPrerelease = currentVersion.includes("-");
28
28
  if (!isPrerelease) {
29
29
  try {
@@ -38,7 +38,7 @@ function serverStart({
38
38
  host,
39
39
  base
40
40
  }) {
41
- const version = "4.14.1";
41
+ const version = "4.14.3";
42
42
  const localPrefix = `${dim("\u2503")} Local `;
43
43
  const networkPrefix = `${dim("\u2503")} Network `;
44
44
  const emptyPrefix = " ".repeat(11);
@@ -270,7 +270,7 @@ function printHelp({
270
270
  message.push(
271
271
  linebreak(),
272
272
  ` ${bgGreen(black(` ${commandName} `))} ${green(
273
- `v${"4.14.1"}`
273
+ `v${"4.14.3"}`
274
274
  )} ${headline}`
275
275
  );
276
276
  }
@@ -112,7 +112,7 @@ async function syncContentCollections(settings, { logger, fs }) {
112
112
  const tempViteServer = await createServer(
113
113
  await createVite(
114
114
  {
115
- server: { middlewareMode: true, hmr: false, watch: null },
115
+ server: { middlewareMode: true, hmr: false, watch: null, ws: false },
116
116
  optimizeDeps: { noDiscovery: true },
117
117
  ssr: { external: [] },
118
118
  logLevel: "silent"
@@ -19,7 +19,7 @@ const CLIENT_TYPES_REFERENCE = getTsReference("types", "astro/client");
19
19
  function writeInjectedTypes(settings, fs) {
20
20
  const references = [];
21
21
  for (const { filename, content } of settings.injectedTypes) {
22
- const filepath = normalizePath(fileURLToPath(new URL(filename, settings.dotAstroDir)));
22
+ const filepath = fileURLToPath(new URL(filename, settings.dotAstroDir));
23
23
  fs.mkdirSync(dirname(filepath), { recursive: true });
24
24
  fs.writeFileSync(filepath, content, "utf-8");
25
25
  references.push(normalizePath(relative(fileURLToPath(settings.dotAstroDir), filepath)));
@@ -30,16 +30,14 @@ ${references.map((reference) => getTsReference("path", reference)).join("\n")}`;
30
30
  fs.mkdirSync(settings.dotAstroDir, { recursive: true });
31
31
  }
32
32
  fs.writeFileSync(
33
- normalizePath(fileURLToPath(new URL(REFERENCE_FILE, settings.dotAstroDir))),
33
+ fileURLToPath(new URL(REFERENCE_FILE, settings.dotAstroDir)),
34
34
  astroDtsContent,
35
35
  "utf-8"
36
36
  );
37
37
  }
38
38
  async function setUpEnvTs(settings, fs, logger) {
39
- const envTsPath = normalizePath(fileURLToPath(new URL("env.d.ts", settings.config.srcDir)));
40
- const envTsPathRelativetoRoot = normalizePath(
41
- relative(fileURLToPath(settings.config.root), envTsPath)
42
- );
39
+ const envTsPath = fileURLToPath(new URL("env.d.ts", settings.config.srcDir));
40
+ const envTsPathRelativetoRoot = relative(fileURLToPath(settings.config.root), envTsPath);
43
41
  const relativePath = normalizePath(
44
42
  relative(
45
43
  fileURLToPath(settings.config.srcDir),
@@ -14,7 +14,7 @@ function astroEnv({
14
14
  fs,
15
15
  sync
16
16
  }) {
17
- if (!settings.config.experimental.env || sync) {
17
+ if (!settings.config.experimental.env) {
18
18
  return;
19
19
  }
20
20
  const schema = settings.config.experimental.env.schema ?? {};
@@ -36,7 +36,8 @@ function astroEnv({
36
36
  const validatedVariables = validatePublicVariables({
37
37
  schema,
38
38
  loadedEnv,
39
- validateSecrets: settings.config.experimental.env?.validateSecrets ?? false
39
+ validateSecrets: settings.config.experimental.env?.validateSecrets ?? false,
40
+ sync
40
41
  });
41
42
  templates = {
42
43
  ...getTemplates(schema, fs, validatedVariables),
@@ -76,7 +77,8 @@ function resolveVirtualModuleId(id) {
76
77
  function validatePublicVariables({
77
78
  schema,
78
79
  loadedEnv,
79
- validateSecrets
80
+ validateSecrets,
81
+ sync
80
82
  }) {
81
83
  const valid = [];
82
84
  const invalid = [];
@@ -93,7 +95,7 @@ function validatePublicVariables({
93
95
  valid.push({ key, value: result.value, type, context: options.context });
94
96
  }
95
97
  }
96
- if (invalid.length > 0) {
98
+ if (invalid.length > 0 && !sync) {
97
99
  throw new AstroError({
98
100
  ...AstroErrorData.EnvInvalidVariables,
99
101
  message: AstroErrorData.EnvInvalidVariables.message(invalidVariablesToError(invalid))
@@ -81,18 +81,21 @@ function validateSupportKind(supportKind, adapterName, logger, featureName, hasC
81
81
  }
82
82
  }
83
83
  function featureIsUnsupported(adapterName, logger, featureName) {
84
- logger.error("config", `The feature "${featureName}" is not supported (used by ${adapterName}).`);
84
+ logger.error(
85
+ "config",
86
+ `The adapter ${adapterName} doesn't currently support the feature "${featureName}".`
87
+ );
85
88
  }
86
89
  function featureIsExperimental(adapterName, logger, featureName) {
87
90
  logger.warn(
88
91
  "config",
89
- `The feature "${featureName}" is experimental and subject to change (used by ${adapterName}).`
92
+ `The adapter ${adapterName} provides experimental support for "${featureName}". You may experience issues or breaking changes until this feature is fully supported by the adapter.`
90
93
  );
91
94
  }
92
95
  function featureIsDeprecated(adapterName, logger, featureName) {
93
96
  logger.warn(
94
97
  "config",
95
- `The feature "${featureName}" is deprecated and will be removed in the future (used by ${adapterName}).`
98
+ `The adapter ${adapterName} has deprecated its support for "${featureName}", and future compatibility is not guaranteed. The adapter may completely remove support for this feature without warning.`
96
99
  );
97
100
  }
98
101
  const SHARP_SERVICE = "astro/assets/services/sharp";
@@ -260,7 +260,7 @@ async function runHookConfigDone({
260
260
  filename: normalizedFilename,
261
261
  content: injectedType.content
262
262
  });
263
- return new URL(normalizedFilename, settings.config.root);
263
+ return new URL(normalizedFilename, settings.dotAstroDir);
264
264
  },
265
265
  logger: getLogger(integration, logger)
266
266
  }),
@@ -117,8 +117,8 @@ function envVitePlugin({ settings, logger }) {
117
117
  s.prepend(devImportMetaEnvPrepend);
118
118
  let exportConstPrerenderStr;
119
119
  s.replace(exportConstPrerenderRe, (m, key) => {
120
- exportConstPrerenderStr = m;
121
120
  if (privateEnv[key] != null) {
121
+ exportConstPrerenderStr = m;
122
122
  return `export const prerender = ${privateEnv[key]}`;
123
123
  } else {
124
124
  return m;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "astro",
3
- "version": "4.14.1",
3
+ "version": "4.14.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",
@@ -108,15 +108,15 @@
108
108
  "vendor"
109
109
  ],
110
110
  "dependencies": {
111
- "@astrojs/compiler": "^2.10.2",
111
+ "@astrojs/compiler": "^2.10.3",
112
112
  "@babel/core": "^7.25.2",
113
113
  "@babel/generator": "^7.25.0",
114
114
  "@babel/parser": "^7.25.3",
115
115
  "@babel/plugin-transform-react-jsx": "^7.25.2",
116
116
  "@babel/traverse": "^7.25.3",
117
117
  "@babel/types": "^7.25.2",
118
- "@rollup/pluginutils": "^5.1.0",
119
118
  "@oslojs/encoding": "^0.4.1",
119
+ "@rollup/pluginutils": "^5.1.0",
120
120
  "@types/babel__core": "^7.20.5",
121
121
  "@types/cookie": "^0.6.0",
122
122
  "acorn": "^8.12.1",
@@ -149,7 +149,7 @@
149
149
  "magic-string": "^0.30.11",
150
150
  "micromatch": "^4.0.7",
151
151
  "mrmime": "^2.0.0",
152
- "neotraverse": "^0.6.9",
152
+ "neotraverse": "^0.6.18",
153
153
  "ora": "^8.0.1",
154
154
  "p-limit": "^6.1.0",
155
155
  "p-queue": "^8.0.1",
@@ -158,29 +158,30 @@
158
158
  "prompts": "^2.4.2",
159
159
  "rehype": "^13.0.1",
160
160
  "semver": "^7.6.3",
161
- "shiki": "^1.12.1",
161
+ "shiki": "^1.14.1",
162
162
  "string-width": "^7.2.0",
163
163
  "strip-ansi": "^7.1.0",
164
164
  "tsconfck": "^3.1.1",
165
165
  "unist-util-visit": "^5.0.0",
166
166
  "vfile": "^6.0.2",
167
- "vite": "^5.4.0",
167
+ "vite": "^5.4.1",
168
168
  "vitefu": "^0.2.5",
169
169
  "which-pm": "^3.0.0",
170
170
  "xxhash-wasm": "^1.0.2",
171
+ "yargs-parser": "^21.1.1",
171
172
  "zod": "^3.23.8",
172
173
  "zod-to-json-schema": "^3.23.2",
173
174
  "zod-to-ts": "^1.2.0",
174
175
  "@astrojs/internal-helpers": "0.4.1",
175
- "@astrojs/telemetry": "3.1.0",
176
- "@astrojs/markdown-remark": "5.2.0"
176
+ "@astrojs/markdown-remark": "5.2.0",
177
+ "@astrojs/telemetry": "3.1.0"
177
178
  },
178
179
  "optionalDependencies": {
179
180
  "sharp": "^0.33.3"
180
181
  },
181
182
  "devDependencies": {
182
- "@astrojs/check": "^0.9.2",
183
- "@playwright/test": "^1.46.0",
183
+ "@astrojs/check": "^0.9.3",
184
+ "@playwright/test": "^1.46.1",
184
185
  "@types/aria-query": "^5.0.4",
185
186
  "@types/babel__generator": "^7.6.8",
186
187
  "@types/babel__traverse": "^7.20.6",
@@ -197,6 +198,7 @@
197
198
  "@types/micromatch": "^4.0.9",
198
199
  "@types/prompts": "^2.4.9",
199
200
  "@types/semver": "^7.5.8",
201
+ "@types/yargs-parser": "^21.0.3",
200
202
  "cheerio": "1.0.0",
201
203
  "eol": "^0.9.1",
202
204
  "expect-type": "^0.19.0",
@@ -209,7 +211,7 @@
209
211
  "rehype-slug": "^6.0.0",
210
212
  "rehype-toc": "^3.0.2",
211
213
  "remark-code-titles": "^0.1.2",
212
- "rollup": "^4.20.0",
214
+ "rollup": "^4.21.0",
213
215
  "sass": "^1.77.8",
214
216
  "undici": "^6.19.7",
215
217
  "unified": "^11.0.5",
@@ -225,10 +227,9 @@
225
227
  },
226
228
  "scripts": {
227
229
  "prebuild": "astro-scripts prebuild --to-string \"src/runtime/server/astro-island.ts\" \"src/runtime/client/{idle,load,media,only,visible}.ts\"",
228
- "build": "pnpm run prebuild && astro-scripts build \"src/**/*.{ts,js}\" && tsc && pnpm run postbuild",
229
- "build:ci": "pnpm run prebuild && astro-scripts build \"src/**/*.{ts,js}\" && pnpm run postbuild",
230
+ "build": "pnpm run prebuild && astro-scripts build \"src/**/*.{ts,js}\" --copy-wasm && tsc",
231
+ "build:ci": "pnpm run prebuild && astro-scripts build \"src/**/*.{ts,js}\" --copy-wasm",
230
232
  "dev": "astro-scripts dev --copy-wasm --prebuild \"src/runtime/server/astro-island.ts\" --prebuild \"src/runtime/client/{idle,load,media,only,visible}.ts\" \"src/**/*.{ts,js}\"",
231
- "postbuild": "astro-scripts copy \"src/**/*.astro\" && astro-scripts copy \"src/**/*.wasm\"",
232
233
  "test": "pnpm run test:node && pnpm run test:types",
233
234
  "test:match": "pnpm run test:node --match",
234
235
  "test:e2e": "pnpm test:e2e:chrome && pnpm test:e2e:firefox",