-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathindex.js
107 lines (103 loc) · 2.95 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
'use strict'
const pmap = require('p-map')
const node = require('./node')
const browser = require('./browser')
const electron = require('./electron')
const rn = require('./react-native')
/**
* @typedef {import("execa").Options} ExecaOptions
* @typedef {import('./../types').TestOptions} TestOptions
* @typedef {import('./../types').GlobalOptions} GlobalOptions
*/
const TASKS = [
{
title: 'Test Node.js',
/**
* @param {TestOptions & GlobalOptions} opts
* @param {ExecaOptions} execaOptions
*/
task: (opts, execaOptions) => node({ ...opts, runner: 'node' }, execaOptions),
/**
* @param {TestOptions & GlobalOptions} ctx
*/
enabled: (ctx) => ctx.target.includes('node')
},
{
title: 'Test Browser',
/**
* @param {TestOptions & GlobalOptions} opts
* @param {ExecaOptions} execaOptions
*/
task: (opts, execaOptions) => browser({ ...opts, runner: 'browser' }, execaOptions),
/**
* @param {TestOptions & GlobalOptions} ctx
*/
enabled: (ctx) => ctx.target.includes('browser')
},
{
title: 'Test Webworker',
/**
* @param {TestOptions & GlobalOptions} opts
* @param {ExecaOptions} execaOptions
*/
task: (opts, execaOptions) => browser({ ...opts, runner: 'webworker' }, execaOptions),
/**
* @param {TestOptions & GlobalOptions} ctx
*/
enabled: (ctx) => ctx.target.includes('webworker')
},
{
title: 'Test Electron Main',
/**
* @param {TestOptions & GlobalOptions} opts
* @param {ExecaOptions} execaOptions
*/
task: (opts, execaOptions) => electron({ ...opts, runner: 'electron-main' }, execaOptions),
/**
* @param {TestOptions & GlobalOptions} ctx
*/
enabled: (ctx) => ctx.target.includes('electron-main')
},
{
title: 'Test Electron Renderer',
/**
* @param {TestOptions & GlobalOptions} opts
* @param {ExecaOptions} execaOptions
*/
task: (opts, execaOptions) => electron({ ...opts, runner: 'electron-renderer' }, execaOptions),
/**
* @param {TestOptions & GlobalOptions} ctx
*/
enabled: (ctx) => ctx.target.includes('electron-renderer')
},
{
title: 'Test React Native Android',
/**
* @param {TestOptions & GlobalOptions} opts
* @param {ExecaOptions} execaOptions
*/
task: (opts, execaOptions) => rn({ ...opts, runner: 'react-native-android' }, execaOptions),
/**
* @param {TestOptions & GlobalOptions} ctx
*/
enabled: (ctx) => ctx.target.includes('react-native-android')
}
]
module.exports = {
/**
*
* @param {TestOptions & GlobalOptions} opts
* @param {ExecaOptions} execaOptions
*/
run (opts, execaOptions = {}) {
return pmap(TASKS, (task) => {
if (!task.enabled(opts)) {
return Promise.resolve()
}
if (execaOptions.stdio !== 'ignore') {
console.log(task.title) // eslint-disable-line no-console
}
return task.task(opts, execaOptions)
}, { concurrency: 1 })
}
}