alfa-jpn / track-dsl

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

TrackDSL

DSL support for track.

Installation

npm

npm install track-dsl

Usage

For example, create DSL having #getter and #setter.

class Hoge extends Base {
  static definer() {
    getter('foo');  // Define instance.foo
    getter('bar');  // Define instance.bar
    setter('piyo'); // Define instance.piyo=
  }
}

Define DSL

const TrackDSL = require('track-dsl');
class Base {
  constructor() {
    const dsl = new TrackDSL(this, {
      'getter': {func: this._defineGetter, binding: this},
      'setter': {func: this._defineSetter, binding: this},
    });

    dsl.evaluate(this.constructor.definer);
  }

  _defineGetter(name) {
    Object.defineProperty(this, name, {
      get: function() {
        return this[`_${name}`];
      }
    });
  }

  _defineSetter(name) {
    Object.defineProperty(this, name, {
      set: function(value) {
        this[`_${name}`] = value;
      }
    });
  }
}

Use

const hoge = new Hoge();

hoge.piyo = 'piyo';
hoge.foo;

About


Languages

Language:JavaScript 100.0%