* chore: replace eslint & prettier w/ biomejs * fix syntax error in ci.yml workflow * ensure that build CI jobs only run if check job succeeds to save resources
151 lines
3.6 KiB
TypeScript
151 lines
3.6 KiB
TypeScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
import { promises as fs } from "node:fs";
|
|
import * as path from "node:path";
|
|
|
|
import {
|
|
WEBSNACKS_BIN_PATH,
|
|
WEBSNACKS_REPO_ROOT,
|
|
npmCmd,
|
|
runCommand,
|
|
withTempDir,
|
|
} from "../helpers/e2e";
|
|
import { testSuite } from "../lib";
|
|
|
|
testSuite("build command", ({ test }) => {
|
|
test("runs without throwing error", async () => {
|
|
await withTempDir(async (tempDirPath) => {
|
|
await fs.writeFile(
|
|
path.join(tempDirPath, "tsconfig.json"),
|
|
JSON.stringify({
|
|
compilerOptions: {
|
|
esModuleInterop: true,
|
|
module: "CommonJS",
|
|
moduleResolution: "node",
|
|
jsx: "react",
|
|
jsxFactory: "createElement",
|
|
target: "ES2018",
|
|
lib: ["ES2018"],
|
|
strict: true,
|
|
noUnusedLocals: true,
|
|
noUnusedParameters: true,
|
|
noImplicitReturns: true,
|
|
noFallthroughCasesInSwitch: true,
|
|
},
|
|
include: ["components/**/*", "pages/**/*"],
|
|
}),
|
|
{
|
|
encoding: "utf8",
|
|
},
|
|
);
|
|
await fs.writeFile(
|
|
path.join(tempDirPath, "websnacks.ts"),
|
|
`
|
|
import { Config } from "websnacks";
|
|
const config: Config = {
|
|
watch: [],
|
|
};
|
|
export = config;
|
|
`,
|
|
{
|
|
encoding: "utf8",
|
|
},
|
|
);
|
|
const pagesPath = path.join(tempDirPath, "pages");
|
|
await fs.mkdir(pagesPath);
|
|
await fs.writeFile(
|
|
path.join(pagesPath, "index.tsx"),
|
|
`
|
|
import { createElement } from "websnacks";
|
|
export const page = () => <html />;
|
|
`,
|
|
{
|
|
encoding: "utf8",
|
|
},
|
|
);
|
|
await fs.writeFile(
|
|
path.join(tempDirPath, "package.json"),
|
|
JSON.stringify({
|
|
devDependencies: {
|
|
websnacks: `file:${WEBSNACKS_REPO_ROOT}`,
|
|
},
|
|
}),
|
|
{ encoding: "utf8" },
|
|
);
|
|
await runCommand(npmCmd, ["install", "--silent"], {
|
|
cwd: tempDirPath,
|
|
}).complete;
|
|
const cmd = runCommand(
|
|
"node",
|
|
[WEBSNACKS_BIN_PATH, "-r", "ts-node/register", "build"],
|
|
{
|
|
cwd: tempDirPath,
|
|
},
|
|
);
|
|
await cmd.complete;
|
|
});
|
|
});
|
|
|
|
test("works without config file", async () => {
|
|
await withTempDir(async (tempDirPath) => {
|
|
await fs.writeFile(
|
|
path.join(tempDirPath, "tsconfig.json"),
|
|
JSON.stringify({
|
|
compilerOptions: {
|
|
esModuleInterop: true,
|
|
module: "CommonJS",
|
|
moduleResolution: "node",
|
|
jsx: "react",
|
|
jsxFactory: "createElement",
|
|
target: "ES2018",
|
|
lib: ["ES2018"],
|
|
strict: true,
|
|
noUnusedLocals: true,
|
|
noUnusedParameters: true,
|
|
noImplicitReturns: true,
|
|
noFallthroughCasesInSwitch: true,
|
|
},
|
|
include: ["components/**/*", "pages/**/*"],
|
|
}),
|
|
{
|
|
encoding: "utf8",
|
|
},
|
|
);
|
|
const pagesPath = path.join(tempDirPath, "pages");
|
|
await fs.mkdir(pagesPath);
|
|
await fs.writeFile(
|
|
path.join(pagesPath, "index.tsx"),
|
|
`
|
|
import { createElement } from "websnacks";
|
|
export const page = () => <html />;
|
|
`,
|
|
{
|
|
encoding: "utf8",
|
|
},
|
|
);
|
|
await fs.writeFile(
|
|
path.join(tempDirPath, "package.json"),
|
|
JSON.stringify({
|
|
devDependencies: {
|
|
websnacks: `file:${WEBSNACKS_REPO_ROOT}`,
|
|
},
|
|
}),
|
|
{ encoding: "utf8" },
|
|
);
|
|
await runCommand(npmCmd, ["install", "--silent"], {
|
|
cwd: tempDirPath,
|
|
}).complete;
|
|
const cmd = runCommand(
|
|
"node",
|
|
[WEBSNACKS_BIN_PATH, "-r", "ts-node/register", "build"],
|
|
{
|
|
cwd: tempDirPath,
|
|
},
|
|
);
|
|
await cmd.complete;
|
|
});
|
|
});
|
|
});
|