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
This commit is contained in:
Raphael von der Grün 2021-07-11 15:47:07 +02:00 committed by GitHub
parent 8a9cb8f6b7
commit fb36e03aeb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 26 deletions

View File

@ -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)}`);
const { packageType, buildType } = build.parseBuildOptions(runOptions, null, this.root);
return new Promise((resolve) => {
const buildOptions = require('./build').parseBuildOptions(runOptions, null, self.root);
// 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.');
}
// 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;
}
const buildResults = this._builder.fetchBuildResults(buildType);
resolve(self._builder.fetchBuildResults(buildOptions.buildType, buildOptions.arch));
}).then(async function (buildResults) {
if (resolvedTarget.type === 'emulator') {
await emulator.wait_for_boot(resolvedTarget.id);
}
return target.install(resolvedTarget, buildResults);
});
});
if (resolvedTarget.type === 'emulator') {
await emulator.wait_for_boot(resolvedTarget.id);
}
return target.install(resolvedTarget, buildResults);
};

View File

@ -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/);
});
});
});