Hide plugins using internal flag (#348)

This commit is contained in:
Steve Faulkner 2019-06-21 13:35:31 -04:00 коммит произвёл GitHub
Родитель 88ceb27541
Коммит 29416c5343
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
5 изменённых файлов: 91 добавлений и 76 удалений

Просмотреть файл

@ -41,5 +41,6 @@ export interface CosmosClientOptions {
* Use an agent such as https://github.com/TooTallNate/node-proxy-agent if you need to connect to Cosmos via a proxy
*/
agent?: Agent;
/** @internal */
plugins?: PluginConfig[];
}

Просмотреть файл

@ -17,7 +17,8 @@
"resolveJsonModule": true,
"composite": true,
"noUnusedLocals": true,
"noUnusedParameters": true
"noUnusedParameters": true,
"stripInternal": true
},
"include": ["./**/*"]
}

Просмотреть файл

@ -1,26 +1,29 @@
import assert from "assert";
import { CosmosClient, Constants, Container } from "../../dist-esm";
import { CosmosClient, Constants, Container, PluginConfig, CosmosClientOptions } from "../../dist-esm";
import { removeAllDatabases, getTestContainer } from "../common/TestHelpers";
import { endpoint, masterKey } from "../common/_testConfig";
import { ResourceType, HTTPMethod, StatusCodes } from "../../dist-esm/common";
const legacyClient = new CosmosClient({
endpoint,
key: masterKey,
plugins: [
{
on: "request",
plugin: (context, next) => {
// Intercepts the API request to create a non-partitioned container using an old API version
if (context.resourceType === ResourceType.container && context.method === HTTPMethod.post) {
context.body = JSON.stringify({ id: JSON.parse(context.body).id });
}
context.headers[Constants.HttpHeaders.Version] = "2018-06-18";
return next(context);
const plugins: PluginConfig[] = [
{
on: "request",
plugin: (context, next) => {
// Intercepts the API request to create a non-partitioned container using an old API version
if (context.resourceType === ResourceType.container && context.method === HTTPMethod.post) {
context.body = JSON.stringify({ id: JSON.parse(context.body).id });
}
context.headers[Constants.HttpHeaders.Version] = "2018-06-18";
return next(context);
}
]
});
}
];
const options: CosmosClientOptions = {
endpoint,
key: masterKey
};
const legacyClient = new CosmosClient({ ...options, plugins } as any);
const client = new CosmosClient({
endpoint,

Просмотреть файл

@ -1,6 +1,6 @@
import { CosmosClient } from "../../dist-esm";
import { CosmosClient, CosmosClientOptions } from "../../dist-esm";
import { RequestContext } from "../../dist-esm/request/RequestContext";
import { Plugin, Next } from "../../dist-esm/plugins/Plugin";
import { Plugin, Next, PluginConfig } from "../../dist-esm/plugins/Plugin";
import * as assert from "assert";
@ -25,16 +25,19 @@ describe("Plugin", function() {
return successResponse;
};
const client = new CosmosClient({
const options: CosmosClientOptions = {
endpoint: "https://faaaaaaaaaaaaake.com",
key: "THIS IS A FAKE KEY",
plugins: [
{
on: "request",
plugin: sometimesThrow
}
]
});
key: "THIS IS A FAKE KEY"
};
const plugins: PluginConfig[] = [
{
on: "request",
plugin: sometimesThrow
}
];
const client = new CosmosClient({ ...options, plugins } as any);
const response = await client.database("foo").read();
assert.equal(requestCount, FAILCOUNT + 1); // Get Database Account + FAILED GET Database + Get Database
assert.notEqual(response, undefined);
@ -59,20 +62,23 @@ describe("Plugin", function() {
throw new Error("I always throw!");
};
const client = new CosmosClient({
const options: CosmosClientOptions = {
endpoint: "https://faaaaaaaaaaaaake.com",
key: "THIS IS A FAKE KEY",
plugins: [
{
on: "request",
plugin: alwaysThrow // I'll never be called since operation will always succeed.
},
{
on: "operation",
plugin: alwaysSucceed
}
]
});
key: "THIS IS A FAKE KEY"
};
const plugins: PluginConfig[] = [
{
on: "request",
plugin: alwaysThrow // I'll never be called since operation will always succeed.
},
{
on: "operation",
plugin: alwaysSucceed
}
];
const client = new CosmosClient({ ...options, plugins } as any);
const response = await client.database("foo").read();
assert.equal(requestCount, 2); // Get Database Account + Get Database
assert.notEqual(response, undefined);
@ -103,20 +109,23 @@ describe("Plugin", function() {
return response;
};
const client = new CosmosClient({
const options: CosmosClientOptions = {
endpoint: "https://faaaaaaaaaaaaake.com",
key: "THIS IS A FAKE KEY",
plugins: [
{
on: "operation",
plugin: counts // I'll never be called since operation will always succeed.
},
{
on: "operation",
plugin: alwaysSucceed
}
]
});
key: "THIS IS A FAKE KEY"
};
const plugins: PluginConfig[] = [
{
on: "operation",
plugin: counts // I'll never be called since operation will always succeed.
},
{
on: "operation",
plugin: alwaysSucceed
}
];
const client = new CosmosClient({ ...options, plugins } as any);
const response = await client.database("foo").read();
assert.equal(requestCount, 2); // Get Database Account + Get Database
assert.equal(responseCount, 2); // Get Database Account + Get Database

Просмотреть файл

@ -1,6 +1,6 @@
import { Container } from "../../dist-esm/client";
import { bulkInsertItems, getTestContainer, removeAllDatabases } from "../common/TestHelpers";
import { Constants, CosmosClient, PluginOn } from "../../dist-esm";
import { Constants, CosmosClient, PluginOn, CosmosClientOptions, PluginConfig } from "../../dist-esm";
import { masterKey, endpoint } from "../common/_testConfig";
import { SubStatusCodes } from "../../dist-esm/common";
import assert from "assert";
@ -41,29 +41,30 @@ describe("Partition Splits", () => {
it("handles one split part way through iteration", async () => {
let hasSplit = false;
const partitionKeyRanges = new Set();
const client = new CosmosClient({
endpoint,
key: masterKey,
plugins: [
{
on: PluginOn.request,
plugin: async (context, next) => {
const partitionKeyRangeId = context.headers[Constants.HttpHeaders.PartitionKeyRangeID];
if (partitionKeyRanges.has(partitionKeyRangeId) && hasSplit === false) {
hasSplit = true;
const error = new Error("Fake Partition Split") as any;
error.code = 410;
error.substatus = SubStatusCodes.PartitionKeyRangeGone;
throw error;
}
if (partitionKeyRangeId) {
partitionKeyRanges.add(partitionKeyRangeId);
}
return next(context);
const options: CosmosClientOptions = { endpoint, key: masterKey };
const plugins: PluginConfig[] = [
{
on: PluginOn.request,
plugin: async (context, next) => {
const partitionKeyRangeId = context.headers[Constants.HttpHeaders.PartitionKeyRangeID];
if (partitionKeyRanges.has(partitionKeyRangeId) && hasSplit === false) {
hasSplit = true;
const error = new Error("Fake Partition Split") as any;
error.code = 410;
error.substatus = SubStatusCodes.PartitionKeyRangeGone;
throw error;
}
if (partitionKeyRangeId) {
partitionKeyRanges.add(partitionKeyRangeId);
}
return next(context);
}
]
});
}
];
const client = new CosmosClient({
...options,
plugins
} as any);
const { resources } = await client
.database(container.database.id)
.container(container.id)