summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.changeset/healthy-jokes-deny.md5
-rw-r--r--packages/astro/src/core/errors/errors.ts2
-rw-r--r--packages/astro/src/core/sync/index.ts13
-rw-r--r--packages/astro/test/units/dev/collections-mixed-content-errors.test.js28
4 files changed, 21 insertions, 27 deletions
diff --git a/.changeset/healthy-jokes-deny.md b/.changeset/healthy-jokes-deny.md
new file mode 100644
index 000000000..d5b9c5d1a
--- /dev/null
+++ b/.changeset/healthy-jokes-deny.md
@@ -0,0 +1,5 @@
+---
+"astro": patch
+---
+
+Improves error handling logic for the `astro sync` command.
diff --git a/packages/astro/src/core/errors/errors.ts b/packages/astro/src/core/errors/errors.ts
index 37373527b..88ff70de3 100644
--- a/packages/astro/src/core/errors/errors.ts
+++ b/packages/astro/src/core/errors/errors.ts
@@ -27,7 +27,7 @@ type ErrorTypes =
| 'AggregateError';
export function isAstroError(e: unknown): e is AstroError {
- return e instanceof Error && (e as AstroError).type === 'AstroError';
+ return e instanceof AstroError;
}
export class AstroError extends Error {
diff --git a/packages/astro/src/core/sync/index.ts b/packages/astro/src/core/sync/index.ts
index 8b78c9d30..ce121033b 100644
--- a/packages/astro/src/core/sync/index.ts
+++ b/packages/astro/src/core/sync/index.ts
@@ -18,6 +18,8 @@ import { createVite } from '../create-vite.js';
import { AstroError, AstroErrorData, createSafeError, isAstroError } from '../errors/index.js';
import type { Logger } from '../logger/core.js';
import { ensureProcessNodeEnv } from '../util.js';
+import { formatErrorMessage } from '../messages.js';
+import { collectErrorMetadata } from '../errors/dev/utils.js';
export type ProcessExit = 0 | 1;
@@ -55,7 +57,16 @@ export default async function sync(
command: 'build',
});
- return await syncInternal(settings, { ...options, logger });
+ try {
+ return await syncInternal(settings, { ...options, logger });
+ } catch (err) {
+ const error = createSafeError(err);
+ logger.error(
+ 'content',
+ formatErrorMessage(collectErrorMetadata(error), logger.level() === 'debug') + '\n'
+ );
+ return 1;
+ }
}
/**
diff --git a/packages/astro/test/units/dev/collections-mixed-content-errors.test.js b/packages/astro/test/units/dev/collections-mixed-content-errors.test.js
index a8e282a88..9cad4f5e8 100644
--- a/packages/astro/test/units/dev/collections-mixed-content-errors.test.js
+++ b/packages/astro/test/units/dev/collections-mixed-content-errors.test.js
@@ -35,14 +35,7 @@ name: Ben
root
);
- try {
- await sync({ fs });
- expect.fail(0, 1, 'Expected sync to throw');
- } catch (e) {
- expect(e).to.be.instanceOf(Error);
- expect(e.type).to.equal('AstroError');
- expect(e.message).to.include('authors');
- }
+ expect(await sync({ fs })).to.equal(1);
});
it('raises "mixed content" error when data in content collection', async () => {
@@ -70,15 +63,7 @@ title: Post
root
);
- try {
- await sync({ fs });
- expect.fail(0, 1, 'Expected sync to throw');
- } catch (e) {
- expect(e).to.be.instanceOf(Error);
- expect(e.type).to.equal('AstroError');
-
- expect(e.message).to.include('blog');
- }
+ expect(await sync({ fs })).to.equal(1);
});
it('raises error when data collection configured as content collection', async () => {
@@ -101,14 +86,7 @@ title: Post
root
);
- try {
- await sync({ fs });
- expect.fail(0, 1, 'Expected sync to throw');
- } catch (e) {
- expect(e).to.be.instanceOf(Error);
- expect(e.type).to.equal('AstroError');
- expect(e.hint).to.include("Try adding `type: 'data'`");
- }
+ expect(await sync({ fs })).to.equal(1);
});
it('does not raise error for empty collection with config', async () => {