UNPKG

genish.js

Version:
81 lines (61 loc) 1.93 kB
'use strict' let gen = require( './gen.js' ) let proto = { basename:'ifelse', gen() { let conditionals = this.inputs[0], defaultValue = gen.getInput( conditionals[ conditionals.length - 1] ), out = ` var ${this.name}_out = ${defaultValue}\n` //console.log( 'conditionals:', this.name, conditionals ) //console.log( 'defaultValue:', defaultValue ) for( let i = 0; i < conditionals.length - 2; i+= 2 ) { let isEndBlock = i === conditionals.length - 3, cond = gen.getInput( conditionals[ i ] ), preblock = conditionals[ i+1 ], block, blockName, output //console.log( 'pb', preblock ) if( typeof preblock === 'number' ){ block = preblock blockName = null }else{ if( gen.memo[ preblock.name ] === undefined ) { // used to place all code dependencies in appropriate blocks gen.startLocalize() gen.getInput( preblock ) block = gen.endLocalize() blockName = block[0] block = block[ 1 ].join('') block = ' ' + block.replace( /\n/gi, '\n ' ) }else{ block = '' blockName = gen.memo[ preblock.name ] } } output = blockName === null ? ` ${this.name}_out = ${block}` : `${block} ${this.name}_out = ${blockName}` if( i===0 ) out += ' ' out += ` if( ${cond} === 1 ) { ${output} }` if( !isEndBlock ) { out += ` else` }else{ out += `\n` } } gen.memo[ this.name ] = `${this.name}_out` return [ `${this.name}_out`, out ] } } module.exports = ( ...args ) => { let ugen = Object.create( proto ), conditions = Array.isArray( args[0] ) ? args[0] : args Object.assign( ugen, { uid: gen.getUID(), inputs: [ conditions ], }) ugen.name = `${ugen.basename}${ugen.uid}` return ugen }