Skip to content
Permalink
Browse files
refactor(run)!: cleanup run method (#1266)
* refactor(run)!: get rid of emit-and-throw & throw-literal antipatterns

* refactor(run)!: convert run method to async/await

* refactor(run): require build module in advance

* refactor(run): minor cleanup

* refactor(run): drop always-undefined option arch

`parseBuildOptions` only sets `arch` if something truthy is passed for
parameter `resolvedTarget` to which we pass `null`.

* refactor(run): destructure buildOptions
  • Loading branch information
raphinesse committed Jul 11, 2021
1 parent 8a9cb8f commit fb36e03aebc4d3a994ed78caebda8d141467574a
Showing 2 changed files with 17 additions and 26 deletions.
@@ -19,8 +19,9 @@

var emulator = require('./emulator');
const target = require('./target');
var PackageType = require('./PackageType');
const { events } = require('cordova-common');
const build = require('./build');
const PackageType = require('./PackageType');
const { CordovaError, events } = require('cordova-common');

/**
* Builds a target spec from a runOptions object
@@ -54,32 +55,22 @@ function formatResolvedTarget ({ id, type }) {
*
* @return {Promise}
*/
module.exports.run = function (runOptions) {
runOptions = runOptions || {};

var self = this;
module.exports.run = async function (runOptions = {}) {
const spec = buildTargetSpec(runOptions);
const resolvedTarget = await target.resolve(spec);
events.emit('log', `Deploying to ${formatResolvedTarget(resolvedTarget)}`);

return target.resolve(spec).then(function (resolvedTarget) {
events.emit('log', `Deploying to ${formatResolvedTarget(resolvedTarget)}`);

return new Promise((resolve) => {
const buildOptions = require('./build').parseBuildOptions(runOptions, null, self.root);
const { packageType, buildType } = build.parseBuildOptions(runOptions, null, this.root);

// Android app bundles cannot be deployed directly to the device
if (buildOptions.packageType === PackageType.BUNDLE) {
const packageTypeErrorMessage = 'Package type "bundle" is not supported during cordova run.';
events.emit('error', packageTypeErrorMessage);
throw packageTypeErrorMessage;
}
// Android app bundles cannot be deployed directly to the device
if (packageType === PackageType.BUNDLE) {
throw new CordovaError('Package type "bundle" is not supported during cordova run.');
}

resolve(self._builder.fetchBuildResults(buildOptions.buildType, buildOptions.arch));
}).then(async function (buildResults) {
if (resolvedTarget.type === 'emulator') {
await emulator.wait_for_boot(resolvedTarget.id);
}
const buildResults = this._builder.fetchBuildResults(buildType);

return target.install(resolvedTarget, buildResults);
});
});
if (resolvedTarget.type === 'emulator') {
await emulator.wait_for_boot(resolvedTarget.id);
}
return target.install(resolvedTarget, buildResults);
};
@@ -77,7 +77,7 @@ describe('run', () => {
it('should fail with the error message if --packageType=bundle setting is used', () => {
targetSpyObj.resolve.and.resolveTo(resolvedTarget);
return expectAsync(run.run({ argv: ['--packageType=bundle'] }))
.toBeRejectedWith(jasmine.stringMatching(/Package type "bundle" is not supported/));
.toBeRejectedWithError(/Package type "bundle" is not supported/);
});
});
});

0 comments on commit fb36e03

Please sign in to comment.