Skip to content

Commit

Permalink
feat: make node-notifier an optional dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
Caleb ツ Everett committed Sep 5, 2019
1 parent c588c18 commit 078a144
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 2 deletions.
4 changes: 3 additions & 1 deletion packages/jest-reporters/package.json
Expand Up @@ -23,7 +23,6 @@
"jest-runtime": "^24.9.0",
"jest-util": "^24.9.0",
"jest-worker": "^24.6.0",
"node-notifier": "^5.4.3",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^3.1.0"
Expand All @@ -39,6 +38,9 @@
"@types/node-notifier": "^5.4.0",
"strip-ansi": "^5.0.0"
},
"optionalDependencies": {
"node-notifier": "^5.4.3"
},
"engines": {
"node": ">= 8"
},
Expand Down
46 changes: 46 additions & 0 deletions packages/jest-reporters/src/notify_impl.ts
@@ -0,0 +1,46 @@
export default getNotifier();

/**
* Return a notifier implementation.
*
* node-notifier is an optional dependency so it may not be installed.
* If node-notifier is not found then a stub notifier is returned that throws
* an error whenever it is used.
*/
function getNotifier(): Notify {
try {
const notifier: typeof import('node-notifier') = require('node-notifier');
return notifier.notify.bind(notifier);
} catch (ex) {
if (ex.code !== 'MODULE_NOT_FOUND') {
throw ex;
}
return () => {
throw Error(
'notify reporter requires optional dependeny node-notifier but it was not found',
);
};
}
}

export type Notify = (
notification?: Notification,
callback?: NotificationCallback,
) => unknown;

interface Notification {
title?: string;
message?: string;
icon?: string;
closeLabel?: string;
actions?: string | Array<string>;
timeout?: number;
}

interface NotificationCallback {
(err: Error | null, response: string, metadata?: NotificationMetadata): void;
}

interface NotificationMetadata {
activationValue?: string;
}
2 changes: 1 addition & 1 deletion packages/jest-reporters/src/notify_reporter.ts
Expand Up @@ -10,9 +10,9 @@ import * as util from 'util';
import exit = require('exit');
import {Config} from '@jest/types';
import {AggregatedResult} from '@jest/test-result';
import {notify} from 'node-notifier';
import {Context, TestSchedulerContext} from './types';
import BaseReporter from './base_reporter';
import notify from './notify_impl';

const isDarwin = process.platform === 'darwin';

Expand Down

0 comments on commit 078a144

Please sign in to comment.