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'); var emulator = require('./emulator');
const target = require('./target'); const target = require('./target');
var PackageType = require('./PackageType'); const build = require('./build');
const { events } = require('cordova-common'); const PackageType = require('./PackageType');
const { CordovaError, events } = require('cordova-common');
/** /**
* Builds a target spec from a runOptions object * Builds a target spec from a runOptions object
@ -54,32 +55,22 @@ function formatResolvedTarget ({ id, type }) {
* *
* @return {Promise} * @return {Promise}
*/ */
module.exports.run = function (runOptions) { module.exports.run = async function (runOptions = {}) {
runOptions = runOptions || {};
var self = this;
const spec = buildTargetSpec(runOptions); const spec = buildTargetSpec(runOptions);
const resolvedTarget = await target.resolve(spec);
return target.resolve(spec).then(function (resolvedTarget) {
events.emit('log', `Deploying to ${formatResolvedTarget(resolvedTarget)}`); events.emit('log', `Deploying to ${formatResolvedTarget(resolvedTarget)}`);
return new Promise((resolve) => { const { packageType, buildType } = build.parseBuildOptions(runOptions, null, this.root);
const buildOptions = require('./build').parseBuildOptions(runOptions, null, self.root);
// Android app bundles cannot be deployed directly to the device // Android app bundles cannot be deployed directly to the device
if (buildOptions.packageType === PackageType.BUNDLE) { if (packageType === PackageType.BUNDLE) {
const packageTypeErrorMessage = 'Package type "bundle" is not supported during cordova run.'; throw new CordovaError('Package type "bundle" is not supported during cordova run.');
events.emit('error', packageTypeErrorMessage);
throw packageTypeErrorMessage;
} }
resolve(self._builder.fetchBuildResults(buildOptions.buildType, buildOptions.arch)); const buildResults = this._builder.fetchBuildResults(buildType);
}).then(async function (buildResults) {
if (resolvedTarget.type === 'emulator') { if (resolvedTarget.type === 'emulator') {
await emulator.wait_for_boot(resolvedTarget.id); await emulator.wait_for_boot(resolvedTarget.id);
} }
return target.install(resolvedTarget, buildResults); 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', () => { it('should fail with the error message if --packageType=bundle setting is used', () => {
targetSpyObj.resolve.and.resolveTo(resolvedTarget); targetSpyObj.resolve.and.resolveTo(resolvedTarget);
return expectAsync(run.run({ argv: ['--packageType=bundle'] })) return expectAsync(run.run({ argv: ['--packageType=bundle'] }))
.toBeRejectedWith(jasmine.stringMatching(/Package type "bundle" is not supported/)); .toBeRejectedWithError(/Package type "bundle" is not supported/);
}); });
}); });
}); });