Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/msteams #1914

Merged
merged 12 commits into from May 21, 2021
3 changes: 2 additions & 1 deletion package.json
Expand Up @@ -40,13 +40,14 @@
"postinstall": "patch-package"
},
"devDependencies": {
"@atomictech/rehype-toc": "^3.1.2",
"@atomictech/rehype-toc": "3.1.2",
"@fortawesome/fontawesome-svg-core": "^1.2.27",
"@fortawesome/free-solid-svg-icons": "^5.12.1",
"@fortawesome/react-fontawesome": "^0.1.9",
"@types/jest": "^26.0.0",
"@types/mock-fs": "^4.13.0",
"@types/parse-github-url": "1.0.0",
"@types/tapable": "2.2.2",
"@typescript-eslint/eslint-plugin": "^4.1.1",
"@typescript-eslint/parser": "^4.1.1",
"all-contributors-cli": "^6.4.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Expand Up @@ -68,7 +68,7 @@
"requireg": "^0.2.2",
"semver": "^7.0.0",
"signale": "^1.4.0",
"tapable": "^2.0.0-beta.2",
"tapable": "^2.2.0",
"terminal-link": "^2.1.1",
"tinycolor2": "^1.4.1",
"ts-node": "^9.1.1",
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/__tests__/auto-env.test.ts
@@ -1,6 +1,7 @@
import { Auto } from "../auto";

jest.mock("fs", () => ({
read: () => undefined,
readFileSync: () => 'FOO="test value"',
closeSync: () => undefined,
existsSync: () => true,
Expand Down
4 changes: 4 additions & 0 deletions packages/core/src/__tests__/release.test.ts
Expand Up @@ -123,6 +123,10 @@ jest.mock("fs", () => ({
writeFile: (file, data, cb) => {
cb(undefined, writeSpy(file, data));
},
// @ts-ignore
read: (a, b, cb) => {
cb(undefined);
},
}));

const logParse = new LogParse();
Expand Down
7 changes: 5 additions & 2 deletions packages/core/src/git.ts
Expand Up @@ -164,8 +164,11 @@ export default class Git {
},
});
this.github.hook.error("request", (error) => {
if (error?.headers?.authorization) {
delete error.headers.authorization;
if (error) {
// narrow down the type
if ("headers" in error && error.headers.authorization) {
delete error.headers.authorization;
}
}

throw error;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/log-parse.ts
Expand Up @@ -20,7 +20,7 @@ export interface IPullRequest {
/** The base branch the pull request is on */
base?: string;
/** The body of the PR (opening comment) */
body?: string;
body?: string | null;
}

export interface ICommit {
Expand Down
4 changes: 4 additions & 0 deletions plugins/brew/__tests__/brew.test.ts
Expand Up @@ -12,6 +12,10 @@ const readFileSync = jest.fn();
const writeFileSync = jest.fn();

jest.mock("fs", () => ({
// @ts-ignore
read: (a, b, cb) => {
cb(undefined);
},
// @ts-ignore
existsSync: (...args) => existsSync(...args),
// @ts-ignore
Expand Down
4 changes: 4 additions & 0 deletions plugins/crates/__tests__/crates.test.ts
Expand Up @@ -51,6 +51,10 @@ jest.mock("fs", () => ({
// @ts-ignore
existsSync: (...args) => existsSync(...args),
// @ts-ignore
read: (a, b, cb) => {
cb(undefined, readResult);
},
// @ts-ignore
readFile: (a, b, cb) => {
cb(undefined, readResult);
},
Expand Down
4 changes: 4 additions & 0 deletions plugins/maven/__tests__/maven.test.ts
Expand Up @@ -30,6 +30,10 @@ jest.mock("fs", () => ({
WriteStream: function () {},
// @ts-ignore
closeSync: () => undefined,
// @ts-ignore
read: (a, b, cb) => {
cb(undefined);
},
}));

jest.mock("child_process");
Expand Down
2 changes: 1 addition & 1 deletion plugins/microsoft-teams/README.md
Expand Up @@ -26,7 +26,7 @@ To generate incoming webhook in microsoft teams, checkout [this blog](https://me
// or
[
"microsoft-teams",
{ "url": "https://url-to-your--hook.com", "atTarget": "username" }
{ "url": "https://url-to-your--hook.com" }
]
// Below: Uses microsoft-teams hook set in process.env.MICROSOFT_TEAMS_WEBHOOK_URL
"microsoft-teams"
Expand Down
20 changes: 9 additions & 11 deletions plugins/microsoft-teams/__tests__/__snapshots__/index.test.ts.snap
@@ -1,21 +1,19 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`createPost should add more indents to nested lists - 2 spaces 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"@channel: New release *<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\\\n*My Notes*\\\\n• PR <google.com|some link>\\\\n • Another note\\"}"`;
exports[`createPost should add more indents to nested lists - 2 spaces 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"# My Notes//n- PR [some link](google.com)//n - Another note\\",\\"potentialAction\\":[{\\"@type\\":\\"OpenUri\\",\\"name\\":\\"Learn More\\",\\"targets\\":[{\\"os\\":\\"default\\",\\"uri\\":\\"*<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\"}]}]}"`;

exports[`createPost should add more indents to nested lists 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"@channel: New release *<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\\\n*My Notes*\\\\n• PR <google.com|some link>\\\\n • Another note\\"}"`;
exports[`createPost should add more indents to nested lists 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"# My Notes//n- PR [some link](google.com)//n - Another note\\",\\"potentialAction\\":[{\\"@type\\":\\"OpenUri\\",\\"name\\":\\"Learn More\\",\\"targets\\":[{\\"os\\":\\"default\\",\\"uri\\":\\"*<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\"}]}]}"`;

exports[`createPost should add title 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"@channel: New release *<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\\\n*My Notes*\\\\n• PR <google.com|some link>\\"}"`;
exports[`createPost should add title 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"# My Notes//n- PR [some link](google.com)\\",\\"potentialAction\\":[{\\"@type\\":\\"OpenUri\\",\\"name\\":\\"Learn More\\",\\"targets\\":[{\\"os\\":\\"default\\",\\"uri\\":\\"*<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\"}]}]}"`;

exports[`createPost should call slack api 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"@channel: New release *<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\\\n*My Notes*\\\\n• PR <google.com|some link>\\"}"`;
exports[`createPost should call Microsoft Office Teams api 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"# My Notes//n- PR [some link](google.com)\\",\\"potentialAction\\":[{\\"@type\\":\\"OpenUri\\",\\"name\\":\\"Learn More\\",\\"targets\\":[{\\"os\\":\\"default\\",\\"uri\\":\\"*<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\"}]}]}"`;

exports[`createPost should call slack api in env var 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"@channel: New release *<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\\\n*My Notes*\\\\n• PR <google.com|some link>\\"}"`;
exports[`createPost should call Microsoft Office Teams api in env var 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"# My Notes//n- PR [some link](google.com)\\",\\"potentialAction\\":[{\\"@type\\":\\"OpenUri\\",\\"name\\":\\"Learn More\\",\\"targets\\":[{\\"os\\":\\"default\\",\\"uri\\":\\"*<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\"}]}]}"`;

exports[`createPost should call slack api through http proxy 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"@channel: New release *<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\\\n*My Notes*\\\\n• PR <google.com|some link>\\"}"`;
exports[`createPost should call Microsoft Office Teams api through http proxy 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"# My Notes//n- PR [some link](google.com)\\",\\"potentialAction\\":[{\\"@type\\":\\"OpenUri\\",\\"name\\":\\"Learn More\\",\\"targets\\":[{\\"os\\":\\"default\\",\\"uri\\":\\"*<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\"}]}]}"`;

exports[`createPost should call slack api through https proxy 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"@channel: New release *<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\\\n*My Notes*\\\\n• PR <google.com|some link>\\"}"`;
exports[`createPost should call Microsoft Office Teams api through https proxy 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"# My Notes//n- PR [some link](google.com)\\",\\"potentialAction\\":[{\\"@type\\":\\"OpenUri\\",\\"name\\":\\"Learn More\\",\\"targets\\":[{\\"os\\":\\"default\\",\\"uri\\":\\"*<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\"}]}]}"`;

exports[`createPost should call slack api with custom atTarget 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"@here: New release *<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\\\n*My Notes*\\\\n• PR <google.com|some link>\\"}"`;
exports[`createPost should call Microsoft Office Teams api with minimal config 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"# My Notes//n- PR [some link](google.com)\\",\\"potentialAction\\":[{\\"@type\\":\\"OpenUri\\",\\"name\\":\\"Learn More\\",\\"targets\\":[{\\"os\\":\\"default\\",\\"uri\\":\\"*<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\"}]}]}"`;

exports[`createPost should call slack api with minimal config 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"@channel: New release *<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\\\n*My Notes*\\\\n• PR <google.com|some link>\\"}"`;

exports[`createPost should remove markdown code types from block 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"@channel: New release *<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\\\n*My Notes*\\\\n\`json\`:\\\\n\\\\n\`\`\`\\\\n{ \\\\\\"foo\\\\\\": \\\\\\"bar\\\\\\" }\`\`\`\\\\n• PR <google.com|some link>\\"}"`;
exports[`createPost should remove markdown code types from block 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"# My Notes//n\`\`\`json//n{ /\\"foo/\\": /\\"bar/\\" }\`\`\`//n- PR [some link](google.com)\\",\\"potentialAction\\":[{\\"@type\\":\\"OpenUri\\",\\"name\\":\\"Learn More\\",\\"targets\\":[{\\"os\\":\\"default\\",\\"uri\\":\\"*<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\"}]}]}"`;
@@ -1,5 +1,5 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`postToMicrosoftTeams should call microsoft-teams api through http proxy 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"@channel: New release *<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\\\n*My Notes*\\\\n• PR <google.com|some link>\\"}"`;
exports[`postToMicrosoftTeams should call microsoft-teams api through http proxy 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"*My Notes*\\\\n• PR <google.com|some link>\\",\\"potentialAction\\":[{\\"@type\\":\\"OpenUri\\",\\"name\\":\\"Learn More\\",\\"targets\\":[{\\"os\\":\\"default\\",\\"uri\\":\\"*<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\"}]}]}"`;

exports[`postToMicrosoftTeams should call microsoft-teams api with minimal config 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"@channel: New release *<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\\\n*My Notes*\\\\n• PR <google.com|some link>\\"}"`;
exports[`postToMicrosoftTeams should call microsoft-teams api with minimal config 1`] = `"{\\"@context\\":\\"http://schema.org/extensions\\",\\"@type\\":\\"MessageCard\\",\\"text\\":\\"*My Notes*\\\\n• PR <google.com|some link>\\",\\"potentialAction\\":[{\\"@type\\":\\"OpenUri\\",\\"name\\":\\"Learn More\\",\\"targets\\":[{\\"os\\":\\"default\\",\\"uri\\":\\"*<https://git.hub/some/project/releases/v1.0.0|v1.0.0>*\\"}]}]}"`;
59 changes: 30 additions & 29 deletions plugins/microsoft-teams/__tests__/index.test.ts
Expand Up @@ -199,7 +199,7 @@ describe("createPost", () => {
expect(plugin.createPost).toHaveBeenCalledTimes(1);
});

test("should call slack api with minimal config", async () => {
test("should call Microsoft Office Teams api with minimal config", async () => {
const plugin = new MicrosoftTeamsPlugin("https://custom-microsoft-url");

await plugin.createPost(
Expand Down Expand Up @@ -257,7 +257,7 @@ describe("createPost", () => {
expect(fetchSpy.mock.calls[0][1].body).toMatchSnapshot();
});

test("should call slack api through http proxy", async () => {
test("should call Microsoft Office Teams api through http proxy", async () => {
const plugin = new MicrosoftTeamsPlugin("https://custom-microsoft-url");
process.env.http_proxy = "http-proxy";

Expand Down Expand Up @@ -291,7 +291,7 @@ describe("createPost", () => {
expect(fetchSpy.mock.calls[0][1].body).toMatchSnapshot();
});

test("should call slack api through https proxy", async () => {
test("should call Microsoft Office Teams api through https proxy", async () => {
const plugin = new MicrosoftTeamsPlugin("https://custom-microsoft-url");
process.env.https_proxy = "https-proxy";

Expand All @@ -310,7 +310,7 @@ describe("createPost", () => {
expect(fetchSpy.mock.calls[0][1].body).toMatchSnapshot();
});

test("should call slack api", async () => {
test("should call Microsoft Office Teams api", async () => {
const plugin = new MicrosoftTeamsPlugin({ url: "https://custom-microsoft-url" });
const hooks = makeHooks();
plugin.apply({ hooks, options: {}, ...mockAuto } as Auto);
Expand All @@ -331,32 +331,33 @@ describe("createPost", () => {
expect(fetchSpy.mock.calls[0][1].body).toMatchSnapshot();
});

test("should call slack api with custom atTarget", async () => {
const plugin = new MicrosoftTeamsPlugin({
url: "https://custom-microsoft-url",
atTarget: "here",
});
const hooks = makeHooks();
plugin.apply({ hooks, options: {}, ...mockAuto } as Auto);

await hooks.afterRelease.promise({
newVersion: "1.0.0",
lastRelease: "0.1.0",
commits: [makeCommitFromMsg("a patch")],
releaseNotes: "# My Notes\n- PR [some link](google.com)",
// @ts-ignore
response: mockResponse,
});

expect(fetchSpy).toHaveBeenCalled();
expect(fetchSpy.mock.calls[0][0]).toBe(
"https://custom-microsoft-url"
);
expect(fetchSpy.mock.calls[0][1].body.includes("@here")).toBe(true);
expect(fetchSpy.mock.calls[0][1].body).toMatchSnapshot();
});

test("should call slack api in env var", async () => {
// test("should call Microsoft Office Teams api with custom atTarget", async () => {
// const plugin = new MicrosoftTeamsPlugin({
// url: "https://custom-microsoft-url",
// atTarget: "here",
// });
// const hooks = makeHooks();
// plugin.apply({ hooks, options: {}, ...mockAuto } as Auto);

// await hooks.afterRelease.promise({
// newVersion: "1.0.0",
// lastRelease: "0.1.0",
// commits: [makeCommitFromMsg("a patch")],
// releaseNotes: "# My Notes\n- PR [some link](google.com)",
// // @ts-ignore
// response: mockResponse,
// });

// expect(fetchSpy).toHaveBeenCalled();
// expect(fetchSpy.mock.calls[0][0]).toBe(
// "https://custom-microsoft-url"
// );
// expect(fetchSpy.mock.calls[0][1].body.includes("@here")).toBe(true);
// expect(fetchSpy.mock.calls[0][1].body).toMatchSnapshot();
// });

test("should call Microsoft Office Teams api in env var", async () => {
process.env.MICROSOFT_TEAMS_WEBHOOK_URL = "https://foo.bar";
const plugin = new MicrosoftTeamsPlugin();
const hooks = makeHooks();
Expand Down
5 changes: 4 additions & 1 deletion plugins/microsoft-teams/package.json
Expand Up @@ -37,12 +37,15 @@
"test": "jest --maxWorkers=2 --config ../../package.json"
},
"dependencies": {
"@atomist/slack-messages": "~1.2.0",
"@auto-it/core": "link:../../packages/core",
"fp-ts": "^2.5.3",
"https-proxy-agent": "^5.0.0",
"io-ts": "^2.1.2",
"jsesc": "^3.0.2",
"node-fetch": "2.6.1",
"tslib": "2.1.0"
},
"devDependencies": {
"@types/jsesc": "^2.5.1"
}
}
54 changes: 23 additions & 31 deletions plugins/microsoft-teams/src/index.ts
@@ -1,4 +1,4 @@
import { githubToSlack } from "@atomist/slack-messages";
import jsesc from "jsesc";
import createHttpsProxyAgent, { HttpsProxyAgent } from "https-proxy-agent";

import {
Expand All @@ -10,31 +10,8 @@ import {
import fetch from "node-fetch";
import * as t from "io-ts";

const MARKDOWN_LANGUAGE = /^(```)(\S+)$/m;

/** Transform markdown into slack friendly text */
export const sanitizeMarkdown = (markdown: string) =>
githubToSlack(markdown)
.split("\n")
.map((line) => {
// Strip out the ### prefix and replace it with *<word>* to make it bold
if (line.startsWith("#")) {
return `*${line.replace(/^[#]+/, "")}*`;
}

// Give extra padding to nested lists
if (line.match(/^\s+•/)) {
return line.replace(/^\s+•/, " •");
}

// Strip markdown code block type. Slack does not render them correctly.
if (line.match(MARKDOWN_LANGUAGE)) {
return line.replace(MARKDOWN_LANGUAGE, "`$2`:\n\n$1");
}

return line;
})
.join("\n");
/** Microsoft Teams accepts markdown, as long as the content was escaped/serialized to a JSON string first */
export const sanitizeMarkdown = (markdown: string) => jsesc(markdown);

const pluginOptions = t.partial({
/** URL of the mircosoft teams to post to */
Expand All @@ -49,7 +26,7 @@ const pluginOptions = t.partial({

export type IMicrosoftTeamsPluginOptions = t.TypeOf<typeof pluginOptions>;

/** Post your release notes to Slack during `auto release` */
/** Post your release notes to Microsoft Teams during `auto release` */
export default class MicrosoftTeamsPlugin {
/** The name of the plugin */
name = "microsoft-teams";
Expand All @@ -65,7 +42,7 @@ export default class MicrosoftTeamsPlugin {
this.options = {
...options,
url: process.env.MICROSOFT_TEAMS_WEBHOOK_URL || options.url || "",
atTarget: options.atTarget ? options.atTarget : "channel",
atTarget: options.atTarget,
publishPreRelease: options.publishPreRelease
? options.publishPreRelease
: false,
Expand Down Expand Up @@ -137,6 +114,7 @@ export default class MicrosoftTeamsPlugin {
(Array.isArray(response) && response) ||
(response && [response]) ||
[];

const urls = releases.map(
(release) =>
`*<${release.data.html_url}|${
Expand All @@ -157,7 +135,7 @@ export default class MicrosoftTeamsPlugin {
);
}

/** Post the release notes to slack */
/** Post the release notes to Microsoft Teams */
async createPost(
auto: Auto,
releaseNotes: string,
Expand All @@ -170,14 +148,28 @@ export default class MicrosoftTeamsPlugin {

auto.logger.verbose.info("Posting release notes to microsoft teams.");

const atTarget = this.options.atTarget ? `@${this.options.atTarget}: ` : "";
// TODO: @mentions don't work in teams - yet
// https://microsoftteams.uservoice.com/forums/555103-public/suggestions/17153099-webhook-needs-to-support-forced-notification-a-la
// const atTarget = this.options.atTarget ? `@${this.options.atTarget}: ` : "";

await fetch(`${this.options.url}`, {
method: "POST",
body: JSON.stringify({
"@context": "http://schema.org/extensions",
"@type": "MessageCard",
text: [`${atTarget}New release ${releaseUrl}`, releaseNotes].join("\n"),
text: releaseNotes,
potentialAction: [
{
"@type": "OpenUri",
name: "Learn More",
targets: [
{
os: "default",
uri: releaseUrl,
},
],
},
],
}),
headers: { "Content-Type": "application/json" },
agent,
Expand Down
4 changes: 4 additions & 0 deletions plugins/npm/__tests__/monorepo-log.test.ts
Expand Up @@ -34,6 +34,10 @@ jest.mock("fs", () => ({
readFile: jest.fn(),
// @ts-ignore
readFileSync: () => readFileSync(),
// @ts-ignore
read: (a, b, cb) => {
cb(undefined);
},
ReadStream: function () {},
WriteStream: function () {},
// @ts-ignore
Expand Down
2 changes: 1 addition & 1 deletion scripts/jest-setup.js
@@ -1,3 +1,3 @@
require("mock-fs");

jest.mock('requireg', () => require);
jest.mock('requireg', () => require);