diff options
| author | Joel Kronqvist <joel.h.kronqvist@gmail.com> | 2022-03-05 19:02:27 +0200 | 
|---|---|---|
| committer | Joel Kronqvist <joel.h.kronqvist@gmail.com> | 2022-03-05 19:02:27 +0200 | 
| commit | 5d309ff52cd399a6b71968a6b9a70c8ac0b98981 (patch) | |
| tree | 360f7eb50f956e2367ef38fa1fc6ac7ac5258042 /node_modules/named-placeholders | |
| parent | b500a50f1b97d93c98b36ed9a980f8188d648147 (diff) | |
| download | LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.tar.gz LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.zip  | |
Added node_modules for the updating to work properly.
Diffstat (limited to 'node_modules/named-placeholders')
14 files changed, 1571 insertions, 0 deletions
diff --git a/node_modules/named-placeholders/Changelog.md b/node_modules/named-placeholders/Changelog.md new file mode 100644 index 0000000..ba73668 --- /dev/null +++ b/node_modules/named-placeholders/Changelog.md @@ -0,0 +1,6 @@ +1.1.0 - 21/09/2015
 +  - exception is now thrown if parameters are missing
 +
 +1.0.0 - 14/09/2015
 +  - added double-semicolon placeholders ( see https://github.com/sidorares/node-mysql2/issues/176 )
 +  - added toNumbered helper ( postgres style $1 parameters )
 diff --git a/node_modules/named-placeholders/LICENSE b/node_modules/named-placeholders/LICENSE new file mode 100644 index 0000000..cca0365 --- /dev/null +++ b/node_modules/named-placeholders/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT)
 +
 +Copyright (c) 2014 Andrey Sidorov
 +
 +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/named-placeholders/README.md b/node_modules/named-placeholders/README.md new file mode 100644 index 0000000..22d5e33 --- /dev/null +++ b/node_modules/named-placeholders/README.md @@ -0,0 +1,29 @@ +[](https://flattr.com/submit/auto?user_id=sidorares&url=https://github.com/sidorares/named-placeholders&title=named-placeholders&language=&tags=github&category=software)
 +
 +[](https://nodei.co/npm/named-placeholders/)
 +
 +[](http://travis-ci.org/sidorares/named-placeholders)
 +
 +# named-placeholders
 +
 +compiles "select foo where foo.id = :bar and foo.baz < :baz" into "select foo where foo.id = ? and foo.baz < ?" + ["bar", "baz"]
 +
 +## usage
 +
 +```sh
 +npm install named-placeholders
 +```
 +
 +see [this mysql2 discussion](https://github.com/sidorares/node-mysql2/issues/117)
 +
 +```js
 +var mysql = require('mysql');
 +var toUnnamed = require('named-placeholders')();
 +
 +var q = toUnnamed('select 1+:test', { test: 123});
 +mysql.createConnection().query(q[0], q[1]);
 +```
 +
 +## credits
 +
 +parser is based on @mscdex code of his excellent [node-mariasql](https://github.com/mscdex/node-mariasql) library
 diff --git a/node_modules/named-placeholders/index.js b/node_modules/named-placeholders/index.js new file mode 100644 index 0000000..779c9e2 --- /dev/null +++ b/node_modules/named-placeholders/index.js @@ -0,0 +1,181 @@ +'use strict';
 +
 +// based on code from Brian White @mscdex mariasql library - https://github.com/mscdex/node-mariasql/blob/master/lib/Client.js#L272-L332
 +// License: https://github.com/mscdex/node-mariasql/blob/master/LICENSE
 +
 +const RE_PARAM = /(?:\?)|(?::(\d+|(?:[a-zA-Z][a-zA-Z0-9_]*)))/g,
 +DQUOTE = 34,
 +SQUOTE = 39,
 +BSLASH = 92;
 +
 +function parse(query) {
 +  let ppos = RE_PARAM.exec(query);
 +  let curpos = 0;
 +  let start = 0;
 +  let end;
 +  const parts = [];
 +  let inQuote = false;
 +  let escape = false;
 +  let qchr;
 +  const tokens = [];
 +  let qcnt = 0;
 +  let lastTokenEndPos = 0;
 +  let i;
 +
 +  if (ppos) {
 +    do {
 +      for (i=curpos,end=ppos.index; i<end; ++i) {
 +        let chr = query.charCodeAt(i);
 +        if (chr === BSLASH)
 +        escape = !escape;
 +        else {
 +          if (escape) {
 +            escape = false;
 +            continue;
 +          }
 +          if (inQuote && chr === qchr) {
 +            if (query.charCodeAt(i + 1) === qchr) {
 +              // quote escaped via "" or ''
 +              ++i;
 +              continue;
 +            }
 +            inQuote = false;
 +          } else if (chr === DQUOTE || chr === SQUOTE) {
 +            inQuote = true;
 +            qchr = chr;
 +          }
 +        }
 +      }
 +      if (!inQuote) {
 +        parts.push(query.substring(start, end));
 +        tokens.push(ppos[0].length === 1 ? qcnt++ : ppos[1]);
 +        start = end + ppos[0].length;
 +        lastTokenEndPos = start;
 +      }
 +      curpos = end + ppos[0].length;
 +    } while (ppos = RE_PARAM.exec(query));
 +
 +    if (tokens.length) {
 +      if (curpos < query.length) {
 +        parts.push(query.substring(lastTokenEndPos));
 +      }
 +      return [parts, tokens];
 +    }
 +  }
 +  return [query];
 +};
 +
 +const EMPTY_LRU_FN = (key, value) => {};
 +
 +function createCompiler(config) {
 +  if (!config)
 +  config = {};
 +  if (!config.placeholder) {
 +    config.placeholder = '?';
 +  }
 +  let ncache = 100;
 +  let cache;
 +  if (typeof config.cache === 'number') {
 +    ncache = config.cache;
 +  }
 +  if (typeof config.cache === 'object') {
 +    cache = config.cache;
 +  }
 +  if (config.cache !== false && !cache) {
 +    cache = require('lru-cache')({ max: ncache, dispose: EMPTY_LRU_FN });
 +  }
 +
 +  function toArrayParams(tree, params) {
 +    const arr = [];
 +    if (tree.length == 1) {
 +      return [tree[0], []];
 +    }
 +
 +    if (typeof params == 'undefined')
 +      throw new Error('Named query contains placeholders, but parameters object is undefined');
 +
 +    const tokens = tree[1];
 +    for (let i=0; i < tokens.length; ++i) {
 +      arr.push(params[tokens[i]]);
 +    }
 +    return [tree[0], arr];
 +  }
 +
 +  function noTailingSemicolon(s) {
 +    if (s.slice(-1) == ':') {
 +      return s.slice(0, -1);
 +    }
 +    return s;
 +  }
 +
 +  function join(tree) {
 +    if (tree.length == 1) {
 +      return tree;
 +    }
 +
 +    let unnamed = noTailingSemicolon(tree[0][0]);
 +    for (let i=1; i < tree[0].length; ++i) {
 +      if (tree[0][i-1].slice(-1) == ':') {
 +        unnamed += config.placeholder;
 +      }
 +      unnamed += config.placeholder;
 +      unnamed += noTailingSemicolon(tree[0][i]);
 +    }
 +
 +    const last = tree[0][tree[0].length -1];
 +    if (tree[0].length == tree[1].length) {
 +      if (last.slice(-1) == ':') {
 +        unnamed += config.placeholder;
 +      }
 +      unnamed += config.placeholder;
 +    }
 +    return [unnamed, tree[1]];
 +  }
 +
 +  function compile(query, paramsObj) {
 +    let tree;
 +    if (cache && (tree = cache.get(query))) {
 +      return toArrayParams(tree, paramsObj)
 +    }
 +    tree = join(parse(query));
 +    if(cache) {
 +      cache.set(query, tree);
 +    }
 +    return toArrayParams(tree, paramsObj);
 +  }
 +
 +  compile.parse = parse;
 +  return compile;
 +}
 +
 +// named :one :two to postgres-style numbered $1 $2 $3
 +function toNumbered(q, params) {
 +  const tree = parse(q);
 +  const paramsArr = [];
 +  if (tree.length == 1) {
 +    return [tree[0], paramsArr];
 +  }
 +
 +  const pIndexes = {};
 +  let pLastIndex = 0;
 +  let qs = '';
 +  let varIndex;
 +  const varNames = [];
 +  for (let i=0; i < tree[0].length; ++i) {
 +    varIndex = pIndexes[tree[1][i]];
 +    if (!varIndex) {
 +      varIndex = ++pLastIndex;
 +      pIndexes[tree[1][i]] = varIndex;
 +    }
 +    if (tree[1][i]) {
 +      varNames[varIndex - 1] = tree[1][i];
 +      qs += tree[0][i] + '$' + varIndex;
 +    } else {
 +      qs += tree[0][i];
 +    }
 +  }
 +  return [qs, varNames.map(n => params[n])];
 +}
 +
 +module.exports = createCompiler;
 +module.exports.toNumbered = toNumbered;
 diff --git a/node_modules/named-placeholders/node_modules/lru-cache/LICENSE b/node_modules/named-placeholders/node_modules/lru-cache/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/node_modules/named-placeholders/node_modules/lru-cache/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/named-placeholders/node_modules/lru-cache/README.md b/node_modules/named-placeholders/node_modules/lru-cache/README.md new file mode 100644 index 0000000..d660dd5 --- /dev/null +++ b/node_modules/named-placeholders/node_modules/lru-cache/README.md @@ -0,0 +1,158 @@ +# lru cache + +A cache object that deletes the least-recently-used items. + +[](https://travis-ci.org/isaacs/node-lru-cache) [](https://coveralls.io/github/isaacs/node-lru-cache) + +## Installation: + +```javascript +npm install lru-cache --save +``` + +## Usage: + +```javascript +var LRU = require("lru-cache") +  , options = { max: 500 +              , length: function (n, key) { return n * 2 + key.length } +              , dispose: function (key, n) { n.close() } +              , maxAge: 1000 * 60 * 60 } +  , cache = LRU(options) +  , otherCache = LRU(50) // sets just the max size + +cache.set("key", "value") +cache.get("key") // "value" + +// non-string keys ARE fully supported +// but note that it must be THE SAME object, not +// just a JSON-equivalent object. +var someObject = { a: 1 } +cache.set(someObject, 'a value') +// Object keys are not toString()-ed +cache.set('[object Object]', 'a different value') +assert.equal(cache.get(someObject), 'a value') +// A similar object with same keys/values won't work, +// because it's a different object identity +assert.equal(cache.get({ a: 1 }), undefined) + +cache.reset()    // empty the cache +``` + +If you put more stuff in it, then items will fall out. + +If you try to put an oversized thing in it, then it'll fall out right +away. + +## Options + +* `max` The maximum size of the cache, checked by applying the length +  function to all values in the cache.  Not setting this is kind of +  silly, since that's the whole purpose of this lib, but it defaults +  to `Infinity`. +* `maxAge` Maximum age in ms.  Items are not pro-actively pruned out +  as they age, but if you try to get an item that is too old, it'll +  drop it and return undefined instead of giving it to you. +* `length` Function that is used to calculate the length of stored +  items.  If you're storing strings or buffers, then you probably want +  to do something like `function(n, key){return n.length}`.  The default is +  `function(){return 1}`, which is fine if you want to store `max` +  like-sized things.  The item is passed as the first argument, and +  the key is passed as the second argumnet. +* `dispose` Function that is called on items when they are dropped +  from the cache.  This can be handy if you want to close file +  descriptors or do other cleanup tasks when items are no longer +  accessible.  Called with `key, value`.  It's called *before* +  actually removing the item from the internal cache, so if you want +  to immediately put it back in, you'll have to do that in a +  `nextTick` or `setTimeout` callback or it won't do anything. +* `stale` By default, if you set a `maxAge`, it'll only actually pull +  stale items out of the cache when you `get(key)`.  (That is, it's +  not pre-emptively doing a `setTimeout` or anything.)  If you set +  `stale:true`, it'll return the stale value before deleting it.  If +  you don't set this, then it'll return `undefined` when you try to +  get a stale entry, as if it had already been deleted. +* `noDisposeOnSet` By default, if you set a `dispose()` method, then +  it'll be called whenever a `set()` operation overwrites an existing +  key.  If you set this option, `dispose()` will only be called when a +  key falls out of the cache, not when it is overwritten. + +## API + +* `set(key, value, maxAge)` +* `get(key) => value` + +    Both of these will update the "recently used"-ness of the key. +    They do what you think. `maxAge` is optional and overrides the +    cache `maxAge` option if provided. + +    If the key is not found, `get()` will return `undefined`. + +    The key and val can be any value. + +* `peek(key)` + +    Returns the key value (or `undefined` if not found) without +    updating the "recently used"-ness of the key. + +    (If you find yourself using this a lot, you *might* be using the +    wrong sort of data structure, but there are some use cases where +    it's handy.) + +* `del(key)` + +    Deletes a key out of the cache. + +* `reset()` + +    Clear the cache entirely, throwing away all values. + +* `has(key)` + +    Check if a key is in the cache, without updating the recent-ness +    or deleting it for being stale. + +* `forEach(function(value,key,cache), [thisp])` + +    Just like `Array.prototype.forEach`.  Iterates over all the keys +    in the cache, in order of recent-ness.  (Ie, more recently used +    items are iterated over first.) + +* `rforEach(function(value,key,cache), [thisp])` + +    The same as `cache.forEach(...)` but items are iterated over in +    reverse order.  (ie, less recently used items are iterated over +    first.) + +* `keys()` + +    Return an array of the keys in the cache. + +* `values()` + +    Return an array of the values in the cache. + +* `length` + +    Return total length of objects in cache taking into account +    `length` options function. + +* `itemCount` + +    Return total quantity of objects currently in cache. Note, that +    `stale` (see options) items are returned as part of this item +    count. + +* `dump()` + +    Return an array of the cache entries ready for serialization and usage +    with 'destinationCache.load(arr)`. + +* `load(cacheEntriesArray)` + +    Loads another cache entries array, obtained with `sourceCache.dump()`, +    into the cache. The destination cache is reset before loading new entries + +* `prune()` + +    Manually iterates over the entire cache proactively pruning old entries diff --git a/node_modules/named-placeholders/node_modules/lru-cache/index.js b/node_modules/named-placeholders/node_modules/lru-cache/index.js new file mode 100644 index 0000000..bd35b53 --- /dev/null +++ b/node_modules/named-placeholders/node_modules/lru-cache/index.js @@ -0,0 +1,468 @@ +'use strict' + +module.exports = LRUCache + +// This will be a proper iterable 'Map' in engines that support it, +// or a fakey-fake PseudoMap in older versions. +var Map = require('pseudomap') +var util = require('util') + +// A linked list to keep track of recently-used-ness +var Yallist = require('yallist') + +// use symbols if possible, otherwise just _props +var hasSymbol = typeof Symbol === 'function' && process.env._nodeLRUCacheForceNoSymbol !== '1' +var makeSymbol +if (hasSymbol) { +  makeSymbol = function (key) { +    return Symbol(key) +  } +} else { +  makeSymbol = function (key) { +    return '_' + key +  } +} + +var MAX = makeSymbol('max') +var LENGTH = makeSymbol('length') +var LENGTH_CALCULATOR = makeSymbol('lengthCalculator') +var ALLOW_STALE = makeSymbol('allowStale') +var MAX_AGE = makeSymbol('maxAge') +var DISPOSE = makeSymbol('dispose') +var NO_DISPOSE_ON_SET = makeSymbol('noDisposeOnSet') +var LRU_LIST = makeSymbol('lruList') +var CACHE = makeSymbol('cache') + +function naiveLength () { return 1 } + +// lruList is a yallist where the head is the youngest +// item, and the tail is the oldest.  the list contains the Hit +// objects as the entries. +// Each Hit object has a reference to its Yallist.Node.  This +// never changes. +// +// cache is a Map (or PseudoMap) that matches the keys to +// the Yallist.Node object. +function LRUCache (options) { +  if (!(this instanceof LRUCache)) { +    return new LRUCache(options) +  } + +  if (typeof options === 'number') { +    options = { max: options } +  } + +  if (!options) { +    options = {} +  } + +  var max = this[MAX] = options.max +  // Kind of weird to have a default max of Infinity, but oh well. +  if (!max || +      !(typeof max === 'number') || +      max <= 0) { +    this[MAX] = Infinity +  } + +  var lc = options.length || naiveLength +  if (typeof lc !== 'function') { +    lc = naiveLength +  } +  this[LENGTH_CALCULATOR] = lc + +  this[ALLOW_STALE] = options.stale || false +  this[MAX_AGE] = options.maxAge || 0 +  this[DISPOSE] = options.dispose +  this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false +  this.reset() +} + +// resize the cache when the max changes. +Object.defineProperty(LRUCache.prototype, 'max', { +  set: function (mL) { +    if (!mL || !(typeof mL === 'number') || mL <= 0) { +      mL = Infinity +    } +    this[MAX] = mL +    trim(this) +  }, +  get: function () { +    return this[MAX] +  }, +  enumerable: true +}) + +Object.defineProperty(LRUCache.prototype, 'allowStale', { +  set: function (allowStale) { +    this[ALLOW_STALE] = !!allowStale +  }, +  get: function () { +    return this[ALLOW_STALE] +  }, +  enumerable: true +}) + +Object.defineProperty(LRUCache.prototype, 'maxAge', { +  set: function (mA) { +    if (!mA || !(typeof mA === 'number') || mA < 0) { +      mA = 0 +    } +    this[MAX_AGE] = mA +    trim(this) +  }, +  get: function () { +    return this[MAX_AGE] +  }, +  enumerable: true +}) + +// resize the cache when the lengthCalculator changes. +Object.defineProperty(LRUCache.prototype, 'lengthCalculator', { +  set: function (lC) { +    if (typeof lC !== 'function') { +      lC = naiveLength +    } +    if (lC !== this[LENGTH_CALCULATOR]) { +      this[LENGTH_CALCULATOR] = lC +      this[LENGTH] = 0 +      this[LRU_LIST].forEach(function (hit) { +        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) +        this[LENGTH] += hit.length +      }, this) +    } +    trim(this) +  }, +  get: function () { return this[LENGTH_CALCULATOR] }, +  enumerable: true +}) + +Object.defineProperty(LRUCache.prototype, 'length', { +  get: function () { return this[LENGTH] }, +  enumerable: true +}) + +Object.defineProperty(LRUCache.prototype, 'itemCount', { +  get: function () { return this[LRU_LIST].length }, +  enumerable: true +}) + +LRUCache.prototype.rforEach = function (fn, thisp) { +  thisp = thisp || this +  for (var walker = this[LRU_LIST].tail; walker !== null;) { +    var prev = walker.prev +    forEachStep(this, fn, walker, thisp) +    walker = prev +  } +} + +function forEachStep (self, fn, node, thisp) { +  var hit = node.value +  if (isStale(self, hit)) { +    del(self, node) +    if (!self[ALLOW_STALE]) { +      hit = undefined +    } +  } +  if (hit) { +    fn.call(thisp, hit.value, hit.key, self) +  } +} + +LRUCache.prototype.forEach = function (fn, thisp) { +  thisp = thisp || this +  for (var walker = this[LRU_LIST].head; walker !== null;) { +    var next = walker.next +    forEachStep(this, fn, walker, thisp) +    walker = next +  } +} + +LRUCache.prototype.keys = function () { +  return this[LRU_LIST].toArray().map(function (k) { +    return k.key +  }, this) +} + +LRUCache.prototype.values = function () { +  return this[LRU_LIST].toArray().map(function (k) { +    return k.value +  }, this) +} + +LRUCache.prototype.reset = function () { +  if (this[DISPOSE] && +      this[LRU_LIST] && +      this[LRU_LIST].length) { +    this[LRU_LIST].forEach(function (hit) { +      this[DISPOSE](hit.key, hit.value) +    }, this) +  } + +  this[CACHE] = new Map() // hash of items by key +  this[LRU_LIST] = new Yallist() // list of items in order of use recency +  this[LENGTH] = 0 // length of items in the list +} + +LRUCache.prototype.dump = function () { +  return this[LRU_LIST].map(function (hit) { +    if (!isStale(this, hit)) { +      return { +        k: hit.key, +        v: hit.value, +        e: hit.now + (hit.maxAge || 0) +      } +    } +  }, this).toArray().filter(function (h) { +    return h +  }) +} + +LRUCache.prototype.dumpLru = function () { +  return this[LRU_LIST] +} + +/* istanbul ignore next */ +LRUCache.prototype.inspect = function (n, opts) { +  var str = 'LRUCache {' +  var extras = false + +  var as = this[ALLOW_STALE] +  if (as) { +    str += '\n  allowStale: true' +    extras = true +  } + +  var max = this[MAX] +  if (max && max !== Infinity) { +    if (extras) { +      str += ',' +    } +    str += '\n  max: ' + util.inspect(max, opts) +    extras = true +  } + +  var maxAge = this[MAX_AGE] +  if (maxAge) { +    if (extras) { +      str += ',' +    } +    str += '\n  maxAge: ' + util.inspect(maxAge, opts) +    extras = true +  } + +  var lc = this[LENGTH_CALCULATOR] +  if (lc && lc !== naiveLength) { +    if (extras) { +      str += ',' +    } +    str += '\n  length: ' + util.inspect(this[LENGTH], opts) +    extras = true +  } + +  var didFirst = false +  this[LRU_LIST].forEach(function (item) { +    if (didFirst) { +      str += ',\n  ' +    } else { +      if (extras) { +        str += ',\n' +      } +      didFirst = true +      str += '\n  ' +    } +    var key = util.inspect(item.key).split('\n').join('\n  ') +    var val = { value: item.value } +    if (item.maxAge !== maxAge) { +      val.maxAge = item.maxAge +    } +    if (lc !== naiveLength) { +      val.length = item.length +    } +    if (isStale(this, item)) { +      val.stale = true +    } + +    val = util.inspect(val, opts).split('\n').join('\n  ') +    str += key + ' => ' + val +  }) + +  if (didFirst || extras) { +    str += '\n' +  } +  str += '}' + +  return str +} + +LRUCache.prototype.set = function (key, value, maxAge) { +  maxAge = maxAge || this[MAX_AGE] + +  var now = maxAge ? Date.now() : 0 +  var len = this[LENGTH_CALCULATOR](value, key) + +  if (this[CACHE].has(key)) { +    if (len > this[MAX]) { +      del(this, this[CACHE].get(key)) +      return false +    } + +    var node = this[CACHE].get(key) +    var item = node.value + +    // dispose of the old one before overwriting +    // split out into 2 ifs for better coverage tracking +    if (this[DISPOSE]) { +      if (!this[NO_DISPOSE_ON_SET]) { +        this[DISPOSE](key, item.value) +      } +    } + +    item.now = now +    item.maxAge = maxAge +    item.value = value +    this[LENGTH] += len - item.length +    item.length = len +    this.get(key) +    trim(this) +    return true +  } + +  var hit = new Entry(key, value, len, now, maxAge) + +  // oversized objects fall out of cache automatically. +  if (hit.length > this[MAX]) { +    if (this[DISPOSE]) { +      this[DISPOSE](key, value) +    } +    return false +  } + +  this[LENGTH] += hit.length +  this[LRU_LIST].unshift(hit) +  this[CACHE].set(key, this[LRU_LIST].head) +  trim(this) +  return true +} + +LRUCache.prototype.has = function (key) { +  if (!this[CACHE].has(key)) return false +  var hit = this[CACHE].get(key).value +  if (isStale(this, hit)) { +    return false +  } +  return true +} + +LRUCache.prototype.get = function (key) { +  return get(this, key, true) +} + +LRUCache.prototype.peek = function (key) { +  return get(this, key, false) +} + +LRUCache.prototype.pop = function () { +  var node = this[LRU_LIST].tail +  if (!node) return null +  del(this, node) +  return node.value +} + +LRUCache.prototype.del = function (key) { +  del(this, this[CACHE].get(key)) +} + +LRUCache.prototype.load = function (arr) { +  // reset the cache +  this.reset() + +  var now = Date.now() +  // A previous serialized cache has the most recent items first +  for (var l = arr.length - 1; l >= 0; l--) { +    var hit = arr[l] +    var expiresAt = hit.e || 0 +    if (expiresAt === 0) { +      // the item was created without expiration in a non aged cache +      this.set(hit.k, hit.v) +    } else { +      var maxAge = expiresAt - now +      // dont add already expired items +      if (maxAge > 0) { +        this.set(hit.k, hit.v, maxAge) +      } +    } +  } +} + +LRUCache.prototype.prune = function () { +  var self = this +  this[CACHE].forEach(function (value, key) { +    get(self, key, false) +  }) +} + +function get (self, key, doUse) { +  var node = self[CACHE].get(key) +  if (node) { +    var hit = node.value +    if (isStale(self, hit)) { +      del(self, node) +      if (!self[ALLOW_STALE]) hit = undefined +    } else { +      if (doUse) { +        self[LRU_LIST].unshiftNode(node) +      } +    } +    if (hit) hit = hit.value +  } +  return hit +} + +function isStale (self, hit) { +  if (!hit || (!hit.maxAge && !self[MAX_AGE])) { +    return false +  } +  var stale = false +  var diff = Date.now() - hit.now +  if (hit.maxAge) { +    stale = diff > hit.maxAge +  } else { +    stale = self[MAX_AGE] && (diff > self[MAX_AGE]) +  } +  return stale +} + +function trim (self) { +  if (self[LENGTH] > self[MAX]) { +    for (var walker = self[LRU_LIST].tail; +      self[LENGTH] > self[MAX] && walker !== null;) { +      // We know that we're about to delete this one, and also +      // what the next least recently used key will be, so just +      // go ahead and set it now. +      var prev = walker.prev +      del(self, walker) +      walker = prev +    } +  } +} + +function del (self, node) { +  if (node) { +    var hit = node.value +    if (self[DISPOSE]) { +      self[DISPOSE](hit.key, hit.value) +    } +    self[LENGTH] -= hit.length +    self[CACHE].delete(hit.key) +    self[LRU_LIST].removeNode(node) +  } +} + +// classy, since V8 prefers predictable objects. +function Entry (key, value, length, now, maxAge) { +  this.key = key +  this.value = value +  this.length = length +  this.now = now +  this.maxAge = maxAge || 0 +} diff --git a/node_modules/named-placeholders/node_modules/lru-cache/package.json b/node_modules/named-placeholders/node_modules/lru-cache/package.json new file mode 100644 index 0000000..bf7a06d --- /dev/null +++ b/node_modules/named-placeholders/node_modules/lru-cache/package.json @@ -0,0 +1,36 @@ +{ +  "name": "lru-cache", +  "description": "A cache object that deletes the least-recently-used items.", +  "version": "4.1.5", +  "author": "Isaac Z. Schlueter <i@izs.me>", +  "keywords": [ +    "mru", +    "lru", +    "cache" +  ], +  "scripts": { +    "test": "tap test/*.js --100 -J", +    "snap": "TAP_SNAPSHOT=1 tap test/*.js -J", +    "posttest": "standard test/*.js index.js", +    "coveragerport": "tap --coverage-report=html", +    "lintfix": "standard --fix test/*.js index.js", +    "preversion": "npm test", +    "postversion": "npm publish --tag=legacy", +    "postpublish": "git push origin --all; git push origin --tags" +  }, +  "main": "index.js", +  "repository": "git://github.com/isaacs/node-lru-cache.git", +  "devDependencies": { +    "benchmark": "^2.1.4", +    "standard": "^12.0.1", +    "tap": "^12.1.0" +  }, +  "license": "ISC", +  "dependencies": { +    "pseudomap": "^1.0.2", +    "yallist": "^2.1.2" +  }, +  "files": [ +    "index.js" +  ] +} diff --git a/node_modules/named-placeholders/node_modules/yallist/LICENSE b/node_modules/named-placeholders/node_modules/yallist/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/node_modules/named-placeholders/node_modules/yallist/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/named-placeholders/node_modules/yallist/README.md b/node_modules/named-placeholders/node_modules/yallist/README.md new file mode 100644 index 0000000..f586101 --- /dev/null +++ b/node_modules/named-placeholders/node_modules/yallist/README.md @@ -0,0 +1,204 @@ +# yallist + +Yet Another Linked List + +There are many doubly-linked list implementations like it, but this +one is mine. + +For when an array would be too big, and a Map can't be iterated in +reverse order. + + +[](https://travis-ci.org/isaacs/yallist) [](https://coveralls.io/github/isaacs/yallist) + +## basic usage + +```javascript +var yallist = require('yallist') +var myList = yallist.create([1, 2, 3]) +myList.push('foo') +myList.unshift('bar') +// of course pop() and shift() are there, too +console.log(myList.toArray()) // ['bar', 1, 2, 3, 'foo'] +myList.forEach(function (k) { +  // walk the list head to tail +}) +myList.forEachReverse(function (k, index, list) { +  // walk the list tail to head +}) +var myDoubledList = myList.map(function (k) { +  return k + k +}) +// now myDoubledList contains ['barbar', 2, 4, 6, 'foofoo'] +// mapReverse is also a thing +var myDoubledListReverse = myList.mapReverse(function (k) { +  return k + k +}) // ['foofoo', 6, 4, 2, 'barbar'] + +var reduced = myList.reduce(function (set, entry) { +  set += entry +  return set +}, 'start') +console.log(reduced) // 'startfoo123bar' +``` + +## api + +The whole API is considered "public". + +Functions with the same name as an Array method work more or less the +same way. + +There's reverse versions of most things because that's the point. + +### Yallist + +Default export, the class that holds and manages a list. + +Call it with either a forEach-able (like an array) or a set of +arguments, to initialize the list. + +The Array-ish methods all act like you'd expect.  No magic length, +though, so if you change that it won't automatically prune or add +empty spots. + +### Yallist.create(..) + +Alias for Yallist function.  Some people like factories. + +#### yallist.head + +The first node in the list + +#### yallist.tail + +The last node in the list + +#### yallist.length + +The number of nodes in the list.  (Change this at your peril.  It is +not magic like Array length.) + +#### yallist.toArray() + +Convert the list to an array. + +#### yallist.forEach(fn, [thisp]) + +Call a function on each item in the list. + +#### yallist.forEachReverse(fn, [thisp]) + +Call a function on each item in the list, in reverse order. + +#### yallist.get(n) + +Get the data at position `n` in the list.  If you use this a lot, +probably better off just using an Array. + +#### yallist.getReverse(n) + +Get the data at position `n`, counting from the tail. + +#### yallist.map(fn, thisp) + +Create a new Yallist with the result of calling the function on each +item. + +#### yallist.mapReverse(fn, thisp) + +Same as `map`, but in reverse. + +#### yallist.pop() + +Get the data from the list tail, and remove the tail from the list. + +#### yallist.push(item, ...) + +Insert one or more items to the tail of the list. + +#### yallist.reduce(fn, initialValue) + +Like Array.reduce. + +#### yallist.reduceReverse + +Like Array.reduce, but in reverse. + +#### yallist.reverse + +Reverse the list in place. + +#### yallist.shift() + +Get the data from the list head, and remove the head from the list. + +#### yallist.slice([from], [to]) + +Just like Array.slice, but returns a new Yallist. + +#### yallist.sliceReverse([from], [to]) + +Just like yallist.slice, but the result is returned in reverse. + +#### yallist.toArray() + +Create an array representation of the list. + +#### yallist.toArrayReverse() + +Create a reversed array representation of the list. + +#### yallist.unshift(item, ...) + +Insert one or more items to the head of the list. + +#### yallist.unshiftNode(node) + +Move a Node object to the front of the list.  (That is, pull it out of +wherever it lives, and make it the new head.) + +If the node belongs to a different list, then that list will remove it +first. + +#### yallist.pushNode(node) + +Move a Node object to the end of the list.  (That is, pull it out of +wherever it lives, and make it the new tail.) + +If the node belongs to a list already, then that list will remove it +first. + +#### yallist.removeNode(node) + +Remove a node from the list, preserving referential integrity of head +and tail and other nodes. + +Will throw an error if you try to have a list remove a node that +doesn't belong to it. + +### Yallist.Node + +The class that holds the data and is actually the list. + +Call with `var n = new Node(value, previousNode, nextNode)` + +Note that if you do direct operations on Nodes themselves, it's very +easy to get into weird states where the list is broken.  Be careful :) + +#### node.next + +The next node in the list. + +#### node.prev + +The previous node in the list. + +#### node.value + +The data the node contains. + +#### node.list + +The list to which this node belongs.  (Null if it does not belong to +any list.) diff --git a/node_modules/named-placeholders/node_modules/yallist/iterator.js b/node_modules/named-placeholders/node_modules/yallist/iterator.js new file mode 100644 index 0000000..4a15bf2 --- /dev/null +++ b/node_modules/named-placeholders/node_modules/yallist/iterator.js @@ -0,0 +1,7 @@ +var Yallist = require('./yallist.js') + +Yallist.prototype[Symbol.iterator] = function* () { +  for (let walker = this.head; walker; walker = walker.next) { +    yield walker.value +  } +} diff --git a/node_modules/named-placeholders/node_modules/yallist/package.json b/node_modules/named-placeholders/node_modules/yallist/package.json new file mode 100644 index 0000000..17a13d1 --- /dev/null +++ b/node_modules/named-placeholders/node_modules/yallist/package.json @@ -0,0 +1,29 @@ +{ +  "name": "yallist", +  "version": "2.1.2", +  "description": "Yet Another Linked List", +  "main": "yallist.js", +  "directories": { +    "test": "test" +  }, +  "files": [ +    "yallist.js", +    "iterator.js" +  ], +  "dependencies": {}, +  "devDependencies": { +    "tap": "^10.3.0" +  }, +  "scripts": { +    "test": "tap test/*.js --100", +    "preversion": "npm test", +    "postversion": "npm publish", +    "postpublish": "git push origin --all; git push origin --tags" +  }, +  "repository": { +    "type": "git", +    "url": "git+https://github.com/isaacs/yallist.git" +  }, +  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)", +  "license": "ISC" +} diff --git a/node_modules/named-placeholders/node_modules/yallist/yallist.js b/node_modules/named-placeholders/node_modules/yallist/yallist.js new file mode 100644 index 0000000..518d233 --- /dev/null +++ b/node_modules/named-placeholders/node_modules/yallist/yallist.js @@ -0,0 +1,370 @@ +module.exports = Yallist + +Yallist.Node = Node +Yallist.create = Yallist + +function Yallist (list) { +  var self = this +  if (!(self instanceof Yallist)) { +    self = new Yallist() +  } + +  self.tail = null +  self.head = null +  self.length = 0 + +  if (list && typeof list.forEach === 'function') { +    list.forEach(function (item) { +      self.push(item) +    }) +  } else if (arguments.length > 0) { +    for (var i = 0, l = arguments.length; i < l; i++) { +      self.push(arguments[i]) +    } +  } + +  return self +} + +Yallist.prototype.removeNode = function (node) { +  if (node.list !== this) { +    throw new Error('removing node which does not belong to this list') +  } + +  var next = node.next +  var prev = node.prev + +  if (next) { +    next.prev = prev +  } + +  if (prev) { +    prev.next = next +  } + +  if (node === this.head) { +    this.head = next +  } +  if (node === this.tail) { +    this.tail = prev +  } + +  node.list.length-- +  node.next = null +  node.prev = null +  node.list = null +} + +Yallist.prototype.unshiftNode = function (node) { +  if (node === this.head) { +    return +  } + +  if (node.list) { +    node.list.removeNode(node) +  } + +  var head = this.head +  node.list = this +  node.next = head +  if (head) { +    head.prev = node +  } + +  this.head = node +  if (!this.tail) { +    this.tail = node +  } +  this.length++ +} + +Yallist.prototype.pushNode = function (node) { +  if (node === this.tail) { +    return +  } + +  if (node.list) { +    node.list.removeNode(node) +  } + +  var tail = this.tail +  node.list = this +  node.prev = tail +  if (tail) { +    tail.next = node +  } + +  this.tail = node +  if (!this.head) { +    this.head = node +  } +  this.length++ +} + +Yallist.prototype.push = function () { +  for (var i = 0, l = arguments.length; i < l; i++) { +    push(this, arguments[i]) +  } +  return this.length +} + +Yallist.prototype.unshift = function () { +  for (var i = 0, l = arguments.length; i < l; i++) { +    unshift(this, arguments[i]) +  } +  return this.length +} + +Yallist.prototype.pop = function () { +  if (!this.tail) { +    return undefined +  } + +  var res = this.tail.value +  this.tail = this.tail.prev +  if (this.tail) { +    this.tail.next = null +  } else { +    this.head = null +  } +  this.length-- +  return res +} + +Yallist.prototype.shift = function () { +  if (!this.head) { +    return undefined +  } + +  var res = this.head.value +  this.head = this.head.next +  if (this.head) { +    this.head.prev = null +  } else { +    this.tail = null +  } +  this.length-- +  return res +} + +Yallist.prototype.forEach = function (fn, thisp) { +  thisp = thisp || this +  for (var walker = this.head, i = 0; walker !== null; i++) { +    fn.call(thisp, walker.value, i, this) +    walker = walker.next +  } +} + +Yallist.prototype.forEachReverse = function (fn, thisp) { +  thisp = thisp || this +  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { +    fn.call(thisp, walker.value, i, this) +    walker = walker.prev +  } +} + +Yallist.prototype.get = function (n) { +  for (var i = 0, walker = this.head; walker !== null && i < n; i++) { +    // abort out of the list early if we hit a cycle +    walker = walker.next +  } +  if (i === n && walker !== null) { +    return walker.value +  } +} + +Yallist.prototype.getReverse = function (n) { +  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { +    // abort out of the list early if we hit a cycle +    walker = walker.prev +  } +  if (i === n && walker !== null) { +    return walker.value +  } +} + +Yallist.prototype.map = function (fn, thisp) { +  thisp = thisp || this +  var res = new Yallist() +  for (var walker = this.head; walker !== null;) { +    res.push(fn.call(thisp, walker.value, this)) +    walker = walker.next +  } +  return res +} + +Yallist.prototype.mapReverse = function (fn, thisp) { +  thisp = thisp || this +  var res = new Yallist() +  for (var walker = this.tail; walker !== null;) { +    res.push(fn.call(thisp, walker.value, this)) +    walker = walker.prev +  } +  return res +} + +Yallist.prototype.reduce = function (fn, initial) { +  var acc +  var walker = this.head +  if (arguments.length > 1) { +    acc = initial +  } else if (this.head) { +    walker = this.head.next +    acc = this.head.value +  } else { +    throw new TypeError('Reduce of empty list with no initial value') +  } + +  for (var i = 0; walker !== null; i++) { +    acc = fn(acc, walker.value, i) +    walker = walker.next +  } + +  return acc +} + +Yallist.prototype.reduceReverse = function (fn, initial) { +  var acc +  var walker = this.tail +  if (arguments.length > 1) { +    acc = initial +  } else if (this.tail) { +    walker = this.tail.prev +    acc = this.tail.value +  } else { +    throw new TypeError('Reduce of empty list with no initial value') +  } + +  for (var i = this.length - 1; walker !== null; i--) { +    acc = fn(acc, walker.value, i) +    walker = walker.prev +  } + +  return acc +} + +Yallist.prototype.toArray = function () { +  var arr = new Array(this.length) +  for (var i = 0, walker = this.head; walker !== null; i++) { +    arr[i] = walker.value +    walker = walker.next +  } +  return arr +} + +Yallist.prototype.toArrayReverse = function () { +  var arr = new Array(this.length) +  for (var i = 0, walker = this.tail; walker !== null; i++) { +    arr[i] = walker.value +    walker = walker.prev +  } +  return arr +} + +Yallist.prototype.slice = function (from, to) { +  to = to || this.length +  if (to < 0) { +    to += this.length +  } +  from = from || 0 +  if (from < 0) { +    from += this.length +  } +  var ret = new Yallist() +  if (to < from || to < 0) { +    return ret +  } +  if (from < 0) { +    from = 0 +  } +  if (to > this.length) { +    to = this.length +  } +  for (var i = 0, walker = this.head; walker !== null && i < from; i++) { +    walker = walker.next +  } +  for (; walker !== null && i < to; i++, walker = walker.next) { +    ret.push(walker.value) +  } +  return ret +} + +Yallist.prototype.sliceReverse = function (from, to) { +  to = to || this.length +  if (to < 0) { +    to += this.length +  } +  from = from || 0 +  if (from < 0) { +    from += this.length +  } +  var ret = new Yallist() +  if (to < from || to < 0) { +    return ret +  } +  if (from < 0) { +    from = 0 +  } +  if (to > this.length) { +    to = this.length +  } +  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { +    walker = walker.prev +  } +  for (; walker !== null && i > from; i--, walker = walker.prev) { +    ret.push(walker.value) +  } +  return ret +} + +Yallist.prototype.reverse = function () { +  var head = this.head +  var tail = this.tail +  for (var walker = head; walker !== null; walker = walker.prev) { +    var p = walker.prev +    walker.prev = walker.next +    walker.next = p +  } +  this.head = tail +  this.tail = head +  return this +} + +function push (self, item) { +  self.tail = new Node(item, self.tail, null, self) +  if (!self.head) { +    self.head = self.tail +  } +  self.length++ +} + +function unshift (self, item) { +  self.head = new Node(item, null, self.head, self) +  if (!self.tail) { +    self.tail = self.head +  } +  self.length++ +} + +function Node (value, prev, next, list) { +  if (!(this instanceof Node)) { +    return new Node(value, prev, next, list) +  } + +  this.list = list +  this.value = value + +  if (prev) { +    prev.next = this +    this.prev = prev +  } else { +    this.prev = null +  } + +  if (next) { +    next.prev = this +    this.next = next +  } else { +    this.next = null +  } +} diff --git a/node_modules/named-placeholders/package.json b/node_modules/named-placeholders/package.json new file mode 100644 index 0000000..977788d --- /dev/null +++ b/node_modules/named-placeholders/package.json @@ -0,0 +1,32 @@ +{
 +  "name": "named-placeholders",
 +  "version": "1.1.2",
 +  "description": "sql named placeholders to unnamed compiler",
 +  "main": "index.js",
 +  "scripts": {
 +    "test": "mocha"
 +  },
 +  "repository": {
 +    "type": "git",
 +    "url": "https://github.com/sidorares/named-placeholders"
 +  },
 +  "keywords": [
 +    "sql",
 +    "pdo",
 +    "named",
 +    "placeholders"
 +  ],
 +  "engines": {
 +    "node": ">=6.0.0"
 +  },
 +  "author": "Andrey Sidorov <sidorares@yandex.com>",
 +  "files": [],
 +  "license": "MIT",
 +  "devDependencies": {
 +    "mocha": "^5.2.0",
 +    "should": "^13.2.3"
 +  },
 +  "dependencies": {
 +    "lru-cache": "^4.1.3"
 +  }
 +}
  | 
