Skip to content

Commit 4c530df

Browse files
rplkumar303
authored andcommitted
refactor: use async/await syntax (mozilla#411)
* refactor: enabled babel runtime in babel config. * refactor: ported cmd/build.js to async/await syntax. * refactor: ported cmd/run.js to asyn/await syntax. * refactor: ported cmd/sign.js to async/await syntax. * refactor: ported firefox/index.js to async/await syntax. * refactor: ported firefox/remote.js to async/await syntax. * refactor: ported util/artifacts.js to async/await syntax. * refactor: ported util/manifest.js to async/await syntax. * refactor: ported program.js to async/await syntax. * test: added test case for the new isErrorWithCode helper. * test: added no-multi-spaces eslint rule, and fixed related lint errors * test: added eslint-plugin-async-await plugin and rules * refactor: removed promisedStream var from defaultPackageCreator. * refactor: rewrote establishConnection helper using a for loop and a custom range generator. * style: changed a multiline string into a single line. * style: tweaked try/catch blocks in cmd/sign and firefox/index modules. * test: enabled require-yield eslint rule to enforce await usage in an async function. * refactor: change non-reassigned identifier to const in src/program. * refactor: revert generator usage in for loop. * style: remove extra space in a log message printed to console.
1 parent 63cdf0d commit 4c530df

16 files changed

+572
-534
lines changed

.babelrc

+6
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,11 @@
44
"transform-flow-strip-types",
55
"transform-class-properties",
66
"transform-es2015-modules-commonjs",
7+
[
8+
"transform-runtime", {
9+
"polyfill": false,
10+
"regenerator": true
11+
}
12+
]
713
]
814
}

.eslintrc

