@helpdotcom/build-ast

    2.3.4 • Public • Published

    build-ast

    Make build AST nodes easy

    Install

    $ npm install [--save] @helpdotcom/build-ast

    Test

    $ npm test

    Example

    'use strict'
     
    const B = require('@helpdotcom/build-ast')
    const toCode = require('escodegen').generate
     
    // 'use strict'
    const b = B().use('strict')
     
    // `typeof opts.name`
    const left = B.typeof('opts.name')
     
    // `'string'`
    const right = B.string('string')
     
    // `typeof opts.name !== 'string'`
    const check = B.notEquals(left, right)
     
    // new TypeError('name must be a string')
    const error = B.TypeError('name must be a string')
     
    // const er = new TypeError('name must be a string')
    // return setImmediate(cb, er)
    const errorBlock = B()
      .declare('const', 'er', error)
      .returns(
        B.callFunction('setImmediate', [
          B.id('cb')
        , B.id('er')
        ])
      ).build()
     
    // if (typeof opts.name !== 'string') {
    //   const er = new TypeError('name must be a string')
    //   return setImmediate(cb, er)
    // }
    const block = B()
    block.if(check, B.block(errorBlock))
    block.returns(
      B.callFunction('setImmediate', [
        B.id('cb')
      , B.ast.literal(null)
      , B.id('opts')
      ])
    )
     
    // module.exports = function validate(opts, cb) {}
    b.module(B.function('validate', ['opts', 'cb'], block.build()))
     
    console.log(toCode(b.program()))

    which will print out:

    'use strict';
    module.exports = function validate(opts, cb) {
      if (typeof opts.name !== 'string') {
        const er = new TypeError('name must be a string')
        return setImmediate(cb, er)
      }
      return setImmediate(cb, null, opts)
    }

    API

    See DOCS.md

    Author

    Evan Lucas

    License

    MIT (See LICENSE for more info)

    Keywords

    none

    Install

    npm i @helpdotcom/build-ast

    DownloadsWeekly Downloads

    1

    Version

    2.3.4

    License

    MIT

    Last publish

    Collaborators

    • roshii
    • afarrar
    • commitbot