UNPKG

documentdb-utils

Version:

Drop-in replacement+extensions for Azure's DocumentDB node.js client with auto-retry on 429 errors plus a lot more

157 lines (147 loc) 5.34 kB
// Generated by CoffeeScript 1.9.2 (function() { var DEFAULT_PREFIXES, _, combineTwoLevels, getDocOrAttachmentLink, getLink, getLinkArray, path, slice = [].slice, indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; path = require('path'); _ = require('lodash'); DEFAULT_PREFIXES = ['dbs', 'colls', 'sprocs']; combineTwoLevels = function(prefixArray, valuesArray) { var f, firstArray, firstPrefix, j, k, len, len1, links, s, secondArray, secondPrefix; if (prefixArray.length === 1) { return valuesArray[0]; } if (prefixArray.length === 0) { return void 0; } links = []; firstPrefix = prefixArray.shift(); firstArray = valuesArray.shift(); if (_.isString(firstArray)) { firstArray = [firstArray]; } secondPrefix = prefixArray.shift(); secondArray = valuesArray.shift(); if (_.isString(secondArray)) { secondArray = [secondArray]; } for (j = 0, len = firstArray.length; j < len; j++) { f = firstArray[j]; for (k = 0, len1 = secondArray.length; k < len1; k++) { s = secondArray[k]; if (firstPrefix != null) { links.push(firstPrefix + '/' + f + '/' + secondPrefix + '/' + s); } else { links.push(f + '/' + secondPrefix + '/' + s); } } } if (prefixArray.length > 0) { valuesArray.unshift(links); prefixArray.unshift(null); return combineTwoLevels(prefixArray, valuesArray); } else { return links; } }; getLinkArray = function() { var defaultPrefixes, defaultStillValid, firstValue, i, j, keys, len, list, parameter, parameters, prefixArray, ref, segments, value, valuesArray; parameters = 1 <= arguments.length ? slice.call(arguments, 0) : []; if (parameters[parameters.length - 1][0] === 'dbs') { defaultPrefixes = parameters.pop(); } else { defaultPrefixes = _.cloneDeep(DEFAULT_PREFIXES); } prefixArray = []; valuesArray = []; defaultStillValid = true; if (parameters.length === 1) { list = parameters[0]; if (!_.isArray(list)) { list = [list]; } return (function() { var j, len, results; results = []; for (j = 0, len = list.length; j < len; j++) { value = list[j]; results.push('dbs/' + value); } return results; })(); } else { for (i = j = 0, len = parameters.length; j < len; i = ++j) { parameter = parameters[i]; if (_.isPlainObject(parameter)) { keys = _.keys(parameter); if (keys.length > 1) { throw new Error("Parameters of type object must only have one key/value pair."); } defaultStillValid = false; prefixArray.push(keys[0]); valuesArray.push(_.values(parameter)[0]); } else { if (_.isString(parameter)) { parameter = [parameter]; } if (defaultStillValid) { firstValue = parameter[0] || parameter; firstValue = firstValue.toString(); if (firstValue.indexOf('/') < 0) { prefixArray.push(defaultPrefixes.shift()); } else { segments = firstValue.split('/'); while (ref = defaultPrefixes[0], indexOf.call(segments, ref) >= 0) { defaultPrefixes.shift(); } prefixArray.push(null); } if (_.isString(parameter)) { valuesArray.push([parameter]); } else if (_.isNumber(parameter)) { valuesArray.push([parameter.toString()]); } else if (_.isArray(parameter)) { valuesArray.push(parameter); } else { throw new Error("Parameters for getLinkArray() must be of type string, number, array, or object"); } } else { throw new Error('Cannot use default prefixes after non-default prefixes have been used'); } } } return combineTwoLevels(prefixArray, valuesArray); } }; getLink = function() { var links, parameters; parameters = 1 <= arguments.length ? slice.call(arguments, 0) : []; links = getLinkArray.apply(null, parameters); if (links.length > 1) { throw new Error("getLink was called with parameters that cause it to come back with more than one link"); } else if (links.length < 1) { return void 0; } else { return links[0]; } }; getDocOrAttachmentLink = function() { var defaultPrefixes, links, parameters; parameters = 1 <= arguments.length ? slice.call(arguments, 0) : []; defaultPrefixes = ['dbs', 'colls', 'docs', 'attachments']; links = getLinkArray.apply(null, slice.call(parameters).concat([defaultPrefixes])); if (links.length > 1) { throw new Error("getLink was called with parameters that cause it to come back with more than one link"); } else if (links.length < 1) { return void 0; } else { return links[0]; } }; module.exports = { getDocLink: getDocOrAttachmentLink, getAttachmentLink: getDocOrAttachmentLink, getLink: getLink, getLinkArray: getLinkArray }; }).call(this);