summaryrefslogtreecommitdiff
path: root/lambda-calcul/javascript/src/client.js
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul/javascript/src/client.js')
-rw-r--r--lambda-calcul/javascript/src/client.js19
1 files changed, 18 insertions, 1 deletions
diff --git a/lambda-calcul/javascript/src/client.js b/lambda-calcul/javascript/src/client.js
index d046187..88ea253 100644
--- a/lambda-calcul/javascript/src/client.js
+++ b/lambda-calcul/javascript/src/client.js
@@ -1,11 +1,27 @@
const axios = require('axios');
-const newClient = ({ playerName, challengerURL }) => {
+const defaultInterpreter = require('./interpreter');
+const defaultParser = require('./parser');
+const defaultPrinter = require('./printer');
+
+const newClient = ({
+ challengerURL,
+ interpreter = defaultInterpreter,
+ parser = defaultParser,
+ playerName,
+ printer = defaultPrinter,
+}) => {
const nextChallenge = (token) => axios ({
url: `${challengerURL}/api/challenge?token=${token}`,
})
.then(({ data: { expr } }) => expr);
+ const solve = (challenge) => {
+ const parsedExpression = parser.parse(challenge);
+ const evaluatedExpression = interpreter.evaluate(parsedExpression);
+ return printer.print(evaluatedExpression);
+ }
+
const start = () => axios({
method: 'POST',
url: `${challengerURL}/api/register`,
@@ -16,6 +32,7 @@ const newClient = ({ playerName, challengerURL }) => {
return {
nextChallenge,
+ solve,
start,
};
};