1 | const path = require('path')
|
2 |
|
3 | let exercise = require('workshopper-exercise')()
|
4 | const filecheck = require('workshopper-exercise/filecheck')
|
5 |
|
6 | const { readableStream } = require('./utils')
|
7 | const stdinProcessor = require('./stdinProcessor')
|
8 | const solutionSetup = require('./solutionSetup')
|
9 |
|
10 | exercise = solutionSetup(exercise)
|
11 |
|
12 | exercise = filecheck(exercise)
|
13 |
|
14 | exercise.addSetup(function (mode, callback) {
|
15 | this.submissionFn = require(path.resolve(this.args[0]))
|
16 |
|
17 | if (typeof this.submissionFn !== 'function') {
|
18 | this.emit('fail', this.__('fail.invalid_export'))
|
19 | }
|
20 | this.solutionFn = require(this.solution)
|
21 |
|
22 | process.nextTick(callback)
|
23 | })
|
24 |
|
25 | exercise.addProcessor(function (mode, callback) {
|
26 | if (this.execArgs) {
|
27 | this.submissionChild = this.submissionFn(process.execPath, this.execArgs)
|
28 | } else {
|
29 | this.submissionChild = this.submissionFn(this.submissionArgs)
|
30 | }
|
31 | this.submissionStdout = this.submissionChild
|
32 | this.submissionChild.stdin = this.submissionChild
|
33 |
|
34 |
|
35 |
|
36 |
|
37 | this.submissionChild.stderr = readableStream()
|
38 |
|
39 | if (mode === 'verify') {
|
40 | if (this.execArgs) {
|
41 | this.solutionChild = this.solutionFn(process.execPath, this.execArgs)
|
42 | } else {
|
43 | this.solutionChild = this.solutionFn(this.solutionArgs)
|
44 | }
|
45 | this.solutionStdout = this.solutionChild
|
46 | this.solutionChild.stdin = this.solutionChild
|
47 | }
|
48 |
|
49 | process.nextTick(function () {
|
50 | callback(null, true)
|
51 | })
|
52 | })
|
53 |
|
54 | exercise = stdinProcessor(exercise)
|
55 |
|
56 | module.exports = exercise
|