documentdb
Advanced tools
Comparing version 1.13.0 to 1.14.0
@@ -27,2 +27,3 @@ /* | ||
module.exports = function (grunt) { | ||
grunt.loadNpmTasks('grunt-mocha-test'); | ||
require("time-grunt")(grunt); | ||
@@ -33,17 +34,44 @@ // Load grunt tasks automatically | ||
grunt.initConfig({ | ||
eslint: { | ||
src: [ | ||
"lib/*.js", | ||
"lib/hash/*.js", | ||
"lib/queryExecutionContext/*.js", | ||
"lib/routing/*.js", | ||
"test/*.js"], | ||
options: { | ||
configFile: ".eslintrc" | ||
} | ||
eslint: { | ||
src: [ | ||
"lib/*.js", | ||
"lib/hash/*.js", | ||
"lib/queryExecutionContext/*.js", | ||
"lib/routing/*.js", | ||
"test/*.js"], | ||
options: { | ||
configFile: ".eslintrc" | ||
} | ||
}, | ||
mochaTest: { | ||
test: { | ||
options: { | ||
reporter: 'mocha-multi-reporters', | ||
reporterOptions: { | ||
"reporterEnabled": "mocha-junit-reporter, tap", | ||
"mochaJunitReporterReporterOptions": { | ||
"mochaFile": "TEST-nodejs.xml" | ||
} | ||
}, | ||
// Require blanket wrapper here to instrument other required | ||
// files on the fly. | ||
// | ||
// NB. We cannot require blanket directly as it | ||
// detects that we are not running mocha cli and loads differently. | ||
// | ||
// NNB. As mocha is 'clever' enough to only run the tests once for | ||
// each file the following coverage task does not actually run any | ||
// tests which is why the coverage instrumentation has to be done here | ||
// require: 'coverage/blanket' | ||
timeout: 20000, | ||
}, | ||
src: ['test/**/*.js'] | ||
} | ||
} | ||
}); | ||
grunt.registerTask("lint", ["eslint"]); | ||
grunt.registerTask("default", "lint"); | ||
}; | ||
// TODO: we should have lint enabled | ||
// grunt.registerTask("default", "lint"); | ||
grunt.registerTask('tests', 'mochaTest'); | ||
}; |
@@ -41,3 +41,3 @@ /* | ||
}, | ||
HttpMethods: { | ||
@@ -51,3 +51,3 @@ Get: "GET", | ||
}, | ||
HttpHeaders: { | ||
@@ -100,11 +100,11 @@ Authorization: "authorization", | ||
Referer: "referer", | ||
// Query | ||
Query: "x-ms-documentdb-query", | ||
IsQuery: "x-ms-documentdb-isquery", | ||
// Our custom DocumentDB headers | ||
Continuation: "x-ms-continuation", | ||
PageSize: "x-ms-max-item-count", | ||
// Request sender generated. Simply echoed by backend. | ||
@@ -132,3 +132,9 @@ ActivityId: "x-ms-activity-id", | ||
Version: "x-ms-version", | ||
//Owner name | ||
OwnerFullName: "x-ms-alt-content-path", | ||
// Owner ID used for name based request in session token. | ||
OwnerId: "x-ms-content-path", | ||
// Partition Key | ||
@@ -148,3 +154,3 @@ PartitionKey: "x-ms-documentdb-partitionkey", | ||
MaxResourceQuota: "x-ms-resource-quota", | ||
// Offer header | ||
@@ -162,3 +168,3 @@ OfferType: "x-ms-offer-type", | ||
LazyIndexingProgress: "x-ms-documentdb-collection-lazy-indexing-progress", | ||
// Upsert header | ||
@@ -174,3 +180,3 @@ IsUpsert: "x-ms-documentdb-is-upsert", | ||
}, | ||
// GlobalDB related constants | ||
@@ -181,11 +187,11 @@ WritableLocations: 'writableLocations', | ||
DatabaseAccountEndpoint: 'databaseAccountEndpoint', | ||
// Client generated retry count response header | ||
ThrottleRetryCount: "x-ms-throttle-retry-count", | ||
ThrottleRetryWaitTimeInMs: "x-ms-throttle-retry-wait-time-ms", | ||
CurrentVersion: "2017-01-19", | ||
CurrentVersion: "2017-11-15", | ||
SDKName: "documentdb-nodejs-sdk", | ||
SDKVersion: "1.13.0", | ||
SDKVersion: "1.14.0", | ||
@@ -198,7 +204,7 @@ DefaultPrecisions: { | ||
}, | ||
ConsistentHashRing: { | ||
DefaultVirtualNodesPerCollection: 128 | ||
}, | ||
RegularExpressions: { | ||
@@ -227,3 +233,13 @@ TrimLeftSlashes: new RegExp("^[/]+"), | ||
SchemasPathSegment: "schemas" | ||
} | ||
}, | ||
OperationTypes: { | ||
Create: "create", | ||
Replace: "replace", | ||
Upsert: "upsert", | ||
Delete: "delete", | ||
Read: "read", | ||
Query: "query", | ||
}, | ||
}; | ||
@@ -230,0 +246,0 @@ |
@@ -57,3 +57,3 @@ /* | ||
function createRequestObject(connectionPolicy, requestOptions, callback){ | ||
function createRequestObject(connectionPolicy, requestOptions, callback) { | ||
function onTimeout() { | ||
@@ -64,4 +64,4 @@ httpsRequest.abort(); | ||
var isMedia = (requestOptions.path.indexOf("//media") === 0); | ||
var httpsRequest = https.request(requestOptions, function(response) { | ||
var httpsRequest = https.request(requestOptions, function (response) { | ||
// In case of media response, return the stream to the user and the user will need to handle reading the stream. | ||
@@ -79,9 +79,9 @@ if (isMedia && connectionPolicy.MediaReadMode === Documents.MediaReadMode.Streamed) { | ||
response.on("data", function(chunk) { | ||
response.on("data", function (chunk) { | ||
data += chunk; | ||
}); | ||
response.on("end", function() { | ||
response.on("end", function () { | ||
if (response.statusCode >= 400) { | ||
return callback(getErrorBody(response, data), undefined, response.headers); | ||
} | ||
} | ||
@@ -103,3 +103,3 @@ var result; | ||
httpsRequest.once("socket", function(socket) { | ||
httpsRequest.once("socket", function (socket) { | ||
if (isMedia) { | ||
@@ -128,12 +128,12 @@ socket.setTimeout(connectionPolicy.MediaRequestTimeout); | ||
function getErrorBody(response, data) { | ||
var errorBody = { code: response.statusCode, body: data }; | ||
if (Constants.HttpHeaders.ActivityId in response.headers) { | ||
errorBody.activityId = response.headers[Constants.HttpHeaders.ActivityId]; | ||
} | ||
var errorBody = { code: response.statusCode, body: data }; | ||
if (Constants.HttpHeaders.ActivityId in response.headers) { | ||
errorBody.activityId = response.headers[Constants.HttpHeaders.ActivityId]; | ||
} | ||
if (Constants.HttpHeaders.SubStatus in response.headers) { | ||
errorBody.substatus = parseInt(response.headers[Constants.HttpHeaders.SubStatus]); | ||
} | ||
if (Constants.HttpHeaders.RetryAfterInMilliseconds in response.headers) { | ||
@@ -163,5 +163,6 @@ errorBody.retryAfterInMilliseconds = parseInt(response.headers[Constants.HttpHeaders.RetryAfterInMilliseconds]); | ||
*/ | ||
request: function (globalEndpointManager, connectionPolicy, method, url, path, data, queryParams, headers, callback) { | ||
request: function (globalEndpointManager, connectionPolicy, method, url, request, data, queryParams, headers, callback) { | ||
var path = request.path == undefined ? request : request.path; | ||
var body; | ||
if (data) { | ||
@@ -171,3 +172,3 @@ body = bodyFromData(data); | ||
} | ||
var buffer; | ||
@@ -184,6 +185,6 @@ var stream; | ||
} else { | ||
callback({ message: "body must be string, Buffer, or stream" }); | ||
return callback({ message: "body must be string, Buffer, or stream" }); | ||
} | ||
} | ||
var requestOptions = parse(url); | ||
@@ -203,10 +204,10 @@ requestOptions.method = method; | ||
} | ||
if (buffer) { | ||
requestOptions.headers[Constants.HttpHeaders.ContentLength] = buffer.length; | ||
RetryUtility.execute(globalEndpointManager, { buffer: buffer, stream: null }, this._createRequestObjectStub, connectionPolicy, requestOptions, callback); | ||
RetryUtility.execute(globalEndpointManager, { buffer: buffer, stream: null }, this._createRequestObjectStub, connectionPolicy, requestOptions, request, callback); | ||
} else if (stream) { | ||
RetryUtility.execute(globalEndpointManager, { buffer: null, stream: stream }, this._createRequestObjectStub, connectionPolicy, requestOptions, callback); | ||
RetryUtility.execute(globalEndpointManager, { buffer: null, stream: stream }, this._createRequestObjectStub, connectionPolicy, requestOptions, request, callback); | ||
} else { | ||
RetryUtility.execute(globalEndpointManager, { buffer: null, stream: null }, this._createRequestObjectStub, connectionPolicy, requestOptions, callback); | ||
RetryUtility.execute(globalEndpointManager, { buffer: null, stream: null }, this._createRequestObjectStub, connectionPolicy, requestOptions, request, callback); | ||
} | ||
@@ -213,0 +214,0 @@ } |
@@ -29,3 +29,4 @@ /* | ||
EndpointDiscoveryRetryPolicy = require("./endpointDiscoveryRetryPolicy"), | ||
ResourceThrottleRetryPolicy = require("./resourceThrottleRetryPolicy"); | ||
ResourceThrottleRetryPolicy = require("./resourceThrottleRetryPolicy"), | ||
SessionReadRetryPolicy = require("./sessionReadRetryPolicy"); | ||
@@ -43,11 +44,14 @@ //SCRIPT START | ||
*/ | ||
execute: function (globalEndpointManager, body, createRequestObjectFunc, connectionPolicy, requestOptions, callback) { | ||
execute: function (globalEndpointManager, body, createRequestObjectFunc, connectionPolicy, requestOptions, request, callback) { | ||
var request = typeof request !== 'string' ? request : { "path": "", "operationType": "nonReadOps", "client": null }; | ||
var endpointDiscoveryRetryPolicy = new EndpointDiscoveryRetryPolicy(globalEndpointManager); | ||
var resourceThrottleRetryPolicy = new ResourceThrottleRetryPolicy(connectionPolicy.RetryOptions.MaxRetryAttemptCount, | ||
connectionPolicy.RetryOptions.FixedRetryIntervalInMilliseconds, | ||
connectionPolicy.RetryOptions.MaxWaitTimeInSeconds); | ||
var resourceThrottleRetryPolicy = new ResourceThrottleRetryPolicy(connectionPolicy.RetryOptions.MaxRetryAttemptCount, | ||
connectionPolicy.RetryOptions.FixedRetryIntervalInMilliseconds, | ||
connectionPolicy.RetryOptions.MaxWaitTimeInSeconds); | ||
var sessionReadRetryPolicy = new SessionReadRetryPolicy(globalEndpointManager, request) | ||
this.apply(body, createRequestObjectFunc, connectionPolicy, requestOptions, endpointDiscoveryRetryPolicy, resourceThrottleRetryPolicy, callback); | ||
this.apply(body, createRequestObjectFunc, connectionPolicy, requestOptions, endpointDiscoveryRetryPolicy, resourceThrottleRetryPolicy, sessionReadRetryPolicy, callback); | ||
}, | ||
/** | ||
@@ -63,3 +67,3 @@ * Applies the retry policy for the created request object. | ||
*/ | ||
apply: function (body, createRequestObjectFunc, connectionPolicy, requestOptions, endpointDiscoveryRetryPolicy, resourceThrottleRetryPolicy, callback) { | ||
apply: function (body, createRequestObjectFunc, connectionPolicy, requestOptions, endpointDiscoveryRetryPolicy, resourceThrottleRetryPolicy, sessionReadRetryPolicy, callback) { | ||
var that = this; | ||
@@ -74,5 +78,7 @@ var httpsRequest = createRequestObjectFunc(connectionPolicy, requestOptions, function (err, response, headers) { | ||
retryPolicy = resourceThrottleRetryPolicy; | ||
} else if (err.code === SessionReadRetryPolicy.NOT_FOUND_STATUS_CODE && err.substatus === SessionReadRetryPolicy.READ_SESSION_NOT_AVAILABLE_SUB_STATUS_CODE) { | ||
retryPolicy = sessionReadRetryPolicy; | ||
} | ||
if (retryPolicy) { | ||
retryPolicy.shouldRetry(err, function (shouldRetry) { | ||
retryPolicy.shouldRetry(err, function (shouldRetry, newUrl) { | ||
if (!shouldRetry) { | ||
@@ -84,3 +90,5 @@ headers[Constants.ThrottleRetryCount] = resourceThrottleRetryPolicy.currentRetryAttemptCount; | ||
setTimeout(function () { | ||
that.apply(body, createRequestObjectFunc, connectionPolicy, requestOptions, endpointDiscoveryRetryPolicy, resourceThrottleRetryPolicy, callback); | ||
if (typeof newUrl !== 'undefined') | ||
requestOptions = that.modifyRequestOptions(requestOptions, newUrl); | ||
that.apply(body, createRequestObjectFunc, connectionPolicy, requestOptions, endpointDiscoveryRetryPolicy, resourceThrottleRetryPolicy, sessionReadRetryPolicy, callback); | ||
}, retryPolicy.retryAfterInMilliseconds); | ||
@@ -97,3 +105,3 @@ return; | ||
}); | ||
if (httpsRequest) { | ||
@@ -109,2 +117,11 @@ if (body["stream"] !== null) { | ||
} | ||
}, | ||
modifyRequestOptions: function (oldRequestOptions, newUrl) { | ||
var properties = Object.keys(newUrl); | ||
for (var index in properties) { | ||
if (properties[index] !== "path") | ||
oldRequestOptions[properties[index]] = newUrl[properties[index]]; | ||
} | ||
return oldRequestOptions; | ||
} | ||
@@ -111,0 +128,0 @@ } |
@@ -12,3 +12,3 @@ { | ||
], | ||
"version": "1.13.0", | ||
"version": "1.14.0", | ||
"author": "Microsoft Corporation", | ||
@@ -27,6 +27,12 @@ "main": "./index.js", | ||
"mocha": "*", | ||
"sinon": "^3.2.1", | ||
"time-grunt": "^1.2.0", | ||
"child_process" : "*" | ||
"grunt-mocha-test": "^0.13.3", | ||
"mocha-multi-reporters": "^1.1.6", | ||
"mocha-junit-reporter": "^1.15.0", | ||
"child_process": "*" | ||
}, | ||
"dependencies": { | ||
"big-integer": "^1.6.25", | ||
"int64-buffer": "^0.1.9", | ||
"binary-search-bounds": "2.0.3", | ||
@@ -33,0 +39,0 @@ "priorityqueuejs": "1.0.0", |
@@ -1,2 +0,2 @@ | ||
# Microsoft Azure DocumentDB Node.js SDK | ||
# Node.js SDK for DocumentDB APIs of Azure Cosmos DB | ||
@@ -7,6 +7,8 @@ ![](https://img.shields.io/npm/v/documentdb.svg) | ||
This project provides a node module that makes it easy to interact with Azure DocumentDB. | ||
Node.js SDK for DocumentDB APIs for Microsoft Azure Cosmos DB Service. | ||
For documentation please see the Microsoft Azure [Node.js Developer Center](http://azure.microsoft.com/en-us/develop/nodejs/) and the [Microsoft Azure DocumentDB Node.js SDK Documentation](http://azure.github.io/azure-documentdb-node/). | ||
This project provides a node module that makes it easy to interact with DocumentDB APIs of Azure Cosmos DB (cosmosdb) Service. | ||
For documentation please see the Microsoft Azure [Node.js Developer Center](http://azure.microsoft.com/en-us/develop/nodejs/) and the [ Node.js SDK Documentation](http://azure.github.io/azure-documentdb-node/). | ||
## Installation | ||
@@ -22,8 +24,8 @@ ### Core Module | ||
To use this SDK to call Azure DocumentDB, you need to first [create an account](http://azure.microsoft.com/en-us/documentation/articles/documentdb-create-account/). | ||
To use this SDK to call DocumentDB APIs of Azure Cosmos DB, you need to first [create an account](https://docs.microsoft.com/en-us/azure/cosmos-db/create-documentdb-nodejs). | ||
You can follow this [tutorial](http://azure.microsoft.com/en-us/documentation/articles/documentdb-nodejs-application/) to help you get started. | ||
You can follow this [tutorial](https://docs.microsoft.com/en-us/azure/cosmos-db/documentdb-nodejs-application) to help you get started. | ||
#### Note: | ||
When connecting to the [emulator](https://docs.microsoft.com/en-us/azure/documentdb/documentdb-nosql-local-emulator) from the SDK, SSL verification is disabled. | ||
When connecting to the [emulator](https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator) from the SDK, SSL verification is disabled. | ||
@@ -70,9 +72,9 @@ ## Examples | ||
Getting started with Azure DocumentDB on Node.js: | ||
Getting started with DocumentDB Node.js SDK: | ||
[![Azure Demo: Getting started with Azure DocumentDB on Node.js](http://img.youtube.com/vi/UAE7h9PCZjA/0.jpg)](http://www.youtube.com/watch?v=UAE7h9PCZjA) | ||
[![Azure Demo: Getting started with DocumentDB Node.js SDK](http://img.youtube.com/vi/UAE7h9PCZjA/0.jpg)](http://www.youtube.com/watch?v=UAE7h9PCZjA) | ||
## Need Help? | ||
Be sure to check out the Microsoft Azure [Developer Forums on MSDN](https://social.msdn.microsoft.com/forums/azure/en-US/home?forum=AzureDocumentDB) or the [Developer Forums on Stack Overflow](http://stackoverflow.com/questions/tagged/azure-documentdb) if you have trouble with the provided code. | ||
Be sure to check out the Microsoft Azure [Developer Forums on MSDN](https://social.msdn.microsoft.com/forums/azure/en-US/home?forum=AzureDocumentDB) or the [Developer Forums on Stack Overflow](https://stackoverflow.com/questions/tagged/azure-cosmosdb) if you have trouble with the provided code. | ||
@@ -88,4 +90,4 @@ ## Contribute Code or Provide Feedback | ||
* [Azure Developer Center](http://azure.microsoft.com/en-us/develop/nodejs) | ||
* [Azure DocumentDB Node.js SDK Documentation](http://azure.github.io/azure-documentdb-node/) | ||
* [Azure DocumentDB Service](http://azure.microsoft.com/en-us/documentation/services/documentdb/) | ||
* [Azure DocumentDB Community Page](https://azure.microsoft.com/en-us/documentation/articles/documentdb-community/) | ||
* [Node.js SDK Documentation for using DocumentDB APIs of Azure Cosmos DB Service.](http://azure.github.io/azure-documentdb-node/) | ||
* [Azure Cosmos DB Service](https://azure.microsoft.com/en-us/blog/dear-documentdb-customers-welcome-to-azure-cosmos-db/) | ||
* [Azure Cosmos DB Community Page](https://docs.microsoft.com/en-us/azure/cosmos-db/community) |
@@ -0,0 +0,0 @@ // Generated by typings |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
878420
51
19109
90
6
13
+ Addedbig-integer@^1.6.25
+ Addedint64-buffer@^0.1.9
+ Addedbig-integer@1.6.52(transitive)
+ Addedint64-buffer@0.1.10(transitive)