jest-audio-reporter 2.2.4 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,6 +11,12 @@
11
11
 
12
12
  Play a tune while running [`jest`](https://jestjs.io/).
13
13
 
14
+ ## Requirements
15
+
16
+ `jest-audio-reporter` is an ES module. It needs Node 20+ and Jest 27+
17
+ (Jest loads a reporter with `requireOrImportModule`, which imports an ES module).
18
+ `require('jest-audio-reporter')` is not supported.
19
+
14
20
  ## Usage
15
21
 
16
22
  To use `jest-audio-reporter`,
@@ -76,14 +82,14 @@ The audio files used for testing in this repository comes from <https://dova-s.j
76
82
 
77
83
  Please refer to them for copyright information.
78
84
 
79
- [codecov-image]: https://codecov.io/gh/cyberuni/jest-audio-reporter/branch/main/graph/badge.svg
80
- [codecov-url]: https://codecov.io/gh/cyberuni/jest-audio-reporter
81
- [coveralls-image]: https://coveralls.io/repos/github/cyberuni/jest-audio-reporter/badge.svg
82
- [coveralls-url]: https://coveralls.io/github/cyberuni/jest-audio-reporter
85
+ [codecov-image]: https://codecov.io/gh/repobuddy/jest-audio-reporter/branch/main/graph/badge.svg
86
+ [codecov-url]: https://codecov.io/gh/repobuddy/jest-audio-reporter
87
+ [coveralls-image]: https://coveralls.io/repos/github/repobuddy/jest-audio-reporter/badge.svg
88
+ [coveralls-url]: https://coveralls.io/github/repobuddy/jest-audio-reporter
83
89
  [downloads-image]: https://img.shields.io/npm/dm/jest-audio-reporter.svg?style=flat
84
90
  [downloads-url]: https://npmjs.org/package/jest-audio-reporter
85
- [github-nodejs]: https://github.com/cyberuni/jest-audio-reporter/actions/workflows/release.yml/badge.svg
86
- [github-action-url]: https://github.com/cyberuni/jest-audio-reporter/actions/workflows/release.yml
91
+ [github-nodejs]: https://github.com/repobuddy/jest-audio-reporter/actions/workflows/release.yml/badge.svg
92
+ [github-action-url]: https://github.com/repobuddy/jest-audio-reporter/actions/workflows/release.yml
87
93
  [npm-image]: https://img.shields.io/npm/v/jest-audio-reporter.svg?style=flat
88
94
  [npm-url]: https://npmjs.org/package/jest-audio-reporter
89
95
  [vscode-image]: https://img.shields.io/badge/vscode-ready-green.svg
@@ -1,7 +1,7 @@
1
1
  import type { ReporterOnStartOptions } from '@jest/reporters';
2
2
  import type { AggregatedResult } from '@jest/test-result';
3
3
  import type { Config } from '@jest/types';
4
- import { Options, RuntimeOptions } from './options';
4
+ import { type Options, type RuntimeOptions } from './options.js';
5
5
  export declare class AudioReporter {
6
6
  globalConfig: Config.GlobalConfig;
7
7
  log: {
@@ -1,78 +1,76 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.AudioReporter = void 0;
7
- const play_sound_1 = __importDefault(require("play-sound"));
8
- const rc_1 = __importDefault(require("rc"));
9
- const log_1 = require("./log");
10
- const options_1 = require("./options");
11
- const store_1 = require("./store");
12
- class AudioReporter {
1
+ import Player from 'play-sound';
2
+ import rc from 'rc';
3
+ import { createLog, logOptions } from './log.js';
4
+ import { processOptions } from './options.js';
5
+ import { store } from './store.js';
6
+ export class AudioReporter {
7
+ globalConfig;
8
+ log = createLog();
9
+ player;
10
+ disable;
11
+ options;
12
+ volume;
13
+ onStartVolume;
14
+ onCompleteVolume;
13
15
  constructor(globalConfig, jestOptions) {
14
16
  this.globalConfig = globalConfig;
15
- this.log = (0, log_1.createLog)();
16
17
  if (jestOptions.debug) {
17
18
  this.log.enabled = true;
18
19
  }
19
- this.player = (0, play_sound_1.default)({});
20
+ this.player = Player({});
20
21
  this.disable = !!jestOptions.disable;
21
22
  this.volume = jestOptions.volume;
22
23
  this.onStartVolume = jestOptions.onStartVolume || 0.5;
23
24
  this.onCompleteVolume = jestOptions.onCompleteVolume;
24
- const rawRCOptions = (0, rc_1.default)('jest-audio-reporter');
25
- const rcOptions = (0, options_1.processOptions)(rawRCOptions);
26
- (0, log_1.logOptions)({ log: this.log }, rawRCOptions, rcOptions);
25
+ const rawRCOptions = rc('jest-audio-reporter');
26
+ const rcOptions = processOptions(rawRCOptions);
27
+ logOptions({ log: this.log }, rawRCOptions, rcOptions);
27
28
  this.options = rcOptions;
28
29
  }
29
30
  onRunStart(results, options) {
30
31
  if (this.disable)
31
32
  return;
32
- if (store_1.store.completeAudio) {
33
- store_1.store.completeAudio.kill();
34
- store_1.store.completeAudio = undefined;
33
+ if (store.completeAudio) {
34
+ store.completeAudio.kill();
35
+ store.completeAudio = undefined;
35
36
  }
36
37
  if (results.numTotalTestSuites === 0 ||
37
- options.estimatedTime > 0 &&
38
- options.estimatedTime <= this.options.onStartThreshold)
38
+ (options.estimatedTime > 0 && options.estimatedTime <= this.options.onStartThreshold))
39
39
  return;
40
40
  const file = pickOne(this.options.onStart);
41
41
  const volume = this.getEffectiveOnStartVolume();
42
- store_1.store.startAudio = this.player.play(file, this.getPlayOption({ volume }));
42
+ store.startAudio = this.player.play(file, this.getPlayOption({ volume }));
43
43
  }
44
44
  onRunComplete(_contexts, results) {
45
45
  if (this.disable)
46
46
  return;
47
- if (store_1.store.startAudio) {
48
- store_1.store.startAudio.kill();
49
- store_1.store.startAudio = undefined;
47
+ if (store.startAudio) {
48
+ store.startAudio.kill();
49
+ store.startAudio = undefined;
50
50
  }
51
51
  if (results.numTotalTestSuites === 0)
52
52
  return;
53
53
  if (results.wasInterrupted)
54
54
  return;
55
55
  if (results.numFailedTestSuites === 0) {
56
- if (isWatch(this.globalConfig) && store_1.store.doesLastRunPass)
56
+ if (isWatch(this.globalConfig) && store.doesLastRunPass)
57
57
  return;
58
- store_1.store.doesLastRunPass = true;
58
+ store.doesLastRunPass = true;
59
59
  return this.playComplete(pickOne(this.options.onSuitePass));
60
60
  }
61
- else {
62
- store_1.store.doesLastRunPass = false;
63
- return this.playComplete(pickOne(this.options.onSuiteFailure));
64
- }
61
+ store.doesLastRunPass = false;
62
+ return this.playComplete(pickOne(this.options.onSuiteFailure));
65
63
  }
66
64
  playComplete(file) {
67
65
  if (!file)
68
66
  return;
69
67
  const volume = this.getEffectiveOnCompleteVolume();
70
68
  if (isWatch(this.globalConfig)) {
71
- store_1.store.completeAudio = this.player.play(file, this.getPlayOption({ volume }));
69
+ store.completeAudio = this.player.play(file, this.getPlayOption({ volume }));
72
70
  }
73
71
  else {
74
- return new Promise(a => {
75
- store_1.store.completeAudio = this.player.play(file, this.getPlayOption({ volume }), a);
72
+ return new Promise((a) => {
73
+ store.completeAudio = this.player.play(file, this.getPlayOption({ volume }), a);
76
74
  });
77
75
  }
78
76
  }
@@ -93,7 +91,6 @@ class AudioReporter {
93
91
  }
94
92
  }
95
93
  }
96
- exports.AudioReporter = AudioReporter;
97
94
  function pickOne(arr) {
98
95
  if (arr.length === 0)
99
96
  return undefined;
@@ -110,7 +107,7 @@ function getAfPlayOption({ volume }) {
110
107
  // log(0.1) = -1
111
108
  // log(0) = -infinity
112
109
  // So for now, I treat [0, 1] as linear
113
- return { afplay: ['-v', 1 / (Math.pow(10, Math.log2(1 / volume)))] };
110
+ return { afplay: ['-v', 1 / 10 ** Math.log2(1 / volume)] };
114
111
  }
115
112
  function getMplayerOption({ volume }) {
116
113
  // http://www.mplayerhq.hu/DOCS/man/en/mplayer.1.html search for "-volume"
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioReporter.js","sourceRoot":"","sources":["../ts/AudioReporter.ts"],"names":[],"mappings":"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"}
package/esm/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import { AudioReporter } from './AudioReporter.js';
2
+ export default AudioReporter;
package/esm/index.js ADDED
@@ -0,0 +1,11 @@
1
+ import { store } from './store.js';
2
+ // istanbul ignore next
3
+ process.on('exit', () => {
4
+ if (store.startAudio)
5
+ store.startAudio.kill();
6
+ if (store.completeAudio)
7
+ store.completeAudio.kill();
8
+ });
9
+ import { AudioReporter } from './AudioReporter.js';
10
+ export default AudioReporter;
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,uBAAuB;AACvB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;IACvB,IAAI,KAAK,CAAC,UAAU;QAAE,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;IAC7C,IAAI,KAAK,CAAC,aAAa;QAAE,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,eAAe,aAAa,CAAA"}
@@ -1,14 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createLog = createLog;
4
- exports.logOptions = logOptions;
5
- const store_1 = require("./store");
6
- function createLog() {
1
+ import { store } from './store.js';
2
+ export function createLog() {
7
3
  return {
8
4
  enabled: false,
9
5
  writer: console,
10
6
  debug(...args) {
11
- if (store_1.store.devel)
7
+ if (store.devel)
12
8
  return;
13
9
  if (this.enabled) {
14
10
  // istanbul ignore next
@@ -17,13 +13,13 @@ function createLog() {
17
13
  }
18
14
  };
19
15
  }
20
- function logOptions({ log }, raw, options) {
16
+ export function logOptions({ log }, raw, options) {
21
17
  if (!raw.configs) {
22
18
  log.debug('no config detected');
23
19
  }
24
20
  else {
25
21
  log.debug(`configs location:
26
- ${raw.configs.map(c => ` ${c}`).join('\n')}
22
+ ${raw.configs.map((c) => ` ${c}`).join('\n')}
27
23
 
28
24
  options:
29
25
  ${JSON.stringify(options, undefined, 2)}
package/esm/log.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../ts/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,UAAU,SAAS;IACxB,OAAO;QACN,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,OAAO;QACf,KAAK,CAAC,GAAG,IAAI;YACZ,IAAI,KAAK,CAAC,KAAK;gBAAE,OAAM;YACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,uBAAuB;gBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;YAC1B,CAAC;QACF,CAAC;KACD,CAAA;AACF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,OAAO;IAC/C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAChC,CAAC;SAAM,CAAC;QACP,GAAG,CAAC,KAAK,CAAC;EACV,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAG3C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;CACtC,CAAC,CAAA;IACD,CAAC;AACF,CAAC"}
@@ -1,18 +1,12 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.processOptions = processOptions;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
9
- function processOptions(rawRCOptions) {
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ export function processOptions(rawRCOptions) {
10
4
  // reversing the config so the first one is the closest.
11
- const dirs = rawRCOptions.configs ? rawRCOptions.configs.map(path_1.default.dirname) : [];
5
+ const dirs = rawRCOptions.configs ? rawRCOptions.configs.map(path.dirname) : [];
12
6
  const onStart = processRCFileEntry(rawRCOptions.onStart, dirs);
13
7
  const onSuitePass = processRCFileEntry(rawRCOptions.onSuitePass, dirs);
14
8
  const onSuiteFailure = processRCFileEntry(rawRCOptions.onSuiteFailure, dirs);
15
- const onStartThreshold = rawRCOptions.onStartThreshold !== undefined ? parseInt(rawRCOptions.onStartThreshold, 10) : 10;
9
+ const onStartThreshold = rawRCOptions.onStartThreshold !== undefined ? Number.parseInt(rawRCOptions.onStartThreshold, 10) : 10;
16
10
  return {
17
11
  onStartThreshold,
18
12
  onStart,
@@ -25,12 +19,12 @@ function processRCFileEntry(files, dirs) {
25
19
  return [];
26
20
  const entries = typeof files === 'string' ? [files] : files;
27
21
  const validFiles = [];
28
- entries.forEach(e => {
29
- if (path_1.default.isAbsolute(e)) {
22
+ entries.forEach((e) => {
23
+ if (path.isAbsolute(e)) {
30
24
  validFiles.push(e);
31
25
  }
32
26
  else {
33
- const file = dirs.map(dir => path_1.default.resolve(dir, e)).find(p => fs_1.default.existsSync(p));
27
+ const file = dirs.map((dir) => path.resolve(dir, e)).find((p) => fs.existsSync(p));
34
28
  if (file) {
35
29
  validFiles.push(file);
36
30
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../ts/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAgC5B,MAAM,UAAU,cAAc,CAAC,YAAY;IAC1C,wDAAwD;IACxD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/E,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC9D,MAAM,WAAW,GAAG,kBAAkB,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IACtE,MAAM,cAAc,GAAG,kBAAkB,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IAE5E,MAAM,gBAAgB,GACrB,YAAY,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAEtG,OAAO;QACN,gBAAgB;QAChB,OAAO;QACP,WAAW;QACX,cAAc;KACd,CAAA;AACF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAoC,EAAE,IAAc;IAC/E,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAC3D,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACrB,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;YAClF,IAAI,IAAI,EAAE,CAAC;gBACV,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACtB,CAAC;QACF,CAAC;IACF,CAAC,CAAC,CAAA;IACF,OAAO,UAAU,CAAA;AAClB,CAAC"}
package/esm/store.js ADDED
@@ -0,0 +1,9 @@
1
+ export const store = {
2
+ devel: false,
3
+ doesLastRunPass: false,
4
+ reset() {
5
+ ;
6
+ (store.completeAudio = undefined), (store.doesLastRunPass = false), (store.startAudio = undefined);
7
+ }
8
+ };
9
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../ts/store.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,KAAK,GAAU;IAC3B,KAAK,EAAE,KAAK;IACZ,eAAe,EAAE,KAAK;IACtB,KAAK;QACJ,CAAC;QAAA,CAAC,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,CAAA;IACpG,CAAC;CACD,CAAA"}
package/package.json CHANGED
@@ -1,74 +1,75 @@
1
1
  {
2
2
  "name": "jest-audio-reporter",
3
- "version": "2.2.4",
3
+ "version": "3.0.0",
4
4
  "description": "Plays audio on jest events",
5
5
  "keywords": [
6
6
  "jest",
7
7
  "reporters",
8
8
  "sounds"
9
9
  ],
10
- "homepage": "https://github.com/cyberuni/jest-audio-reporter",
10
+ "homepage": "https://github.com/repobuddy/jest-audio-reporter",
11
11
  "bugs": {
12
- "url": "https://github.com/cyberuni/jest-audio-reporter/issues"
12
+ "url": "https://github.com/repobuddy/jest-audio-reporter/issues"
13
13
  },
14
14
  "repository": {
15
15
  "type": "git",
16
- "url": "https://github.com/cyberuni/jest-audio-reporter.git"
16
+ "url": "https://github.com/repobuddy/jest-audio-reporter.git"
17
17
  },
18
18
  "license": "MIT",
19
- "main": "cjs/index.js",
20
- "typings": "cjs/index.d.ts",
19
+ "type": "module",
20
+ "exports": {
21
+ ".": {
22
+ "types": "./esm/index.d.ts",
23
+ "default": "./esm/index.js"
24
+ }
25
+ },
26
+ "main": "esm/index.js",
27
+ "typings": "esm/index.d.ts",
21
28
  "files": [
22
- "cjs",
29
+ "esm",
23
30
  "ts",
24
31
  "!ts/**/*.spec.ts"
25
32
  ],
26
33
  "dependencies": {
27
- "@jest/reporters": "^29.0.0",
28
- "@jest/test-result": "^29.0.0",
29
- "@jest/types": "^29.0.0",
30
- "play-sound": "^1.1.5",
34
+ "@jest/reporters": "^29.0.0 || ^30.0.0",
35
+ "@jest/test-result": "^29.0.0 || ^30.0.0",
36
+ "@jest/types": "^29.0.0 || ^30.0.0",
37
+ "play-sound": "^1.1.6",
31
38
  "rc": "^1.2.8"
32
39
  },
33
40
  "devDependencies": {
41
+ "@biomejs/biome": "^2.5.11",
34
42
  "@changesets/cli": "^3.0.0",
35
- "@commitlint/cli": "^19.0.0",
36
- "@commitlint/config-conventional": "^19.0.0",
37
- "@types/jest": "^29.0.0",
38
- "assertron": "^11.0.0",
39
- "dependency-check": "^4.1.0",
40
- "eslint": "^8.0.0",
41
- "eslint-plugin-harmony": "^6.0.0",
42
- "husky": "^9.0.0",
43
- "jest": "^29.0.0",
44
- "jest-junit": "^16.0.0",
45
- "jest-progress-tracker": "^3.0.0",
46
- "jest-validate": "^29.0.0",
47
- "jest-watch-suspend": "^1.1.2",
48
- "jest-watch-toggle-config": "^3.0.0",
49
- "jest-watch-typeahead": "^2.0.0",
50
- "npm-check-updates": "^16.0.0",
51
- "npm-run-all2": "^6.0.0",
52
- "rimraf": "^5.0.0",
53
- "satisfier": "^5.1.0",
54
- "ts-jest": "^29.0.0",
55
- "typescript": "^5.0.0"
43
+ "@commitlint/cli": "^21.2.1",
44
+ "@commitlint/config-conventional": "^21.2.0",
45
+ "@repobuddy/biome": "^2.3.1",
46
+ "@types/jest": "^30.0.0",
47
+ "@types/node": "^26.2.0",
48
+ "assertron": "^11.5.4",
49
+ "depcheck": "^1.4.7",
50
+ "husky": "^9.1.7",
51
+ "jest": "^30.0.0",
52
+ "npm-run-all2": "^9.0.3",
53
+ "rimraf": "^6.1.3",
54
+ "ts-jest": "^29.4.12",
55
+ "typescript": "^5.9.0"
56
+ },
57
+ "engines": {
58
+ "node": "^20.19.0 || ^22.13.0 || >=24"
56
59
  },
57
60
  "scripts": {
58
61
  "build": "tsc -p tsconfig.base.json",
59
- "clean": "rimraf cjs dist",
62
+ "clean": "rimraf cjs esm coverage dist",
60
63
  "coverage": "jest --coverage",
61
64
  "cs": "changeset",
62
- "depscheck": "run-p dependency-check:unused dependency-check:missing",
63
- "dependency-check": "run-p dependency-check:unused dependency-check:missing",
64
- "dependency-check:unused": "dependency-check . --unused --no-dev -i @jest/reporters -i @jest/test-result -i @jest/types",
65
- "dependency-check:missing": "dependency-check . --missing --no-dev",
66
- "lint": "eslint --ext=ts,js .",
65
+ "depcheck": "depcheck",
66
+ "lint": "biome check .",
67
+ "lint:fix": "biome check --write .",
67
68
  "release": "changeset publish",
68
- "size-limit": "echo no size-limit",
69
69
  "test": "jest",
70
- "verify": "run-p verify:build lint coverage",
71
- "verify:build": "npm-run-all clean build --parallel dependency-check size-limit",
70
+ "typecheck": "tsc -p tsconfig.json --noEmit",
71
+ "verify": "run-p lint verify:pkg",
72
+ "verify:pkg": "run-s clean build && run-p depcheck typecheck coverage",
72
73
  "version": "changeset version",
73
74
  "watch": "jest --watch"
74
75
  }
@@ -4,120 +4,123 @@ import type { Config } from '@jest/types'
4
4
  import Player from 'play-sound'
5
5
  import rc from 'rc'
6
6
 
7
- import { createLog, logOptions } from './log'
8
- import { Options, processOptions, RuntimeOptions } from './options'
9
- import { store } from './store'
7
+ import { createLog, logOptions } from './log.js'
8
+ import { type Options, processOptions, type RuntimeOptions } from './options.js'
9
+ import { store } from './store.js'
10
10
 
11
11
  export class AudioReporter {
12
- log = createLog()
13
- player
14
- disable: boolean
15
- options: RuntimeOptions
16
- volume: number | undefined
17
- onStartVolume: number
18
- onCompleteVolume: number | undefined
19
- constructor(public globalConfig: Config.GlobalConfig, jestOptions: Partial<Options>) {
20
- if (jestOptions.debug) {
21
- this.log.enabled = true
22
- }
23
- this.player = Player({})
24
- this.disable = !!jestOptions.disable
25
- this.volume = jestOptions.volume
26
- this.onStartVolume = jestOptions.onStartVolume || 0.5
27
- this.onCompleteVolume = jestOptions.onCompleteVolume
12
+ log = createLog()
13
+ player
14
+ disable: boolean
15
+ options: RuntimeOptions
16
+ volume: number | undefined
17
+ onStartVolume: number
18
+ onCompleteVolume: number | undefined
19
+ constructor(
20
+ public globalConfig: Config.GlobalConfig,
21
+ jestOptions: Partial<Options>
22
+ ) {
23
+ if (jestOptions.debug) {
24
+ this.log.enabled = true
25
+ }
26
+ this.player = Player({})
27
+ this.disable = !!jestOptions.disable
28
+ this.volume = jestOptions.volume
29
+ this.onStartVolume = jestOptions.onStartVolume || 0.5
30
+ this.onCompleteVolume = jestOptions.onCompleteVolume
28
31
 
29
- const rawRCOptions = rc('jest-audio-reporter')
30
- const rcOptions = processOptions(rawRCOptions)
31
- logOptions({ log: this.log }, rawRCOptions, rcOptions)
32
- this.options = rcOptions
33
- }
34
- onRunStart(results: AggregatedResult, options: ReporterOnStartOptions) {
35
- if (this.disable) return
32
+ const rawRCOptions = rc('jest-audio-reporter')
33
+ const rcOptions = processOptions(rawRCOptions)
34
+ logOptions({ log: this.log }, rawRCOptions, rcOptions)
35
+ this.options = rcOptions
36
+ }
37
+ onRunStart(results: AggregatedResult, options: ReporterOnStartOptions) {
38
+ if (this.disable) return
36
39
 
37
- if (store.completeAudio) {
38
- store.completeAudio.kill()
39
- store.completeAudio = undefined
40
- }
40
+ if (store.completeAudio) {
41
+ store.completeAudio.kill()
42
+ store.completeAudio = undefined
43
+ }
41
44
 
42
- if (results.numTotalTestSuites === 0 ||
43
- options.estimatedTime > 0 &&
44
- options.estimatedTime <= this.options.onStartThreshold) return
45
+ if (
46
+ results.numTotalTestSuites === 0 ||
47
+ (options.estimatedTime > 0 && options.estimatedTime <= this.options.onStartThreshold)
48
+ )
49
+ return
45
50
 
46
- const file = pickOne(this.options.onStart)
47
- const volume = this.getEffectiveOnStartVolume()
48
- store.startAudio = this.player.play(file, this.getPlayOption({ volume }))
49
- }
50
- onRunComplete(_contexts, results: AggregatedResult) {
51
- if (this.disable) return
51
+ const file = pickOne(this.options.onStart)
52
+ const volume = this.getEffectiveOnStartVolume()
53
+ store.startAudio = this.player.play(file, this.getPlayOption({ volume }))
54
+ }
55
+ onRunComplete(_contexts, results: AggregatedResult) {
56
+ if (this.disable) return
52
57
 
53
- if (store.startAudio) {
54
- store.startAudio.kill()
55
- store.startAudio = undefined
56
- }
57
- if (results.numTotalTestSuites === 0) return
58
- if (results.wasInterrupted) return
58
+ if (store.startAudio) {
59
+ store.startAudio.kill()
60
+ store.startAudio = undefined
61
+ }
62
+ if (results.numTotalTestSuites === 0) return
63
+ if (results.wasInterrupted) return
59
64
 
60
- if (results.numFailedTestSuites === 0) {
61
- if (isWatch(this.globalConfig) && store.doesLastRunPass) return
62
- store.doesLastRunPass = true
63
- return this.playComplete(pickOne(this.options.onSuitePass))
64
- }
65
- else {
66
- store.doesLastRunPass = false
67
- return this.playComplete(pickOne(this.options.onSuiteFailure))
68
- }
69
- }
70
- private playComplete(file: string | undefined) {
71
- if (!file) return
72
- const volume = this.getEffectiveOnCompleteVolume()
73
- if (isWatch(this.globalConfig)) {
74
- store.completeAudio = this.player.play(file, this.getPlayOption({ volume }))
75
- }
76
- else {
77
- return new Promise(a => {
78
- store.completeAudio = this.player.play(file, this.getPlayOption({ volume }), a)
79
- })
80
- }
81
- }
82
- private getEffectiveOnStartVolume() {
83
- return Math.min(this.volume || 1, this.onStartVolume)
84
- }
85
- private getEffectiveOnCompleteVolume() {
86
- return Math.min(this.volume || 1, this.onCompleteVolume || 1)
87
- }
88
- private getPlayOption(option) {
89
- switch (this.player.player) {
90
- case 'afplay':
91
- return getAfPlayOption(option)
92
- case 'mplayer':
93
- return getMplayerOption(option)
94
- default:
95
- return {}
96
- }
97
- }
65
+ if (results.numFailedTestSuites === 0) {
66
+ if (isWatch(this.globalConfig) && store.doesLastRunPass) return
67
+ store.doesLastRunPass = true
68
+ return this.playComplete(pickOne(this.options.onSuitePass))
69
+ }
70
+
71
+ store.doesLastRunPass = false
72
+ return this.playComplete(pickOne(this.options.onSuiteFailure))
73
+ }
74
+ private playComplete(file: string | undefined) {
75
+ if (!file) return
76
+ const volume = this.getEffectiveOnCompleteVolume()
77
+ if (isWatch(this.globalConfig)) {
78
+ store.completeAudio = this.player.play(file, this.getPlayOption({ volume }))
79
+ } else {
80
+ return new Promise((a) => {
81
+ store.completeAudio = this.player.play(file, this.getPlayOption({ volume }), a)
82
+ })
83
+ }
84
+ }
85
+ private getEffectiveOnStartVolume() {
86
+ return Math.min(this.volume || 1, this.onStartVolume)
87
+ }
88
+ private getEffectiveOnCompleteVolume() {
89
+ return Math.min(this.volume || 1, this.onCompleteVolume || 1)
90
+ }
91
+ private getPlayOption(option) {
92
+ switch (this.player.player) {
93
+ case 'afplay':
94
+ return getAfPlayOption(option)
95
+ case 'mplayer':
96
+ return getMplayerOption(option)
97
+ default:
98
+ return {}
99
+ }
100
+ }
98
101
  }
99
102
 
100
103
  function pickOne(arr: Array<any>) {
101
- if (arr.length === 0) return undefined
102
- return arr[Math.floor(Math.random() * arr.length)]
104
+ if (arr.length === 0) return undefined
105
+ return arr[Math.floor(Math.random() * arr.length)]
103
106
  }
104
107
 
105
108
  function isWatch(globalConfig) {
106
- return globalConfig.watch || globalConfig.watchAll
109
+ return globalConfig.watch || globalConfig.watchAll
107
110
  }
108
111
 
109
112
  function getAfPlayOption({ volume }: { volume: number }) {
110
- // https://ss64.com/osx/afplay.html
111
- // According to the link, the volume is logarithmic,
112
- // but I'm not sure what does it mean, as:
113
- // log(1) = 0
114
- // log(0.1) = -1
115
- // log(0) = -infinity
116
- // So for now, I treat [0, 1] as linear
117
- return { afplay: ['-v', 1 / (Math.pow(10, Math.log2(1 / volume)))] }
113
+ // https://ss64.com/osx/afplay.html
114
+ // According to the link, the volume is logarithmic,
115
+ // but I'm not sure what does it mean, as:
116
+ // log(1) = 0
117
+ // log(0.1) = -1
118
+ // log(0) = -infinity
119
+ // So for now, I treat [0, 1] as linear
120
+ return { afplay: ['-v', 1 / 10 ** Math.log2(1 / volume)] }
118
121
  }
119
122
 
120
123
  function getMplayerOption({ volume }: { volume: number }) {
121
- // http://www.mplayerhq.hu/DOCS/man/en/mplayer.1.html search for "-volume"
122
- return { mplayer: ['-volume', volume * 100] }
124
+ // http://www.mplayerhq.hu/DOCS/man/en/mplayer.1.html search for "-volume"
125
+ return { mplayer: ['-volume', volume * 100] }
123
126
  }
package/ts/index.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { store } from './store'
1
+ import { store } from './store.js'
2
2
 
3
3
  // istanbul ignore next
4
4
  process.on('exit', () => {
5
- if (store.startAudio) store.startAudio.kill()
6
- if (store.completeAudio) store.completeAudio.kill()
5
+ if (store.startAudio) store.startAudio.kill()
6
+ if (store.completeAudio) store.completeAudio.kill()
7
7
  })
8
8
 
9
- import { AudioReporter } from './AudioReporter'
9
+ import { AudioReporter } from './AudioReporter.js'
10
10
 
11
11
  export default AudioReporter
package/ts/log.ts CHANGED
@@ -1,29 +1,28 @@
1
- import { store } from './store'
1
+ import { store } from './store.js'
2
2
 
3
3
  export function createLog() {
4
- return {
5
- enabled: false,
6
- writer: console,
7
- debug(...args) {
8
- if (store.devel) return
9
- if (this.enabled) {
10
- // istanbul ignore next
11
- this.writer.info(...args)
12
- }
13
- }
14
- }
4
+ return {
5
+ enabled: false,
6
+ writer: console,
7
+ debug(...args) {
8
+ if (store.devel) return
9
+ if (this.enabled) {
10
+ // istanbul ignore next
11
+ this.writer.info(...args)
12
+ }
13
+ }
14
+ }
15
15
  }
16
16
 
17
17
  export function logOptions({ log }, raw, options) {
18
- if (!raw.configs) {
19
- log.debug('no config detected')
20
- }
21
- else {
22
- log.debug(`configs location:
23
- ${raw.configs.map(c => ` ${c}`).join('\n')}
18
+ if (!raw.configs) {
19
+ log.debug('no config detected')
20
+ } else {
21
+ log.debug(`configs location:
22
+ ${raw.configs.map((c) => ` ${c}`).join('\n')}
24
23
 
25
24
  options:
26
25
  ${JSON.stringify(options, undefined, 2)}
27
26
  `)
28
- }
27
+ }
29
28
  }
package/ts/options.ts CHANGED
@@ -1,67 +1,67 @@
1
- import fs from 'fs'
2
- import path from 'path'
1
+ import fs from 'node:fs'
2
+ import path from 'node:path'
3
3
 
4
4
  export interface Options {
5
- /**
6
- * Enable debug mode.
7
- */
8
- debug: boolean,
9
- /**
10
- * Master volume. 0 (silent) - 1 (normal).
11
- */
12
- volume: number,
13
- /**
14
- * Volume for onStart. 0 (silent) - 1 (normal).
15
- * Value higher than Master volume is ignored.
16
- */
17
- onStartVolume: number,
5
+ /**
6
+ * Enable debug mode.
7
+ */
8
+ debug: boolean
9
+ /**
10
+ * Master volume. 0 (silent) - 1 (normal).
11
+ */
12
+ volume: number
13
+ /**
14
+ * Volume for onStart. 0 (silent) - 1 (normal).
15
+ * Value higher than Master volume is ignored.
16
+ */
17
+ onStartVolume: number
18
18
 
19
- /**
20
- * Volume for onPass and onFailure. 0 (silent) - 1 (normal).
21
- * Value higher than Master volume is ignored.
22
- */
23
- onCompleteVolume: number,
24
- disable: boolean
19
+ /**
20
+ * Volume for onPass and onFailure. 0 (silent) - 1 (normal).
21
+ * Value higher than Master volume is ignored.
22
+ */
23
+ onCompleteVolume: number
24
+ disable: boolean
25
25
  }
26
26
 
27
27
  export interface RuntimeOptions {
28
- onStart: string[],
29
- onStartThreshold: number,
30
- onSuitePass: string[],
31
- onSuiteFailure: string[]
28
+ onStart: string[]
29
+ onStartThreshold: number
30
+ onSuitePass: string[]
31
+ onSuiteFailure: string[]
32
32
  }
33
33
 
34
34
  export function processOptions(rawRCOptions) {
35
- // reversing the config so the first one is the closest.
36
- const dirs = rawRCOptions.configs ? rawRCOptions.configs.map(path.dirname) : []
37
- const onStart = processRCFileEntry(rawRCOptions.onStart, dirs)
38
- const onSuitePass = processRCFileEntry(rawRCOptions.onSuitePass, dirs)
39
- const onSuiteFailure = processRCFileEntry(rawRCOptions.onSuiteFailure, dirs)
35
+ // reversing the config so the first one is the closest.
36
+ const dirs = rawRCOptions.configs ? rawRCOptions.configs.map(path.dirname) : []
37
+ const onStart = processRCFileEntry(rawRCOptions.onStart, dirs)
38
+ const onSuitePass = processRCFileEntry(rawRCOptions.onSuitePass, dirs)
39
+ const onSuiteFailure = processRCFileEntry(rawRCOptions.onSuiteFailure, dirs)
40
40
 
41
- const onStartThreshold = rawRCOptions.onStartThreshold !== undefined ? parseInt(rawRCOptions.onStartThreshold, 10) : 10
41
+ const onStartThreshold =
42
+ rawRCOptions.onStartThreshold !== undefined ? Number.parseInt(rawRCOptions.onStartThreshold, 10) : 10
42
43
 
43
- return {
44
- onStartThreshold,
45
- onStart,
46
- onSuitePass,
47
- onSuiteFailure
48
- }
44
+ return {
45
+ onStartThreshold,
46
+ onStart,
47
+ onSuitePass,
48
+ onSuiteFailure
49
+ }
49
50
  }
50
51
 
51
52
  function processRCFileEntry(files: string | string[] | undefined, dirs: string[]) {
52
- if (!files) return []
53
- const entries = typeof files === 'string' ? [files] : files
54
- const validFiles: string[] = []
55
- entries.forEach(e => {
56
- if (path.isAbsolute(e)) {
57
- validFiles.push(e)
58
- }
59
- else {
60
- const file = dirs.map(dir => path.resolve(dir, e)).find(p => fs.existsSync(p))
61
- if (file) {
62
- validFiles.push(file)
63
- }
64
- }
65
- })
66
- return validFiles
53
+ if (!files) return []
54
+ const entries = typeof files === 'string' ? [files] : files
55
+ const validFiles: string[] = []
56
+ entries.forEach((e) => {
57
+ if (path.isAbsolute(e)) {
58
+ validFiles.push(e)
59
+ } else {
60
+ const file = dirs.map((dir) => path.resolve(dir, e)).find((p) => fs.existsSync(p))
61
+ if (file) {
62
+ validFiles.push(file)
63
+ }
64
+ }
65
+ })
66
+ return validFiles
67
67
  }
package/ts/store.ts CHANGED
@@ -1,17 +1,15 @@
1
- export interface Store {
2
- devel: boolean,
3
- startAudio?: any,
4
- completeAudio?: any,
5
- doesLastRunPass: boolean,
6
- reset(): void
7
- }
8
-
9
- export const store: Store = {
10
- devel: false,
11
- doesLastRunPass: false,
12
- reset() {
13
- store.completeAudio = undefined,
14
- store.doesLastRunPass = false,
15
- store.startAudio = undefined
16
- }
17
- }
1
+ export interface Store {
2
+ devel: boolean
3
+ startAudio?: any
4
+ completeAudio?: any
5
+ doesLastRunPass: boolean
6
+ reset(): void
7
+ }
8
+
9
+ export const store: Store = {
10
+ devel: false,
11
+ doesLastRunPass: false,
12
+ reset() {
13
+ ;(store.completeAudio = undefined), (store.doesLastRunPass = false), (store.startAudio = undefined)
14
+ }
15
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioReporter.js","sourceRoot":"","sources":["../ts/AudioReporter.ts"],"names":[],"mappings":"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"}
package/cjs/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import { AudioReporter } from './AudioReporter';
2
- export default AudioReporter;
package/cjs/index.js DELETED
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const store_1 = require("./store");
4
- // istanbul ignore next
5
- process.on('exit', () => {
6
- if (store_1.store.startAudio)
7
- store_1.store.startAudio.kill();
8
- if (store_1.store.completeAudio)
9
- store_1.store.completeAudio.kill();
10
- });
11
- const AudioReporter_1 = require("./AudioReporter");
12
- exports.default = AudioReporter_1.AudioReporter;
13
- //# sourceMappingURL=index.js.map
package/cjs/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":";;AAAA,mCAA+B;AAE/B,uBAAuB;AACvB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;IACtB,IAAI,aAAK,CAAC,UAAU;QAAE,aAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;IAC7C,IAAI,aAAK,CAAC,aAAa;QAAE,aAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;AACrD,CAAC,CAAC,CAAA;AAEF,mDAA+C;AAE/C,kBAAe,6BAAa,CAAA"}
package/cjs/log.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../ts/log.ts"],"names":[],"mappings":";;AAEA,8BAYC;AAED,gCAYC;AA5BD,mCAA+B;AAE/B,SAAgB,SAAS;IACvB,OAAO;QACL,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,OAAO;QACf,KAAK,CAAC,GAAG,IAAI;YACX,IAAI,aAAK,CAAC,KAAK;gBAAE,OAAM;YACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,uBAAuB;gBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,OAAO;IAC9C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACjC,CAAC;SACI,CAAC;QACJ,GAAG,CAAC,KAAK,CAAC;EACZ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGzC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;CACtC,CAAC,CAAA;IACA,CAAC;AACH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../ts/options.ts"],"names":[],"mappings":";;;;;AAiCA,wCAeC;AAhDD,4CAAmB;AACnB,gDAAuB;AAgCvB,SAAgB,cAAc,CAAC,YAAY;IACzC,wDAAwD;IACxD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,cAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/E,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC9D,MAAM,WAAW,GAAG,kBAAkB,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IACtE,MAAM,cAAc,GAAG,kBAAkB,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IAE5E,MAAM,gBAAgB,GAAG,YAAY,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAEvH,OAAO;QACL,gBAAgB;QAChB,OAAO;QACP,WAAW;QACX,cAAc;KACf,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAoC,EAAE,IAAc;IAC9E,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAC3D,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAClB,IAAI,cAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC;aACI,CAAC;YACJ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9E,IAAI,IAAI,EAAE,CAAC;gBACT,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,UAAU,CAAA;AACnB,CAAC"}
package/cjs/store.js DELETED
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.store = void 0;
4
- exports.store = {
5
- devel: false,
6
- doesLastRunPass: false,
7
- reset() {
8
- exports.store.completeAudio = undefined,
9
- exports.store.doesLastRunPass = false,
10
- exports.store.startAudio = undefined;
11
- }
12
- };
13
- //# sourceMappingURL=store.js.map
package/cjs/store.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../ts/store.ts"],"names":[],"mappings":";;;AAQa,QAAA,KAAK,GAAU;IAC1B,KAAK,EAAE,KAAK;IACZ,eAAe,EAAE,KAAK;IACtB,KAAK;QACH,aAAK,CAAC,aAAa,GAAG,SAAS;YAC/B,aAAK,CAAC,eAAe,GAAG,KAAK;YAC7B,aAAK,CAAC,UAAU,GAAG,SAAS,CAAA;IAC9B,CAAC;CACF,CAAA"}
File without changes
File without changes
File without changes