@rushstack/node-core-library
Advanced tools
+15
-0
@@ -17,2 +17,13 @@ /** | ||
| /** | ||
| * @remarks | ||
| * Used with {@link Async.runWithRetriesAsync}. | ||
| * | ||
| * @beta | ||
| */ | ||
| export interface IRunWithRetriesOptions<TResult> { | ||
| action: () => Promise<TResult> | TResult; | ||
| maxRetries: number; | ||
| retryDelayMs?: number; | ||
| } | ||
| /** | ||
| * Utilities for parallel asynchronous operations, for use with the system `Promise` APIs. | ||
@@ -67,3 +78,7 @@ * | ||
| static sleep(ms: number): Promise<void>; | ||
| /** | ||
| * Executes an async function and optionally retries it if it fails. | ||
| */ | ||
| static runWithRetriesAsync<TResult>({ action, maxRetries, retryDelayMs }: IRunWithRetriesOptions<TResult>): Promise<TResult>; | ||
| } | ||
| //# sourceMappingURL=Async.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"Async.d.ts","sourceRoot":"","sources":["../src/Async.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,qBAAa,KAAK;IAChB;;;;;;;;;;;;;;;;;;;OAmBG;WACiB,QAAQ,CAAC,MAAM,EAAE,OAAO,EAC1C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,EAClD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EACjE,OAAO,CAAC,EAAE,wBAAwB,GAAG,SAAS,GAC7C,OAAO,CAAC,OAAO,EAAE,CAAC;IAcrB;;;;;;;;;;;;;;;;;OAiBG;WACiB,YAAY,CAAC,MAAM,EACrC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,EAClD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EAC9D,OAAO,CAAC,EAAE,wBAAwB,GAAG,SAAS,GAC7C,OAAO,CAAC,IAAI,CAAC;IA+DhB;;OAEG;WACiB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKrD"} | ||
| {"version":3,"file":"Async.d.ts","sourceRoot":"","sources":["../src/Async.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB,CAAC,OAAO;IAC7C,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,qBAAa,KAAK;IAChB;;;;;;;;;;;;;;;;;;;OAmBG;WACiB,QAAQ,CAAC,MAAM,EAAE,OAAO,EAC1C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,EAClD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EACjE,OAAO,CAAC,EAAE,wBAAwB,GAAG,SAAS,GAC7C,OAAO,CAAC,OAAO,EAAE,CAAC;IAcrB;;;;;;;;;;;;;;;;;OAiBG;WACiB,YAAY,CAAC,MAAM,EACrC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,EAClD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EAC9D,OAAO,CAAC,EAAE,wBAAwB,GAAG,SAAS,GAC7C,OAAO,CAAC,IAAI,CAAC;IA+DhB;;OAEG;WACiB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD;;OAEG;WACiB,mBAAmB,CAAC,OAAO,EAAE,EAC/C,MAAM,EACN,UAAU,EACV,YAAgB,EACjB,EAAE,sBAAsB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAetD"} |
+20
-0
@@ -119,4 +119,24 @@ "use strict"; | ||
| } | ||
| /** | ||
| * Executes an async function and optionally retries it if it fails. | ||
| */ | ||
| static async runWithRetriesAsync({ action, maxRetries, retryDelayMs = 0 }) { | ||
| let retryCounter = 0; | ||
| // eslint-disable-next-line no-constant-condition | ||
| while (true) { | ||
| try { | ||
| return await action(); | ||
| } | ||
| catch (e) { | ||
| if (++retryCounter > maxRetries) { | ||
| throw e; | ||
| } | ||
| else if (retryDelayMs > 0) { | ||
| await Async.sleep(retryDelayMs); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| exports.Async = Async; | ||
| //# sourceMappingURL=Async.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"Async.js","sourceRoot":"","sources":["../src/Async.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n/**\n * Options for controlling the parallelism of asynchronous operations.\n *\n * @remarks\n * Used with {@link Async.mapAsync} and {@link Async.forEachAsync}.\n *\n * @beta\n */\nexport interface IAsyncParallelismOptions {\n /**\n * Optionally used with the {@link Async.mapAsync} and {@link Async.forEachAsync}\n * to limit the maximum number of concurrent promises to the specified number.\n */\n concurrency?: number;\n}\n\n/**\n * Utilities for parallel asynchronous operations, for use with the system `Promise` APIs.\n *\n * @beta\n */\nexport class Async {\n /**\n * Given an input array and a `callback` function, invoke the callback to start a\n * promise for each element in the array. Returns an array containing the results.\n *\n * @remarks\n * This API is similar to the system `Array#map`, except that the loop is asynchronous,\n * and the maximum number of concurrent promises can be throttled\n * using {@link IAsyncParallelismOptions.concurrency}.\n *\n * If `callback` throws a synchronous exception, or if it returns a promise that rejects,\n * then the loop stops immediately. Any remaining array items will be skipped, and\n * overall operation will reject with the first error that was encountered.\n *\n * @param iterable - the array of inputs for the callback function\n * @param callback - a function that starts an asynchronous promise for an element\n * from the array\n * @param options - options for customizing the control flow\n * @returns an array containing the result for each callback, in the same order\n * as the original input `array`\n */\n public static async mapAsync<TEntry, TRetVal>(\n iterable: Iterable<TEntry> | AsyncIterable<TEntry>,\n callback: (entry: TEntry, arrayIndex: number) => Promise<TRetVal>,\n options?: IAsyncParallelismOptions | undefined\n ): Promise<TRetVal[]> {\n const result: TRetVal[] = [];\n\n await Async.forEachAsync(\n iterable,\n async (item: TEntry, arrayIndex: number): Promise<void> => {\n result[arrayIndex] = await callback(item, arrayIndex);\n },\n options\n );\n\n return result;\n }\n\n /**\n * Given an input array and a `callback` function, invoke the callback to start a\n * promise for each element in the array.\n *\n * @remarks\n * This API is similar to the system `Array#forEach`, except that the loop is asynchronous,\n * and the maximum number of concurrent promises can be throttled\n * using {@link IAsyncParallelismOptions.concurrency}.\n *\n * If `callback` throws a synchronous exception, or if it returns a promise that rejects,\n * then the loop stops immediately. Any remaining array items will be skipped, and\n * overall operation will reject with the first error that was encountered.\n *\n * @param iterable - the array of inputs for the callback function\n * @param callback - a function that starts an asynchronous promise for an element\n * from the array\n * @param options - options for customizing the control flow\n */\n public static async forEachAsync<TEntry>(\n iterable: Iterable<TEntry> | AsyncIterable<TEntry>,\n callback: (entry: TEntry, arrayIndex: number) => Promise<void>,\n options?: IAsyncParallelismOptions | undefined\n ): Promise<void> {\n await new Promise<void>((resolve: () => void, reject: (error: Error) => void) => {\n const concurrency: number =\n options?.concurrency && options.concurrency > 0 ? options.concurrency : Infinity;\n let operationsInProgress: number = 0;\n\n const iterator: Iterator<TEntry> | AsyncIterator<TEntry> = (\n (iterable as Iterable<TEntry>)[Symbol.iterator] ||\n (iterable as AsyncIterable<TEntry>)[Symbol.asyncIterator]\n ).call(iterable);\n\n let arrayIndex: number = 0;\n let iteratorIsComplete: boolean = false;\n let promiseHasResolvedOrRejected: boolean = false;\n\n async function queueOperationsAsync(): Promise<void> {\n while (operationsInProgress < concurrency && !iteratorIsComplete && !promiseHasResolvedOrRejected) {\n // Increment the concurrency while waiting for the iterator.\n // This function is reentrant, so this ensures that at most `concurrency` executions are waiting\n operationsInProgress++;\n const currentIteratorResult: IteratorResult<TEntry> = await iterator.next();\n // eslint-disable-next-line require-atomic-updates\n iteratorIsComplete = !!currentIteratorResult.done;\n\n if (!iteratorIsComplete) {\n Promise.resolve(callback(currentIteratorResult.value, arrayIndex++))\n .then(async () => {\n operationsInProgress--;\n await onOperationCompletionAsync();\n })\n .catch((error) => {\n promiseHasResolvedOrRejected = true;\n reject(error);\n });\n } else {\n // The iterator is complete and there wasn't a value, so untrack the waiting state.\n operationsInProgress--;\n }\n }\n\n if (iteratorIsComplete) {\n await onOperationCompletionAsync();\n }\n }\n\n async function onOperationCompletionAsync(): Promise<void> {\n if (!promiseHasResolvedOrRejected) {\n if (operationsInProgress === 0 && iteratorIsComplete) {\n promiseHasResolvedOrRejected = true;\n resolve();\n } else if (!iteratorIsComplete) {\n await queueOperationsAsync();\n }\n }\n }\n\n queueOperationsAsync().catch((error) => {\n promiseHasResolvedOrRejected = true;\n reject(error);\n });\n });\n }\n\n /**\n * Return a promise that resolves after the specified number of milliseconds.\n */\n public static async sleep(ms: number): Promise<void> {\n await new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n }\n}\n"]} | ||
| {"version":3,"file":"Async.js","sourceRoot":"","sources":["../src/Async.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n/**\n * Options for controlling the parallelism of asynchronous operations.\n *\n * @remarks\n * Used with {@link Async.mapAsync} and {@link Async.forEachAsync}.\n *\n * @beta\n */\nexport interface IAsyncParallelismOptions {\n /**\n * Optionally used with the {@link Async.mapAsync} and {@link Async.forEachAsync}\n * to limit the maximum number of concurrent promises to the specified number.\n */\n concurrency?: number;\n}\n\n/**\n * @remarks\n * Used with {@link Async.runWithRetriesAsync}.\n *\n * @beta\n */\nexport interface IRunWithRetriesOptions<TResult> {\n action: () => Promise<TResult> | TResult;\n maxRetries: number;\n retryDelayMs?: number;\n}\n\n/**\n * Utilities for parallel asynchronous operations, for use with the system `Promise` APIs.\n *\n * @beta\n */\nexport class Async {\n /**\n * Given an input array and a `callback` function, invoke the callback to start a\n * promise for each element in the array. Returns an array containing the results.\n *\n * @remarks\n * This API is similar to the system `Array#map`, except that the loop is asynchronous,\n * and the maximum number of concurrent promises can be throttled\n * using {@link IAsyncParallelismOptions.concurrency}.\n *\n * If `callback` throws a synchronous exception, or if it returns a promise that rejects,\n * then the loop stops immediately. Any remaining array items will be skipped, and\n * overall operation will reject with the first error that was encountered.\n *\n * @param iterable - the array of inputs for the callback function\n * @param callback - a function that starts an asynchronous promise for an element\n * from the array\n * @param options - options for customizing the control flow\n * @returns an array containing the result for each callback, in the same order\n * as the original input `array`\n */\n public static async mapAsync<TEntry, TRetVal>(\n iterable: Iterable<TEntry> | AsyncIterable<TEntry>,\n callback: (entry: TEntry, arrayIndex: number) => Promise<TRetVal>,\n options?: IAsyncParallelismOptions | undefined\n ): Promise<TRetVal[]> {\n const result: TRetVal[] = [];\n\n await Async.forEachAsync(\n iterable,\n async (item: TEntry, arrayIndex: number): Promise<void> => {\n result[arrayIndex] = await callback(item, arrayIndex);\n },\n options\n );\n\n return result;\n }\n\n /**\n * Given an input array and a `callback` function, invoke the callback to start a\n * promise for each element in the array.\n *\n * @remarks\n * This API is similar to the system `Array#forEach`, except that the loop is asynchronous,\n * and the maximum number of concurrent promises can be throttled\n * using {@link IAsyncParallelismOptions.concurrency}.\n *\n * If `callback` throws a synchronous exception, or if it returns a promise that rejects,\n * then the loop stops immediately. Any remaining array items will be skipped, and\n * overall operation will reject with the first error that was encountered.\n *\n * @param iterable - the array of inputs for the callback function\n * @param callback - a function that starts an asynchronous promise for an element\n * from the array\n * @param options - options for customizing the control flow\n */\n public static async forEachAsync<TEntry>(\n iterable: Iterable<TEntry> | AsyncIterable<TEntry>,\n callback: (entry: TEntry, arrayIndex: number) => Promise<void>,\n options?: IAsyncParallelismOptions | undefined\n ): Promise<void> {\n await new Promise<void>((resolve: () => void, reject: (error: Error) => void) => {\n const concurrency: number =\n options?.concurrency && options.concurrency > 0 ? options.concurrency : Infinity;\n let operationsInProgress: number = 0;\n\n const iterator: Iterator<TEntry> | AsyncIterator<TEntry> = (\n (iterable as Iterable<TEntry>)[Symbol.iterator] ||\n (iterable as AsyncIterable<TEntry>)[Symbol.asyncIterator]\n ).call(iterable);\n\n let arrayIndex: number = 0;\n let iteratorIsComplete: boolean = false;\n let promiseHasResolvedOrRejected: boolean = false;\n\n async function queueOperationsAsync(): Promise<void> {\n while (operationsInProgress < concurrency && !iteratorIsComplete && !promiseHasResolvedOrRejected) {\n // Increment the concurrency while waiting for the iterator.\n // This function is reentrant, so this ensures that at most `concurrency` executions are waiting\n operationsInProgress++;\n const currentIteratorResult: IteratorResult<TEntry> = await iterator.next();\n // eslint-disable-next-line require-atomic-updates\n iteratorIsComplete = !!currentIteratorResult.done;\n\n if (!iteratorIsComplete) {\n Promise.resolve(callback(currentIteratorResult.value, arrayIndex++))\n .then(async () => {\n operationsInProgress--;\n await onOperationCompletionAsync();\n })\n .catch((error) => {\n promiseHasResolvedOrRejected = true;\n reject(error);\n });\n } else {\n // The iterator is complete and there wasn't a value, so untrack the waiting state.\n operationsInProgress--;\n }\n }\n\n if (iteratorIsComplete) {\n await onOperationCompletionAsync();\n }\n }\n\n async function onOperationCompletionAsync(): Promise<void> {\n if (!promiseHasResolvedOrRejected) {\n if (operationsInProgress === 0 && iteratorIsComplete) {\n promiseHasResolvedOrRejected = true;\n resolve();\n } else if (!iteratorIsComplete) {\n await queueOperationsAsync();\n }\n }\n }\n\n queueOperationsAsync().catch((error) => {\n promiseHasResolvedOrRejected = true;\n reject(error);\n });\n });\n }\n\n /**\n * Return a promise that resolves after the specified number of milliseconds.\n */\n public static async sleep(ms: number): Promise<void> {\n await new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n }\n\n /**\n * Executes an async function and optionally retries it if it fails.\n */\n public static async runWithRetriesAsync<TResult>({\n action,\n maxRetries,\n retryDelayMs = 0\n }: IRunWithRetriesOptions<TResult>): Promise<TResult> {\n let retryCounter: number = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n return await action();\n } catch (e) {\n if (++retryCounter > maxRetries) {\n throw e;\n } else if (retryDelayMs > 0) {\n await Async.sleep(retryDelayMs);\n }\n }\n }\n }\n}\n"]} |
+1
-1
@@ -8,3 +8,3 @@ /** | ||
| export { AnsiEscape, IAnsiEscapeConvertForTestsOptions } from './Terminal/AnsiEscape'; | ||
| export { Async, IAsyncParallelismOptions } from './Async'; | ||
| export { Async, IAsyncParallelismOptions, IRunWithRetriesOptions } from './Async'; | ||
| export { Brand } from './PrimitiveTypes'; | ||
@@ -11,0 +11,0 @@ export { FileConstants, FolderConstants } from './Constants'; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,iCAAiC,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,2BAA2B,EAC3B,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,MAAM,EACN,qBAAqB,EACrB,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAC7G,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,8BAA8B,EAAE,2BAA2B,EAAE,MAAM,QAAQ,CAAC;AAC9G,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,8BAA8B,EAC9B,yBAAyB,EACzB,UAAU,EACV,eAAe,EACf,8BAA8B,EAC9B,0BAA0B,EAC1B,gCAAgC,EAChC,2BAA2B,EAC3B,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,EACtB,0BAA0B,EAC1B,4BAA4B,EAC5B,+BAA+B,EAC/B,2BAA2B,EAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AAC9G,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"} |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D;;;;GAIG;AAEH,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAC7B,oDAAsF;AAA7E,wGAAA,UAAU,OAAA;AACnB,iCAA0D;AAAjD,8FAAA,KAAK,OAAA;AAEd,yCAA6D;AAApD,0GAAA,aAAa,OAAA;AAAE,4GAAA,eAAe,OAAA;AACvC,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,mDAAqE;AAA5D,gHAAA,cAAc,OAAA;AACvB,2CAOsB;AADpB,wGAAA,UAAU,OAAA;AAEZ,yCAAwF;AAA/B,sGAAA,SAAS,OAAA;AAQlE,mCAKkB;AAJhB,gGAAA,MAAM,OAAA;AAKR,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,uCAA6G;AAAxF,oGAAA,QAAQ,OAAA;AAC7B,2CAKsB;AAJpB,wGAAA,UAAU,OAAA;AAKZ,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,mDAA6E;AAApE,gHAAA,cAAc,OAAA;AACvB,yDAAsF;AAA/C,sHAAA,iBAAiB,OAAA;AACxD,6CAMuB;AALrB,0GAAA,WAAW,OAAA;AACX,gHAAA,iBAAiB,OAAA;AAKnB,+BAA8G;AAArG,4FAAA,IAAI,OAAA;AACb,+BAAqD;AAA5C,gGAAA,QAAQ,OAAA;AAAE,4FAAA,IAAI,OAAA;AAAE,mGAAA,WAAW,OAAA;AACpC,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,2CAkBsB;AAjBpB,mHAAA,qBAAqB,OAAA;AACrB,wGAAA,UAAU,OAAA;AAiBZ,2CAA4D;AAAnD,wGAAA,UAAU,OAAA;AACnB,mDAAkE;AAAzD,gHAAA,cAAc,OAAA;AACvB,iDAAgE;AAAvD,8GAAA,aAAa,OAAA;AACtB,+DAAkF;AAArD,4HAAA,oBAAoB,OAAA;AAEjD,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AACjB,4CAA0F;AAAjF,gGAAA,MAAM,OAAA;AAAsB,oGAAA,UAAU,OAAA;AAAE,uGAAA,aAAa,OAAA;AAC9D,kEAA2F;AAA/D,6HAAA,wBAAwB,OAAA;AACpD,8EAA8G;AAArG,kIAAA,uBAAuB,OAAA;AAChC,wFAGiD;AAF/C,4IAAA,4BAA4B,OAAA;AAG9B,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n/**\n * Core libraries that every NodeJS toolchain project should use.\n *\n * @packageDocumentation\n */\n\nexport { AlreadyReportedError } from './AlreadyReportedError';\nexport { AnsiEscape, IAnsiEscapeConvertForTestsOptions } from './Terminal/AnsiEscape';\nexport { Async, IAsyncParallelismOptions } from './Async';\nexport { Brand } from './PrimitiveTypes';\nexport { FileConstants, FolderConstants } from './Constants';\nexport { Enum } from './Enum';\nexport { EnvironmentMap, IEnvironmentEntry } from './EnvironmentMap';\nexport {\n ExecutableStdioStreamMapping,\n ExecutableStdioMapping,\n IExecutableResolveOptions,\n IExecutableSpawnSyncOptions,\n IExecutableSpawnOptions,\n Executable\n} from './Executable';\nexport { IFileErrorOptions, IFileErrorFormattingOptions, FileError } from './FileError';\nexport {\n INodePackageJson,\n IPackageJson,\n IPackageJsonDependencyTable,\n IPackageJsonScriptTable,\n IPackageJsonRepository\n} from './IPackageJson';\nexport {\n Import,\n IImportResolveOptions,\n IImportResolveModuleOptions,\n IImportResolvePackageOptions\n} from './Import';\nexport { InternalError } from './InternalError';\nexport { JsonObject, JsonFile, JsonNull, IJsonFileSaveOptions, IJsonFileStringifyOptions } from './JsonFile';\nexport {\n JsonSchema,\n IJsonSchemaErrorInfo,\n IJsonSchemaValidateOptions,\n IJsonSchemaFromFileOptions\n} from './JsonSchema';\nexport { LockFile } from './LockFile';\nexport { MapExtensions } from './MapExtensions';\nexport { PosixModeBits } from './PosixModeBits';\nexport { ProtectableMap, IProtectableMapParameters } from './ProtectableMap';\nexport { IPackageJsonLookupParameters, PackageJsonLookup } from './PackageJsonLookup';\nexport {\n PackageName,\n PackageNameParser,\n IPackageNameParserOptions,\n IParsedPackageName,\n IParsedPackageNameOrError\n} from './PackageName';\nexport { Path, FileLocationStyle, IPathFormatFileLocationOptions, IPathFormatConciselyOptions } from './Path';\nexport { Encoding, Text, NewlineKind } from './Text';\nexport { Sort } from './Sort';\nexport {\n AlreadyExistsBehavior,\n FileSystem,\n FileSystemCopyFilesAsyncFilter,\n FileSystemCopyFilesFilter,\n FolderItem,\n FileSystemStats,\n IFileSystemCopyFileBaseOptions,\n IFileSystemCopyFileOptions,\n IFileSystemCopyFilesAsyncOptions,\n IFileSystemCopyFilesOptions,\n IFileSystemCreateLinkOptions,\n IFileSystemDeleteFileOptions,\n IFileSystemMoveOptions,\n IFileSystemReadFileOptions,\n IFileSystemReadFolderOptions,\n IFileSystemUpdateTimeParameters,\n IFileSystemWriteFileOptions\n} from './FileSystem';\nexport { FileWriter, IFileWriterFlags } from './FileWriter';\nexport { LegacyAdapters, LegacyCallback } from './LegacyAdapters';\nexport { StringBuilder, IStringBuilder } from './StringBuilder';\nexport { ISubprocessOptions, SubprocessTerminator } from './SubprocessTerminator';\nexport { ITerminal } from './Terminal/ITerminal';\nexport { Terminal } from './Terminal/Terminal';\nexport { Colors, IColorableSequence, ColorValue, TextAttribute } from './Terminal/Colors';\nexport { ITerminalProvider, TerminalProviderSeverity } from './Terminal/ITerminalProvider';\nexport { ConsoleTerminalProvider, IConsoleTerminalProviderOptions } from './Terminal/ConsoleTerminalProvider';\nexport {\n StringBufferTerminalProvider,\n IStringBufferOutputOptions\n} from './Terminal/StringBufferTerminalProvider';\nexport { TypeUuid } from './TypeUuid';\n"]} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D;;;;GAIG;AAEH,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAC7B,oDAAsF;AAA7E,wGAAA,UAAU,OAAA;AACnB,iCAAkF;AAAzE,8FAAA,KAAK,OAAA;AAEd,yCAA6D;AAApD,0GAAA,aAAa,OAAA;AAAE,4GAAA,eAAe,OAAA;AACvC,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,mDAAqE;AAA5D,gHAAA,cAAc,OAAA;AACvB,2CAOsB;AADpB,wGAAA,UAAU,OAAA;AAEZ,yCAAwF;AAA/B,sGAAA,SAAS,OAAA;AAQlE,mCAKkB;AAJhB,gGAAA,MAAM,OAAA;AAKR,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,uCAA6G;AAAxF,oGAAA,QAAQ,OAAA;AAC7B,2CAKsB;AAJpB,wGAAA,UAAU,OAAA;AAKZ,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,mDAA6E;AAApE,gHAAA,cAAc,OAAA;AACvB,yDAAsF;AAA/C,sHAAA,iBAAiB,OAAA;AACxD,6CAMuB;AALrB,0GAAA,WAAW,OAAA;AACX,gHAAA,iBAAiB,OAAA;AAKnB,+BAA8G;AAArG,4FAAA,IAAI,OAAA;AACb,+BAAqD;AAA5C,gGAAA,QAAQ,OAAA;AAAE,4FAAA,IAAI,OAAA;AAAE,mGAAA,WAAW,OAAA;AACpC,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,2CAkBsB;AAjBpB,mHAAA,qBAAqB,OAAA;AACrB,wGAAA,UAAU,OAAA;AAiBZ,2CAA4D;AAAnD,wGAAA,UAAU,OAAA;AACnB,mDAAkE;AAAzD,gHAAA,cAAc,OAAA;AACvB,iDAAgE;AAAvD,8GAAA,aAAa,OAAA;AACtB,+DAAkF;AAArD,4HAAA,oBAAoB,OAAA;AAEjD,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AACjB,4CAA0F;AAAjF,gGAAA,MAAM,OAAA;AAAsB,oGAAA,UAAU,OAAA;AAAE,uGAAA,aAAa,OAAA;AAC9D,kEAA2F;AAA/D,6HAAA,wBAAwB,OAAA;AACpD,8EAA8G;AAArG,kIAAA,uBAAuB,OAAA;AAChC,wFAGiD;AAF/C,4IAAA,4BAA4B,OAAA;AAG9B,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n/**\n * Core libraries that every NodeJS toolchain project should use.\n *\n * @packageDocumentation\n */\n\nexport { AlreadyReportedError } from './AlreadyReportedError';\nexport { AnsiEscape, IAnsiEscapeConvertForTestsOptions } from './Terminal/AnsiEscape';\nexport { Async, IAsyncParallelismOptions, IRunWithRetriesOptions } from './Async';\nexport { Brand } from './PrimitiveTypes';\nexport { FileConstants, FolderConstants } from './Constants';\nexport { Enum } from './Enum';\nexport { EnvironmentMap, IEnvironmentEntry } from './EnvironmentMap';\nexport {\n ExecutableStdioStreamMapping,\n ExecutableStdioMapping,\n IExecutableResolveOptions,\n IExecutableSpawnSyncOptions,\n IExecutableSpawnOptions,\n Executable\n} from './Executable';\nexport { IFileErrorOptions, IFileErrorFormattingOptions, FileError } from './FileError';\nexport {\n INodePackageJson,\n IPackageJson,\n IPackageJsonDependencyTable,\n IPackageJsonScriptTable,\n IPackageJsonRepository\n} from './IPackageJson';\nexport {\n Import,\n IImportResolveOptions,\n IImportResolveModuleOptions,\n IImportResolvePackageOptions\n} from './Import';\nexport { InternalError } from './InternalError';\nexport { JsonObject, JsonFile, JsonNull, IJsonFileSaveOptions, IJsonFileStringifyOptions } from './JsonFile';\nexport {\n JsonSchema,\n IJsonSchemaErrorInfo,\n IJsonSchemaValidateOptions,\n IJsonSchemaFromFileOptions\n} from './JsonSchema';\nexport { LockFile } from './LockFile';\nexport { MapExtensions } from './MapExtensions';\nexport { PosixModeBits } from './PosixModeBits';\nexport { ProtectableMap, IProtectableMapParameters } from './ProtectableMap';\nexport { IPackageJsonLookupParameters, PackageJsonLookup } from './PackageJsonLookup';\nexport {\n PackageName,\n PackageNameParser,\n IPackageNameParserOptions,\n IParsedPackageName,\n IParsedPackageNameOrError\n} from './PackageName';\nexport { Path, FileLocationStyle, IPathFormatFileLocationOptions, IPathFormatConciselyOptions } from './Path';\nexport { Encoding, Text, NewlineKind } from './Text';\nexport { Sort } from './Sort';\nexport {\n AlreadyExistsBehavior,\n FileSystem,\n FileSystemCopyFilesAsyncFilter,\n FileSystemCopyFilesFilter,\n FolderItem,\n FileSystemStats,\n IFileSystemCopyFileBaseOptions,\n IFileSystemCopyFileOptions,\n IFileSystemCopyFilesAsyncOptions,\n IFileSystemCopyFilesOptions,\n IFileSystemCreateLinkOptions,\n IFileSystemDeleteFileOptions,\n IFileSystemMoveOptions,\n IFileSystemReadFileOptions,\n IFileSystemReadFolderOptions,\n IFileSystemUpdateTimeParameters,\n IFileSystemWriteFileOptions\n} from './FileSystem';\nexport { FileWriter, IFileWriterFlags } from './FileWriter';\nexport { LegacyAdapters, LegacyCallback } from './LegacyAdapters';\nexport { StringBuilder, IStringBuilder } from './StringBuilder';\nexport { ISubprocessOptions, SubprocessTerminator } from './SubprocessTerminator';\nexport { ITerminal } from './Terminal/ITerminal';\nexport { Terminal } from './Terminal/Terminal';\nexport { Colors, IColorableSequence, ColorValue, TextAttribute } from './Terminal/Colors';\nexport { ITerminalProvider, TerminalProviderSeverity } from './Terminal/ITerminalProvider';\nexport { ConsoleTerminalProvider, IConsoleTerminalProviderOptions } from './Terminal/ConsoleTerminalProvider';\nexport {\n StringBufferTerminalProvider,\n IStringBufferOutputOptions\n} from './Terminal/StringBufferTerminalProvider';\nexport { TypeUuid } from './TypeUuid';\n"]} |
+1
-1
| { | ||
| "name": "@rushstack/node-core-library", | ||
| "version": "3.49.0", | ||
| "version": "3.50.0", | ||
| "description": "Core libraries that every NodeJS toolchain project should use", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
Sorry, the diff of this file is too big to display
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
1010218
0.31%13264
0.38%