diff --git a/tools/deploy/script.ts b/tools/deploy/script.ts index c7199189..a803511f 100644 --- a/tools/deploy/script.ts +++ b/tools/deploy/script.ts @@ -132,9 +132,16 @@ export class Script extends vm.Script { } } +const SKIP = {}; + const ENV_PROTO = { spritename, - spritedata + spritedata, + SKIP, + // Because throw SKIP isn't an expression + skip() { + throw SKIP; + } }; function makeEnv(srcDir : string, queue: ActionQueue) { @@ -181,6 +188,7 @@ export function runOnFile(scr : Script, src : string, queue: ActionQueue) { const dst = pathlib.format(output); queue.copy(src, dst); } catch(e) { + if (e === SKIP) return; queue.throw(e); } } @@ -189,6 +197,7 @@ export function run(scr : Script, srcDir : string, queue : ActionQueue) { try { scr.runInNewContext(makeEnv(srcDir, queue)); } catch(e) { + if (e === SKIP) return; queue.throw(e); } } diff --git a/tools/deploy/test/script.js b/tools/deploy/test/script.js index 1b4522a0..1902362d 100644 --- a/tools/deploy/test/script.js +++ b/tools/deploy/test/script.js @@ -23,9 +23,11 @@ it('aq', () => { }); it('runOnFile', () => { - const scr = new script.Script('({name: "25"})', 'expr'); + const scr = new script.Script('name === "rhydont" ? skip() : {name: "25"}', 'expr'); const aq = new script.ActionQueue(); script.runOnFile(scr, '/foo/bar/pikachu.png', aq); + script.runOnFile(scr, '/foo/bar/rhydont.png', aq); + expect(aq.log.length).toBe(1); expect(aq.log).toEqual(expect.arrayContaining([ {type: 'Copy', src: '/foo/bar/pikachu.png', dst: "25.png", valid: 'Success', debugObjs: []}, ]));