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
JavaScript
// 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);