diff --git a/lib/braces.js b/lib/braces.js index 2deea3a..7a68734 100644 --- a/lib/braces.js +++ b/lib/braces.js @@ -1,5 +1,8 @@ 'use strict'; +var typeOf = require('kind-of'); +var define = require('define-property'); +var extend = require('extend-shallow'); var Snapdragon = require('snapdragon'); var compilers = require('./compilers'); var parsers = require('./parsers'); @@ -10,7 +13,7 @@ var utils = require('./utils'); */ function Braces(options) { - this.options = utils.extend({}, options); + this.options = extend({}, options); } /** @@ -18,6 +21,8 @@ function Braces(options) { */ Braces.prototype.init = function(options) { + if (this.isInitialized) return; + this.isInitialized = true; var opts = utils.createOptions({}, this.options, options); this.snapdragon = this.options.snapdragon || new Snapdragon(opts); this.compiler = this.snapdragon.compiler; @@ -33,7 +38,7 @@ Braces.prototype.init = function(options) { * order and unbalance braces are properly escaped. */ - utils.define(this.snapdragon, 'parse', function(pattern, options) { + define(this.snapdragon, 'parse', function(pattern, options) { var parsed = Snapdragon.prototype.parse.apply(this, arguments); this.parser.ast.input = pattern; @@ -43,34 +48,23 @@ Braces.prototype.init = function(options) { } function addParent(node, parent) { - utils.define(node, 'parent', parent); + define(node, 'parent', parent); parent.nodes.push(node); } // add non-enumerable parser reference - utils.define(parsed, 'parser', this.parser); + define(parsed, 'parser', this.parser); return parsed; }); }; -/** - * Lazily initialize braces - */ - -Braces.prototype.lazyInit = function(options) { - if (!this.isInitialized) { - this.isInitialized = true; - this.init(options); - } -}; - /** * Decorate `.parse` method */ Braces.prototype.parse = function(ast, options) { - if (utils.isObject(ast) && ast.nodes) return ast; - this.lazyInit(options); + if (typeOf(ast) === 'object' && ast.nodes) return ast; + this.init(options); return this.snapdragon.parse(ast, options); }; @@ -82,10 +76,9 @@ Braces.prototype.compile = function(ast, options) { if (typeof ast === 'string') { ast = this.parse(ast, options); } else { - this.lazyInit(options); + this.init(options); } - var res = this.snapdragon.compile(ast, options); - return res; + return this.snapdragon.compile(ast, options); }; /**