Fix lint query utils (#487)

* Fix Lint errors in QueryUtils

* Format

* Simplify diff

Co-authored-by: Your Name <you@example.com>
Co-authored-by: Steve Faulkner <southpolesteve@gmail.com>
Co-authored-by: Steve Faulkner <471400+southpolesteve@users.noreply.github.com>
Co-authored-by: Jordi Bunster <jbunster@microsoft.com>
This commit is contained in:
Hardikkumar Nai 2021-03-30 07:56:41 +05:30 committed by GitHub
parent fad3a08fdf
commit 343e82c102
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 111 additions and 116 deletions

View File

@ -257,7 +257,6 @@ src/TokenProviders/PortalTokenProvider.ts
src/TokenProviders/TokenProviderFactory.ts src/TokenProviders/TokenProviderFactory.ts
src/Utils/PricingUtils.test.ts src/Utils/PricingUtils.test.ts
src/Utils/QueryUtils.test.ts src/Utils/QueryUtils.test.ts
src/Utils/QueryUtils.ts
src/applyExplorerBindings.ts src/applyExplorerBindings.ts
src/global.d.ts src/global.d.ts
src/setupTests.ts src/setupTests.ts

View File

@ -6,7 +6,7 @@ import Explorer from "../Explorer/Explorer";
import DocumentsTab from "../Explorer/Tabs/DocumentsTab"; import DocumentsTab from "../Explorer/Tabs/DocumentsTab";
import DocumentId from "../Explorer/Tree/DocumentId"; import DocumentId from "../Explorer/Tree/DocumentId";
import * as NotificationConsoleUtils from "../Utils/NotificationConsoleUtils"; import * as NotificationConsoleUtils from "../Utils/NotificationConsoleUtils";
import { QueryUtils } from "../Utils/QueryUtils"; import * as QueryUtils from "../Utils/QueryUtils";
import { BackendDefaults, HttpStatusCodes, SavedQueries } from "./Constants"; import { BackendDefaults, HttpStatusCodes, SavedQueries } from "./Constants";
import { userContext } from "../UserContext"; import { userContext } from "../UserContext";
import { queryDocumentsPage } from "./dataAccess/queryDocumentsPage"; import { queryDocumentsPage } from "./dataAccess/queryDocumentsPage";

View File

@ -11,7 +11,7 @@ import editable from "../../Common/EditableUtility";
import * as HeadersUtility from "../../Common/HeadersUtility"; import * as HeadersUtility from "../../Common/HeadersUtility";
import TabsBase from "./TabsBase"; import TabsBase from "./TabsBase";
import { DocumentsGridMetrics } from "../../Common/Constants"; import { DocumentsGridMetrics } from "../../Common/Constants";
import { QueryUtils } from "../../Utils/QueryUtils"; import * as QueryUtils from "../../Utils/QueryUtils";
import { Splitter, SplitterBounds, SplitterDirection } from "../../Common/Splitter"; import { Splitter, SplitterBounds, SplitterDirection } from "../../Common/Splitter";
import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
import NewDocumentIcon from "../../../images/NewDocument.svg"; import NewDocumentIcon from "../../../images/NewDocument.svg";

View File

@ -9,7 +9,7 @@ import * as HeadersUtility from "../../Common/HeadersUtility";
import { Splitter, SplitterBounds, SplitterDirection } from "../../Common/Splitter"; import { Splitter, SplitterBounds, SplitterDirection } from "../../Common/Splitter";
import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
import ExecuteQueryIcon from "../../../images/ExecuteQuery.svg"; import ExecuteQueryIcon from "../../../images/ExecuteQuery.svg";
import { QueryUtils } from "../../Utils/QueryUtils"; import * as QueryUtils from "../../Utils/QueryUtils";
import SaveQueryIcon from "../../../images/save-cosmos.svg"; import SaveQueryIcon from "../../../images/save-cosmos.svg";
import { MinimalQueryIterator } from "../../Common/IteratorUtilities"; import { MinimalQueryIterator } from "../../Common/IteratorUtilities";

View File

@ -2,7 +2,7 @@ import * as DataModels from "../Contracts/DataModels";
import * as Q from "q"; import * as Q from "q";
import * as sinon from "sinon"; import * as sinon from "sinon";
import * as ViewModels from "../Contracts/ViewModels"; import * as ViewModels from "../Contracts/ViewModels";
import { QueryUtils } from "./QueryUtils"; import * as QueryUtils from "./QueryUtils";
describe("Query Utils", () => { describe("Query Utils", () => {
function generatePartitionKeyForPath(path: string): DataModels.PartitionKey { function generatePartitionKeyForPath(path: string): DataModels.PartitionKey {

View File

@ -1,15 +1,13 @@
import Q from "q";
import * as DataModels from "../Contracts/DataModels"; import * as DataModels from "../Contracts/DataModels";
import * as ViewModels from "../Contracts/ViewModels"; import * as ViewModels from "../Contracts/ViewModels";
export class QueryUtils { export function buildDocumentsQuery(
public static buildDocumentsQuery(
filter: string, filter: string,
partitionKeyProperty: string, partitionKeyProperty: string,
partitionKey: DataModels.PartitionKey partitionKey: DataModels.PartitionKey
): string { ): string {
let query: string = partitionKeyProperty let query = partitionKeyProperty
? `select c.id, c._self, c._rid, c._ts, ${QueryUtils.buildDocumentsQueryPartitionProjections( ? `select c.id, c._self, c._rid, c._ts, ${buildDocumentsQueryPartitionProjections(
"c", "c",
partitionKey partitionKey
)} as _partitionKeyValue from c` )} as _partitionKeyValue from c`
@ -22,9 +20,9 @@ export class QueryUtils {
return query; return query;
} }
public static buildDocumentsQueryPartitionProjections( export function buildDocumentsQueryPartitionProjections(
collectionAlias: string, collectionAlias: string,
partitionKey: DataModels.PartitionKey partitionKey?: DataModels.PartitionKey
): string { ): string {
if (!partitionKey) { if (!partitionKey) {
return ""; return "";
@ -32,23 +30,22 @@ export class QueryUtils {
// e.g., path /order/id will be projected as c["order"]["id"], // e.g., path /order/id will be projected as c["order"]["id"],
// to escape any property names that match a keyword // to escape any property names that match a keyword
let projections = []; const projections = [];
for (let index in partitionKey.paths) { for (const index in partitionKey.paths) {
// TODO: Handle "/" in partition key definitions // TODO: Handle "/" in partition key definitions
const projectedProperties: string[] = partitionKey.paths[index].split("/").slice(1); const projectedProperties: string[] = partitionKey.paths[index].split("/").slice(1);
let projectedProperty: string = ""; let projectedProperty = "";
projectedProperties.forEach((property: string) => { projectedProperties.forEach((property: string) => {
const projection = property.trim(); const projection = property.trim();
if (projection.length > 0 && projection.charAt(0) != "'" && projection.charAt(0) != '"') { if (projection.length > 0 && projection.charAt(0) !== "'" && projection.charAt(0) !== '"') {
projectedProperty = projectedProperty + `["${projection}"]`; projectedProperty += `["${projection}"]`;
} else if (projection.length > 0 && projection.charAt(0) == "'") { } else if (projection.length > 0 && projection.charAt(0) === "'") {
// trim single quotes and escape double quotes // trim single quotes and escape double quotes
const projectionSlice = projection.slice(1, projection.length - 1); const projectionSlice = projection.slice(1, projection.length - 1);
projectedProperty = projectedProperty += `["${projectionSlice.replace(/\\"/g, '"').replace(/"/g, '\\\\\\"')}"]`;
projectedProperty + `["${projectionSlice.replace(/\\"/g, '"').replace(/"/g, '\\\\\\"')}"]`;
} else { } else {
projectedProperty = projectedProperty + `[${projection}]`; projectedProperty += `[${projection}]`;
} }
}); });
@ -58,19 +55,19 @@ export class QueryUtils {
return projections.join(","); return projections.join(",");
} }
public static async queryPagesUntilContentPresent( export const queryPagesUntilContentPresent = async (
firstItemIndex: number, firstItemIndex: number,
queryItems: (itemIndex: number) => Promise<ViewModels.QueryResults> queryItems: (itemIndex: number) => Promise<ViewModels.QueryResults>
): Promise<ViewModels.QueryResults> { ): Promise<ViewModels.QueryResults> => {
let roundTrips: number = 0; let roundTrips = 0;
let netRequestCharge: number = 0; let netRequestCharge = 0;
const doRequest = async (itemIndex: number): Promise<ViewModels.QueryResults> => { const doRequest = async (itemIndex: number): Promise<ViewModels.QueryResults> => {
const results: ViewModels.QueryResults = await queryItems(itemIndex); const results = await queryItems(itemIndex);
roundTrips = roundTrips + 1; roundTrips = roundTrips + 1;
results.roundTrips = roundTrips; results.roundTrips = roundTrips;
results.requestCharge = Number(results.requestCharge) + netRequestCharge; results.requestCharge = Number(results.requestCharge) + netRequestCharge;
netRequestCharge = Number(results.requestCharge); netRequestCharge = Number(results.requestCharge);
const resultsMetadata: ViewModels.QueryResultsMetadata = { const resultsMetadata = {
hasMoreResults: results.hasMoreResults, hasMoreResults: results.hasMoreResults,
itemCount: results.itemCount, itemCount: results.itemCount,
firstItemIndex: results.firstItemIndex, firstItemIndex: results.firstItemIndex,
@ -83,11 +80,11 @@ export class QueryUtils {
}; };
return await doRequest(firstItemIndex); return await doRequest(firstItemIndex);
} };
public static async queryAllPages( export const queryAllPages = async (
queryItems: (itemIndex: number) => Promise<ViewModels.QueryResults> queryItems: (itemIndex: number) => Promise<ViewModels.QueryResults>
): Promise<ViewModels.QueryResults> { ): Promise<ViewModels.QueryResults> => {
const queryResults: ViewModels.QueryResults = { const queryResults: ViewModels.QueryResults = {
documents: [], documents: [],
activityId: undefined, activityId: undefined,
@ -99,7 +96,7 @@ export class QueryUtils {
roundTrips: 0, roundTrips: 0,
}; };
const doRequest = async (itemIndex: number): Promise<ViewModels.QueryResults> => { const doRequest = async (itemIndex: number): Promise<ViewModels.QueryResults> => {
const results: ViewModels.QueryResults = await queryItems(itemIndex); const results = await queryItems(itemIndex);
const { requestCharge, hasMoreResults, itemCount, lastItemIndex, documents } = results; const { requestCharge, hasMoreResults, itemCount, lastItemIndex, documents } = results;
queryResults.roundTrips = queryResults.roundTrips + 1; queryResults.roundTrips = queryResults.roundTrips + 1;
queryResults.requestCharge = Number(queryResults.requestCharge) + Number(requestCharge); queryResults.requestCharge = Number(queryResults.requestCharge) + Number(requestCharge);
@ -114,5 +111,4 @@ export class QueryUtils {
}; };
return doRequest(0); return doRequest(0);
} };
}