grunt-yate

Yate compiler plugin

grunt-yate

Yate compiler plugin

This plugin requires Grunt ~0.4.1

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-yate --save-dev

One the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-yate');

In your project's Gruntfile, add a section named yate to the data object passed into grunt.initConfig().

grunt.initConfig({
  yate: {
    options: {
      // Task-specific options go here. 
    },
    your_target: {
      // Target-specific file lists and/or options go here. 
    },
  },
})

Type: Boolean Default value: false

Prepend destination file with runtime.js library from yate.

Type: Array

File pattern or array of patterns to load modules from.

Type: Boolean|String|Object Default value: false

Create autorunning templates.

  • Pass true to automatically run main module.
  • Pass a string to autorun specific module.
  • Pass {module: "moduleTitle", mode: "modeName"} to specify both module and mode.

Type: Boolean Default value: false

module.exports main template function so that it can be required as a node module.

Type: String|Array

File pattern or array of patterns to load external functions from. Functions should be defined in yr.externals namespace.

Type: Function

Define compiled code transformation or extension.

grunt.initConfig({
  yate: {
    options: {
      postprocessfunction(code) {
        // Example: augment particular strings at compile time: 
        return code.replace('{time}', Date.now());
      }
    }
    // ... 
  }
});

Type: Boolean Default value: false

Write parsed AST files at the location of templates. Should speed up builds as the parsing stage is skipped for unchanged files.

Compile single file:

grunt.initConfig({
  yate: {
    options: {},
    dist: {
      files: {
        'templates/compiled/index.js': [
          'templates/src/index.yate',
          'templates/src/blocks/*.yate'
        ]
      }
    }
  }
});

Compile multiple files, using one-to-one mapping:

grunt.initConfig({
  yate: {
    options: {
      runtime: false
    },
    dist: {
      files: [
        {
          dest: 'templates/compiled/',
          src: 'templates/src/*.yate',
          ext: '.js',
          expand: true,
          flatten: true
        }
      ]
    }
  }
});

YATE module:

module "module1"
match .* module1-match1 {
 
}

YATE template:

module "tmpl1"
import "module1"
match / xb-button {
    apply .* module1-match1
}
grunt.initConfig({
  yate: {
    options: {
      import: [
        'lib/**/*.yate.obj'
      ]
    },
    dist: {
      files: [
        {
          dest: 'templates/compiled/',
          src: 'templates/src/*.yate',
          ext: '.js',
          expand: true,
          flatten: true
        }
      ]
    }
  }
});

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.

(Nothing yet)