You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ra...@apache.org on 2021/09/27 07:49:32 UTC
[cordova-lib] branch master updated: refactor(addHelper): more
concise package.json spec lookup (#882)
This is an automated email from the ASF dual-hosted git repository.
raphinesse pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-lib.git
The following commit(s) were added to refs/heads/master by this push:
new ac5971c refactor(addHelper): more concise package.json spec lookup (#882)
ac5971c is described below
commit ac5971cccd5dae35e697f36bbdf9a5d04faccb13
Author: Raphael von der GrĂ¼n <ra...@gmail.com>
AuthorDate: Mon Sep 27 09:49:25 2021 +0200
refactor(addHelper): more concise package.json spec lookup (#882)
* refactor(addHelper): more concise package.json spec lookup
* test(addHelper): isolate tests for getVersionFromPackageJson
---
spec/cordova/platform/addHelper.spec.js | 78 ++++++++++++++++++++-------------
src/cordova/platform/addHelper.js | 36 +++++++--------
2 files changed, 64 insertions(+), 50 deletions(-)
diff --git a/spec/cordova/platform/addHelper.spec.js b/spec/cordova/platform/addHelper.spec.js
index 1194bc0..e955998 100644
--- a/spec/cordova/platform/addHelper.spec.js
+++ b/spec/cordova/platform/addHelper.spec.js
@@ -216,6 +216,21 @@ describe('cordova/platform/addHelper', function () {
});
describe('if the project contains a package.json', function () {
+ it('should use getVersionFromPackageJson to determine platform version', async () => {
+ const getVersionFromPackageJson = jasmine.createSpy('getVersionFromPackageJson')
+ .and.returnValue('1.2.3');
+
+ platform_addHelper.__set__({
+ getVersionFromPackageJson,
+ readPackageJsonIfExists: () => package_json_mock
+ });
+
+ await platform_addHelper('add', hooks_mock, projectRoot, ['ios'], { save: true, restoring: true });
+
+ expect(getVersionFromPackageJson).toHaveBeenCalledWith('ios', package_json_mock);
+ expect(platform_addHelper.getVersionFromConfigFile).not.toHaveBeenCalled();
+ });
+
it('should write out the platform just added/updated to the cordova.platforms property of package.json', function () {
fs.readFileSync.and.returnValue('file');
fs.existsSync.and.callFake(function (filePath) {
@@ -232,36 +247,6 @@ describe('cordova/platform/addHelper', function () {
});
});
- it('should use pkgJson version devDependencies, if dependencies are undefined', function () {
- package_json_mock.dependencies = undefined;
- package_json_mock.cordova = { platforms: ['ios'] };
- package_json_mock.devDependencies.ios = {};
- cordova_util.requireNoCache.and.returnValue(package_json_mock);
- fs.existsSync.and.callFake(function (filePath) {
- return path.basename(filePath) === 'package.json';
- });
- fs.readFileSync.and.returnValue('{}');
- return platform_addHelper('add', hooks_mock, projectRoot, ['ios'], { save: true, restoring: true }).then(function () {
- expect(platform_addHelper.getVersionFromConfigFile).not.toHaveBeenCalled();
- expect(fs.writeFileSync).toHaveBeenCalled();
- });
- });
-
- it('should use pkgJson version devDependencies, if dependencies are nonempty but do not include the platform', function () {
- package_json_mock.dependencies.lorem = {}; // Add some item to dependencies so it's defined but nonempty
- package_json_mock.cordova = { platforms: ['ios'] };
- package_json_mock.devDependencies.ios = {};
- cordova_util.requireNoCache.and.returnValue(package_json_mock);
- fs.existsSync.and.callFake(function (filePath) {
- return path.basename(filePath) === 'package.json';
- });
- fs.readFileSync.and.returnValue('{}');
- return platform_addHelper('add', hooks_mock, projectRoot, ['ios'], { save: true, restoring: true }).then(function () {
- expect(platform_addHelper.getVersionFromConfigFile).not.toHaveBeenCalled();
- expect(fs.writeFileSync).toHaveBeenCalled();
- });
- });
-
it('should only write the package.json file if it was modified', function () {
package_json_mock.cordova = { platforms: ['ios'] };
cordova_util.requireNoCache.and.returnValue(package_json_mock);
@@ -387,4 +372,37 @@ describe('cordova/platform/addHelper', function () {
});
});
});
+
+ describe('getVersionFromPackageJson', () => {
+ let getVersionFromPackageJson;
+ beforeEach(() => {
+ getVersionFromPackageJson = platform_addHelper.__get__('getVersionFromPackageJson');
+ });
+
+ it('gets the platform version from dependencies or devDependencies, preferring the latter', () => {
+ const pkgJson = {
+ dependencies: {
+ 'cordova-ios': '1.2.3-ios',
+ 'cordova-android': '1.2.3-android'
+ },
+ devDependencies: { 'cordova-ios': '1.2.3-ios.dev' }
+ };
+ expect(getVersionFromPackageJson('android', pkgJson)).toBe('1.2.3-android');
+ expect(getVersionFromPackageJson('ios', pkgJson)).toBe('1.2.3-ios.dev');
+ expect(getVersionFromPackageJson('osx', pkgJson)).toBeUndefined();
+ });
+
+ it('gets the platform version given either long or short name', () => {
+ const pkgJson = {
+ devDependencies: { 'cordova-ios': '1.2.3-ios.dev' }
+ };
+ expect(getVersionFromPackageJson('ios', pkgJson)).toBe('1.2.3-ios.dev');
+ expect(getVersionFromPackageJson('cordova-ios', pkgJson)).toBe('1.2.3-ios.dev');
+ });
+
+ it('handles empty package.json objects', () => {
+ expect(getVersionFromPackageJson('ios', undefined)).toBeUndefined();
+ expect(getVersionFromPackageJson('ios', {})).toBeUndefined();
+ });
+ });
});
diff --git a/src/cordova/platform/addHelper.js b/src/cordova/platform/addHelper.js
index 5c5d4c2..f49ed76 100644
--- a/src/cordova/platform/addHelper.js
+++ b/src/cordova/platform/addHelper.js
@@ -66,7 +66,6 @@ function addHelper (cmd, hooksRunner, projectRoot, targets, opts) {
return promiseutil.Q_chainmap(targets, function (target) {
// For each platform, download it and call its helper script.
- var pkgJson;
var platform;
var spec;
var parts = target.split('@');
@@ -87,28 +86,13 @@ function addHelper (cmd, hooksRunner, projectRoot, targets, opts) {
platform = null;
}
- if (fs.existsSync(path.join(projectRoot, 'package.json'))) {
- pkgJson = cordova_util.requireNoCache(path.join(projectRoot, 'package.json'));
- }
-
// If there is no spec specified, try to get spec from package.json
- // else, if there is no spec specified, try to get spec from config.xml
- if (spec === undefined && pkgJson && pkgJson.dependencies && cmd === 'add') {
- if (pkgJson.dependencies['cordova-' + platform]) {
- spec = pkgJson.dependencies['cordova-' + platform];
- } else if (pkgJson.dependencies[platform]) {
- spec = pkgJson.dependencies[platform];
- }
- }
-
- if (spec === undefined && pkgJson && pkgJson.devDependencies && cmd === 'add') {
- if (pkgJson.devDependencies['cordova-' + platform]) {
- spec = pkgJson.devDependencies['cordova-' + platform];
- } else if (pkgJson.devDependencies[platform]) {
- spec = pkgJson.devDependencies[platform];
- }
+ if (spec === undefined && cmd === 'add') {
+ const pkgJson = readPackageJsonIfExists(projectRoot);
+ spec = getVersionFromPackageJson(platform, pkgJson);
}
+ // if we still have no spec, try to get it from config.xml
if (platform && spec === undefined && cmd === 'add') {
events.emit('verbose', 'No version supplied. Retrieving version from config.xml...');
spec = module.exports.getVersionFromConfigFile(platform, cfg);
@@ -257,6 +241,18 @@ function addHelper (cmd, hooksRunner, projectRoot, targets, opts) {
});
}
+function readPackageJsonIfExists (packageDir) {
+ const pkgJsonPath = path.join(packageDir, 'package.json');
+ return fs.existsSync(pkgJsonPath)
+ ? cordova_util.requireNoCache(pkgJsonPath)
+ : undefined;
+}
+
+function getVersionFromPackageJson (platform, { dependencies, devDependencies } = {}) {
+ const deps = { ...dependencies, ...devDependencies };
+ return deps[`cordova-${platform}`] || deps[platform];
+}
+
function getVersionFromConfigFile (platform, cfg) {
// Get appropriate version from config.xml
const engine = cfg.getEngines().find(eng => {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org