8000 Refactor of LegacyAdapters. · evalcode/web-build-tools@7716957 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7716957

Browse files
committed
Refactor of LegacyAdapters.
1 parent 29a1ad1 commit 7716957

File tree

5 files changed

+31
-15
lines changed

5 files changed

+31
-15
lines changed

apps/rush-lib/src/logic/npm/NpmLinkManager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ interface IQueueItem {
4545

4646
export class NpmLinkManager extends BaseLinkManager {
4747
protected _linkProjects(): Promise<void> {
48-
return LegacyAdapters.promiseify<readPackageTree.PackageNode, Error, string>(
48+
return LegacyAdapters.convertCallbackToPromise<readPackageTree.PackageNode, Error, string>(
4949
readPackageTree,
5050
this._rushConfiguration.commonTempFolder
5151
).then(

common/reviews/api/node-core-library.api.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ class JsonSchema {
234234

235235
// @beta
236236
class LegacyAdapters {
237-
static promiseify<TResult, TError>(fn: (cb: callback<TResult, TError>) => void): Promise<TResult>;
237+
static convertCallbackToPromise<TResult, TError>(fn: (cb: callback<TResult, TError>) => void): Promise<TResult>;
238+
static scrubError(error: Error | string | any): Error;
238239
}
239240

240241
// @public

core-build/gulp-core-build-sass/src/SassTask.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ export class SassTask extends GulpTask<ISassTaskConfig> {
156156
cssOutputPathAbsolute = path.join(this.buildConfig.rootPath, cssOutputPath);
157157
}
158158

159-
return LegacyAdapters.promiseify(
159+
return LegacyAdapters.convertCallbackToPromise(
160160
nodeSass.render,
161161
{
162162
file: filePath,
@@ -291,7 +291,7 @@ export class SassTask extends GulpTask<ISassTaskConfig> {
291291

292292
private _globAll(...patterns: string[]): Promise<string[]> {
293293
return Promise.all(patterns.map((pattern) =>
294-
LegacyAdapters.promiseify(
294+
LegacyAdapters.convertCallbackToPromise(
295295
glob,
296296
path.isAbsolute(pattern) ? pattern : path.join(this.buildConfig.rootPath, pattern)
297297
)

core-build/gulp-core-build-typescript/src/TscCmdTask.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export class TscCmdTask extends BaseCmdTask<ITscCmdTaskConfig> {
7878

7979
const resolvedLibFolders: string[] = libFolders.map((libFolder) => path.join(this.buildConfig.rootPath, libFolder));
8080
const promises: Promise<void>[] = (this.taskConfig.staticMatch || []).map((pattern) =>
81-
LegacyAdapters.promiseify(glob, path.join(globEscape(this.buildConfig.rootPath), pattern)).then(
81+
LegacyAdapters.convertCallbackToPromise(glob, path.join(globEscape(this.buildConfig.rootPath), pattern)).then(
8282
(matchPaths: string[]) => {
8383
for (const matchPath of matchPaths) {
8484
const fileContents: string = FileSystem.readFile(matchPath);
@@ -152,7 +152,7 @@ export class TscCmdTask extends BaseCmdTask<ITscCmdTaskConfig> {
152152
return Promise.reject('Unable to determine outDir from TypesScript configuration.');
153153
}
154154

155-
return LegacyAdapters.promiseify(
155+
return LegacyAdapters.convertCallbackToPromise(
156156
glob,
157157
path.join(globEscape(tsConfig.options.outDir), '**', '*.js')
158158
).then((matches: string[]) => {

libraries/node-core-library/src/LegacyAdapters.ts

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,27 @@
44
export type callback<TResult, TError> = (error: TError, result: TResult) => void;
55

66
/**
7-
* This is a set of utilities for constructing and interacting with promises.
7+
* Helper functions used when interacting with APIs that do not follow modern coding practices.
88
*
99
* @beta
1010
*/
1111
export class LegacyAdapters {
1212
/**
1313
* This function wraps a function with a callback in a promise.
1414
*/
15-
public static promiseify<TResult, TError>(
15+
public static convertCallbackToPromise<TResult, TError>(
1616
fn: (cb: callback<TResult, TError>) => void
1717
): Promise<TResult>;
18-
public static promiseify<TResult, TError, TArg1>(
18+
public static convertCallbackToPromise<TResult, TError, TArg1>(
1919
fn: (arg1: TArg1, cb: callback<TResult, TError>) => void,
2020
arg1: TArg1
2121
): Promise<TResult>;
22-
public static promiseify<TResult, TError, TArg1, TArg2>(
22+
public static convertCallbackToPromise<TResult, TError, TArg1, TArg2>(
2323
fn: (arg1: TArg1, arg2: TArg2, cb: callback<TResult, TError>) => void,
2424
arg1: TArg1,
2525
arg2: TArg2
2626
): Promise<TResult>;
27-
public static promiseify<TResult, TError, TArg1, TArg2>(
27+
public static convertCallbackToPromise<TResult, TError, TArg1, TArg2>(
2828
fn: (
2929
a: TArg1 | callback<TResult, TError>,
3030
b?: TArg2 | callback<TResult, TError>,
@@ -33,19 +33,19 @@ export class LegacyAdapters {
3333
arg1?: TArg1,
3434
arg2?: TArg2
3535
): Promise<TResult> {
36-
return new Promise((resolve: (result: TResult) => void, reject: (error: TError) => void) => {
36+
return new Promise((resolve: (result: TResult) => void, reject: (error: Error) => void) => {
3737
const cb: callback<TResult, TError> = (error: TError, result: TResult) => {
3838
if (error) {
39-
reject(error);
39+
reject(LegacyAdapters.scrubError(error));
4040
} else {
4141
resolve(result);
4242
}
4343
};
4444

4545
try {
46-
if (arg1 && arg2) {
46+
if (arg1 !== undefined && arg2 !== undefined ) {
4747
fn(arg1, arg2, cb);
48-
} else if (arg1) {
48+
} else if (arg1 !== undefined ) {
4949
fn(arg1, cb);
5050
} else {
5151
fn(cb);
@@ -55,4 +55,19 @@ export class LegacyAdapters {
5555
}
5656
});
5757
}
58+
59+
/**
60+
* Normalizes an object into an `Error` object.
61+
*/
62+
public static scrubError(error: Error | string | any): Error { // tslint:disable-line:no-any
63+
if (error instanceof Error) {
64+
return error;
65+
} else if (typeof error === 'string') {
66+
return new Error(error);
67+
} else {
68+
const errorObject: Error = new Error('An error occurred.');
69+
(errorObject as any).errorData = error; // tslint:disable-line:no-any
70+
return errorObject;
71+
}
72+
}
5873
}

0 commit comments

Comments
 (0)
0