Skip to content

Commit

Permalink
feat: print transform errors and warnings
Browse files Browse the repository at this point in the history
  • Loading branch information
mrgrain committed May 1, 2021
1 parent f265658 commit 1eeeb10
Show file tree
Hide file tree
Showing 3 changed files with 103 additions and 5 deletions.
69 changes: 69 additions & 0 deletions lib/formatMessages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import {
BuildFailure,
BuildResult,
formatMessagesSync,
TransformFailure,
TransformResult,
} from "esbuild";
import { WriteStream } from "tty";

export function printBuildErrors(
failure: TransformFailure | BuildFailure,
{
dest = process.stdout,
color = true,
prefix = "",
}: {
dest?: WriteStream;
color?: boolean;
prefix?: string;
} = {}
): void {
const errors = formatMessagesSync(failure.errors, {
kind: "error",
color,
});

if (errors.length > 0) {
dest.write(`${prefix}Errors:\n\n`);
dest.write(errors.join("\n\n"));
}
}

export function printBuildWarnings(
failure: TransformFailure | BuildFailure | TransformResult | BuildResult,
{
dest = process.stdout,
color = true,
prefix = "",
}: {
dest?: WriteStream;
color?: boolean;
prefix?: string;
} = {}
): void {
const warnings = formatMessagesSync(failure.warnings, {
kind: "warning",
color,
});

if (warnings.length > 0) {
dest.write(`${prefix}Warning:\n\n`);
dest.write(warnings.join("\n\n"));
}
}

export function printBuildMessages(
failure: TransformFailure | BuildFailure | TransformResult | BuildResult,
props: {
dest?: WriteStream;
color?: boolean;
prefix?: string;
} = {}
): void {
printBuildWarnings(failure, props);

if ((failure as BuildFailure).errors) {
printBuildErrors(failure as BuildFailure, props);
}
}
18 changes: 13 additions & 5 deletions lib/inline-code.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
import { InlineCode } from "@aws-cdk/aws-lambda";
import { transformSync, TransformOptions, Loader } from "esbuild";
import { printBuildMessages } from "./formatMessages";

abstract class BaseInlineCode extends InlineCode {
public constructor(
code: string,
loader: Loader,
transformOptions: TransformOptions = {}
) {
const transformedCode = transformSync(code, {
loader,
...transformOptions,
});
try {
const transformedCode = transformSync(code, {
loader,
...transformOptions,
});
printBuildMessages(transformedCode, { prefix: "Transform " });

super(transformedCode.code);
super(transformedCode.code);
} catch (error) {
printBuildMessages(error, { prefix: "Transform " });

throw new Error("Failed to transform InlineCode");
}
}
}

Expand Down
21 changes: 21 additions & 0 deletions test/inline-code.test.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
import { Stack } from "@aws-cdk/core";
import { mocked } from "ts-jest/utils";
import {
InlineJavaScriptCode,
InlineJsxCode,
InlineTsxCode,
InlineTypeScriptCode,
} from "../lib";
import { printBuildMessages } from "../lib/formatMessages";

jest.mock("../lib/formatMessages", () => ({
printBuildMessages: jest.fn(),
}));

describe("inline-code", () => {
beforeEach(() => {
mocked(printBuildMessages).mockReset();
});

describe("given some js code", () => {
it("should transform the code", () => {
const code = new InlineJavaScriptCode(
Expand Down Expand Up @@ -56,4 +66,15 @@ describe("inline-code", () => {
);
});
});

describe("given some broken ts code", () => {
it("should display errors and warnings", () => {
expect(() => {
const code = new InlineTypeScriptCode("let : d ===== 1");
code.bind(new Stack());
}).toThrowError("Failed to transform InlineCode");

expect(mocked(printBuildMessages)).toHaveBeenCalledTimes(1);
});
});
});

0 comments on commit 1eeeb10

Please sign in to comment.