From ad2344b13ad47b1c3bc59a60df219b435ebfa97c Mon Sep 17 00:00:00 2001 From: Joshua T Corbin Date: Tue, 2 Mar 2021 15:31:48 -0800 Subject: [PATCH 1/5] kni: verify kniscripts length under fromJson --- kni.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kni.js b/kni.js index db5fe03..d42d0f6 100755 --- a/kni.js +++ b/kni.js @@ -48,6 +48,10 @@ function run(args, out, done) { var states; if (config.fromJson) { + if (kniscripts.length !== 1) { + done(new Error('must provide (only) one JSON input file')); + return; + } states = JSON.parse(kniscripts[0].content); // TODO test needed } else { var story = new Story(); From 0f698e6f8f6878b96805759541da4149a2ff68f3 Mon Sep 17 00:00:00 2001 From: Joshua T Corbin Date: Tue, 2 Mar 2021 15:32:47 -0800 Subject: [PATCH 2/5] kni: catch JSON parse errors --- kni.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/kni.js b/kni.js index d42d0f6..3cfd9ec 100755 --- a/kni.js +++ b/kni.js @@ -52,7 +52,12 @@ function run(args, out, done) { done(new Error('must provide (only) one JSON input file')); return; } - states = JSON.parse(kniscripts[0].content); // TODO test needed + try { + states = JSON.parse(kniscripts[0].content); + } catch (err) { + done(err); + return; + } } else { var story = new Story(); @@ -183,7 +188,12 @@ function run(args, out, done) { done(err); return; } - waypoint = JSON.parse(waypoint); + try { + waypoint = JSON.parse(waypoint); + } catch (err) { + done(err); + return; + } engine.continue(waypoint); }); } else { From 70b51382cb065491a3c9b8313840d40bc12ccee2 Mon Sep 17 00:00:00 2001 From: Joshua T Corbin Date: Tue, 2 Mar 2021 18:06:56 -0800 Subject: [PATCH 3/5] kni: send json to stdout Also terminate modal output control flow --- kni.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kni.js b/kni.js index 3cfd9ec..6f40225 100755 --- a/kni.js +++ b/kni.js @@ -125,10 +125,12 @@ function run(args, out, done) { } if (config.toJson) { - console.log(JSON.stringify(states, null, 4), done); - interactive = false; + // TODO streaming json encoder? + out.write(JSON.stringify(states, null, 4), done); + return; + } - } else if (config.toHtml) { + if (config.toHtml) { makeHtml(states, config.toHtml, { title: config.htmlTitle, color: config.htmlColor, From e1092590e29cc917b5a4b0001b7aeff6eed8e7fd Mon Sep 17 00:00:00 2001 From: Joshua T Corbin Date: Tue, 2 Mar 2021 19:56:12 -0800 Subject: [PATCH 4/5] kni: fix json kniscript binding --- kni.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/kni.js b/kni.js index 6f40225..c3dde09 100755 --- a/kni.js +++ b/kni.js @@ -46,14 +46,17 @@ function run(args, out, done) { out = tee(config.transcript, out); } + var kniscript; var states; + if (config.fromJson) { if (kniscripts.length !== 1) { done(new Error('must provide (only) one JSON input file')); return; } try { - states = JSON.parse(kniscripts[0].content); + kniscript = kniscripts[0].content; + states = JSON.parse(kniscript); } catch (err) { done(err); return; @@ -62,7 +65,7 @@ function run(args, out, done) { var story = new Story(); for (var i = 0; i < kniscripts.length; i++) { - var kniscript = kniscripts[i].content; + kniscript = kniscripts[i].content; if (config.debugInput) { console.log(kniscript); From 761a176ccd614689d726805bca589e071bc934ca Mon Sep 17 00:00:00 2001 From: Joshua T Corbin Date: Tue, 2 Mar 2021 15:55:33 -0800 Subject: [PATCH 5/5] kni-test: add compiledJson mode --- kni-test.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/kni-test.js b/kni-test.js index 0f169f8..e11311b 100644 --- a/kni-test.js +++ b/kni-test.js @@ -87,6 +87,20 @@ function testDescribe(kniscript, descript, done) { }, done); } +function testCompiledJson(kniscript, transcript, done) { + withTempDir(transcript, function under(dir, fin) { + var outfile = dir + '/out'; + var jsonfile = dir + '/json'; + runArgs([kniscript, '-j'], jsonfile, function compileDone(err) { + if (err) { + fin(err); + return; + } + runArgs(['-J', jsonfile, '-v', transcript], outfile, fin); + }); + }, done); +} + function main() { fs.readdir('tests', function(err, files) { if (err) { @@ -130,8 +144,8 @@ function main() { // verification tests [ - // TODO also derive from files and/or reconcile with engine-test ['basic', testBasic], + ['compiledJson', testCompiledJson], ].forEach(function eachTestMode(testMode) { var testModeName = testMode[0]; var runTest = testMode[1];