+6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"parser": "babel-eslint",
33
"plugins": [
4+
"async-await",
45
"flowtype"
56
],
67
"settings": {
@@ -62,6 +63,7 @@
6263
"no-loop-func": 0,
6364
"no-mixed-spaces-and-tabs": 2,
6465
"no-multi-str": 2,
66+
"no-multi-spaces": 2,
6567
"no-multiple-empty-lines": [2, {"max": 2}],
6668
"no-new": 2,
6769
"no-plusplus": 0,
@@ -78,6 +80,7 @@
7880
"prefer-template": 2,
7981
"quote-props": [1, "consistent-as-needed"],
8082
"quotes": [2, "single", "avoid-escape"],
83+
"require-yield": 2,
8184
"semi": [2, "always"],
8285
"space-before-blocks": [2, "always"],
8386
"space-before-function-paren": [2, "never"],
@@ -86,6 +89,9 @@
8689
"valid-typeof": 2,
8790
"wrap-iife": [2, "inside"],
8891

92+
"async-await/space-after-async": 2,
93+
"async-await/space-after-await": 2,
94+
8995
"flowtype/define-flow-type": 1,
9096
"flowtype/use-flow-type": 1,
9197
"flowtype/space-after-type-colon": [1, "always"]

package.json

+3
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,16 @@
7171
"babel-plugin-transform-es2015-modules-commonjs": "6.14.0",
7272
"babel-plugin-transform-flow-strip-types": "6.14.0",
7373
"babel-preset-es2015": "6.14.0",
74+
"babel-plugin-transform-runtime": "6.15.0",
7475
"babel-preset-stage-2": "6.13.0",
76+
"babel-runtime": "6.11.6",
7577
"chai": "3.5.0",
7678
"conventional-changelog-cli": "1.2.0",
7779
"conventional-changelog-lint": "1.0.1",
7880
"copy-dir": "0.3.0",
7981
"coveralls": "2.11.13",
8082
"deepcopy": "0.6.3",
83+
"eslint-plugin-async-await": "0.0.0",
8184
"eslint-plugin-flowtype": "2.18.1",
8285
"firefox-client": "0.3.0",
8386
"flow-bin": "0.32.0",

src/cmd/build.js

+41-49
Original file line numberDiff line numberDiff line change
@@ -40,41 +40,33 @@ export type PackageCreatorParams = {
4040
export type PackageCreatorFn =
4141
(params: PackageCreatorParams) => Promise<ExtensionBuildResult>;
4242

43-
function defaultPackageCreator(
43+
async function defaultPackageCreator(
4444
{manifestData, sourceDir, fileFilter, artifactsDir}: PackageCreatorParams
4545
): Promise<ExtensionBuildResult> {
46+
let id;
4647

47-
return new Promise(
48-
(resolve) => {
49-
if (manifestData) {
50-
const id = getManifestId(manifestData);
51-
log.debug(`Using manifest id=${id || '[not specified]'}`);
52-
resolve(manifestData);
53-
} else {
54-
resolve(getValidatedManifest(sourceDir));
55-
}
56-
})
57-
.then((manifestData) => {
58-
return zipDir(
59-
sourceDir, {
60-
filter: (...args) => fileFilter.wantFile(...args),
61-
})
62-
.then((buffer) => {
63-
let packageName = safeFileName(
64-
`${manifestData.name}-${manifestData.version}.zip`);
65-
let extensionPath = path.join(artifactsDir, packageName);
66-
let stream = createWriteStream(extensionPath);
67-
let promisedStream = streamToPromise(stream);
68-
69-
stream.write(buffer, () => stream.end());
70-
71-
return promisedStream
72-
.then(() => {
73-
log.info(`Your web extension is ready: ${extensionPath}`);
74-
return {extensionPath};
75-
});
76-
});
77-
});
48+
if (manifestData) {
49+
id = getManifestId(manifestData);
50+
log.debug(`Using manifest id=${id || '[not specified]'}`);
51+
} else {
52+
manifestData = await getValidatedManifest(sourceDir);
53+
}
54+
55+
let buffer = await zipDir(sourceDir, {
56+
filter: (...args) => fileFilter.wantFile(...args),
57+
});
58+
59+
let packageName = safeFileName(
60+
`${manifestData.name}-${manifestData.version}.zip`);
61+
let extensionPath = path.join(artifactsDir, packageName);
62+
let stream = createWriteStream(extensionPath);
63+
64+
stream.write(buffer, () => stream.end());
65+
66+
await streamToPromise(stream);
67+
68+
log.info(`Your web extension is ready: ${extensionPath}`);
69+
return {extensionPath};
7870
}
7971

8072

@@ -93,7 +85,7 @@ export type BuildCmdOptions = {
9385
packageCreator?: PackageCreatorFn,
9486
};
9587

96-
export default function build(
88+
export default async function build(
9789
{sourceDir, artifactsDir, asNeeded = false}: BuildCmdParams,
9890
{
9991
manifestData, fileFilter = new FileFilter(),
@@ -108,24 +100,24 @@ export default function build(
108100
manifestData, sourceDir, fileFilter, artifactsDir,
109101
});
110102

111-
return prepareArtifactsDir(artifactsDir)
112-
.then(() => createPackage())
113-
.then((result) => {
114-
if (rebuildAsNeeded) {
115-
log.info('Rebuilding when files change...');
116-
onSourceChange({
117-
sourceDir, artifactsDir,
118-
onChange: () => {
119-
return createPackage().catch((error) => {
120-
log.error(error.stack);
121-
throw error;
122-
});
123-
},
124-
shouldWatchFile: (...args) => fileFilter.wantFile(...args),
103+
await prepareArtifactsDir(artifactsDir);
104+
let result = await createPackage();
105+
106+
if (rebuildAsNeeded) {
107+
log.info('Rebuilding when files change...');
108+
onSourceChange({
109+
sourceDir, artifactsDir,
110+
onChange: () => {
111+
return createPackage().catch((error) => {
112+
log.error(error.stack);
113+
throw error;
125114
});
126-
}
127-
return result;
115+
},
116+
shouldWatchFile: (...args) => fileFilter.wantFile(...args),
128117
});
118+
}
119+
120+
return result;
129121
}
130122

131123

0 commit comments

Comments
 (0)