UNPKG

17.3 kBSource Map (JSON)View Raw
1{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/common/helper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosClientOptions } from \"../CosmosClientOptions\";\nimport { OperationType, ResourceType } from \"./constants\";\n\nconst trimLeftSlashes = new RegExp(\"^[/]+\");\nconst trimRightSlashes = new RegExp(\"[/]+$\");\nconst illegalResourceIdCharacters = new RegExp(\"[/\\\\\\\\?#]\");\nconst illegalItemResourceIdCharacters = new RegExp(\"[/\\\\\\\\#]\");\n\n/** @hidden */\nexport function jsonStringifyAndEscapeNonASCII(arg: unknown): string {\n // TODO: better way for this? Not sure.\n // escapes non-ASCII characters as \\uXXXX\n return JSON.stringify(arg).replace(/[\\u007F-\\uFFFF]/g, (m) => {\n return \"\\\\u\" + (\"0000\" + m.charCodeAt(0).toString(16)).slice(-4);\n });\n}\n\n/**\n * @hidden\n */\nexport function parseLink(resourcePath: string): {\n type: ResourceType;\n objectBody: {\n id: string;\n self: string;\n };\n} {\n if (resourcePath.length === 0) {\n /* for DatabaseAccount case, both type and objectBody will be undefined. */\n return {\n type: undefined,\n objectBody: undefined,\n };\n }\n\n if (resourcePath[resourcePath.length - 1] !== \"/\") {\n resourcePath = resourcePath + \"/\";\n }\n\n if (resourcePath[0] !== \"/\") {\n resourcePath = \"/\" + resourcePath;\n }\n\n /*\n The path will be in the form of /[resourceType]/[resourceId]/ ....\n /[resourceType]//[resourceType]/[resourceId]/ .... /[resourceType]/[resourceId]/\n or /[resourceType]/[resourceId]/ .... /[resourceType]/[resourceId]/[resourceType]/[resourceId]/ ....\n /[resourceType]/[resourceId]/\n The result of split will be in the form of\n [[[resourceType], [resourceId] ... ,[resourceType], [resourceId], \"\"]\n In the first case, to extract the resourceId it will the element before last ( at length -2 )\n and the type will be before it ( at length -3 )\n In the second case, to extract the resource type it will the element before last ( at length -2 )\n */\n const pathParts = resourcePath.split(\"/\");\n let id;\n let type: ResourceType;\n if (pathParts.length % 2 === 0) {\n // request in form /[resourceType]/[resourceId]/ .... /[resourceType]/[resourceId].\n id = pathParts[pathParts.length - 2];\n type = pathParts[pathParts.length - 3] as ResourceType;\n } else {\n // request in form /[resourceType]/[resourceId]/ .... /[resourceType]/.\n id = pathParts[pathParts.length - 3];\n type = pathParts[pathParts.length - 2] as ResourceType;\n }\n\n const result = {\n type,\n objectBody: {\n id,\n self: resourcePath,\n },\n };\n\n return result;\n}\n\n/**\n * @hidden\n */\nexport function isReadRequest(operationType: OperationType): boolean {\n return operationType === OperationType.Read || operationType === OperationType.Query;\n}\n\n/**\n * @hidden\n */\nexport function sleep(time: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, time);\n });\n}\n\n/**\n * @hidden\n */\nexport function getContainerLink(link: string): string {\n return link.split(\"/\").slice(0, 4).join(\"/\");\n}\n\n/**\n * @hidden\n */\nexport function trimSlashes(source: string): string {\n return source.replace(trimLeftSlashes, \"\").replace(trimRightSlashes, \"\");\n}\n\n/**\n * @hidden\n */\nexport function getHexaDigit(): string {\n return Math.floor(Math.random() * 16).toString(16);\n}\n\n/**\n * @hidden\n */\nexport function parsePath(path: string): string[] {\n const pathParts = [];\n let currentIndex = 0;\n\n const throwError = (): never => {\n throw new Error(\"Path \" + path + \" is invalid at index \" + currentIndex);\n };\n\n const getEscapedToken = (): string => {\n const quote = path[currentIndex];\n let newIndex = ++currentIndex;\n\n for (;;) {\n newIndex = path.indexOf(quote, newIndex);\n if (newIndex === -1) {\n throwError();\n }\n\n if (path[newIndex - 1] !== \"\\\\\") {\n break;\n }\n\n ++newIndex;\n }\n\n const token = path.substr(currentIndex, newIndex - currentIndex);\n currentIndex = newIndex + 1;\n return token;\n };\n\n const getToken = (): string => {\n const newIndex = path.indexOf(\"/\", currentIndex);\n let token = null;\n if (newIndex === -1) {\n token = path.substr(currentIndex);\n currentIndex = path.length;\n } else {\n token = path.substr(currentIndex, newIndex - currentIndex);\n currentIndex = newIndex;\n }\n\n token = token.trim();\n return token;\n };\n\n while (currentIndex < path.length) {\n if (path[currentIndex] !== \"/\") {\n throwError();\n }\n\n if (++currentIndex === path.length) {\n break;\n }\n\n if (path[currentIndex] === '\"' || path[currentIndex] === \"'\") {\n pathParts.push(getEscapedToken());\n } else {\n pathParts.push(getToken());\n }\n }\n\n return pathParts;\n}\n\n/**\n * @hidden\n */\nexport function isResourceValid(resource: { id?: string }, err: { message?: string }): boolean {\n // TODO: fix strictness issues so that caller contexts respects the types of the functions\n if (resource.id) {\n if (typeof resource.id !== \"string\") {\n err.message = \"Id must be a string.\";\n return false;\n }\n\n if (\n resource.id.indexOf(\"/\") !== -1 ||\n resource.id.indexOf(\"\\\\\") !== -1 ||\n resource.id.indexOf(\"?\") !== -1 ||\n resource.id.indexOf(\"#\") !== -1\n ) {\n err.message = \"Id contains illegal chars.\";\n return false;\n }\n\n if (resource.id[resource.id.length - 1] === \" \") {\n err.message = \"Id ends with a space.\";\n return false;\n }\n }\n return true;\n}\n\n/**\n * @hidden\n */\nexport function isItemResourceValid(resource: { id?: string }, err: { message?: string }): boolean {\n // TODO: fix strictness issues so that caller contexts respects the types of the functions\n if (resource.id) {\n if (typeof resource.id !== \"string\") {\n err.message = \"Id must be a string.\";\n return false;\n }\n\n if (\n resource.id.indexOf(\"/\") !== -1 ||\n resource.id.indexOf(\"\\\\\") !== -1 ||\n resource.id.indexOf(\"#\") !== -1\n ) {\n err.message = \"Id contains illegal chars.\";\n return false;\n }\n }\n return true;\n}\n\n/** @hidden */\nexport function getIdFromLink(resourceLink: string): string {\n resourceLink = trimSlashes(resourceLink);\n return resourceLink;\n}\n\n/** @hidden */\nexport function getPathFromLink(resourceLink: string, resourceType?: string): string {\n resourceLink = trimSlashes(resourceLink);\n if (resourceType) {\n return \"/\" + encodeURI(resourceLink) + \"/\" + resourceType;\n } else {\n return \"/\" + encodeURI(resourceLink);\n }\n}\n\n/**\n * @hidden\n */\nexport function isStringNullOrEmpty(inputString: string): boolean {\n // checks whether string is null, undefined, empty or only contains space\n return !inputString || /^\\s*$/.test(inputString);\n}\n\n/**\n * @hidden\n */\nexport function trimSlashFromLeftAndRight(inputString: string): string {\n if (typeof inputString !== \"string\") {\n throw new Error(\"invalid input: input is not string\");\n }\n\n return inputString.replace(trimLeftSlashes, \"\").replace(trimRightSlashes, \"\");\n}\n\n/**\n * @hidden\n */\nexport function validateResourceId(resourceId: string): boolean {\n // if resourceId is not a string or is empty throw an error\n if (typeof resourceId !== \"string\" || isStringNullOrEmpty(resourceId)) {\n throw new Error(\"Resource ID must be a string and cannot be undefined, null or empty\");\n }\n\n // if resource id contains illegal characters throw an error\n if (illegalResourceIdCharacters.test(resourceId)) {\n throw new Error(\"Illegal characters ['/', '\\\\', '#', '?'] cannot be used in Resource ID\");\n }\n\n return true;\n}\n\n/**\n * @hidden\n */\nexport function validateItemResourceId(resourceId: string): boolean {\n // if resourceId is not a string or is empty throw an error\n if (typeof resourceId !== \"string\" || isStringNullOrEmpty(resourceId)) {\n throw new Error(\"Resource ID must be a string and cannot be undefined, null or empty\");\n }\n\n // if resource id contains illegal characters throw an error\n if (illegalItemResourceIdCharacters.test(resourceId)) {\n throw new Error(\"Illegal characters ['/', '\\\\', '#'] cannot be used in Resource ID\");\n }\n\n return true;\n}\n\n/**\n * @hidden\n */\nexport function getResourceIdFromPath(resourcePath: string): string {\n if (!resourcePath || typeof resourcePath !== \"string\") {\n return null;\n }\n\n const trimmedPath = trimSlashFromLeftAndRight(resourcePath);\n const pathSegments = trimmedPath.split(\"/\");\n\n // number of segments of a path must always be even\n if (pathSegments.length % 2 !== 0) {\n return null;\n }\n\n return pathSegments[pathSegments.length - 1];\n}\n\n/**\n * @hidden\n */\ninterface ConnectionObject {\n AccountEndpoint: string;\n AccountKey: string;\n}\n\n/**\n * @hidden\n */\nexport function parseConnectionString(connectionString: string): CosmosClientOptions {\n const keyValueStrings = connectionString.split(\";\");\n const { AccountEndpoint, AccountKey } = keyValueStrings.reduce(\n (connectionObject, keyValueString: string) => {\n const [key, ...value] = keyValueString.split(\"=\");\n (connectionObject as any)[key] = value.join(\"=\");\n return connectionObject;\n },\n {} as ConnectionObject\n );\n if (!AccountEndpoint || !AccountKey) {\n throw new Error(\"Could not parse the provided connection string\");\n }\n return {\n endpoint: AccountEndpoint,\n key: AccountKey,\n };\n}\n"]}
\No newline at end of file