diff options
Diffstat (limited to 'node_modules/snapdragon')
17 files changed, 1984 insertions, 0 deletions
diff --git a/node_modules/snapdragon/LICENSE b/node_modules/snapdragon/LICENSE new file mode 100644 index 0000000..1e49edf --- /dev/null +++ b/node_modules/snapdragon/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2016, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/snapdragon/README.md b/node_modules/snapdragon/README.md new file mode 100644 index 0000000..4006e10 --- /dev/null +++ b/node_modules/snapdragon/README.md @@ -0,0 +1,321 @@ +# snapdragon [](https://www.npmjs.com/package/snapdragon) [](https://npmjs.org/package/snapdragon) [](https://travis-ci.org/jonschlinkert/snapdragon) + +> Fast, pluggable and easy-to-use parser-renderer factory. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save snapdragon +``` + +Created by [jonschlinkert](https://github.com/jonschlinkert) and [doowb](https://github.com/doowb). + +**Features** + +* Bootstrap your own parser, get sourcemap support for free +* All parsing and compiling is handled by simple, reusable middleware functions +* Inspired by the parsers in [pug](http://jade-lang.com) and [css](https://github.com/reworkcss/css). + +## History + +### v0.5.0 + +**Breaking changes** + +Substantial breaking changes were made in v0.5.0! Most of these changes are part of a larger refactor that will be finished in 0.6.0, including the introduction of a `Lexer` class. + +* Renderer was renamed to `Compiler` +* the `.render` method was renamed to `.compile` +* Many other smaller changes. A more detailed overview will be provided in 0.6.0. If you don't have to time review code, I recommend you wait for the 0.6.0 release. + +## Usage examples + +```js +var Snapdragon = require('snapdragon'); +var snapdragon = new Snapdragon(); +``` + +**Parse** + +```js +var ast = snapdragon.parser('some string', options) +  // parser middleware that can be called by other middleware +  .set('foo', function () {}) +  // parser middleware, runs immediately in the order defined +  .use(bar()) +  .use(baz()) +``` + +**Render** + +```js +// pass the `ast` from the parse method +var res = snapdragon.compiler(ast) +  // compiler middleware, called when the name of the middleware +  // matches the `node.type` (defined in a parser middleware) +  .set('bar', function () {}) +  .set('baz', function () {}) +  .compile() +``` + +See the [examples](./examples/). + +## Getting started + +**Parsers** + +Parsers are middleware functions used for parsing a string into an ast node. + +```js +var ast = snapdragon.parser(str, options) +  .use(function() { +    var pos = this.position(); +    var m = this.match(/^\./); +    if (!m) return; +    return pos({ +      // `type` specifies the compiler to use +      type: 'dot', +      val: m[0] +    }); +  }) +``` + +**AST node** + +When the parser finds a match, `pos()` is called, pushing a token for that node onto the ast that looks something like: + +```js +{ type: 'dot', +  val: '.', +  position: +   { start: { lineno: 1, column: 1 }, +     end: { lineno: 1, column: 2 } }} +``` + +**Renderers** + +Renderers are _named_ middleware functions that visit over an array of ast nodes to compile a string. + +```js +var res = snapdragon.compiler(ast) +  .set('dot', function (node) { +    console.log(node.val) +    //=> '.' +    return this.emit(node.val); +  }) +``` + +**Source maps** + +If you want source map support, make sure to emit the position as well. + +```js +var res = snapdragon.compiler(ast) +  .set('dot', function (node) { +    return this.emit(node.val, node.position); +  }) +``` + +## Docs + +### Parser middleware + +A parser middleware is a function that returns an abject called a `token`. This token is pushed onto the AST as a node. + +**Example token** + +```js +{ type: 'dot', +  val: '.', +  position: +   { start: { lineno: 1, column: 1 }, +     end: { lineno: 1, column: 2 } }} +``` + +**Example parser middleware** + +Match a single `.` in a string: + +1. Get the starting position by calling `this.position()` +2. pass a regex for matching a single dot to the `.match` method +3. if **no match** is found, return `undefined` +4. if a **match** is found, `pos()` is called, which returns a token with: +  - `type`: the name of the [compiler] to use +  - `val`: The actual value captured by the regex. In this case, a `.`. Note that you can capture and return whatever will be needed by the corresponding [compiler]. +  - The ending position: automatically calculated by adding the length of the first capture group to the starting position. + +## Renderer middleware + +Renderers are run when the name of the compiler middleware matches the `type` defined on an ast `node` (which is defined in a parser). + +**Example** + +Exercise: Parse a dot, then compile it as an escaped dot. + +```js +var ast = snapdragon.parser('.') +  .use(function () { +    var pos = this.position(); +    var m = this.match(/^\./); +    if (!m) return; +    return pos({ +      // define the `type` of compiler to use +      type: 'dot', +      val: m[0] +    }) +  }) + +var result = snapdragon.compiler(ast) +  .set('dot', function (node) { +    return this.emit('\\' + node.val); +  }) +  .compile() + +console.log(result.output); +//=> '\.' +``` + +## API + +### [Parser](lib/parser.js#L19) + +Create a new `Parser` with the given `input` and `options`. + +**Params** + +* `input` **{String}** +* `options` **{Object}** + +### [.define](lib/parser.js#L103) + +Define a non-enumberable property on the `Parser` instance. + +**Example** + +```js +parser.define('foo', 'bar'); +``` + +**Params** + +* `key` **{String}**: propery name +* `val` **{any}**: property value +* `returns` **{Object}**: Returns the Parser instance for chaining. + +Set parser `name` with the given `fn` + +**Params** + +* `name` **{String}** +* `fn` **{Function}** + +Get parser `name` + +**Params** + +* `name` **{String}** + +Push a `token` onto the `type` stack. + +**Params** + +* `type` **{String}** +* `returns` **{Object}** `token` + +Pop a token off of the `type` stack + +**Params** + +* `type` **{String}** +* `returns` **{Object}**: Returns a token + +Return true if inside a `stack` node. Types are `braces`, `parens` or `brackets`. + +**Params** + +* `type` **{String}** +* `returns` **{Boolean}** + +**Example** + +```js +parser.isType(node, 'brace'); +``` + +**Params** + +* `node` **{Object}** +* `type` **{String}** +* `returns` **{Boolean}** + +### [.define](lib/compiler.js#L71) + +Define a non-enumberable property on the `Compiler` instance. + +**Example** + +```js +compiler.define('foo', 'bar'); +``` + +**Params** + +* `key` **{String}**: propery name +* `val` **{any}**: property value +* `returns` **{Object}**: Returns the Compiler instance for chaining. + +## About + +### Related projects + +* [braces](https://www.npmjs.com/package/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces… [more](https://github.com/jonschlinkert/braces) | [homepage](https://github.com/jonschlinkert/braces "Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification.") +* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/jonschlinkert/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.") +* [extglob](https://www.npmjs.com/package/extglob): Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to… [more](https://github.com/jonschlinkert/extglob) | [homepage](https://github.com/jonschlinkert/extglob "Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to glob patterns.") +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor**<br/> |  +| --- | --- | +| 106 | [jonschlinkert](https://github.com/jonschlinkert) | +| 2 | [doowb](https://github.com/doowb) | + +### Building docs + +_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_ + +To generate the readme and API documentation with [verb](https://github.com/verbose/verb): + +```sh +$ npm install -g verb verb-generate-readme && verb +``` + +### Running tests + +Install dev dependencies: + +```sh +$ npm install -d && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +### License + +Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT license](https://github.com/jonschlinkert/snapdragon/blob/master/LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.31, on October 10, 2016._
\ No newline at end of file diff --git a/node_modules/snapdragon/index.js b/node_modules/snapdragon/index.js new file mode 100644 index 0000000..235b464 --- /dev/null +++ b/node_modules/snapdragon/index.js @@ -0,0 +1,174 @@ +'use strict'; + +var Base = require('base'); +var define = require('define-property'); +var Compiler = require('./lib/compiler'); +var Parser = require('./lib/parser'); +var utils = require('./lib/utils'); +var regexCache = {}; +var cache = {}; + +/** + * Create a new instance of `Snapdragon` with the given `options`. + * + * ```js + * var snapdragon = new Snapdragon(); + * ``` + * + * @param {Object} `options` + * @api public + */ + +function Snapdragon(options) { +  Base.call(this, null, options); +  this.options = utils.extend({source: 'string'}, this.options); +  this.compiler = new Compiler(this.options); +  this.parser = new Parser(this.options); + +  Object.defineProperty(this, 'compilers', { +    get: function() { +      return this.compiler.compilers; +    } +  }); + +  Object.defineProperty(this, 'parsers', { +    get: function() { +      return this.parser.parsers; +    } +  }); + +  Object.defineProperty(this, 'regex', { +    get: function() { +      return this.parser.regex; +    } +  }); +} + +/** + * Inherit Base + */ + +Base.extend(Snapdragon); + +/** + * Add a parser to `snapdragon.parsers` for capturing the given `type` using + * the specified regex or parser function. A function is useful if you need + * to customize how the token is created and/or have access to the parser + * instance to check options, etc. + * + * ```js + * snapdragon + *   .capture('slash', /^\//) + *   .capture('dot', function() { + *     var pos = this.position(); + *     var m = this.match(/^\./); + *     if (!m) return; + *     return pos({ + *       type: 'dot', + *       val: m[0] + *     }); + *   }); + * ``` + * @param {String} `type` + * @param {RegExp|Function} `regex` + * @return {Object} Returns the parser instance for chaining + * @api public + */ + +Snapdragon.prototype.capture = function() { +  return this.parser.capture.apply(this.parser, arguments); +}; + +/** + * Register a plugin `fn`. + * + * ```js + * var snapdragon = new Snapdgragon([options]); + * snapdragon.use(function() { + *   console.log(this);          //<= snapdragon instance + *   console.log(this.parser);   //<= parser instance + *   console.log(this.compiler); //<= compiler instance + * }); + * ``` + * @param {Object} `fn` + * @api public + */ + +Snapdragon.prototype.use = function(fn) { +  fn.call(this, this); +  return this; +}; + +/** + * Parse the given `str`. + * + * ```js + * var snapdragon = new Snapdgragon([options]); + * // register parsers + * snapdragon.parser.use(function() {}); + * + * // parse + * var ast = snapdragon.parse('foo/bar'); + * console.log(ast); + * ``` + * @param {String} `str` + * @param {Object} `options` Set `options.sourcemap` to true to enable source maps. + * @return {Object} Returns an AST. + * @api public + */ + +Snapdragon.prototype.parse = function(str, options) { +  this.options = utils.extend({}, this.options, options); +  var parsed = this.parser.parse(str, this.options); + +  // add non-enumerable parser reference +  define(parsed, 'parser', this.parser); +  return parsed; +}; + +/** + * Compile the given `AST`. + * + * ```js + * var snapdragon = new Snapdgragon([options]); + * // register plugins + * snapdragon.use(function() {}); + * // register parser plugins + * snapdragon.parser.use(function() {}); + * // register compiler plugins + * snapdragon.compiler.use(function() {}); + * + * // parse + * var ast = snapdragon.parse('foo/bar'); + * + * // compile + * var res = snapdragon.compile(ast); + * console.log(res.output); + * ``` + * @param {Object} `ast` + * @param {Object} `options` + * @return {Object} Returns an object with an `output` property with the rendered string. + * @api public + */ + +Snapdragon.prototype.compile = function(ast, options) { +  this.options = utils.extend({}, this.options, options); +  var compiled = this.compiler.compile(ast, this.options); + +  // add non-enumerable compiler reference +  define(compiled, 'compiler', this.compiler); +  return compiled; +}; + +/** + * Expose `Snapdragon` + */ + +module.exports = Snapdragon; + +/** + * Expose `Parser` and `Compiler` + */ + +module.exports.Compiler = Compiler; +module.exports.Parser = Parser; diff --git a/node_modules/snapdragon/lib/compiler.js b/node_modules/snapdragon/lib/compiler.js new file mode 100644 index 0000000..0ce9d21 --- /dev/null +++ b/node_modules/snapdragon/lib/compiler.js @@ -0,0 +1,177 @@ +'use strict'; + +var use = require('use'); +var define = require('define-property'); +var debug = require('debug')('snapdragon:compiler'); +var utils = require('./utils'); + +/** + * Create a new `Compiler` with the given `options`. + * @param {Object} `options` + */ + +function Compiler(options, state) { +  debug('initializing', __filename); +  this.options = utils.extend({source: 'string'}, options); +  this.state = state || {}; +  this.compilers = {}; +  this.output = ''; +  this.set('eos', function(node) { +    return this.emit(node.val, node); +  }); +  this.set('noop', function(node) { +    return this.emit(node.val, node); +  }); +  this.set('bos', function(node) { +    return this.emit(node.val, node); +  }); +  use(this); +} + +/** + * Prototype methods + */ + +Compiler.prototype = { + +  /** +   * Throw an error message with details including the cursor position. +   * @param {String} `msg` Message to use in the Error. +   */ + +  error: function(msg, node) { +    var pos = node.position || {start: {column: 0}}; +    var message = this.options.source + ' column:' + pos.start.column + ': ' + msg; + +    var err = new Error(message); +    err.reason = msg; +    err.column = pos.start.column; +    err.source = this.pattern; + +    if (this.options.silent) { +      this.errors.push(err); +    } else { +      throw err; +    } +  }, + +  /** +   * Define a non-enumberable property on the `Compiler` instance. +   * +   * ```js +   * compiler.define('foo', 'bar'); +   * ``` +   * @name .define +   * @param {String} `key` propery name +   * @param {any} `val` property value +   * @return {Object} Returns the Compiler instance for chaining. +   * @api public +   */ + +  define: function(key, val) { +    define(this, key, val); +    return this; +  }, + +  /** +   * Emit `node.val` +   */ + +  emit: function(str, node) { +    this.output += str; +    return str; +  }, + +  /** +   * Add a compiler `fn` with the given `name` +   */ + +  set: function(name, fn) { +    this.compilers[name] = fn; +    return this; +  }, + +  /** +   * Get compiler `name`. +   */ + +  get: function(name) { +    return this.compilers[name]; +  }, + +  /** +   * Get the previous AST node. +   */ + +  prev: function(n) { +    return this.ast.nodes[this.idx - (n || 1)] || { type: 'bos', val: '' }; +  }, + +  /** +   * Get the next AST node. +   */ + +  next: function(n) { +    return this.ast.nodes[this.idx + (n || 1)] || { type: 'eos', val: '' }; +  }, + +  /** +   * Visit `node`. +   */ + +  visit: function(node, nodes, i) { +    var fn = this.compilers[node.type]; +    this.idx = i; + +    if (typeof fn !== 'function') { +      throw this.error('compiler "' + node.type + '" is not registered', node); +    } +    return fn.call(this, node, nodes, i); +  }, + +  /** +   * Map visit over array of `nodes`. +   */ + +  mapVisit: function(nodes) { +    if (!Array.isArray(nodes)) { +      throw new TypeError('expected an array'); +    } +    var len = nodes.length; +    var idx = -1; +    while (++idx < len) { +      this.visit(nodes[idx], nodes, idx); +    } +    return this; +  }, + +  /** +   * Compile `ast`. +   */ + +  compile: function(ast, options) { +    var opts = utils.extend({}, this.options, options); +    this.ast = ast; +    this.parsingErrors = this.ast.errors; +    this.output = ''; + +    // source map support +    if (opts.sourcemap) { +      var sourcemaps = require('./source-maps'); +      sourcemaps(this); +      this.mapVisit(this.ast.nodes); +      this.applySourceMaps(); +      this.map = opts.sourcemap === 'generator' ? this.map : this.map.toJSON(); +      return this; +    } + +    this.mapVisit(this.ast.nodes); +    return this; +  } +}; + +/** + * Expose `Compiler` + */ + +module.exports = Compiler; diff --git a/node_modules/snapdragon/lib/parser.js b/node_modules/snapdragon/lib/parser.js new file mode 100644 index 0000000..a5a9b31 --- /dev/null +++ b/node_modules/snapdragon/lib/parser.js @@ -0,0 +1,533 @@ +'use strict'; + +var use = require('use'); +var util = require('util'); +var Cache = require('map-cache'); +var define = require('define-property'); +var debug = require('debug')('snapdragon:parser'); +var Position = require('./position'); +var utils = require('./utils'); + +/** + * Create a new `Parser` with the given `input` and `options`. + * @param {String} `input` + * @param {Object} `options` + * @api public + */ + +function Parser(options) { +  debug('initializing', __filename); +  this.options = utils.extend({source: 'string'}, options); +  this.init(this.options); +  use(this); +} + +/** + * Prototype methods + */ + +Parser.prototype = { +  constructor: Parser, + +  init: function(options) { +    this.orig = ''; +    this.input = ''; +    this.parsed = ''; + +    this.column = 1; +    this.line = 1; + +    this.regex = new Cache(); +    this.errors = this.errors || []; +    this.parsers = this.parsers || {}; +    this.types = this.types || []; +    this.sets = this.sets || {}; +    this.fns = this.fns || []; +    this.currentType = 'root'; + +    var pos = this.position(); +    this.bos = pos({type: 'bos', val: ''}); + +    this.ast = { +      type: 'root', +      errors: this.errors, +      nodes: [this.bos] +    }; + +    define(this.bos, 'parent', this.ast); +    this.nodes = [this.ast]; + +    this.count = 0; +    this.setCount = 0; +    this.stack = []; +  }, + +  /** +   * Throw a formatted error with the cursor column and `msg`. +   * @param {String} `msg` Message to use in the Error. +   */ + +  error: function(msg, node) { +    var pos = node.position || {start: {column: 0, line: 0}}; +    var line = pos.start.line; +    var column = pos.start.column; +    var source = this.options.source; + +    var message = source + ' <line:' + line + ' column:' + column + '>: ' + msg; +    var err = new Error(message); +    err.source = source; +    err.reason = msg; +    err.pos = pos; + +    if (this.options.silent) { +      this.errors.push(err); +    } else { +      throw err; +    } +  }, + +  /** +   * Define a non-enumberable property on the `Parser` instance. +   * +   * ```js +   * parser.define('foo', 'bar'); +   * ``` +   * @name .define +   * @param {String} `key` propery name +   * @param {any} `val` property value +   * @return {Object} Returns the Parser instance for chaining. +   * @api public +   */ + +  define: function(key, val) { +    define(this, key, val); +    return this; +  }, + +  /** +   * Mark position and patch `node.position`. +   */ + +  position: function() { +    var start = { line: this.line, column: this.column }; +    var self = this; + +    return function(node) { +      define(node, 'position', new Position(start, self)); +      return node; +    }; +  }, + +  /** +   * Set parser `name` with the given `fn` +   * @param {String} `name` +   * @param {Function} `fn` +   * @api public +   */ + +  set: function(type, fn) { +    if (this.types.indexOf(type) === -1) { +      this.types.push(type); +    } +    this.parsers[type] = fn.bind(this); +    return this; +  }, + +  /** +   * Get parser `name` +   * @param {String} `name` +   * @api public +   */ + +  get: function(name) { +    return this.parsers[name]; +  }, + +  /** +   * Push a `token` onto the `type` stack. +   * +   * @param {String} `type` +   * @return {Object} `token` +   * @api public +   */ + +  push: function(type, token) { +    this.sets[type] = this.sets[type] || []; +    this.count++; +    this.stack.push(token); +    return this.sets[type].push(token); +  }, + +  /** +   * Pop a token off of the `type` stack +   * @param {String} `type` +   * @returns {Object} Returns a token +   * @api public +   */ + +  pop: function(type) { +    this.sets[type] = this.sets[type] || []; +    this.count--; +    this.stack.pop(); +    return this.sets[type].pop(); +  }, + +  /** +   * Return true if inside a `stack` node. Types are `braces`, `parens` or `brackets`. +   * +   * @param {String} `type` +   * @return {Boolean} +   * @api public +   */ + +  isInside: function(type) { +    this.sets[type] = this.sets[type] || []; +    return this.sets[type].length > 0; +  }, + +  /** +   * Return true if `node` is the given `type`. +   * +   * ```js +   * parser.isType(node, 'brace'); +   * ``` +   * @param {Object} `node` +   * @param {String} `type` +   * @return {Boolean} +   * @api public +   */ + +  isType: function(node, type) { +    return node && node.type === type; +  }, + +  /** +   * Get the previous AST node +   * @return {Object} +   */ + +  prev: function(n) { +    return this.stack.length > 0 +      ? utils.last(this.stack, n) +      : utils.last(this.nodes, n); +  }, + +  /** +   * Update line and column based on `str`. +   */ + +  consume: function(len) { +    this.input = this.input.substr(len); +  }, + +  /** +   * Update column based on `str`. +   */ + +  updatePosition: function(str, len) { +    var lines = str.match(/\n/g); +    if (lines) this.line += lines.length; +    var i = str.lastIndexOf('\n'); +    this.column = ~i ? len - i : this.column + len; +    this.parsed += str; +    this.consume(len); +  }, + +  /** +   * Match `regex`, return captures, and update the cursor position by `match[0]` length. +   * @param {RegExp} `regex` +   * @return {Object} +   */ + +  match: function(regex) { +    var m = regex.exec(this.input); +    if (m) { +      this.updatePosition(m[0], m[0].length); +      return m; +    } +  }, + +  /** +   * Capture `type` with the given regex. +   * @param {String} `type` +   * @param {RegExp} `regex` +   * @return {Function} +   */ + +  capture: function(type, regex) { +    if (typeof regex === 'function') { +      return this.set.apply(this, arguments); +    } + +    this.regex.set(type, regex); +    this.set(type, function() { +      var parsed = this.parsed; +      var pos = this.position(); +      var m = this.match(regex); +      if (!m || !m[0]) return; + +      var prev = this.prev(); +      var node = pos({ +        type: type, +        val: m[0], +        parsed: parsed, +        rest: this.input +      }); + +      if (m[1]) { +        node.inner = m[1]; +      } + +      define(node, 'inside', this.stack.length > 0); +      define(node, 'parent', prev); +      prev.nodes.push(node); +    }.bind(this)); +    return this; +  }, + +  /** +   * Create a parser with open and close for parens, +   * brackets or braces +   */ + +  capturePair: function(type, openRegex, closeRegex, fn) { +    this.sets[type] = this.sets[type] || []; + +    /** +     * Open +     */ + +    this.set(type + '.open', function() { +      var parsed = this.parsed; +      var pos = this.position(); +      var m = this.match(openRegex); +      if (!m || !m[0]) return; + +      var val = m[0]; +      this.setCount++; +      this.specialChars = true; +      var open = pos({ +        type: type + '.open', +        val: val, +        rest: this.input +      }); + +      if (typeof m[1] !== 'undefined') { +        open.inner = m[1]; +      } + +      var prev = this.prev(); +      var node = pos({ +        type: type, +        nodes: [open] +      }); + +      define(node, 'rest', this.input); +      define(node, 'parsed', parsed); +      define(node, 'prefix', m[1]); +      define(node, 'parent', prev); +      define(open, 'parent', node); + +      if (typeof fn === 'function') { +        fn.call(this, open, node); +      } + +      this.push(type, node); +      prev.nodes.push(node); +    }); + +    /** +     * Close +     */ + +    this.set(type + '.close', function() { +      var pos = this.position(); +      var m = this.match(closeRegex); +      if (!m || !m[0]) return; + +      var parent = this.pop(type); +      var node = pos({ +        type: type + '.close', +        rest: this.input, +        suffix: m[1], +        val: m[0] +      }); + +      if (!this.isType(parent, type)) { +        if (this.options.strict) { +          throw new Error('missing opening "' + type + '"'); +        } + +        this.setCount--; +        node.escaped = true; +        return node; +      } + +      if (node.suffix === '\\') { +        parent.escaped = true; +        node.escaped = true; +      } + +      parent.nodes.push(node); +      define(node, 'parent', parent); +    }); + +    return this; +  }, + +  /** +   * Capture end-of-string +   */ + +  eos: function() { +    var pos = this.position(); +    if (this.input) return; +    var prev = this.prev(); + +    while (prev.type !== 'root' && !prev.visited) { +      if (this.options.strict === true) { +        throw new SyntaxError('invalid syntax:' + util.inspect(prev, null, 2)); +      } + +      if (!hasDelims(prev)) { +        prev.parent.escaped = true; +        prev.escaped = true; +      } + +      visit(prev, function(node) { +        if (!hasDelims(node.parent)) { +          node.parent.escaped = true; +          node.escaped = true; +        } +      }); + +      prev = prev.parent; +    } + +    var tok = pos({ +      type: 'eos', +      val: this.append || '' +    }); + +    define(tok, 'parent', this.ast); +    return tok; +  }, + +  /** +   * Run parsers to advance the cursor position +   */ + +  next: function() { +    var parsed = this.parsed; +    var len = this.types.length; +    var idx = -1; +    var tok; + +    while (++idx < len) { +      if ((tok = this.parsers[this.types[idx]].call(this))) { +        define(tok, 'rest', this.input); +        define(tok, 'parsed', parsed); +        this.last = tok; +        return tok; +      } +    } +  }, + +  /** +   * Parse the given string. +   * @return {Array} +   */ + +  parse: function(input) { +    if (typeof input !== 'string') { +      throw new TypeError('expected a string'); +    } + +    this.init(this.options); +    this.orig = input; +    this.input = input; +    var self = this; + +    function parse() { +      // check input before calling `.next()` +      input = self.input; + +      // get the next AST ndoe +      var node = self.next(); +      if (node) { +        var prev = self.prev(); +        if (prev) { +          define(node, 'parent', prev); +          if (prev.nodes) { +            prev.nodes.push(node); +          } +        } + +        if (self.sets.hasOwnProperty(prev.type)) { +          self.currentType = prev.type; +        } +      } + +      // if we got here but input is not changed, throw an error +      if (self.input && input === self.input) { +        throw new Error('no parsers registered for: "' + self.input.slice(0, 5) + '"'); +      } +    } + +    while (this.input) parse(); +    if (this.stack.length && this.options.strict) { +      var node = this.stack.pop(); +      throw this.error('missing opening ' + node.type + ': "' + this.orig + '"'); +    } + +    var eos = this.eos(); +    var tok = this.prev(); +    if (tok.type !== 'eos') { +      this.ast.nodes.push(eos); +    } + +    return this.ast; +  } +}; + +/** + * Visit `node` with the given `fn` + */ + +function visit(node, fn) { +  if (!node.visited) { +    define(node, 'visited', true); +    return node.nodes ? mapVisit(node.nodes, fn) : fn(node); +  } +  return node; +} + +/** + * Map visit over array of `nodes`. + */ + +function mapVisit(nodes, fn) { +  var len = nodes.length; +  var idx = -1; +  while (++idx < len) { +    visit(nodes[idx], fn); +  } +} + +function hasOpen(node) { +  return node.nodes && node.nodes[0].type === (node.type + '.open'); +} + +function hasClose(node) { +  return node.nodes && utils.last(node.nodes).type === (node.type + '.close'); +} + +function hasDelims(node) { +  return hasOpen(node) && hasClose(node); +} + +/** + * Expose `Parser` + */ + +module.exports = Parser; diff --git a/node_modules/snapdragon/lib/position.js b/node_modules/snapdragon/lib/position.js new file mode 100644 index 0000000..c859696 --- /dev/null +++ b/node_modules/snapdragon/lib/position.js @@ -0,0 +1,14 @@ +'use strict'; + +var define = require('define-property'); + +/** + * Store position for a node + */ + +module.exports = function Position(start, parser) { +  this.start = start; +  this.end = { line: parser.line, column: parser.column }; +  define(this, 'content', parser.orig); +  define(this, 'source', parser.options.source); +}; diff --git a/node_modules/snapdragon/lib/source-maps.js b/node_modules/snapdragon/lib/source-maps.js new file mode 100644 index 0000000..d8e638b --- /dev/null +++ b/node_modules/snapdragon/lib/source-maps.js @@ -0,0 +1,145 @@ +'use strict'; + +var fs = require('fs'); +var path = require('path'); +var define = require('define-property'); +var utils = require('./utils'); + +/** + * Expose `mixin()`. + * This code is based on `source-maps-support.js` in reworkcss/css + * https://github.com/reworkcss/css/blob/master/lib/stringify/source-map-support.js + * Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> + */ + +module.exports = mixin; + +/** + * Mixin source map support into `compiler`. + * + * @param {Object} `compiler` + * @api public + */ + +function mixin(compiler) { +  define(compiler, '_comment', compiler.comment); +  compiler.map = new utils.SourceMap.SourceMapGenerator(); +  compiler.position = { line: 1, column: 1 }; +  compiler.content = {}; +  compiler.files = {}; + +  for (var key in exports) { +    define(compiler, key, exports[key]); +  } +} + +/** + * Update position. + * + * @param {String} str + */ + +exports.updatePosition = function(str) { +  var lines = str.match(/\n/g); +  if (lines) this.position.line += lines.length; +  var i = str.lastIndexOf('\n'); +  this.position.column = ~i ? str.length - i : this.position.column + str.length; +}; + +/** + * Emit `str` with `position`. + * + * @param {String} str + * @param {Object} [pos] + * @return {String} + */ + +exports.emit = function(str, node) { +  var position = node.position || {}; +  var source = position.source; +  if (source) { +    if (position.filepath) { +      source = utils.unixify(position.filepath); +    } + +    this.map.addMapping({ +      source: source, +      generated: { +        line: this.position.line, +        column: Math.max(this.position.column - 1, 0) +      }, +      original: { +        line: position.start.line, +        column: position.start.column - 1 +      } +    }); + +    if (position.content) { +      this.addContent(source, position); +    } +    if (position.filepath) { +      this.addFile(source, position); +    } + +    this.updatePosition(str); +    this.output += str; +  } +  return str; +}; + +/** + * Adds a file to the source map output if it has not already been added + * @param {String} `file` + * @param {Object} `pos` + */ + +exports.addFile = function(file, position) { +  if (typeof position.content !== 'string') return; +  if (Object.prototype.hasOwnProperty.call(this.files, file)) return; +  this.files[file] = position.content; +}; + +/** + * Adds a content source to the source map output if it has not already been added + * @param {String} `source` + * @param {Object} `position` + */ + +exports.addContent = function(source, position) { +  if (typeof position.content !== 'string') return; +  if (Object.prototype.hasOwnProperty.call(this.content, source)) return; +  this.map.setSourceContent(source, position.content); +}; + +/** + * Applies any original source maps to the output and embeds the source file + * contents in the source map. + */ + +exports.applySourceMaps = function() { +  Object.keys(this.files).forEach(function(file) { +    var content = this.files[file]; +    this.map.setSourceContent(file, content); + +    if (this.options.inputSourcemaps === true) { +      var originalMap = utils.sourceMapResolve.resolveSync(content, file, fs.readFileSync); +      if (originalMap) { +        var map = new utils.SourceMap.SourceMapConsumer(originalMap.map); +        var relativeTo = originalMap.sourcesRelativeTo; +        this.map.applySourceMap(map, file, utils.unixify(path.dirname(relativeTo))); +      } +    } +  }, this); +}; + +/** + * Process comments, drops sourceMap comments. + * @param {Object} node + */ + +exports.comment = function(node) { +  if (/^# sourceMappingURL=/.test(node.comment)) { +    return this.emit('', node.position); +  } +  return this._comment(node); +}; diff --git a/node_modules/snapdragon/lib/utils.js b/node_modules/snapdragon/lib/utils.js new file mode 100644 index 0000000..33f07e1 --- /dev/null +++ b/node_modules/snapdragon/lib/utils.js @@ -0,0 +1,48 @@ +'use strict'; + +/** + * Module dependencies + */ + +exports.extend = require('extend-shallow'); +exports.SourceMap = require('source-map'); +exports.sourceMapResolve = require('source-map-resolve'); + +/** + * Convert backslash in the given string to forward slashes + */ + +exports.unixify = function(fp) { +  return fp.split(/\\+/).join('/'); +}; + +/** + * Return true if `val` is a non-empty string + * + * @param {String} `str` + * @return {Boolean} + */ + +exports.isString = function(str) { +  return str && typeof str === 'string'; +}; + +/** + * Cast `val` to an array + * @return {Array} + */ + +exports.arrayify = function(val) { +  if (typeof val === 'string') return [val]; +  return val ? (Array.isArray(val) ? val : [val]) : []; +}; + +/** + * Get the last `n` element from the given `array` + * @param {Array} `array` + * @return {*} + */ + +exports.last = function(arr, n) { +  return arr[arr.length - (n || 1)]; +}; diff --git a/node_modules/snapdragon/node_modules/define-property/LICENSE b/node_modules/snapdragon/node_modules/define-property/LICENSE new file mode 100644 index 0000000..65f90ac --- /dev/null +++ b/node_modules/snapdragon/node_modules/define-property/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/snapdragon/node_modules/define-property/README.md b/node_modules/snapdragon/node_modules/define-property/README.md new file mode 100644 index 0000000..8cac698 --- /dev/null +++ b/node_modules/snapdragon/node_modules/define-property/README.md @@ -0,0 +1,77 @@ +# define-property [](http://badge.fury.io/js/define-property) + +> Define a non-enumerable property on an object. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i define-property --save +``` + +## Usage + +**Params** + +* `obj`: The object on which to define the property. +* `prop`: The name of the property to be defined or modified. +* `descriptor`: The descriptor for the property being defined or modified. + +```js +var define = require('define-property'); +var obj = {}; +define(obj, 'foo', function(val) { +  return val.toUpperCase(); +}); + +console.log(obj); +//=> {} + +console.log(obj.foo('bar')); +//=> 'BAR' +``` + +**get/set** + +```js +define(obj, 'foo', { +  get: function() {}, +  set: function() {} +}); +``` + +## Related projects + +* [delegate-object](https://www.npmjs.com/package/delegate-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/delegate-object) | [homepage](https://github.com/doowb/delegate-object) +* [forward-object](https://www.npmjs.com/package/forward-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/forward-object) | [homepage](https://github.com/doowb/forward-object) +* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep) +* [mixin-object](https://www.npmjs.com/package/mixin-object): Mixin the own and inherited properties of other objects onto the first object. Pass an… [more](https://www.npmjs.com/package/mixin-object) | [homepage](https://github.com/jonschlinkert/mixin-object) + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/define-property/issues/new). + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 31, 2015._ diff --git a/node_modules/snapdragon/node_modules/define-property/index.js b/node_modules/snapdragon/node_modules/define-property/index.js new file mode 100644 index 0000000..3e0e5e1 --- /dev/null +++ b/node_modules/snapdragon/node_modules/define-property/index.js @@ -0,0 +1,31 @@ +/*! + * define-property <https://github.com/jonschlinkert/define-property> + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var isDescriptor = require('is-descriptor'); + +module.exports = function defineProperty(obj, prop, val) { +  if (typeof obj !== 'object' && typeof obj !== 'function') { +    throw new TypeError('expected an object or function.'); +  } + +  if (typeof prop !== 'string') { +    throw new TypeError('expected `prop` to be a string.'); +  } + +  if (isDescriptor(val) && ('set' in val || 'get' in val)) { +    return Object.defineProperty(obj, prop, val); +  } + +  return Object.defineProperty(obj, prop, { +    configurable: true, +    enumerable: false, +    writable: true, +    value: val +  }); +}; diff --git a/node_modules/snapdragon/node_modules/define-property/package.json b/node_modules/snapdragon/node_modules/define-property/package.json new file mode 100644 index 0000000..233b4e0 --- /dev/null +++ b/node_modules/snapdragon/node_modules/define-property/package.json @@ -0,0 +1,86 @@ +{ +  "_args": [ +    [ +      "define-property@0.2.5", +      "/home/dstaesse/git/website" +    ] +  ], +  "_development": true, +  "_from": "define-property@0.2.5", +  "_id": "define-property@0.2.5", +  "_inBundle": false, +  "_integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", +  "_location": "/snapdragon/define-property", +  "_phantomChildren": {}, +  "_requested": { +    "type": "version", +    "registry": true, +    "raw": "define-property@0.2.5", +    "name": "define-property", +    "escapedName": "define-property", +    "rawSpec": "0.2.5", +    "saveSpec": null, +    "fetchSpec": "0.2.5" +  }, +  "_requiredBy": [ +    "/snapdragon" +  ], +  "_resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", +  "_spec": "0.2.5", +  "_where": "/home/dstaesse/git/website", +  "author": { +    "name": "Jon Schlinkert", +    "url": "https://github.com/jonschlinkert" +  }, +  "bugs": { +    "url": "https://github.com/jonschlinkert/define-property/issues" +  }, +  "dependencies": { +    "is-descriptor": "^0.1.0" +  }, +  "description": "Define a non-enumerable property on an object.", +  "devDependencies": { +    "mocha": "*", +    "should": "^7.0.4" +  }, +  "engines": { +    "node": ">=0.10.0" +  }, +  "files": [ +    "index.js" +  ], +  "homepage": "https://github.com/jonschlinkert/define-property", +  "keywords": [ +    "define", +    "define-property", +    "enumerable", +    "key", +    "non", +    "non-enumerable", +    "object", +    "prop", +    "property", +    "value" +  ], +  "license": "MIT", +  "main": "index.js", +  "name": "define-property", +  "repository": { +    "type": "git", +    "url": "git+https://github.com/jonschlinkert/define-property.git" +  }, +  "scripts": { +    "test": "mocha" +  }, +  "verb": { +    "related": { +      "list": [ +        "mixin-deep", +        "mixin-object", +        "delegate-object", +        "forward-object" +      ] +    } +  }, +  "version": "0.2.5" +} diff --git a/node_modules/snapdragon/node_modules/extend-shallow/LICENSE b/node_modules/snapdragon/node_modules/extend-shallow/LICENSE new file mode 100644 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/snapdragon/node_modules/extend-shallow/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/snapdragon/node_modules/extend-shallow/README.md b/node_modules/snapdragon/node_modules/extend-shallow/README.md new file mode 100644 index 0000000..cdc45d4 --- /dev/null +++ b/node_modules/snapdragon/node_modules/extend-shallow/README.md @@ -0,0 +1,61 @@ +# extend-shallow [](http://badge.fury.io/js/extend-shallow)  [](https://travis-ci.org/jonschlinkert/extend-shallow) + +> Extend an object with the properties of additional objects. node.js/javascript util. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i extend-shallow --save +``` + +## Usage + +```js +var extend = require('extend-shallow'); + +extend({a: 'b'}, {c: 'd'}) +//=> {a: 'b', c: 'd'} +``` + +Pass an empty object to shallow clone: + +```js +var obj = {}; +extend(obj, {a: 'b'}, {c: 'd'}) +//=> {a: 'b', c: 'd'} +``` + +## Related + +* [extend-shallow](https://github.com/jonschlinkert/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. +* [for-own](https://github.com/jonschlinkert/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own) +* [for-in](https://github.com/jonschlinkert/for-in): Iterate over the own and inherited enumerable properties of an objecte, and return an object… [more](https://github.com/jonschlinkert/for-in) +* [is-plain-object](https://github.com/jonschlinkert/is-plain-object): Returns true if an object was created by the `Object` constructor. +* [isobject](https://github.com/jonschlinkert/isobject): Returns true if the value is an object and not an array or null. +* [kind-of](https://github.com/jonschlinkert/kind-of): Get the native type of a value. + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on June 29, 2015._
\ No newline at end of file diff --git a/node_modules/snapdragon/node_modules/extend-shallow/index.js b/node_modules/snapdragon/node_modules/extend-shallow/index.js new file mode 100644 index 0000000..92a067f --- /dev/null +++ b/node_modules/snapdragon/node_modules/extend-shallow/index.js @@ -0,0 +1,33 @@ +'use strict'; + +var isObject = require('is-extendable'); + +module.exports = function extend(o/*, objects*/) { +  if (!isObject(o)) { o = {}; } + +  var len = arguments.length; +  for (var i = 1; i < len; i++) { +    var obj = arguments[i]; + +    if (isObject(obj)) { +      assign(o, obj); +    } +  } +  return o; +}; + +function assign(a, b) { +  for (var key in b) { +    if (hasOwn(b, key)) { +      a[key] = b[key]; +    } +  } +} + +/** + * Returns true if the given `key` is an own property of `obj`. + */ + +function hasOwn(obj, key) { +  return Object.prototype.hasOwnProperty.call(obj, key); +} diff --git a/node_modules/snapdragon/node_modules/extend-shallow/package.json b/node_modules/snapdragon/node_modules/extend-shallow/package.json new file mode 100644 index 0000000..191b0fc --- /dev/null +++ b/node_modules/snapdragon/node_modules/extend-shallow/package.json @@ -0,0 +1,91 @@ +{ +  "_args": [ +    [ +      "extend-shallow@2.0.1", +      "/home/dstaesse/git/website" +    ] +  ], +  "_development": true, +  "_from": "extend-shallow@2.0.1", +  "_id": "extend-shallow@2.0.1", +  "_inBundle": false, +  "_integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", +  "_location": "/snapdragon/extend-shallow", +  "_phantomChildren": {}, +  "_requested": { +    "type": "version", +    "registry": true, +    "raw": "extend-shallow@2.0.1", +    "name": "extend-shallow", +    "escapedName": "extend-shallow", +    "rawSpec": "2.0.1", +    "saveSpec": null, +    "fetchSpec": "2.0.1" +  }, +  "_requiredBy": [ +    "/snapdragon" +  ], +  "_resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", +  "_spec": "2.0.1", +  "_where": "/home/dstaesse/git/website", +  "author": { +    "name": "Jon Schlinkert", +    "url": "https://github.com/jonschlinkert" +  }, +  "bugs": { +    "url": "https://github.com/jonschlinkert/extend-shallow/issues" +  }, +  "dependencies": { +    "is-extendable": "^0.1.0" +  }, +  "description": "Extend an object with the properties of additional objects. node.js/javascript util.", +  "devDependencies": { +    "array-slice": "^0.2.3", +    "benchmarked": "^0.1.4", +    "chalk": "^1.0.0", +    "for-own": "^0.1.3", +    "glob": "^5.0.12", +    "is-plain-object": "^2.0.1", +    "kind-of": "^2.0.0", +    "minimist": "^1.1.1", +    "mocha": "^2.2.5", +    "should": "^7.0.1" +  }, +  "engines": { +    "node": ">=0.10.0" +  }, +  "files": [ +    "index.js" +  ], +  "homepage": "https://github.com/jonschlinkert/extend-shallow", +  "keywords": [ +    "assign", +    "extend", +    "javascript", +    "js", +    "keys", +    "merge", +    "obj", +    "object", +    "prop", +    "properties", +    "property", +    "props", +    "shallow", +    "util", +    "utility", +    "utils", +    "value" +  ], +  "license": "MIT", +  "main": "index.js", +  "name": "extend-shallow", +  "repository": { +    "type": "git", +    "url": "git+https://github.com/jonschlinkert/extend-shallow.git" +  }, +  "scripts": { +    "test": "mocha" +  }, +  "version": "2.0.1" +} diff --git a/node_modules/snapdragon/package.json b/node_modules/snapdragon/package.json new file mode 100644 index 0000000..bcbced6 --- /dev/null +++ b/node_modules/snapdragon/package.json @@ -0,0 +1,130 @@ +{ +  "_args": [ +    [ +      "snapdragon@0.8.2", +      "/home/dstaesse/git/website" +    ] +  ], +  "_development": true, +  "_from": "snapdragon@0.8.2", +  "_id": "snapdragon@0.8.2", +  "_inBundle": false, +  "_integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", +  "_location": "/snapdragon", +  "_phantomChildren": { +    "is-descriptor": "0.1.6", +    "is-extendable": "0.1.1" +  }, +  "_requested": { +    "type": "version", +    "registry": true, +    "raw": "snapdragon@0.8.2", +    "name": "snapdragon", +    "escapedName": "snapdragon", +    "rawSpec": "0.8.2", +    "saveSpec": null, +    "fetchSpec": "0.8.2" +  }, +  "_requiredBy": [ +    "/braces", +    "/expand-brackets", +    "/extglob", +    "/micromatch", +    "/nanomatch" +  ], +  "_resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", +  "_spec": "0.8.2", +  "_where": "/home/dstaesse/git/website", +  "author": { +    "name": "Jon Schlinkert", +    "url": "https://github.com/jonschlinkert" +  }, +  "bugs": { +    "url": "https://github.com/jonschlinkert/snapdragon/issues" +  }, +  "contributors": [ +    { +      "name": "Brian Woodward", +      "url": "https://twitter.com/doowb" +    }, +    { +      "name": "Edward Betts", +      "url": "http://edwardbetts.com" +    }, +    { +      "name": "Jon Schlinkert", +      "url": "http://twitter.com/jonschlinkert" +    } +  ], +  "dependencies": { +    "base": "^0.11.1", +    "debug": "^2.2.0", +    "define-property": "^0.2.5", +    "extend-shallow": "^2.0.1", +    "map-cache": "^0.2.2", +    "source-map": "^0.5.6", +    "source-map-resolve": "^0.5.0", +    "use": "^3.1.0" +  }, +  "description": "Fast, pluggable and easy-to-use parser-renderer factory.", +  "devDependencies": { +    "gulp": "^3.9.1", +    "gulp-eslint": "^3.0.1", +    "gulp-format-md": "^0.1.10", +    "gulp-istanbul": "^1.1.1", +    "gulp-mocha": "^3.0.1", +    "gulp-unused": "^0.2.0", +    "mocha": "^3.0.2" +  }, +  "engines": { +    "node": ">=0.10.0" +  }, +  "files": [ +    "index.js", +    "lib" +  ], +  "homepage": "https://github.com/jonschlinkert/snapdragon", +  "keywords": [ +    "lexer", +    "snapdragon" +  ], +  "license": "MIT", +  "main": "index.js", +  "name": "snapdragon", +  "repository": { +    "type": "git", +    "url": "git+https://github.com/jonschlinkert/snapdragon.git" +  }, +  "scripts": { +    "test": "mocha" +  }, +  "verb": { +    "toc": false, +    "layout": "default", +    "tasks": [ +      "readme" +    ], +    "plugins": [ +      "gulp-format-md" +    ], +    "related": { +      "description": "These libraries use snapdragon:", +      "list": [ +        "braces", +        "expand-brackets", +        "extglob", +        "micromatch" +      ] +    }, +    "reflinks": [ +      "css", +      "pug", +      "verb", +      "verb-generate-readme" +    ], +    "lint": { +      "reflinks": true +    } +  }, +  "version": "0.8.2" +}  | 
